Join two trees which have previously been tree-split.
(tree-join left right) → tree
Technically it is not required that the two trees are a result of a
previous split call. It is only expected that, given a join
Function:
(defun tree-join (left right) (declare (xargs :guard (and (binary-tree-p left) (binary-tree-p right)))) (let ((__function__ 'tree-join)) (declare (ignorable __function__)) (cond ((tree-emptyp left) (tree-fix right)) ((tree-emptyp right) (tree-fix left)) ((heap< (tree-head left) (tree-head right)) (tree-node (tree-head right) (tree-join left (tree-left right)) (tree-right right))) (t (tree-node (tree-head left) (tree-left left) (tree-join (tree-right left) right))))))
Theorem:
(defthm binary-tree-p-of-tree-join (b* ((tree (tree-join left right))) (binary-tree-p tree)) :rule-classes :rewrite)