Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+πŸ–±οΈ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Generalizable Variables A B C K L f.
L: Type
Aop: SgOp L
Aunit: MonUnit L
H: IsBoundedSemiLattice L

IsSemiLattice L
L: Type
Aop: SgOp L
Aunit: MonUnit L
H: IsBoundedSemiLattice L

IsSemiLattice L
repeat (split; try exact _). Qed.
L: Type
Ajoin: Join L
Abottom: Bottom L
H: IsBoundedJoinSemiLattice L

IsJoinSemiLattice L
L: Type
Ajoin: Join L
Abottom: Bottom L
H: IsBoundedJoinSemiLattice L

IsJoinSemiLattice L
repeat (split; try exact _). Qed.
L: Type
Ameet: Meet L
Atop: Top L
H: IsBoundedMeetSemiLattice L

IsMeetSemiLattice L
L: Type
Ameet: Meet L
Atop: Top L
H: IsBoundedMeetSemiLattice L

IsMeetSemiLattice L
repeat (split; try exact _). Qed.
L: Type
Ajoin: Join L
Ameet: Meet L
Abottom: Bottom L
Atop: Top L
H: IsBoundedLattice L

IsLattice L
L: Type
Ajoin: Join L
Ameet: Meet L
Abottom: Bottom L
Atop: Top L
H: IsBoundedLattice L

IsLattice L
repeat split; exact _. Qed.
A, B: Type
Ajoin: Join A
Bjoin: Join B
Abottom: Bottom A
Bbottom: Bottom B
f: A -> B
H: IsBoundedJoinPreserving f

IsJoinPreserving f
A, B: Type
Ajoin: Join A
Bjoin: Join B
Abottom: Bottom A
Bbottom: Bottom B
f: A -> B
H: IsBoundedJoinPreserving f

IsJoinPreserving f
red;exact _. Qed.
L, K: Type
Ajoin: Join L
Bjoin: Join K
f: L -> K
H: IsJoinPreserving f
x, y: L

f (x βŠ” y) = f x βŠ” f y
L, K: Type
Ajoin: Join L
Bjoin: Join K
f: L -> K
H: IsJoinPreserving f
x, y: L

f (x βŠ” y) = f x βŠ” f y
apply preserves_sg_op. Qed.
L, K: Type
Ajoin: Join L
Bjoin: Join K
Abottom: Bottom L
Bbottom: Bottom K
f: L -> K
H: IsBoundedJoinPreserving f

f βŠ₯ = βŠ₯
L, K: Type
Ajoin: Join L
Bjoin: Join K
Abottom: Bottom L
Bbottom: Bottom K
f: L -> K
H: IsBoundedJoinPreserving f

f βŠ₯ = βŠ₯
exact preserves_mon_unit. Qed.
L, K: Type
Ameet: Meet L
Bmeet: Meet K
f: L -> K
H: IsMeetPreserving f
x, y: L

f (x βŠ“ y) = f x βŠ“ f y
L, K: Type
Ameet: Meet L
Bmeet: Meet K
f: L -> K
H: IsMeetPreserving f
x, y: L

