File: Mathlib/Order/Heyting/Hom.lean

full_name: HeytingHom
code: /-- The type of Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that preserve
Heyting implication. -/
structure HeytingHom (α β : Type*) [HeytingAlgebra α] [HeytingAlgebra β] extends
  LatticeHom α β where
  /-- The proposition that a Heyting homomorphism preserves the bottom element. -/
  protected map_bot' : toFun ⊥ = ⊥
  /-- The proposition that a Heyting homomorphism preserves the Heyting implication. -/
  protected map_himp' : ∀ a b, toFun (a ⇨ b) = toFun a ⇨ toFun b
goal: Type (max u_6 u_7)

full_name: HeytingHom.map_bot'
code: /-- The type of Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that preserve
Heyting implication. -/
structure HeytingHom (α β : Type*) [HeytingAlgebra α] [HeytingAlgebra β] extends
  LatticeHom α β where
  /-- The proposition that a Heyting homomorphism preserves the bottom element. -/
  protected map_bot' : toFun ⊥ = ⊥
  /-- The proposition that a Heyting homomorphism preserves the Heyting implication. -/
  protected map_himp' : ∀ a b, toFun (a ⇨ b) = toFun a ⇨ toFun b
goal: self.toFun ⊥ = ⊥

full_name: HeytingHom.map_himp'
code: /-- The type of Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that preserve
Heyting implication. -/
structure HeytingHom (α β : Type*) [HeytingAlgebra α] [HeytingAlgebra β] extends
  LatticeHom α β where
  /-- The proposition that a Heyting homomorphism preserves the bottom element. -/
  protected map_bot' : toFun ⊥ = ⊥
  /-- The proposition that a Heyting homomorphism preserves the Heyting implication. -/
  protected map_himp' : ∀ a b, toFun (a ⇨ b) = toFun a ⇨ toFun b
goal: self.toFun (a ⇨ b) = self.toFun a ⇨ self.toFun b

full_name: CoheytingHom.map_top'
code: /-- The type of co-Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that
preserve difference. -/
structure CoheytingHom (α β : Type*) [CoheytingAlgebra α] [CoheytingAlgebra β] extends
  LatticeHom α β where
  /-- The proposition that a co-Heyting homomorphism preserves the top element. -/
  protected map_top' : toFun ⊤ = ⊤
  /-- The proposition that a co-Heyting homomorphism preserves the difference operation. -/
  protected map_sdiff' : ∀ a b, toFun (a \ b) = toFun a \ toFun b
goal: self.toFun ⊤ = ⊤

full_name: CoheytingHom.map_sdiff'
code: /-- The type of co-Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that
preserve difference. -/
structure CoheytingHom (α β : Type*) [CoheytingAlgebra α] [CoheytingAlgebra β] extends
  LatticeHom α β where
  /-- The proposition that a co-Heyting homomorphism preserves the top element. -/
  protected map_top' : toFun ⊤ = ⊤
  /-- The proposition that a co-Heyting homomorphism preserves the difference operation. -/
  protected map_sdiff' : ∀ a b, toFun (a \ b) = toFun a \ toFun b
goal: self.toFun (a \ b) = self.toFun a \ self.toFun b

full_name: CoheytingHom
code: /-- The type of co-Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that
preserve difference. -/
structure CoheytingHom (α β : Type*) [CoheytingAlgebra α] [CoheytingAlgebra β] extends
  LatticeHom α β where
  /-- The proposition that a co-Heyting homomorphism preserves the top element. -/
  protected map_top' : toFun ⊤ = ⊤
  /-- The proposition that a co-Heyting homomorphism preserves the difference operation. -/
  protected map_sdiff' : ∀ a b, toFun (a \ b) = toFun a \ toFun b
goal: Type (max u_6 u_7)

