Fact unit_irrelevance (x y : unit) : x = y.(**************)
(* STRUCTURES *)
(**************)

Ltac EqualityPack cT xclass xT :=
  match type of Equality.Pack with
  | forall sort : Type, Equality.mixin_of sort -> eqType =>
    (* mathcomp.dev *)
    exact (@Equality.Pack cT xclass)
  | _ =>
    (* mathcomp <= 1.7 *)
    exact (@Equality.Pack cT xclass xT)
  end.Ltac ChoicePack cT xclass xT :=
  match type of Choice.Pack with
  | forall sort : Type, Choice.class_of sort -> choiceType =>
    (* mathcomp.dev *)
    exact (@Choice.Pack cT xclass)
  | _ =>
    (* mathcomp <= 1.7 *)
    exact (@Choice.Pack cT xclass xT)
  end.Ltac FinitePack cT xclass xT :=
  match type of Finite.Pack with
  | forall sort : Type, Finite.class_of sort -> finType =>
    (* mathcomp.dev *)
    exact (@Finite.Pack cT xclass)
  | _ =>
    (* mathcomp <= 1.7 *)
    exact (@Finite.Pack cT xclass xT)
  end.Record class_of T := Class {
  base  : Choice.class_of T;
  mixin : mixin_of (EqType T base)
}.Record class_of T := Class {
  base  : Choice.class_of T;
  mixin : mixin_of (EqType T base)
}.Record class_of T := Class {
  base  : Choice.class_of T;
  mixin : mixin_of (EqType T base)
}.Record class_of T := Class {
  base  : Choice.class_of T;
  mixin : mixin_of (EqType T base)
}.Structure type (disp : unit) := Pack { sort; _ : class_of sort; _ : Type }.Structure type (disp : unit) := Pack { sort; _ : class_of sort; _ : Type }.Structure type (disp : unit) := Pack { sort; _ : class_of sort; _ : Type }.Notation xclass := (class : class_of _ xT).Definition eqType := ltac:(EqualityPack cT (class : class_of xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of xT) xT).Local Notation porderType := (porderType display).Notation porderMixin := mixin_of.Notation POrderMixin := Mixin.Notation POrderType disp T m := (@pack T disp _ _ id m).Notation "[ 'finCTBLatticeType' 'of' T ]" :=
  (@pack T _ _ erefl _ _ phant_id  _ _ phant_id _ _ phant_id)
  (at level 0, format "[ 'finCTBLatticeType'  'of'  T ]") : form_scope.Definition le (R : porderType) : rel R := POrder.le (POrder.class R).Notation "><^r x :> T" := (><^r (x : T)) (only parsing) : order_scope.Definition lt (R : porderType) : rel R := POrder.lt (POrder.class R).Definition comparable (R : porderType) : rel R :=
  fun (x y : R) => (x <= y) || (y <= x).Record class_of d (T : Type) := Class {
  base  : POrder.class_of T;
  mixin : mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : POrder.class_of T;
  mixin : mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : POrder.class_of T;
  mixin : mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : POrder.class_of T;
  mixin : mixin_of (POrder.Pack d base T)
}.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Local Notation latticeType := (latticeType display).Notation latticeMixin := mixin_of.Notation LatticeMixin := Mixin.Notation LatticeType T m := (@pack T _ _ m _ _ id _ id).Definition meet {T : latticeType} : T -> T -> T := Lattice.meet (Lattice.class T).Definition join {T : latticeType} : T -> T -> T := Lattice.join (Lattice.class T).Notation "x `|^r` y" := (@join (reverse_display _) _ x y).Local Notation mixin_of T := (total (<=%O : rel T)).Record class_of d (T : Type) := Class {
  base  : Lattice.class_of d T;
  mixin : total (<=%O : rel (POrder.Pack d base T))
}.Record class_of d (T : Type) := Class {
  base  : Lattice.class_of d T;
  mixin : total (<=%O : rel (POrder.Pack d base T))
}.Record class_of d (T : Type) := Class {
  base  : Lattice.class_of d T;
  mixin : total (<=%O : rel (POrder.Pack d base T))
}.Record class_of d (T : Type) := Class {
  base  : Lattice.class_of d T;
  mixin : total (<=%O : rel (POrder.Pack d base T))
}.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Notation orderType  := type.Notation OrderType T m := (@pack T _ _ m _ _ id _ id).Structure mixin_of d (T : porderType d) := Mixin {
  bottom : T;
  _ : forall x, bottom <= x;
}.Structure mixin_of d (T : porderType d) := Mixin {
  bottom : T;
  _ : forall x, bottom <= x;
}.Structure mixin_of d (T : porderType d) := Mixin {
  bottom : T;
  _ : forall x, bottom <= x;
}.Record class_of d (T : Type) := Class {
  base  : Lattice.class_of d T;
  mixin : mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : Lattice.class_of d T;
  mixin : mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : Lattice.class_of d T;
  mixin : mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : Lattice.class_of d T;
  mixin : mixin_of (POrder.Pack d base T)
}.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Notation blatticeType  := type.Notation blatticeMixin := mixin_of.Notation BLatticeMixin := Mixin.Notation BLatticeType T m := (@pack T _ _ m _ _ id _ id).Definition bottom {disp : unit} {T : blatticeType disp} : T :=
  BLattice.bottom (BLattice.class T).Structure mixin_of d (T : porderType d) := Mixin {
  top : T;
  _ : forall x, x <= top;
}.Structure mixin_of d (T : porderType d) := Mixin {
  top : T;
  _ : forall x, x <= top;
}.Structure mixin_of d (T : porderType d) := Mixin {
  top : T;
  _ : forall x, x <= top;
}.Record class_of d (T : Type) := Class {
  base  : BLattice.class_of d T;
  mixin : mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : BLattice.class_of d T;
  mixin : mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : BLattice.class_of d T;
  mixin : mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : BLattice.class_of d T;
  mixin : mixin_of (POrder.Pack d base T)
}.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Definition blatticeType := @BLattice.Pack disp cT xclass xT.Notation tblatticeType  := type.Notation tblatticeMixin := mixin_of.Notation TBLatticeMixin := Mixin.Notation TBLatticeType T m := (@pack T _ _ m _ _ id _ id).Definition top disp  {T : tblatticeType disp} : T :=
  TBLattice.top (TBLattice.class T).Structure mixin_of d (T : blatticeType d) := Mixin {
  sub : T -> T -> T;
  _ : forall x y, y `&` sub x y = bottom;
  _ : forall x y, (x `&` y) `|` sub x y = x
}.Structure mixin_of d (T : blatticeType d) := Mixin {
  sub : T -> T -> T;
  _ : forall x y, y `&` sub x y = bottom;
  _ : forall x y, (x `&` y) `|` sub x y = x
}.Structure mixin_of d (T : blatticeType d) := Mixin {
  sub : T -> T -> T;
  _ : forall x y, y `&` sub x y = bottom;
  _ : forall x y, (x `&` y) `|` sub x y = x
}.Record class_of d (T : Type) := Class {
  base  : BLattice.class_of d T;
  mixin : mixin_of (BLattice.Pack base T)
}.Record class_of d (T : Type) := Class {
  base  : BLattice.class_of d T;
  mixin : mixin_of (BLattice.Pack base T)
}.Record class_of d (T : Type) := Class {
  base  : BLattice.class_of d T;
  mixin : mixin_of (BLattice.Pack base T)
}.Record class_of d (T : Type) := Class {
  base  : BLattice.class_of d T;
  mixin : mixin_of (BLattice.Pack base T)
}.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Definition blatticeType := @BLattice.Pack disp cT xclass xT.Notation cblatticeType  := type.Notation cblatticeMixin := mixin_of.Notation CBLatticeMixin := Mixin.Notation CBLatticeType T m := (@pack T _ _ m _ _ id _ id).Definition sub {disp : unit} {T : cblatticeType disp} : T -> T -> T :=
  CBLattice.sub (CBLattice.class T).Record mixin_of d (T : tblatticeType d) (sub : T -> T -> T) := Mixin {
   compl : T -> T;
   _ : forall x, compl x = sub top x
}.Record mixin_of d (T : tblatticeType d) (sub : T -> T -> T) := Mixin {
   compl : T -> T;
   _ : forall x, compl x = sub top x
}.Record mixin_of d (T : tblatticeType d) (sub : T -> T -> T) := Mixin {
   compl : T -> T;
   _ : forall x, compl x = sub top x
}.Record class_of d (T : Type) := Class {
  base  : TBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Record class_of d (T : Type) := Class {
  base  : TBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Record class_of d (T : Type) := Class {
  base  : TBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Record class_of d (T : Type) := Class {
  base  : TBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Record class_of d (T : Type) := Class {
  base  : TBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Local Coercion base2 d T (c : class_of d T) :=
  CBLattice.Class (mixin1 c).Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Structure type d := Pack { sort; _ : class_of d sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Definition blatticeType := @BLattice.Pack disp cT xclass xT.Definition tblatticeType := @TBLattice.Pack disp cT xclass xT.Definition cblatticeType := @CBLattice.Pack disp cT xclass xT.Definition tbd_cblatticeType :=
  @CBLattice.Pack disp tblatticeType xclass xT.Notation ctblatticeType  := type.Notation ctblatticeMixin := mixin_of.Notation CTBLatticeMixin := Mixin.Notation CTBLatticeType T m := (@pack T _ _ _ id _ _ id m).Definition compl {d : unit} {T : ctblatticeType d} : T -> T :=
  CTBLattice.compl (CTBLattice.class T).Record class_of T := Class {
  base  : Finite.class_of T;
  mixin : POrder.mixin_of (ltac:(EqualityPack T base T))
}.Record class_of T := Class {
  base  : Finite.class_of T;
  mixin : POrder.mixin_of (ltac:(EqualityPack T base T))
}.Record class_of T := Class {
  base  : Finite.class_of T;
  mixin : POrder.mixin_of (ltac:(EqualityPack T base T))
}.Record class_of T := Class {
  base  : Finite.class_of T;
  mixin : POrder.mixin_of (ltac:(EqualityPack T base T))
}.Definition base2 T (c : class_of T) := (POrder.Class (mixin c)).Structure type (disp : unit) := Pack { sort; _ : class_of sort; _ : Type }.Structure type (disp : unit) := Pack { sort; _ : class_of sort; _ : Type }.Structure type (disp : unit) := Pack { sort; _ : class_of sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of xT) xT).Definition finType := ltac:(FinitePack cT (class : class_of xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition fin_porderType := @POrder.Pack disp finType xclass xT.Notation finPOrderType := type.Record class_of d (T : Type) := Class {
  base  : FinPOrder.class_of T;
  mixin : Lattice.mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : FinPOrder.class_of T;
  mixin : Lattice.mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : FinPOrder.class_of T;
  mixin : Lattice.mixin_of (POrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : FinPOrder.class_of T;
  mixin : Lattice.mixin_of (POrder.Pack d base T)
}.Definition base2 d T (c : class_of d T) := (Lattice.Class (mixin c)).Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition finType := ltac:(FinitePack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition finPOrderType := @FinPOrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Definition fin_latticeType := @Lattice.Pack disp finPOrderType xclass xT.Notation finLatticeType  := type.Record class_of d (T : Type) := Class {
  base  : FinLattice.class_of d T;
  mixin : total (<=%O : rel (POrder.Pack d base T))
}.Record class_of d (T : Type) := Class {
  base  : FinLattice.class_of d T;
  mixin : total (<=%O : rel (POrder.Pack d base T))
}.Record class_of d (T : Type) := Class {
  base  : FinLattice.class_of d T;
  mixin : total (<=%O : rel (POrder.Pack d base T))
}.Record class_of d (T : Type) := Class {
  base  : FinLattice.class_of d T;
  mixin : total (<=%O : rel (POrder.Pack d base T))
}.Definition base2 d T (c : class_of d T) :=
   (@Total.Class _ _ (FinLattice.base2 c) (@mixin _ _ c)).Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition finType := ltac:(FinitePack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition finPOrderType := @FinPOrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Definition finLatticeType := @FinLattice.Pack disp cT xclass xT.Definition orderType := @Total.Pack disp cT xclass xT.Definition fin_orderType := @Total.Pack disp finLatticeType xclass xT.Notation finOrderType  := type.Record class_of d (T : Type) := Class {
  base  : FinLattice.class_of d T;
  mixin : BLattice.mixin_of (FinPOrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : FinLattice.class_of d T;
  mixin : BLattice.mixin_of (FinPOrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : FinLattice.class_of d T;
  mixin : BLattice.mixin_of (FinPOrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : FinLattice.class_of d T;
  mixin : BLattice.mixin_of (FinPOrder.Pack d base T)
}.Definition base2 d T (c : class_of d T) :=
   (@BLattice.Class _ _ (FinLattice.base2 c) (@mixin _ _ c)).Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition finType := ltac:(FinitePack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition finPOrderType := @FinPOrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Definition finLatticeType := @FinLattice.Pack disp cT xclass xT.Definition blatticeType := @BLattice.Pack disp cT xclass xT.Definition fin_blatticeType := @BLattice.Pack disp finLatticeType xclass xT.Notation finBLatticeType  := type.Record class_of d (T : Type) := Class {
  base  : FinBLattice.class_of d T;
  mixin : TBLattice.mixin_of (FinPOrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : FinBLattice.class_of d T;
  mixin : TBLattice.mixin_of (FinPOrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : FinBLattice.class_of d T;
  mixin : TBLattice.mixin_of (FinPOrder.Pack d base T)
}.Record class_of d (T : Type) := Class {
  base  : FinBLattice.class_of d T;
  mixin : TBLattice.mixin_of (FinPOrder.Pack d base T)
}.Definition base2 d T (c : class_of d T) :=
   (@TBLattice.Class _ _ c (@mixin _ _ c)).Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition finType := ltac:(FinitePack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition finPOrderType := @FinPOrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Definition finLatticeType := @FinLattice.Pack disp cT xclass xT.Definition blatticeType := @BLattice.Pack disp cT xclass xT.Definition finBLatticeType := @FinBLattice.Pack disp cT xclass xT.Definition tblatticeType := @TBLattice.Pack disp cT xclass xT.Definition fin_blatticeType := @TBLattice.Pack disp finBLatticeType xclass xT.Notation finTBLatticeType  := type.Record class_of d (T : Type) := Class {
  base  : FinBLattice.class_of d T;
  mixin : CBLattice.mixin_of (BLattice.Pack base T)
}.Record class_of d (T : Type) := Class {
  base  : FinBLattice.class_of d T;
  mixin : CBLattice.mixin_of (BLattice.Pack base T)
}.Record class_of d (T : Type) := Class {
  base  : FinBLattice.class_of d T;
  mixin : CBLattice.mixin_of (BLattice.Pack base T)
}.Record class_of d (T : Type) := Class {
  base  : FinBLattice.class_of d T;
  mixin : CBLattice.mixin_of (BLattice.Pack base T)
}.Definition base2 d T (c : class_of d T) :=
   (@CBLattice.Class _ _ c (@mixin _ _ c)).Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition finType := ltac:(FinitePack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition finPOrderType := @FinPOrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Definition finLatticeType := @FinLattice.Pack disp cT xclass xT.Definition blatticeType := @BLattice.Pack disp cT xclass xT.Definition finBLatticeType := @FinBLattice.Pack disp cT xclass xT.Definition cblatticeType := @CBLattice.Pack disp cT xclass xT.Definition fin_blatticeType := @CBLattice.Pack disp finBLatticeType xclass xT.Notation finCBLatticeType  := type.Record class_of d (T : Type) := Class {
  base  : FinTBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @CTBLattice.mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Record class_of d (T : Type) := Class {
  base  : FinTBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @CTBLattice.mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Record class_of d (T : Type) := Class {
  base  : FinTBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @CTBLattice.mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Record class_of d (T : Type) := Class {
  base  : FinTBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @CTBLattice.mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Record class_of d (T : Type) := Class {
  base  : FinTBLattice.class_of d T;
  mixin1 : CBLattice.mixin_of (BLattice.Pack base T);
  mixin2 : @CTBLattice.mixin_of d (TBLattice.Pack base T) (CBLattice.sub mixin1)
}.Definition base1 d T (c : class_of d T) :=
   (@FinCBLattice.Class _ _ c (@mixin1 _ _ c)).Definition base2 d T (c : class_of d T) :=
   (@CTBLattice.Class _ _ c (@mixin1 _ _ c) (@mixin2 _ _ c)).Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Structure type (display : unit) :=
  Pack { sort; _ : class_of display sort; _ : Type }.Definition eqType := ltac:(EqualityPack cT (class : class_of _ xT) xT).Definition finType := ltac:(FinitePack cT (class : class_of _ xT) xT).Definition choiceType := ltac:(ChoicePack cT (class : class_of _ xT) xT).Definition porderType := @POrder.Pack disp cT xclass xT.Definition finPOrderType := @FinPOrder.Pack disp cT xclass xT.Definition latticeType := @Lattice.Pack disp cT xclass xT.Definition finLatticeType := @FinLattice.Pack disp cT xclass xT.Definition blatticeType := @BLattice.Pack disp cT xclass xT.Definition finBLatticeType := @FinBLattice.Pack disp cT xclass xT.Definition cblatticeType := @CBLattice.Pack disp cT xclass xT.Definition tblatticeType := @TBLattice.Pack disp cT xclass xT.Definition finTBLatticeType := @FinTBLattice.Pack disp cT xclass xT.Definition finCBLatticeType := @FinCBLattice.Pack disp cT xclass xT.Definition ctblatticeType := @CTBLattice.Pack disp cT xclass xT.Definition fintb_ctblatticeType := @CTBLattice.Pack disp finTBLatticeType xclass xT.Definition fincb_ctblatticeType := @CTBLattice.Pack disp finCBLatticeType xclass xT.Notation finCTBLatticeType  := type.(***********)
(* REVERSE *)
(***********)

Definition reverse T : Type := T.Definition reverse_display : unit -> unit.Local Notation "T ^r" := (reverse T) (at level 2, format "T ^r") : type_scope.Implicit Types x y : T.

(* Specifications: *)
Lemma lexx (x : T) : x <= x.