f (x βŠ“ y) = f x βŠ“ f y
apply preserves_sg_op. Qed. Section bounded_join_sl_props. Context `{IsBoundedJoinSemiLattice L}. Instance join_bottom_l: LeftIdentity (βŠ”) βŠ₯ := _. Instance join_bottom_r: RightIdentity (βŠ”) βŠ₯ := _. End bounded_join_sl_props. Section lattice_props. Context `{IsLattice L}. Definition meet_join_absorption x y : x βŠ“ (x βŠ” y) = x := absorption x y. Definition join_meet_absorption x y : x βŠ” (x βŠ“ y) = x := absorption x y. End lattice_props. Section distributive_lattice_props. Context `{IsDistributiveLattice L}.
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L

LeftDistribute join meet
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L

LeftDistribute join meet
exact (join_meet_distr_l _). Qed.
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L

RightDistribute join meet
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L

RightDistribute join meet
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

(x βŠ“ y) βŠ” z = (x βŠ” z) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

z βŠ” (x βŠ“ y) = (z βŠ” x) βŠ“ (z βŠ” y)
apply distribute_l. Qed.
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L

LeftDistribute meet join
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L

LeftDistribute meet join
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ (y βŠ” z) = (x βŠ“ y) βŠ” (x βŠ“ z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ (y βŠ” z) = ((x βŠ“ y) βŠ” x) βŠ“ ((x βŠ“ y) βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ (y βŠ” z) = ((x βŠ” x) βŠ“ (y βŠ” x)) βŠ“ ((x βŠ“ y) βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ (y βŠ” z) = (x βŠ“ (y βŠ” x)) βŠ“ ((x βŠ“ y) βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ (y βŠ” z) = x βŠ“ ((x βŠ“ y) βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ (y βŠ” z) = (x βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L
(x βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z) = x βŠ“ ((x βŠ“ y) βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ (y βŠ” z) = (x βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ (y βŠ” z) = x βŠ“ (y βŠ” z)
reflexivity.
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

(x βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z) = x βŠ“ ((x βŠ“ y) βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ ((x βŠ” z) βŠ“ (y βŠ” z)) = x βŠ“ ((x βŠ“ y) βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

x βŠ“ ((x βŠ“ y) βŠ” z) = x βŠ“ ((x βŠ“ y) βŠ” z)
reflexivity. Qed.
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L

RightDistribute meet join
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L

RightDistribute meet join
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

(x βŠ” y) βŠ“ z = (x βŠ“ z) βŠ” (y βŠ“ z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

z βŠ“ (x βŠ” y) = (z βŠ“ x) βŠ” (z βŠ“ y)
apply distribute_l. Qed.
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ“ y) βŠ” (x βŠ“ z)) βŠ” (y βŠ“ z) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ“ y) βŠ” (x βŠ“ z)) βŠ” (y βŠ“ z) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

(x βŠ“ (y βŠ” (x βŠ“ z))) βŠ” (y βŠ“ z) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

(x βŠ” (y βŠ“ z)) βŠ“ ((y βŠ” (x βŠ“ z)) βŠ” (y βŠ“ z)) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ ((y βŠ” (x βŠ“ z)) βŠ” (y βŠ“ z)) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ ((x βŠ“ z) βŠ” (y βŠ” (y βŠ“ z))) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ ((x βŠ“ z) βŠ” y) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ ((x βŠ” y) βŠ“ (z βŠ” y)) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ ((x βŠ” y) βŠ“ (y βŠ” z)) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ” z) βŠ“ (x βŠ” y)) βŠ“ ((x βŠ” y) βŠ“ (y βŠ” z)) = ((x βŠ” z) βŠ“ (x βŠ” y)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ” z) βŠ“ ((x βŠ” y) βŠ“ (x βŠ” y))) βŠ“ (y βŠ” z) = ((x βŠ” z) βŠ“ (x βŠ” y)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ” z) βŠ“ (x βŠ” y)) βŠ“ (y βŠ” z) = ((x βŠ” z) βŠ“ (x βŠ” y)) βŠ“ (y βŠ” z)
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsDistributiveLattice L
x, y, z: L

((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z) = ((x βŠ” y) βŠ“ (x βŠ” z)) βŠ“ (y βŠ” z)
reflexivity. Qed. End distributive_lattice_props. Section lower_bounded_lattice. Context `{IsLattice L} `{Bottom L} `{!IsBoundedJoinSemiLattice L}.
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsLattice L
H0: Bottom L
IsBoundedJoinSemiLattice0: IsBoundedJoinSemiLattice L

LeftAbsorb meet βŠ₯
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsLattice L
H0: Bottom L
IsBoundedJoinSemiLattice0: IsBoundedJoinSemiLattice L

LeftAbsorb meet βŠ₯
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsLattice L
H0: Bottom L
IsBoundedJoinSemiLattice0: IsBoundedJoinSemiLattice L
x: L

βŠ₯ βŠ“ x = βŠ₯
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsLattice L
H0: Bottom L
IsBoundedJoinSemiLattice0: IsBoundedJoinSemiLattice L
x: L

βŠ₯ = βŠ₯
trivial. Qed.
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsLattice L
H0: Bottom L
IsBoundedJoinSemiLattice0: IsBoundedJoinSemiLattice L

