Hint Resolve mkCanon_nonEmpty mkCanon_correct mkCanon_eq.
(* Show that union and intersection are the LUB and GLB for the lattice, respectively. *)

(* Specifications: *)
Lemma union_commute : forall x y,
union_tree x y = union_tree y x.
Lemma intersect_commute : forall x y,
intersect_tree x y = intersect_tree y x.
Lemma union_upper_bound : forall x y,
shareTreeOrd x (union_tree x y).
Lemma intersection_lower_bound: forall x y,
shareTreeOrd (intersect_tree x y) x.
Lemma union_least_bound : forall x y z,
shareTreeOrd x z ->
shareTreeOrd y z ->
shareTreeOrd (union_tree x y) z.
Lemma intersection_greatest_bound : forall x y z,
shareTreeOrd z x ->
shareTreeOrd z y ->
shareTreeOrd z (intersect_tree x y).