let is_child child parent tree = 
    let child_node = findnode child tree
    in 
    let rec isChild current =
      let current_node = current.node
      in
      if isInputNode current_node
        then false 
        else if current_node.id == parent
          then true
          else let edge_list = (IdtMap.fold (fun _ n nlist -> n::nlist) tree.treeEdges [] )
            in let inp = List.filter (fun x -> let (_,ta,_) = x.edge in ta==current_node.id && x.edgeway == Normal) edge_list
            in if (List.length inp) == 0 
              then false 
              else let normal_input = List.filter (fun x -> let (_,ta,_) = x.edge in x.edgeway == Normal && ta==current_node.id) edge_list
                    in let (conn,_,_)= (List.hd normal_input).edge
                    in isChild (findnode conn.sourceid tree)
    in isChild child_node