RightAbsorb meet βŠ₯
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsLattice L
H0: Bottom L
IsBoundedJoinSemiLattice0: IsBoundedJoinSemiLattice L

RightAbsorb meet βŠ₯
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsLattice L
H0: Bottom L
IsBoundedJoinSemiLattice0: IsBoundedJoinSemiLattice L
x: L

x βŠ“ βŠ₯ = βŠ₯
L: Type
Ajoin: Join L
Ameet: Meet L
H: IsLattice L
H0: Bottom L
IsBoundedJoinSemiLattice0: IsBoundedJoinSemiLattice L
x: L

βŠ₯ = βŠ₯
trivial. Qed. End lower_bounded_lattice. Section from_another_sl. Local Open Scope mc_add_scope. Context `{IsSemiLattice A} `{IsHSet B} `{Bop : SgOp B} (f : B -> A) `{!IsInjective f} (op_correct : forall x y, f (x + y) = f x + f y).
A: Type
Aop: SgOp A
H: IsSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y

IsSemiLattice B
A: Type
Aop: SgOp A
H: IsSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y

IsSemiLattice B
A: Type
Aop: SgOp A
H: IsSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y

IsCommutativeSemiGroup B
A: Type
Aop: SgOp A
H: IsSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
BinaryIdempotent sg_op
A: Type
Aop: SgOp A
H: IsSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y

IsCommutativeSemiGroup B
A: Type
Aop: SgOp A
H: IsSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y

forall x y : B, f (x + y) = f x + f y
assumption.
A: Type
Aop: SgOp A
H: IsSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y

BinaryIdempotent sg_op
A: Type
Aop: SgOp A
H: IsSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
x: B

f (x + x) = f x
A: Type
Aop: SgOp A
H: IsSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
x: B

f x = f x
reflexivity. Qed. End from_another_sl. Section from_another_bounded_sl. Local Open Scope mc_add_scope. Context `{IsBoundedSemiLattice A} `{IsHSet B} `{Bop : SgOp B} `{Bunit : MonUnit B} (f : B -> A) `{!IsInjective f} (op_correct : forall x y, f (x + y) = f x + f y) (unit_correct : f mon_unit = mon_unit).
A: Type
Aop: SgOp A
Aunit: MonUnit A
H: IsBoundedSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
Bunit: MonUnit B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
unit_correct: f 0 = 0

IsBoundedSemiLattice B
A: Type
Aop: SgOp A
Aunit: MonUnit A
H: IsBoundedSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
Bunit: MonUnit B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
unit_correct: f 0 = 0

IsBoundedSemiLattice B
A: Type
Aop: SgOp A
Aunit: MonUnit A
H: IsBoundedSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
Bunit: MonUnit B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
unit_correct: f 0 = 0

IsCommutativeMonoid B
A: Type
Aop: SgOp A
Aunit: MonUnit A
H: IsBoundedSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
Bunit: MonUnit B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
unit_correct: f 0 = 0
BinaryIdempotent sg_op
A: Type
Aop: SgOp A
Aunit: MonUnit A
H: IsBoundedSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
Bunit: MonUnit B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
unit_correct: f 0 = 0

IsCommutativeMonoid B
apply (projected_com_monoid f);trivial.
A: Type
Aop: SgOp A
Aunit: MonUnit A
H: IsBoundedSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
Bunit: MonUnit B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
unit_correct: f 0 = 0

BinaryIdempotent sg_op
A: Type
Aop: SgOp A
Aunit: MonUnit A
H: IsBoundedSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
Bunit: MonUnit B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
unit_correct: f 0 = 0
x: B

f (x + x) = f x
A: Type
Aop: SgOp A
Aunit: MonUnit A
H: IsBoundedSemiLattice A
B: Type
IsHSet0: IsHSet B
Bop: SgOp B
Bunit: MonUnit B
f: B -> A
IsInjective0: IsInjective f
op_correct: forall x y : B, f (x + y) = f x + f y
unit_correct: f 0 = 0
x: B

f x = f x
trivial. Qed. End from_another_bounded_sl. Instance id_join_sl_morphism `{IsJoinSemiLattice A} : IsJoinPreserving (@id A) := {}. Instance id_meet_sl_morphism `{IsMeetSemiLattice A} : IsMeetPreserving (@id A) := {}. Instance id_bounded_join_sl_morphism `{IsBoundedJoinSemiLattice A} : IsBoundedJoinPreserving (@id A) := {}. Instance id_lattice_morphism `{IsLattice A} : IsLatticePreserving (@id A) := {}. Section morphism_composition. Context `{Join A} `{Meet A} `{Bottom A} `{Join B} `{Meet B} `{Bottom B} `{Join C} `{Meet C} `{Bottom C} (f : A -> B) (g : B -> C).
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

