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