generic
    type Tree is private;
    type Child is (<>);
    Null_Tree : in Tree;
    Left_Child : in Child;
    Right_Child : in Child;
    with function Is_Null (The_Tree : in Tree) return Boolean;
    with function Child_Of
                     (The_Tree : in Tree; The_Child : in Child) return Tree;
    with function Parent_Of (The_Tree : in Tree) return Tree;
package Tree_Utilities_Binary_Double is

    function Is_Root (The_Tree : in Tree) return Boolean;
    function Is_Leaf (The_Tree : in Tree) return Boolean;
    function Root_Of (The_Tree : in Tree) return Tree;
    function Child_Name_Of (The_Tree : in Tree) return Child;
    function Left_Sibling_Of (The_Tree : in Tree) return Tree;
    function Right_Sibling_Of (The_Tree : in Tree) return Tree;

    Tree_Is_Root : exception;

end Tree_Utilities_Binary_Double;