full_name: BiheytingHom.map_himp'
code: /-- The type of bi-Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that
preserve Heyting implication and difference. -/
structure BiheytingHom (α β : Type*) [BiheytingAlgebra α] [BiheytingAlgebra β] extends
  LatticeHom α β where
  /-- The proposition that a bi-Heyting homomorphism preserves the Heyting implication. -/
  protected map_himp' : ∀ a b, toFun (a ⇨ b) = toFun a ⇨ toFun b
  /-- The proposition that a bi-Heyting homomorphism preserves the difference operation. -/
  protected map_sdiff' : ∀ a b, toFun (a \ b) = toFun a \ toFun b
goal: self.toFun (a ⇨ b) = self.toFun a ⇨ self.toFun b

full_name: BiheytingHom
code: /-- The type of bi-Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that
preserve Heyting implication and difference. -/
structure BiheytingHom (α β : Type*) [BiheytingAlgebra α] [BiheytingAlgebra β] extends
  LatticeHom α β where
  /-- The proposition that a bi-Heyting homomorphism preserves the Heyting implication. -/
  protected map_himp' : ∀ a b, toFun (a ⇨ b) = toFun a ⇨ toFun b
  /-- The proposition that a bi-Heyting homomorphism preserves the difference operation. -/
  protected map_sdiff' : ∀ a b, toFun (a \ b) = toFun a \ toFun b
goal: Type (max u_6 u_7)

full_name: BiheytingHom.map_sdiff'
code: /-- The type of bi-Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that
preserve Heyting implication and difference. -/
structure BiheytingHom (α β : Type*) [BiheytingAlgebra α] [BiheytingAlgebra β] extends
  LatticeHom α β where
  /-- The proposition that a bi-Heyting homomorphism preserves the Heyting implication. -/
  protected map_himp' : ∀ a b, toFun (a ⇨ b) = toFun a ⇨ toFun b
  /-- The proposition that a bi-Heyting homomorphism preserves the difference operation. -/
  protected map_sdiff' : ∀ a b, toFun (a \ b) = toFun a \ toFun b
goal: self.toFun (a \ b) = self.toFun a \ self.toFun b

full_name: HeytingHomClass
code: /-- `HeytingHomClass F α β` states that `F` is a type of Heyting homomorphisms.

You should extend this class when you extend `HeytingHom`. -/
class HeytingHomClass (F α β : Type*) [HeytingAlgebra α] [HeytingAlgebra β] [FunLike F α β]
  extends LatticeHomClass F α β : Prop where
  /-- The proposition that a Heyting homomorphism preserves the bottom element. -/
  map_bot (f : F) : f ⊥ = ⊥
  /-- The proposition that a Heyting homomorphism preserves the Heyting implication. -/
  map_himp (f : F) : ∀ a b, f (a ⇨ b) = f a ⇨ f b
goal: Prop

full_name: HeytingHomClass.map_bot
code: /-- `HeytingHomClass F α β` states that `F` is a type of Heyting homomorphisms.

You should extend this class when you extend `HeytingHom`. -/
class HeytingHomClass (F α β : Type*) [HeytingAlgebra α] [HeytingAlgebra β] [FunLike F α β]
  extends LatticeHomClass F α β : Prop where
  /-- The proposition that a Heyting homomorphism preserves the bottom element. -/
  map_bot (f : F) : f ⊥ = ⊥
  /-- The proposition that a Heyting homomorphism preserves the Heyting implication. -/
  map_himp (f : F) : ∀ a b, f (a ⇨ b) = f a ⇨ f b
goal: f ⊥ = ⊥

full_name: HeytingHomClass.map_himp
code: /-- `HeytingHomClass F α β` states that `F` is a type of Heyting homomorphisms.

You should extend this class when you extend `HeytingHom`. -/
class HeytingHomClass (F α β : Type*) [HeytingAlgebra α] [HeytingAlgebra β] [FunLike F α β]
  extends LatticeHomClass F α β : Prop where
  /-- The proposition that a Heyting homomorphism preserves the bottom element. -/
  map_bot (f : F) : f ⊥ = ⊥
  /-- The proposition that a Heyting homomorphism preserves the Heyting implication. -/
  map_himp (f : F) : ∀ a b, f (a ⇨ b) = f a ⇨ f b
