Function:
(defun vttree-join (x y) (declare (xargs :guard (and (vttree-p x) (vttree-p y)))) (let ((__function__ 'vttree-join)) (declare (ignorable __function__)) (cond ((vttree-case x :none) (vttree-fix y)) ((vttree-case y :none) (vttree-fix x)) (t (make-vttree-branch :left x :right y)))))
Theorem:
(defthm vttree-p-of-vttree-join (b* ((join (vttree-join x y))) (vttree-p join)) :rule-classes :rewrite)
Theorem:
(defthm vttree->warnings-of-vttree-join (b* ((?join (vttree-join x y))) (equal (vttree->warnings join) (append (vttree->warnings x) (vttree->warnings y)))))
Theorem:
(defthm vttree->constraints-of-vttree-join (b* ((?join (vttree-join x y))) (equal (vttree->constraints join) (append (vttree->constraints x) (vttree->constraints y)))))
Theorem:
(defthm vttree-join-of-vttree-fix-x (equal (vttree-join (vttree-fix x) y) (vttree-join x y)))
Theorem:
(defthm vttree-join-vttree-equiv-congruence-on-x (implies (vttree-equiv x x-equiv) (equal (vttree-join x y) (vttree-join x-equiv y))) :rule-classes :congruence)
Theorem:
(defthm vttree-join-of-vttree-fix-y (equal (vttree-join x (vttree-fix y)) (vttree-join x y)))
Theorem:
(defthm vttree-join-vttree-equiv-congruence-on-y (implies (vttree-equiv y y-equiv) (equal (vttree-join x y) (vttree-join x y-equiv))) :rule-classes :congruence)