Fact nat_meet_0n n : 0⇣n = 0.
Fact nat_meet_n0 n : n⇣0 = 0.
Hint Resolve nat_meet_0n nat_meet_n0 nat_meet_idem.
Fact nat_meet_assoc n m k : n⇣(m⇣k) = n⇣m⇣k.
Section nat_meet_power2_neq.
Let nat_meet_power2_lt x y : x < y -> (power x 2) ⇣ (power y 2) = 0.
Fact nat_meet_power2_neq x y : x <> y -> (power x 2) ⇣ (power y 2) = 0.
End nat_meet_power2_neq.
Fact nat_meet_12n n : 1⇣(2*n) = 0.
Fact nat_meet_12 : 1⇣2 = 0.
Fact power_2_minus_1_gt n x : x < power n 2 <-> x ≲ power n 2 - 1.
Definition nat_join n m := ⟦ ⟬n⟭↑⟬m⟭ ⟧.
Local Infix "⇡" := nat_join (at level 50, left associativity).
Fact nat_join_comm n m : n⇡m = m⇡n.
Fact nat_join_left n m : n ≲ n⇡m.
Fact nat_join_right n m : m ≲ n⇡m.
Hint Resolve nat_join_left nat_join_right.
Fact nat_join_0n n : 0⇡n = n.
Fact nat_join_n0 n : n⇡0 = n.
Fact nat_join_mono a b u v : a ≲ b -> u ≲ v -> a⇡u ≲ b⇡v.
Fact nat_join_assoc n m k : n⇡(m⇡k) = n⇡m⇡k.
Fact nat_join_meet_distr_l n m k : n⇡(m⇣k) = (n⇡m)⇣(n⇡k).
Fact nat_meet_join_distr_l n m k : n⇣(m⇡k) = (n⇣m)⇡(n⇣k).
Hint Resolve nat_join_0n nat_join_n0 nat_join_assoc.

(* Specifications: *)
Lemma nat_join_monoid : monoid_theory nat_join 0.
Fact nat_join_binary_le n m k : n⇡m ≲ k <-> n ≲ k /\ m ≲ k.