goal: f (a ⇨ b) = f a ⇨ f b

full_name: CoheytingHomClass.map_top
code: /-- `CoheytingHomClass F α β` states that `F` is a type of co-Heyting homomorphisms.

You should extend this class when you extend `CoheytingHom`. -/
class CoheytingHomClass (F α β : Type*) [CoheytingAlgebra α] [CoheytingAlgebra β] [FunLike F α β]
  extends LatticeHomClass F α β : Prop where
  /-- The proposition that a co-Heyting homomorphism preserves the top element. -/
  map_top (f : F) : f ⊤ = ⊤
  /-- The proposition that a co-Heyting homomorphism preserves the difference operation. -/
  map_sdiff (f : F) : ∀ a b, f (a \ b) = f a \ f b
goal: f ⊤ = ⊤

full_name: CoheytingHomClass.map_sdiff
code: /-- `CoheytingHomClass F α β` states that `F` is a type of co-Heyting homomorphisms.

You should extend this class when you extend `CoheytingHom`. -/
class CoheytingHomClass (F α β : Type*) [CoheytingAlgebra α] [CoheytingAlgebra β] [FunLike F α β]
  extends LatticeHomClass F α β : Prop where
  /-- The proposition that a co-Heyting homomorphism preserves the top element. -/
  map_top (f : F) : f ⊤ = ⊤
  /-- The proposition that a co-Heyting homomorphism preserves the difference operation. -/
  map_sdiff (f : F) : ∀ a b, f (a \ b) = f a \ f b
goal: f (a \ b) = f a \ f b

full_name: CoheytingHomClass
code: /-- `CoheytingHomClass F α β` states that `F` is a type of co-Heyting homomorphisms.

You should extend this class when you extend `CoheytingHom`. -/
class CoheytingHomClass (F α β : Type*) [CoheytingAlgebra α] [CoheytingAlgebra β] [FunLike F α β]
  extends LatticeHomClass F α β : Prop where
  /-- The proposition that a co-Heyting homomorphism preserves the top element. -/
  map_top (f : F) : f ⊤ = ⊤
  /-- The proposition that a co-Heyting homomorphism preserves the difference operation. -/
  map_sdiff (f : F) : ∀ a b, f (a \ b) = f a \ f b
goal: Prop

full_name: BiheytingHomClass
code: /-- `BiheytingHomClass F α β` states that `F` is a type of bi-Heyting homomorphisms.

You should extend this class when you extend `BiheytingHom`. -/
class BiheytingHomClass (F α β : Type*) [BiheytingAlgebra α] [BiheytingAlgebra β] [FunLike F α β]
  extends LatticeHomClass F α β : Prop where
  /-- The proposition that a bi-Heyting homomorphism preserves the Heyting implication. -/
  map_himp (f : F) : ∀ a b, f (a ⇨ b) = f a ⇨ f b
  /-- The proposition that a bi-Heyting homomorphism preserves the difference operation. -/
  map_sdiff (f : F) : ∀ a b, f (a \ b) = f a \ f b
goal: Prop

full_name: BiheytingHomClass.map_sdiff
code: /-- `BiheytingHomClass F α β` states that `F` is a type of bi-Heyting homomorphisms.

You should extend this class when you extend `BiheytingHom`. -/
class BiheytingHomClass (F α β : Type*) [BiheytingAlgebra α] [BiheytingAlgebra β] [FunLike F α β]
  extends LatticeHomClass F α β : Prop where
  /-- The proposition that a bi-Heyting homomorphism preserves the Heyting implication. -/
  map_himp (f : F) : ∀ a b, f (a ⇨ b) = f a ⇨ f b
  /-- The proposition that a bi-Heyting homomorphism preserves the difference operation. -/
  map_sdiff (f : F) : ∀ a b, f (a \ b) = f a \ f b