IsJoinPreserving f -> IsJoinPreserving g -> IsJoinPreserving (g ∘ f)
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

IsJoinPreserving f -> IsJoinPreserving g -> IsJoinPreserving (g ∘ f)
red; exact _. Qed.
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

IsMeetPreserving f -> IsMeetPreserving g -> IsMeetPreserving (g ∘ f)
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

IsMeetPreserving f -> IsMeetPreserving g -> IsMeetPreserving (g ∘ f)
red;exact _. Qed.
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

IsBoundedJoinPreserving f -> IsBoundedJoinPreserving g -> IsBoundedJoinPreserving (g ∘ f)
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

IsBoundedJoinPreserving f -> IsBoundedJoinPreserving g -> IsBoundedJoinPreserving (g ∘ f)
red; exact _. Qed.
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

IsLatticePreserving f -> IsLatticePreserving g -> IsLatticePreserving (g ∘ f)
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

IsLatticePreserving f -> IsLatticePreserving g -> IsLatticePreserving (g ∘ f)
split; exact _. Qed.
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

forall IsEquiv0 : IsEquiv f, IsJoinPreserving f -> IsJoinPreserving f^-1
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

forall IsEquiv0 : IsEquiv f, IsJoinPreserving f -> IsJoinPreserving f^-1
red; exact _. Qed.
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

forall IsEquiv0 : IsEquiv f, IsMeetPreserving f -> IsMeetPreserving f^-1
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

forall IsEquiv0 : IsEquiv f, IsMeetPreserving f -> IsMeetPreserving f^-1
red; exact _. Qed.
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

forall IsEquiv0 : IsEquiv f, IsBoundedJoinPreserving f -> IsBoundedJoinPreserving f^-1
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

forall IsEquiv0 : IsEquiv f, IsBoundedJoinPreserving f -> IsBoundedJoinPreserving f^-1
red; exact _. Qed.
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

forall IsEquiv0 : IsEquiv f, IsLatticePreserving f -> IsLatticePreserving f^-1
A: Type
H: Join A
H0: Meet A
H1: Bottom A
B: Type
H2: Join B
H3: Meet B
H4: Bottom B
C: Type
H5: Join C
H6: Meet C
H7: Bottom C
f: A -> B
g: B -> C

forall IsEquiv0 : IsEquiv f, IsLatticePreserving f -> IsLatticePreserving f^-1
split; exact _. Qed. End morphism_composition. #[export] Hint Extern 4 (IsJoinPreserving (_ ∘ _)) => class_apply @compose_join_sl_morphism : typeclass_instances. #[export] Hint Extern 4 (IsMeetPreserving (_ ∘ _)) => class_apply @compose_meet_sl_morphism : typeclass_instances. #[export] Hint Extern 4 (IsBoundedJoinPreserving (_ ∘ _)) => class_apply @compose_bounded_join_sl_morphism : typeclass_instances. #[export] Hint Extern 4 (IsLatticePreserving (_ ∘ _)) => class_apply @compose_lattice_morphism : typeclass_instances. #[export] Hint Extern 4 (IsJoinPreserving (_^-1)) => class_apply @invert_join_sl_morphism : typeclass_instances. #[export] Hint Extern 4 (IsMeetPreserving (_^-1)) => class_apply @invert_meet_sl_morphism : typeclass_instances. #[export] Hint Extern 4 (IsBoundedJoinPreserving (_^-1)) => class_apply @invert_bounded_join_sl_morphism : typeclass_instances. #[export] Hint Extern 4 (IsLatticePreserving (_^-1)) => class_apply @invert_lattice_morphism : typeclass_instances.