Canonical reverse_blatticeType := BLatticeType L^r reverse_blatticeMixin.
Definition reverse_tblatticeMixin :=
@TBLatticeMixin _ [latticeType of L^r] (bottom : L) (@le0x _ L).
Canonical reverse_tblatticeType := TBLatticeType L^r reverse_tblatticeMixin.
End ReverseTBLattice.
End ReverseTBLattice.
Module Import ReverseTBLatticeSyntax.
Section ReverseTBLatticeSyntax.
Local Notation "0" := bottom.
Local Notation "1" := top.
Local Notation join := (@join (reverse_display _) _).
Local Notation meet := (@meet (reverse_display _) _).
Notation "\join^r_ ( i <- r | P ) F" :=
(\big[join/0]_(i <- r | P%B) F%O) : order_scope.
Notation "\join^r_ ( i <- r ) F" :=
(\big[join/0]_(i <- r) F%O) : order_scope.
Notation "\join^r_ ( i | P ) F" :=
(\big[join/0]_(i | P%B) F%O) : order_scope.
Notation "\join^r_ i F" :=
(\big[join/0]_i F%O) : order_scope.
Notation "\join^r_ ( i : I | P ) F" :=
(\big[join/0]_(i : I | P%B) F%O) (only parsing) : order_scope.
Notation "\join^r_ ( i : I ) F" :=
(\big[join/0]_(i : I) F%O) (only parsing) : order_scope.
Notation "\join^r_ ( m <= i < n | P ) F" :=
(\big[join/0]_(m <= i < n | P%B) F%O) : order_scope.
Notation "\join^r_ ( m <= i < n ) F" :=
(\big[join/0]_(m <= i < n) F%O) : order_scope.
Notation "\join^r_ ( i < n | P ) F" :=
(\big[join/0]_(i < n | P%B) F%O) : order_scope.
Notation "\join^r_ ( i < n ) F" :=
(\big[join/0]_(i < n) F%O) : order_scope.
Notation "\join^r_ ( i 'in' A | P ) F" :=
(\big[join/0]_(i in A | P%B) F%O) : order_scope.
Notation "\join^r_ ( i 'in' A ) F" :=
(\big[join/0]_(i in A) F%O) : order_scope.
Notation "\meet^r_ ( i <- r | P ) F" :=
(\big[meet/1]_(i <- r | P%B) F%O) : order_scope.
Notation "\meet^r_ ( i <- r ) F" :=
(\big[meet/1]_(i <- r) F%O) : order_scope.
Notation "\meet^r_ ( i | P ) F" :=
(\big[meet/1]_(i | P%B) F%O) : order_scope.
Notation "\meet^r_ i F" :=
(\big[meet/1]_i F%O) : order_scope.
Notation "\meet^r_ ( i : I | P ) F" :=
(\big[meet/1]_(i : I | P%B) F%O) (only parsing) : order_scope.
Notation "\meet^r_ ( i : I ) F" :=
(\big[meet/1]_(i : I) F%O) (only parsing) : order_scope.
Notation "\meet^r_ ( m <= i < n | P ) F" :=
(\big[meet/1]_(m <= i < n | P%B) F%O) : order_scope.
Notation "\meet^r_ ( m <= i < n ) F" :=
(\big[meet/1]_(m <= i < n) F%O) : order_scope.
Notation "\meet^r_ ( i < n | P ) F" :=
(\big[meet/1]_(i < n | P%B) F%O) : order_scope.
Notation "\meet^r_ ( i < n ) F" :=
(\big[meet/1]_(i < n) F%O) : order_scope.
Notation "\meet^r_ ( i 'in' A | P ) F" :=
(\big[meet/1]_(i in A | P%B) F%O) : order_scope.
Notation "\meet^r_ ( i 'in' A ) F" :=
(\big[meet/1]_(i in A) F%O) : order_scope.
End ReverseTBLatticeSyntax.
End ReverseTBLatticeSyntax.
Module Import TBLatticeTheory.
Section TBLatticeTheory.
Context {disp : unit}.
Local Notation tblatticeType := (tblatticeType disp).
Context {L : tblatticeType}.
Implicit Types (x y : L).
Local Notation "1" := top.
Hint Resolve le0x lex1.

(* Specifications: *)
Lemma meetx1 : right_id 1 (@meet _ L).
Lemma meet_eq1 x y : (x `&` y == 1) = (x == 1) && (y == 1).
Lemma subKU y x : y `|` (x `\` y) = y `|` x.
Lemma subUK y x : (x `\` y) `|` y = x `|` y.
Lemma subUx x y z : (x `|` y) `\` z = (x `\` z) `|` (y `\` z).
Lemma sub_eq0 x y : (x `\` y == 0) = (x <= y).
Lemma leB2 x y z t : x <= z -> t <= y -> x `\` y <= z `\` t.
Lemma leBRL x y z : (x <= z `\` y) = (x <= z) && (x `&` y == 0).
Lemma eq_sub x y z : (x `\` y == z) = (z <= x <= y `|` z) && (z `&` y == 0).
Lemma subx0 x : x `\` 0 = x.
Lemma meetxB x y z : x `&` (y `\` z) = (x `&` y) `\` z.
Lemma subBx x y z : (x `\` y) `\` z = x `\` (y `|` z).
Lemma subxB x y z : x `\` (y `\` z) = (x `\` y) `|` (x `&` z).
Lemma joinBK x y : (y `|` x) `\` x = (y `\` x).
Lemma disj_leC x y : y `&` x == 0 -> x <= y = (x == 0).
End CBLatticeTheory.