goal: f (a \ b) = f a \ f b

full_name: BiheytingHomClass.map_himp
code: /-- `BiheytingHomClass F α β` states that `F` is a type of bi-Heyting homomorphisms.

You should extend this class when you extend `BiheytingHom`. -/
class BiheytingHomClass (F α β : Type*) [BiheytingAlgebra α] [BiheytingAlgebra β] [FunLike F α β]
  extends LatticeHomClass F α β : Prop where
  /-- The proposition that a bi-Heyting homomorphism preserves the Heyting implication. -/
  map_himp (f : F) : ∀ a b, f (a ⇨ b) = f a ⇨ f b
  /-- The proposition that a bi-Heyting homomorphism preserves the difference operation. -/
  map_sdiff (f : F) : ∀ a b, f (a \ b) = f a \ f b
goal: f (a ⇨ b) = f a ⇨ f b

full_name: HeytingHomClass.toBoundedLatticeHomClass
code: instance (priority := 100) HeytingHomClass.toBoundedLatticeHomClass [HeytingAlgebra α]
    { _ : HeytingAlgebra β} [HeytingHomClass F α β] : BoundedLatticeHomClass F α β 
goal: ∀ {x : HeytingAlgebra β} [inst : HeytingHomClass F α β], BoundedLatticeHomClass F α β

full_name: CoheytingHomClass.toBoundedLatticeHomClass
code: instance (priority := 100) CoheytingHomClass.toBoundedLatticeHomClass [CoheytingAlgebra α]
    { _ : CoheytingAlgebra β} [CoheytingHomClass F α β] : BoundedLatticeHomClass F α β 
goal: ∀ {x : CoheytingAlgebra β} [inst : CoheytingHomClass F α β], BoundedLatticeHomClass F α β

full_name: BiheytingHomClass.toHeytingHomClass
code: instance (priority := 100) BiheytingHomClass.toHeytingHomClass [BiheytingAlgebra α]
    { _ : BiheytingAlgebra β} [BiheytingHomClass F α β] : HeytingHomClass F α β 
goal: ∀ {x : BiheytingAlgebra β} [inst : BiheytingHomClass F α β], HeytingHomClass F α β

full_name: BiheytingHomClass.toCoheytingHomClass
code: instance (priority := 100) BiheytingHomClass.toCoheytingHomClass [BiheytingAlgebra α]
    { _ : BiheytingAlgebra β} [BiheytingHomClass F α β] : CoheytingHomClass F α β 
goal: ∀ {x : BiheytingAlgebra β} [inst : BiheytingHomClass F α β], CoheytingHomClass F α β

full_name: OrderIsoClass.toHeytingHomClass
code: instance (priority := 100) OrderIsoClass.toHeytingHomClass [HeytingAlgebra α]
    { _ : HeytingAlgebra β} [OrderIsoClass F α β] : HeytingHomClass F α β 
goal: ∀ {x : HeytingAlgebra β} [inst : OrderIsoClass F α β], HeytingHomClass F α β

full_name: OrderIsoClass.toCoheytingHomClass
code: instance (priority := 100) OrderIsoClass.toCoheytingHomClass [CoheytingAlgebra α]
    { _ : CoheytingAlgebra β} [OrderIsoClass F α β] : CoheytingHomClass F α β 
goal: ∀ {x : CoheytingAlgebra β} [inst : OrderIsoClass F α β], CoheytingHomClass F α β

full_name: OrderIsoClass.toBiheytingHomClass
code: instance (priority := 100) OrderIsoClass.toBiheytingHomClass [BiheytingAlgebra α]
    { _ : BiheytingAlgebra β} [OrderIsoClass F α β] : BiheytingHomClass F α β 
goal: ∀ {x : BiheytingAlgebra β} [inst : OrderIsoClass F α β], BiheytingHomClass F α β

full_name: BoundedLatticeHomClass.toBiheytingHomClass
code: /-- This can't be an instance because of typeclass loops. -/
lemma BoundedLatticeHomClass.toBiheytingHomClass [BooleanAlgebra α] [BooleanAlgebra β]
    [BoundedLatticeHomClass F α β] : BiheytingHomClass F α β 
goal: BiheytingHomClass F α β

full_name: map_compl
code: @[simp]
theorem map_compl (a : α) : f aᶜ = (f a)ᶜ 
goal: f aᶜ = (f a)ᶜ

full_name: map_bihimp
code: @[simp]
theorem map_bihimp (a b : α) : f (a ⇔ b) = f a ⇔ f b 
goal: f (bihimp a b) = bihimp (f a) (f b)

full_name: map_hnot
code: @[simp]
theorem map_hnot (a : α) : f (￢a) = ￢f a 
goal: f (￢a) = ￢f a

full_name: map_symmDiff
code: @[simp]
theorem map_symmDiff (a b : α) : f (a ∆ b) = f a ∆ f b 
goal: f (symmDiff a b) = symmDiff (f a) (f b)

full_name: instCoeTCHeytingHomOfHeytingHomClass
code: instance [HeytingAlgebra α] [HeytingAlgebra β] [HeytingHomClass F α β] : CoeTC F (HeytingHom α β) 
goal: CoeTC F (HeytingHom α β)

full_name: instCoeTCCoheytingHomOfCoheytingHomClass
code: instance [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingHomClass F α β] :
    CoeTC F (CoheytingHom α β) 
goal: CoeTC F (CoheytingHom α β)

full_name: instCoeTCBiheytingHomOfBiheytingHomClass
code: instance [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingHomClass F α β] :
    CoeTC F (BiheytingHom α β) 
goal: CoeTC F (BiheytingHom α β)

full_name: HeytingHom.instFunLike
code: instance instFunLike : FunLike (HeytingHom α β) α β 
goal: FunLike (HeytingHom α β) α β

full_name: HeytingHom.instHeytingHomClass
code: instance instHeytingHomClass : HeytingHomClass (HeytingHom α β) α β 
goal: HeytingHomClass (HeytingHom α β) α β

full_name: HeytingHom.toFun_eq_coe
code: theorem toFun_eq_coe {f : HeytingHom α β} : f.toFun = ⇑f 
goal: f.toFun = ⇑f

full_name: HeytingHom.toFun_eq_coe_aux
code: @[simp]
theorem toFun_eq_coe_aux {f : HeytingHom α β} : (↑f.toLatticeHom) = ⇑f 
goal: ⇑f.toLatticeHom = ⇑f

full_name: HeytingHom.ext
code: @[ext]
theorem ext {f g : HeytingHom α β} (h : ∀ a, f a = g a) : f = g 
goal: f = g

full_name: HeytingHom.copy
code: /-- Copy of a `HeytingHom` with a new `toFun` equal to the old one. Useful to fix definitional
equalities. -/
protected def copy (f : HeytingHom α β) (f' : α → β) (h : f' = f) : HeytingHom α β 
goal: HeytingHom α β

full_name: HeytingHom.coe_copy
code: @[simp]
theorem coe_copy (f : HeytingHom α β) (f' : α → β) (h : f' = f) : ⇑(f.copy f' h) = f' 
goal: ⇑(f.copy f' h) = f'

full_name: HeytingHom.copy_eq
code: theorem copy_eq (f : HeytingHom α β) (f' : α → β) (h : f' = f) : f.copy f' h = f 
goal: f.copy f' h = f

full_name: HeytingHom.id
code: /-- `id` as a `HeytingHom`. -/
protected def id : HeytingHom α α 
goal: HeytingHom α α

full_name: HeytingHom.coe_id
code: @[simp]
theorem coe_id : ⇑(HeytingHom.id α) = id 
goal: ⇑(HeytingHom.id α) = id

full_name: HeytingHom.id_apply
code: @[simp]
theorem id_apply (a : α) : HeytingHom.id α a = a 
goal: (HeytingHom.id α) a = a

full_name: HeytingHom.instInhabited
code: instance : Inhabited (HeytingHom α α) 
goal: Inhabited (HeytingHom α α)

full_name: HeytingHom.instPartialOrder
code: instance : PartialOrder (HeytingHom α β) 
goal: PartialOrder (HeytingHom α β)

full_name: HeytingHom.comp
code: /-- Composition of `HeytingHom`s as a `HeytingHom`. -/
def comp (f : HeytingHom β γ) (g : HeytingHom α β) : HeytingHom α γ 
goal: HeytingHom α γ

full_name: HeytingHom.coe_comp
code: @[simp]
theorem coe_comp (f : HeytingHom β γ) (g : HeytingHom α β) : ⇑(f.comp g) = f ∘ g 
goal: ⇑(f.comp g) = ⇑f ∘ ⇑g

full_name: HeytingHom.comp_apply
code: @[simp]
theorem comp_apply (f : HeytingHom β γ) (g : HeytingHom α β) (a : α) : f.comp g a = f (g a) 
goal: (f.comp g) a = f (g a)

full_name: HeytingHom.comp_assoc
code: @[simp]
theorem comp_assoc (f : HeytingHom γ δ) (g : HeytingHom β γ) (h : HeytingHom α β) :
    (f.comp g).comp h = f.comp (g.comp h) 
goal: (f.comp g).comp h = f.comp (g.comp h)

full_name: HeytingHom.comp_id
code: @[simp]
theorem comp_id (f : HeytingHom α β) : f.comp (HeytingHom.id α) = f 
goal: f.comp (HeytingHom.id α) = f

full_name: HeytingHom.id_comp
code: @[simp]
theorem id_comp (f : HeytingHom α β) : (HeytingHom.id β).comp f = f 
goal: (HeytingHom.id β).comp f = f

full_name: HeytingHom.cancel_right
code: @[simp]
theorem cancel_right (hf : Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ 
goal: g₁.comp f = g₂.comp f ↔ g₁ = g₂

full_name: HeytingHom.cancel_left
code: @[simp]
theorem cancel_left (hg : Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ 
goal: g.comp f₁ = g.comp f₂ ↔ f₁ = f₂

full_name: CoheytingHom.instFunLike
code: instance : FunLike (CoheytingHom α β) α β 
goal: FunLike (CoheytingHom α β) α β

full_name: CoheytingHom.instCoheytingHomClass
code: instance : CoheytingHomClass (CoheytingHom α β) α β 
goal: CoheytingHomClass (CoheytingHom α β) α β

full_name: CoheytingHom.toFun_eq_coe
code: theorem toFun_eq_coe {f : CoheytingHom α β} : f.toFun = (f : α → β) 
goal: f.toFun = ⇑f

full_name: CoheytingHom.toFun_eq_coe_aux
code: @[simp]
theorem toFun_eq_coe_aux {f : CoheytingHom α β} : (↑f.toLatticeHom) = ⇑f 
goal: ⇑f.toLatticeHom = ⇑f

full_name: CoheytingHom.ext
code: @[ext]
theorem ext {f g : CoheytingHom α β} (h : ∀ a, f a = g a) : f = g 
goal: f = g

full_name: CoheytingHom.copy
code: /-- Copy of a `CoheytingHom` with a new `toFun` equal to the old one. Useful to fix definitional
equalities. -/
protected def copy (f : CoheytingHom α β) (f' : α → β) (h : f' = f) : CoheytingHom α β 
goal: CoheytingHom α β

full_name: CoheytingHom.coe_copy
code: @[simp]
theorem coe_copy (f : CoheytingHom α β) (f' : α → β) (h : f' = f) : ⇑(f.copy f' h) = f' 
goal: ⇑(f.copy f' h) = f'

full_name: CoheytingHom.copy_eq
code: theorem copy_eq (f : CoheytingHom α β) (f' : α → β) (h : f' = f) : f.copy f' h = f 
goal: f.copy f' h = f

full_name: CoheytingHom.id
code: /-- `id` as a `CoheytingHom`. -/
protected def id : CoheytingHom α α 
goal: CoheytingHom α α

full_name: CoheytingHom.coe_id
code: @[simp]
theorem coe_id : ⇑(CoheytingHom.id α) = id 
goal: ⇑(CoheytingHom.id α) = id

full_name: CoheytingHom.id_apply
code: @[simp]
theorem id_apply (a : α) : CoheytingHom.id α a = a 
goal: (CoheytingHom.id α) a = a

full_name: CoheytingHom.instInhabited
code: instance : Inhabited (CoheytingHom α α) 
goal: Inhabited (CoheytingHom α α)

full_name: CoheytingHom.instPartialOrder
code: instance : PartialOrder (CoheytingHom α β) 
goal: PartialOrder (CoheytingHom α β)

full_name: CoheytingHom.comp
code: /-- Composition of `CoheytingHom`s as a `CoheytingHom`. -/
def comp (f : CoheytingHom β γ) (g : CoheytingHom α β) : CoheytingHom α γ 
goal: CoheytingHom α γ

full_name: CoheytingHom.coe_comp
code: @[simp]
theorem coe_comp (f : CoheytingHom β γ) (g : CoheytingHom α β) : ⇑(f.comp g) = f ∘ g 
goal: ⇑(f.comp g) = ⇑f ∘ ⇑g

full_name: CoheytingHom.comp_apply
code: @[simp]
theorem comp_apply (f : CoheytingHom β γ) (g : CoheytingHom α β) (a : α) : f.comp g a = f (g a) 
goal: (f.comp g) a = f (g a)

full_name: CoheytingHom.comp_assoc
code: @[simp]
theorem comp_assoc (f : CoheytingHom γ δ) (g : CoheytingHom β γ) (h : CoheytingHom α β) :
    (f.comp g).comp h = f.comp (g.comp h) 
goal: (f.comp g).comp h = f.comp (g.comp h)

full_name: CoheytingHom.comp_id
code: @[simp]
theorem comp_id (f : CoheytingHom α β) : f.comp (CoheytingHom.id α) = f 
goal: f.comp (CoheytingHom.id α) = f

full_name: CoheytingHom.id_comp
code: @[simp]
theorem id_comp (f : CoheytingHom α β) : (CoheytingHom.id β).comp f = f 
goal: (CoheytingHom.id β).comp f = f

full_name: CoheytingHom.cancel_right
code: @[simp]
theorem cancel_right (hf : Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ 
goal: g₁.comp f = g₂.comp f ↔ g₁ = g₂

full_name: CoheytingHom.cancel_left
code: @[simp]
theorem cancel_left (hg : Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ 
goal: g.comp f₁ = g.comp f₂ ↔ f₁ = f₂

full_name: BiheytingHom.instFunLike
code: instance : FunLike (BiheytingHom α β) α β 
goal: FunLike (BiheytingHom α β) α β

full_name: BiheytingHom.instBiheytingHomClass
code: instance : BiheytingHomClass (BiheytingHom α β) α β 
goal: BiheytingHomClass (BiheytingHom α β) α β

full_name: BiheytingHom.toFun_eq_coe
code: theorem toFun_eq_coe {f : BiheytingHom α β} : f.toFun = (f : α → β) 
goal: f.toFun = ⇑f

full_name: BiheytingHom.toFun_eq_coe_aux
code: @[simp]
theorem toFun_eq_coe_aux {f : BiheytingHom α β} : (↑f.toLatticeHom) = ⇑f 
goal: ⇑f.toLatticeHom = ⇑f

full_name: BiheytingHom.ext
code: @[ext]
theorem ext {f g : BiheytingHom α β} (h : ∀ a, f a = g a) : f = g 
goal: f = g

full_name: BiheytingHom.copy
code: /-- Copy of a `BiheytingHom` with a new `toFun` equal to the old one. Useful to fix definitional
equalities. -/
protected def copy (f : BiheytingHom α β) (f' : α → β) (h : f' = f) : BiheytingHom α β 
goal: BiheytingHom α β

full_name: BiheytingHom.coe_copy
code: @[simp]
theorem coe_copy (f : BiheytingHom α β) (f' : α → β) (h : f' = f) : ⇑(f.copy f' h) = f' 
goal: ⇑(f.copy f' h) = f'

full_name: BiheytingHom.copy_eq
code: theorem copy_eq (f : BiheytingHom α β) (f' : α → β) (h : f' = f) : f.copy f' h = f 
goal: f.copy f' h = f

full_name: BiheytingHom.id
code: /-- `id` as a `BiheytingHom`. -/
protected def id : BiheytingHom α α 
goal: BiheytingHom α α

full_name: BiheytingHom.coe_id
code: @[simp]
theorem coe_id : ⇑(BiheytingHom.id α) = id 
goal: ⇑(BiheytingHom.id α) = id

full_name: BiheytingHom.id_apply
code: @[simp]
theorem id_apply (a : α) : BiheytingHom.id α a = a 
goal: (BiheytingHom.id α) a = a

full_name: BiheytingHom.instInhabited
code: instance : Inhabited (BiheytingHom α α) 
goal: Inhabited (BiheytingHom α α)

full_name: BiheytingHom.instPartialOrder
code: instance : PartialOrder (BiheytingHom α β) 
goal: PartialOrder (BiheytingHom α β)

full_name: BiheytingHom.comp
code: /-- Composition of `BiheytingHom`s as a `BiheytingHom`. -/
def comp (f : BiheytingHom β γ) (g : BiheytingHom α β) : BiheytingHom α γ 
goal: BiheytingHom α γ

full_name: BiheytingHom.coe_comp
code: @[simp]
theorem coe_comp (f : BiheytingHom β γ) (g : BiheytingHom α β) : ⇑(f.comp g) = f ∘ g 
goal: ⇑(f.comp g) = ⇑f ∘ ⇑g

full_name: BiheytingHom.comp_apply
code: @[simp]
theorem comp_apply (f : BiheytingHom β γ) (g : BiheytingHom α β) (a : α) : f.comp g a = f (g a) 
goal: (f.comp g) a = f (g a)

full_name: BiheytingHom.comp_assoc
code: @[simp]
theorem comp_assoc (f : BiheytingHom γ δ) (g : BiheytingHom β γ) (h : BiheytingHom α β) :
    (f.comp g).comp h = f.comp (g.comp h) 
goal: (f.comp g).comp h = f.comp (g.comp h)

full_name: BiheytingHom.comp_id
code: @[simp]
theorem comp_id (f : BiheytingHom α β) : f.comp (BiheytingHom.id α) = f 
goal: f.comp (BiheytingHom.id α) = f

full_name: BiheytingHom.id_comp
code: @[simp]
theorem id_comp (f : BiheytingHom α β) : (BiheytingHom.id β).comp f = f 
goal: (BiheytingHom.id β).comp f = f

full_name: BiheytingHom.cancel_right
code: @[simp]
theorem cancel_right (hf : Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ 
goal: g₁.comp f = g₂.comp f ↔ g₁ = g₂

full_name: BiheytingHom.cancel_left
code: @[simp]
theorem cancel_left (hg : Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ 
goal: g.comp f₁ = g.comp f₂ ↔ f₁ = f₂