/-
Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies

! This file was ported from Lean 3 source module order.heyting.hom
! leanprover-community/mathlib commit 50832daea47b195a48b5b33b1c8b2162c48c3afc
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Order.Hom.Lattice

/-!
# Heyting algebra morphisms

> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
> Any changes to this file require a corresponding PR to mathlib4.

A Heyting homomorphism between two Heyting algebras is a bounded lattice homomorphism that preserves
Heyting implication.

We use the `fun_like` design, so each type of morphisms has a companion typeclass which is meant to
be satisfied by itself and all stricter types.

## Types of morphisms

* `heyting_hom`: Heyting homomorphisms.
* `coheyting_hom`: Co-Heyting homomorphisms.
* `biheyting_hom`: Bi-Heyting homomorphisms.

## Typeclasses

* `heyting_hom_class`
* `coheyting_hom_class`
* `biheyting_hom_class`
-/

open Function

variable {F α β γ δ : Type _}

#print HeytingHom /-
/-- The type of Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that preserve
Heyting implication. -/
@[protect_proj]
structure HeytingHom (α β : Type _) [HeytingAlgebra α] [HeytingAlgebra β] extends
  LatticeHom α β where
  map_bot' : to_fun ⊥ = ⊥
  map_himp' : ∀ a b, to_fun (a ⇨ b) = to_fun a ⇨ to_fun b
#align heyting_hom HeytingHom
-/

#print CoheytingHom /-
/-- The type of co-Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that
preserve difference. -/
@[protect_proj]
structure CoheytingHom (α β : Type _) [CoheytingAlgebra α] [CoheytingAlgebra β] extends
  LatticeHom α β where
  map_top' : to_fun ⊤ = ⊤
  map_sdiff' : ∀ a b, to_fun (a \ b) = to_fun a \ to_fun b
#align coheyting_hom CoheytingHom
-/

#print BiheytingHom /-
/-- The type of bi-Heyting homomorphisms from `α` to `β`. Bounded lattice homomorphisms that
preserve Heyting implication and difference. -/
@[protect_proj]
structure BiheytingHom (α β : Type _) [BiheytingAlgebra α] [BiheytingAlgebra β] extends
  LatticeHom α β where
  map_himp' : ∀ a b, to_fun (a ⇨ b) = to_fun a ⇨ to_fun b
  map_sdiff' : ∀ a b, to_fun (a \ b) = to_fun a \ to_fun b
#align biheyting_hom BiheytingHom
-/

#print HeytingHomClass /-
/-- `heyting_hom_class F α β` states that `F` is a type of Heyting homomorphisms.

You should extend this class when you extend `heyting_hom`. -/
class HeytingHomClass (F : Type _) (α β : outParam <| Type _) [HeytingAlgebra α]
  [HeytingAlgebra β] extends LatticeHomClass F α β where
  map_bot (f : F) : f ⊥ = ⊥
  map_himp (f : F) : ∀ a b, f (a ⇨ b) = f a ⇨ f b
#align heyting_hom_class HeytingHomClass
-/

#print CoheytingHomClass /-
/-- `coheyting_hom_class F α β` states that `F` is a type of co-Heyting homomorphisms.

You should extend this class when you extend `coheyting_hom`. -/
class CoheytingHomClass (F : Type _) (α β : outParam <| Type _) [CoheytingAlgebra α]
  [CoheytingAlgebra β] extends LatticeHomClass F α β where
  map_top (f : F) : f ⊤ = ⊤
  map_sdiff (f : F) : ∀ a b, f (a \ b) = f a \ f b
#align coheyting_hom_class CoheytingHomClass
-/

#print BiheytingHomClass /-
/-- `biheyting_hom_class F α β` states that `F` is a type of bi-Heyting homomorphisms.

You should extend this class when you extend `biheyting_hom`. -/
class BiheytingHomClass (F : Type _) (α β : outParam <| Type _) [BiheytingAlgebra α]
  [BiheytingAlgebra β] extends LatticeHomClass F α β where
  map_himp (f : F) : ∀ a b, f (a ⇨ b) = f a ⇨ f b
  map_sdiff (f : F) : ∀ a b, f (a \ b) = f a \ f b
#align biheyting_hom_class BiheytingHomClass
-/

export HeytingHomClass (map_himp)

export CoheytingHomClass (map_sdiff)

attribute [simp] map_himp map_sdiff

#print HeytingHomClass.toBoundedLatticeHomClass /-
-- See note [lower instance priority]
instance (priority := 100) HeytingHomClass.toBoundedLatticeHomClass [HeytingAlgebra α]
    [HeytingAlgebra β] [HeytingHomClass F α β] : BoundedLatticeHomClass F α β :=
  { ‹HeytingHomClass F α β› with
    map_top := fun f => by rw [← @himp_self α _ ⊥, ← himp_self, map_himp] }
#align heyting_hom_class.to_bounded_lattice_hom_class HeytingHomClass.toBoundedLatticeHomClass
-/

#print CoheytingHomClass.toBoundedLatticeHomClass /-
-- See note [lower instance priority]
instance (priority := 100) CoheytingHomClass.toBoundedLatticeHomClass [CoheytingAlgebra α]
    [CoheytingAlgebra β] [CoheytingHomClass F α β] : BoundedLatticeHomClass F α β :=
  { ‹CoheytingHomClass F α β› with
    map_bot := fun f => by rw [← @sdiff_self α _ ⊤, ← sdiff_self, map_sdiff] }
#align coheyting_hom_class.to_bounded_lattice_hom_class CoheytingHomClass.toBoundedLatticeHomClass
-/

#print BiheytingHomClass.toHeytingHomClass /-
-- See note [lower instance priority]
instance (priority := 100) BiheytingHomClass.toHeytingHomClass [BiheytingAlgebra α]
    [BiheytingAlgebra β] [BiheytingHomClass F α β] : HeytingHomClass F α β :=
  { ‹BiheytingHomClass F α β› with
    map_bot := fun f => by rw [← @sdiff_self α _ ⊤, ← sdiff_self, BiheytingHomClass.map_sdiff] }
#align biheyting_hom_class.to_heyting_hom_class BiheytingHomClass.toHeytingHomClass
-/

#print BiheytingHomClass.toCoheytingHomClass /-
-- See note [lower instance priority]
instance (priority := 100) BiheytingHomClass.toCoheytingHomClass [BiheytingAlgebra α]
    [BiheytingAlgebra β] [BiheytingHomClass F α β] : CoheytingHomClass F α β :=
  { ‹BiheytingHomClass F α β› with
    map_top := fun f => by rw [← @himp_self α _ ⊥, ← himp_self, map_himp] }
#align biheyting_hom_class.to_coheyting_hom_class BiheytingHomClass.toCoheytingHomClass
-/

#print OrderIsoClass.toHeytingHomClass /-
-- See note [lower instance priority]
instance (priority := 100) OrderIsoClass.toHeytingHomClass [HeytingAlgebra α] [HeytingAlgebra β]
    [OrderIsoClass F α β] : HeytingHomClass F α β :=
  { OrderIsoClass.toBoundedLatticeHomClass with
    map_himp := fun f a b =>
      eq_of_forall_le_iff fun c =>
        by
        simp only [← map_inv_le_iff, le_himp_iff]
        rw [← OrderIsoClass.map_le_map_iff f]
        simp }
#align order_iso_class.to_heyting_hom_class OrderIsoClass.toHeytingHomClass
-/

#print OrderIsoClass.toCoheytingHomClass /-
-- See note [lower instance priority]
instance (priority := 100) OrderIsoClass.toCoheytingHomClass [CoheytingAlgebra α]
    [CoheytingAlgebra β] [OrderIsoClass F α β] : CoheytingHomClass F α β :=
  { OrderIsoClass.toBoundedLatticeHomClass with
    map_sdiff := fun f a b =>
      eq_of_forall_ge_iff fun c =>
        by
        simp only [← le_map_inv_iff, sdiff_le_iff]
        rw [← OrderIsoClass.map_le_map_iff f]
        simp }
#align order_iso_class.to_coheyting_hom_class OrderIsoClass.toCoheytingHomClass
-/

#print OrderIsoClass.toBiheytingHomClass /-
-- See note [lower instance priority]
instance (priority := 100) OrderIsoClass.toBiheytingHomClass [BiheytingAlgebra α]
    [BiheytingAlgebra β] [OrderIsoClass F α β] : BiheytingHomClass F α β :=
  {
    OrderIsoClass.toLatticeHomClass with
    map_himp := fun f a b =>
      eq_of_forall_le_iff fun c =>
        by
        simp only [← map_inv_le_iff, le_himp_iff]
        rw [← OrderIsoClass.map_le_map_iff f]
        simp
    map_sdiff := fun f a b =>
      eq_of_forall_ge_iff fun c =>
        by
        simp only [← le_map_inv_iff, sdiff_le_iff]
        rw [← OrderIsoClass.map_le_map_iff f]
        simp }
#align order_iso_class.to_biheyting_hom_class OrderIsoClass.toBiheytingHomClass
-/

#print BoundedLatticeHomClass.toBiheytingHomClass /-
-- See note [reducible non instances]
/-- This can't be an instance because of typeclass loops. -/
@[reducible]
def BoundedLatticeHomClass.toBiheytingHomClass [BooleanAlgebra α] [BooleanAlgebra β]
    [BoundedLatticeHomClass F α β] : BiheytingHomClass F α β :=
  {
    ‹BoundedLatticeHomClass F α
        β› with
    map_himp := fun f a b => by rw [himp_eq, himp_eq, map_sup, (is_compl_compl.map _).compl_eq]
    map_sdiff := fun f a b => by rw [sdiff_eq, sdiff_eq, map_inf, (is_compl_compl.map _).compl_eq] }
#align bounded_lattice_hom_class.to_biheyting_hom_class BoundedLatticeHomClass.toBiheytingHomClass
-/

section HeytingAlgebra

variable [HeytingAlgebra α] [HeytingAlgebra β] [HeytingHomClass F α β] (f : F)

include β

#print map_compl /-
@[simp]
theorem map_compl (a : α) : f (aᶜ) = f aᶜ := by rw [← himp_bot, ← himp_bot, map_himp, map_bot]
#align map_compl map_compl
-/

/- warning: map_bihimp -> map_bihimp is a dubious translation:
lean 3 declaration is
  forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : HeytingAlgebra.{u2} α] [_inst_2 : HeytingAlgebra.{u3} β] [_inst_3 : HeytingHomClass.{u1, u2, u3} F α β _inst_1 _inst_2] (f : F) (a : α) (b : α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))) (SemilatticeInf.toHasInf.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))) (LatticeHomClass.toInfHomClass.{u1, u2, u3} F α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (HeytingHomClass.toLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f (bihimp.{u2} α (SemilatticeInf.toHasInf.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))) (GeneralizedHeytingAlgebra.toHasHimp.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) a b)) (bihimp.{u3} β (SemilatticeInf.toHasInf.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))) (GeneralizedHeytingAlgebra.toHasHimp.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))) (SemilatticeInf.toHasInf.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))) (LatticeHomClass.toInfHomClass.{u1, u2, u3} F α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (HeytingHomClass.toLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f a) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))) (SemilatticeInf.toHasInf.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))) (LatticeHomClass.toInfHomClass.{u1, u2, u3} F α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (HeytingHomClass.toLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f b))
but is expected to have type
  forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : HeytingAlgebra.{u2} α] [_inst_2 : HeytingAlgebra.{u3} β] [_inst_3 : HeytingHomClass.{u1, u2, u3} F α β _inst_1 _inst_2] (f : F) (a : α) (b : α), Eq.{succ u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) (bihimp.{u2} α (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (GeneralizedHeytingAlgebra.toHImp.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) a b)) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u2, u3} F α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f (bihimp.{u2} α (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (GeneralizedHeytingAlgebra.toHImp.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) a b)) (bihimp.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (Lattice.toInf.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (GeneralizedHeytingAlgebra.toLattice.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) _inst_2))) (GeneralizedHeytingAlgebra.toHImp.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) _inst_2)) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u2, u3} F α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f a) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u2, u3} F α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f b))
Case conversion may be inaccurate. Consider using '#align map_bihimp map_bihimpₓ'. -/
@[simp]
theorem map_bihimp (a b : α) : f (a ⇔ b) = f a ⇔ f b := by simp_rw [bihimp, map_inf, map_himp]
#align map_bihimp map_bihimp

-- TODO: `map_bihimp`
end HeytingAlgebra

section CoheytingAlgebra

variable [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingHomClass F α β] (f : F)

include β

/- warning: map_hnot -> map_hnot is a dubious translation:
lean 3 declaration is
  forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u3} β] [_inst_3 : CoheytingHomClass.{u1, u2, u3} F α β _inst_1 _inst_2] (f : F) (a : α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))) (SemilatticeInf.toHasInf.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))) (LatticeHomClass.toInfHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingHomClass.toLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f (HNot.hnot.{u2} α (CoheytingAlgebra.toHasHnot.{u2} α _inst_1) a)) (HNot.hnot.{u3} β (CoheytingAlgebra.toHasHnot.{u3} β _inst_2) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))) (SemilatticeInf.toHasInf.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))) (LatticeHomClass.toInfHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingHomClass.toLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f a))
but is expected to have type
  forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u3} β] [_inst_3 : CoheytingHomClass.{u1, u2, u3} F α β _inst_1 _inst_2] (f : F) (a : α), Eq.{succ u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) (HNot.hnot.{u2} α (CoheytingAlgebra.toHNot.{u2} α _inst_1) a)) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f (HNot.hnot.{u2} α (CoheytingAlgebra.toHNot.{u2} α _inst_1) a)) (HNot.hnot.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (CoheytingAlgebra.toHNot.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) _inst_2) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f a))
Case conversion may be inaccurate. Consider using '#align map_hnot map_hnotₓ'. -/
@[simp]
theorem map_hnot (a : α) : f (￢a) = ￢f a := by rw [← top_sdiff', ← top_sdiff', map_sdiff, map_top]
#align map_hnot map_hnot

/- warning: map_symm_diff -> map_symmDiff is a dubious translation:
lean 3 declaration is
  forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u3} β] [_inst_3 : CoheytingHomClass.{u1, u2, u3} F α β _inst_1 _inst_2] (f : F) (a : α) (b : α), Eq.{succ u3} β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))) (SemilatticeInf.toHasInf.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))) (LatticeHomClass.toInfHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingHomClass.toLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f (symmDiff.{u2} α (SemilatticeSup.toHasSup.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))) (GeneralizedCoheytingAlgebra.toHasSdiff.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) a b)) (symmDiff.{u3} β (SemilatticeSup.toHasSup.{u3} β (Lattice.toSemilatticeSup.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))) (GeneralizedCoheytingAlgebra.toHasSdiff.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))) (SemilatticeInf.toHasInf.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))) (LatticeHomClass.toInfHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingHomClass.toLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f a) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (InfHomClass.toFunLike.{u1, u2, u3} F α β (SemilatticeInf.toHasInf.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))) (SemilatticeInf.toHasInf.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))) (LatticeHomClass.toInfHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingHomClass.toLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f b))
but is expected to have type
  forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u3} β] [_inst_3 : CoheytingHomClass.{u1, u2, u3} F α β _inst_1 _inst_2] (f : F) (a : α) (b : α), Eq.{succ u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) (symmDiff.{u2} α (SemilatticeSup.toSup.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))) (GeneralizedCoheytingAlgebra.toSDiff.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) a b)) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f (symmDiff.{u2} α (SemilatticeSup.toSup.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))) (GeneralizedCoheytingAlgebra.toSDiff.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) a b)) (symmDiff.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (SemilatticeSup.toSup.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (Lattice.toSemilatticeSup.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (GeneralizedCoheytingAlgebra.toLattice.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) _inst_2)))) (GeneralizedCoheytingAlgebra.toSDiff.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) _inst_2)) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f a) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{u1, u2, u3} F α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u2, u3} F α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{u1, u2, u3} F α β _inst_1 _inst_2 _inst_3)))) f b))
Case conversion may be inaccurate. Consider using '#align map_symm_diff map_symmDiffₓ'. -/
@[simp]
theorem map_symmDiff (a b : α) : f (a ∆ b) = f a ∆ f b := by simp_rw [symmDiff, map_sup, map_sdiff]
#align map_symm_diff map_symmDiff

end CoheytingAlgebra

instance [HeytingAlgebra α] [HeytingAlgebra β] [HeytingHomClass F α β] : CoeTC F (HeytingHom α β) :=
  ⟨fun f =>
    { toFun := f
      map_sup' := map_sup f
      map_inf' := map_inf f
      map_bot' := map_bot f
      map_himp' := map_himp f }⟩

instance [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingHomClass F α β] :
    CoeTC F (CoheytingHom α β) :=
  ⟨fun f =>
    { toFun := f
      map_sup' := map_sup f
      map_inf' := map_inf f
      map_top' := map_top f
      map_sdiff' := map_sdiff f }⟩

instance [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingHomClass F α β] :
    CoeTC F (BiheytingHom α β) :=
  ⟨fun f =>
    { toFun := f
      map_sup' := map_sup f
      map_inf' := map_inf f
      map_himp' := map_himp f
      map_sdiff' := map_sdiff f }⟩

namespace HeytingHom

variable [HeytingAlgebra α] [HeytingAlgebra β] [HeytingAlgebra γ] [HeytingAlgebra δ]

instance : HeytingHomClass (HeytingHom α β) α β
    where
  coe f := f.toFun
  coe_injective' f g h := by obtain ⟨⟨⟨_, _⟩, _⟩, _⟩ := f <;> obtain ⟨⟨⟨_, _⟩, _⟩, _⟩ := g <;> congr
  map_sup f := f.map_sup'
  map_inf f := f.map_inf'
  map_bot f := f.map_bot'
  map_himp := HeytingHom.map_himp'

/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`
directly. -/
instance : CoeFun (HeytingHom α β) fun _ => α → β :=
  FunLike.hasCoeToFun

/- warning: heyting_hom.to_fun_eq_coe -> HeytingHom.toFun_eq_coe is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] {f : HeytingHom.{u1, u2} α β _inst_1 _inst_2}, Eq.{max (succ u1) (succ u2)} (α -> β) (SupHom.toFun.{u1, u2} α β (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))) (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2)))) (LatticeHom.toSupHom.{u1, u2} α β (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2)) (HeytingHom.toLatticeHom.{u1, u2} α β _inst_1 _inst_2 f))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : HeytingAlgebra.{u2} α] [_inst_2 : HeytingAlgebra.{u1} β] {f : HeytingHom.{u2, u1} α β _inst_1 _inst_2}, Eq.{max (succ u2) (succ u1)} (α -> β) (SupHom.toFun.{u2, u1} α β (SemilatticeSup.toSup.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))) (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))) (LatticeHom.toSupHom.{u2, u1} α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)) (HeytingHom.toLatticeHom.{u2, u1} α β _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u2, u1} α β _inst_1 _inst_2))))) f)
Case conversion may be inaccurate. Consider using '#align heyting_hom.to_fun_eq_coe HeytingHom.toFun_eq_coeₓ'. -/
@[simp]
theorem toFun_eq_coe {f : HeytingHom α β} : f.toFun = (f : α → β) :=
  rfl
#align heyting_hom.to_fun_eq_coe HeytingHom.toFun_eq_coe

/- warning: heyting_hom.ext -> HeytingHom.ext is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] {f : HeytingHom.{u1, u2} α β _inst_1 _inst_2} {g : HeytingHom.{u1, u2} α β _inst_1 _inst_2}, (forall (a : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f a) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g a)) -> (Eq.{max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) f g)
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : HeytingAlgebra.{u2} α] [_inst_2 : HeytingAlgebra.{u1} β] {f : HeytingHom.{u2, u1} α β _inst_1 _inst_2} {g : HeytingHom.{u2, u1} α β _inst_1 _inst_2}, (forall (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u2, u1} α β _inst_1 _inst_2))))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u2, u1} α β _inst_1 _inst_2))))) g a)) -> (Eq.{max (succ u2) (succ u1)} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) f g)
Case conversion may be inaccurate. Consider using '#align heyting_hom.ext HeytingHom.extₓ'. -/
@[ext]
theorem ext {f g : HeytingHom α β} (h : ∀ a, f a = g a) : f = g :=
  FunLike.ext f g h
#align heyting_hom.ext HeytingHom.ext

/- warning: heyting_hom.copy -> HeytingHom.copy is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] (f : HeytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β), (Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)) -> (HeytingHom.{u1, u2} α β _inst_1 _inst_2)
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] (f : HeytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β), (Eq.{max (succ u1) (succ u2)} (α -> β) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} β (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} β (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2)))))) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u2} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u2} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u1, u2} α β _inst_1 _inst_2))))) f)) -> (HeytingHom.{u1, u2} α β _inst_1 _inst_2)
Case conversion may be inaccurate. Consider using '#align heyting_hom.copy HeytingHom.copyₓ'. -/
/-- Copy of a `heyting_hom` with a new `to_fun` equal to the old one. Useful to fix definitional
equalities. -/
protected def copy (f : HeytingHom α β) (f' : α → β) (h : f' = f) : HeytingHom α β
    where
  toFun := f'
  map_sup' := by simpa only [h] using map_sup f
  map_inf' := by simpa only [h] using map_inf f
  map_bot' := by simpa only [h] using map_bot f
  map_himp' := by simpa only [h] using map_himp f
#align heyting_hom.copy HeytingHom.copy

/- warning: heyting_hom.coe_copy -> HeytingHom.coe_copy is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] (f : HeytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)), Eq.{max (succ u1) (succ u2)} (α -> β) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) (HeytingHom.copy.{u1, u2} α β _inst_1 _inst_2 f f' h)) f'
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : HeytingAlgebra.{u2} α] [_inst_2 : HeytingAlgebra.{u1} β] (f : HeytingHom.{u2, u1} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u2) (succ u1)} (α -> β) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u2, u1} α β _inst_1 _inst_2))))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : α), (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u2, u1} α β _inst_1 _inst_2))))) (HeytingHom.copy.{u2, u1} α β _inst_1 _inst_2 f f' h)) f'
Case conversion may be inaccurate. Consider using '#align heyting_hom.coe_copy HeytingHom.coe_copyₓ'. -/
@[simp]
theorem coe_copy (f : HeytingHom α β) (f' : α → β) (h : f' = f) : ⇑(f.copy f' h) = f' :=
  rfl
#align heyting_hom.coe_copy HeytingHom.coe_copy

/- warning: heyting_hom.copy_eq -> HeytingHom.copy_eq is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] (f : HeytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)), Eq.{max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (HeytingHom.copy.{u1, u2} α β _inst_1 _inst_2 f f' h) f
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : HeytingAlgebra.{u2} α] [_inst_2 : HeytingAlgebra.{u1} β] (f : HeytingHom.{u2, u1} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u2) (succ u1)} (α -> β) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u2} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u1} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u2} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u1} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u2, u1} α β _inst_1 _inst_2))))) f)), Eq.{max (succ u2) (succ u1)} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) (HeytingHom.copy.{u2, u1} α β _inst_1 _inst_2 f f' h) f
Case conversion may be inaccurate. Consider using '#align heyting_hom.copy_eq HeytingHom.copy_eqₓ'. -/
theorem copy_eq (f : HeytingHom α β) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
  FunLike.ext' h
#align heyting_hom.copy_eq HeytingHom.copy_eq

variable (α)

#print HeytingHom.id /-
/-- `id` as a `heyting_hom`. -/
protected def id : HeytingHom α α :=
  { BotHom.id _ with
    toLatticeHom := LatticeHom.id _
    map_himp' := fun a b => rfl }
#align heyting_hom.id HeytingHom.id
-/

/- warning: heyting_hom.coe_id -> HeytingHom.coe_id is a dubious translation:
lean 3 declaration is
  forall (α : Type.{u1}) [_inst_1 : HeytingAlgebra.{u1} α], Eq.{succ u1} (α -> α) (coeFn.{succ u1, succ u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) (fun (_x : HeytingHom.{u1, u1} α α _inst_1 _inst_1) => α -> α) (HeytingHom.hasCoeToFun.{u1, u1} α α _inst_1 _inst_1) (HeytingHom.id.{u1} α _inst_1)) (id.{succ u1} α)
but is expected to have type
  forall (α : Type.{u1}) [_inst_1 : HeytingAlgebra.{u1} α], Eq.{succ u1} (forall (ᾰ : α), (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) _x) (InfHomClass.toFunLike.{u1, u1, u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (InfTopHomClass.toInfHomClass.{u1, u1, u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u1, u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1) (HeytingHomClass.toBoundedLatticeHomClass.{u1, u1, u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (HeytingHom.instHeytingHomClassHeytingHom.{u1, u1} α α _inst_1 _inst_1))))) (HeytingHom.id.{u1} α _inst_1)) (id.{succ u1} α)
Case conversion may be inaccurate. Consider using '#align heyting_hom.coe_id HeytingHom.coe_idₓ'. -/
@[simp]
theorem coe_id : ⇑(HeytingHom.id α) = id :=
  rfl
#align heyting_hom.coe_id HeytingHom.coe_id

variable {α}

/- warning: heyting_hom.id_apply -> HeytingHom.id_apply is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} [_inst_1 : HeytingAlgebra.{u1} α] (a : α), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) (fun (_x : HeytingHom.{u1, u1} α α _inst_1 _inst_1) => α -> α) (HeytingHom.hasCoeToFun.{u1, u1} α α _inst_1 _inst_1) (HeytingHom.id.{u1} α _inst_1) a) a
but is expected to have type
  forall {α : Type.{u1}} [_inst_1 : HeytingAlgebra.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) _x) (InfHomClass.toFunLike.{u1, u1, u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (InfTopHomClass.toInfHomClass.{u1, u1, u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u1, u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1) (HeytingHomClass.toBoundedLatticeHomClass.{u1, u1, u1} (HeytingHom.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (HeytingHom.instHeytingHomClassHeytingHom.{u1, u1} α α _inst_1 _inst_1))))) (HeytingHom.id.{u1} α _inst_1) a) a
Case conversion may be inaccurate. Consider using '#align heyting_hom.id_apply HeytingHom.id_applyₓ'. -/
@[simp]
theorem id_apply (a : α) : HeytingHom.id α a = a :=
  rfl
#align heyting_hom.id_apply HeytingHom.id_apply

instance : Inhabited (HeytingHom α α) :=
  ⟨HeytingHom.id _⟩

instance : PartialOrder (HeytingHom α β) :=
  PartialOrder.lift _ FunLike.coe_injective

#print HeytingHom.comp /-
/-- Composition of `heyting_hom`s as a `heyting_hom`. -/
def comp (f : HeytingHom β γ) (g : HeytingHom α β) : HeytingHom α γ :=
  { f.toLatticeHom.comp g.toLatticeHom with
    toFun := f ∘ g
    map_bot' := by simp
    map_himp' := fun a b => by simp }
#align heyting_hom.comp HeytingHom.comp
-/

variable {f f₁ f₂ : HeytingHom α β} {g g₁ g₂ : HeytingHom β γ}

/- warning: heyting_hom.coe_comp -> HeytingHom.coe_comp is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] [_inst_3 : HeytingAlgebra.{u3} γ] (f : HeytingHom.{u2, u3} β γ _inst_2 _inst_3) (g : HeytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (α -> γ) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (HeytingHom.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : HeytingHom.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (HeytingHom.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (HeytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f g)) (Function.comp.{succ u1, succ u2, succ u3} α β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (HeytingHom.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : HeytingHom.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (HeytingHom.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u3} β] [_inst_3 : HeytingAlgebra.{u2} γ] (f : HeytingHom.{u3, u2} β γ _inst_2 _inst_3) (g : HeytingHom.{u1, u3} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) _x) (InfHomClass.toFunLike.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (HeytingHomClass.toBoundedLatticeHomClass.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (HeytingHom.instHeytingHomClassHeytingHom.{u1, u2} α γ _inst_1 _inst_3))))) (HeytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 f g)) (Function.comp.{succ u1, succ u3, succ u2} α β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => γ) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (HeytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (HeytingHom.instHeytingHomClassHeytingHom.{u3, u2} β γ _inst_2 _inst_3))))) f) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u1 u3, u1, u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u1 u3, u1, u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u3, u1, u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u1 u3, u1, u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u1, u3} α β _inst_1 _inst_2))))) g))
Case conversion may be inaccurate. Consider using '#align heyting_hom.coe_comp HeytingHom.coe_compₓ'. -/
@[simp]
theorem coe_comp (f : HeytingHom β γ) (g : HeytingHom α β) : ⇑(f.comp g) = f ∘ g :=
  rfl
#align heyting_hom.coe_comp HeytingHom.coe_comp

/- warning: heyting_hom.comp_apply -> HeytingHom.comp_apply is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] [_inst_3 : HeytingAlgebra.{u3} γ] (f : HeytingHom.{u2, u3} β γ _inst_2 _inst_3) (g : HeytingHom.{u1, u2} α β _inst_1 _inst_2) (a : α), Eq.{succ u3} γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (HeytingHom.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : HeytingHom.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (HeytingHom.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (HeytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f g) a) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (HeytingHom.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : HeytingHom.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (HeytingHom.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g a))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u3} β] [_inst_3 : HeytingAlgebra.{u2} γ] (f : HeytingHom.{u3, u2} β γ _inst_2 _inst_3) (g : HeytingHom.{u1, u3} α β _inst_1 _inst_2) (a : α), Eq.{succ u2} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) _x) (InfHomClass.toFunLike.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (HeytingHomClass.toBoundedLatticeHomClass.{max u1 u2, u1, u2} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (HeytingHom.instHeytingHomClassHeytingHom.{u1, u2} α γ _inst_1 _inst_3))))) (HeytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 f g) a) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => γ) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (HeytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (HeytingHom.instHeytingHomClassHeytingHom.{u3, u2} β γ _inst_2 _inst_3))))) f (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u1 u3, u1, u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u1 u3, u1, u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u3, u1, u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u1} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u1} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u1} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u1 u3, u1, u3} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u1, u3} α β _inst_1 _inst_2))))) g a))
Case conversion may be inaccurate. Consider using '#align heyting_hom.comp_apply HeytingHom.comp_applyₓ'. -/
@[simp]
theorem comp_apply (f : HeytingHom β γ) (g : HeytingHom α β) (a : α) : f.comp g a = f (g a) :=
  rfl
#align heyting_hom.comp_apply HeytingHom.comp_apply

/- warning: heyting_hom.comp_assoc -> HeytingHom.comp_assoc is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] [_inst_3 : HeytingAlgebra.{u3} γ] [_inst_4 : HeytingAlgebra.{u4} δ] (f : HeytingHom.{u3, u4} γ δ _inst_3 _inst_4) (g : HeytingHom.{u2, u3} β γ _inst_2 _inst_3) (h : HeytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u4)} (HeytingHom.{u1, u4} α δ _inst_1 _inst_4) (HeytingHom.comp.{u1, u2, u4} α β δ _inst_1 _inst_2 _inst_4 (HeytingHom.comp.{u2, u3, u4} β γ δ _inst_2 _inst_3 _inst_4 f g) h) (HeytingHom.comp.{u1, u3, u4} α γ δ _inst_1 _inst_3 _inst_4 f (HeytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g h))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u4}} {δ : Type.{u3}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] [_inst_3 : HeytingAlgebra.{u4} γ] [_inst_4 : HeytingAlgebra.{u3} δ] (f : HeytingHom.{u4, u3} γ δ _inst_3 _inst_4) (g : HeytingHom.{u2, u4} β γ _inst_2 _inst_3) (h : HeytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (HeytingHom.{u1, u3} α δ _inst_1 _inst_4) (HeytingHom.comp.{u1, u2, u3} α β δ _inst_1 _inst_2 _inst_4 (HeytingHom.comp.{u2, u4, u3} β γ δ _inst_2 _inst_3 _inst_4 f g) h) (HeytingHom.comp.{u1, u4, u3} α γ δ _inst_1 _inst_3 _inst_4 f (HeytingHom.comp.{u1, u2, u4} α β γ _inst_1 _inst_2 _inst_3 g h))
Case conversion may be inaccurate. Consider using '#align heyting_hom.comp_assoc HeytingHom.comp_assocₓ'. -/
@[simp]
theorem comp_assoc (f : HeytingHom γ δ) (g : HeytingHom β γ) (h : HeytingHom α β) :
    (f.comp g).comp h = f.comp (g.comp h) :=
  rfl
#align heyting_hom.comp_assoc HeytingHom.comp_assoc

/- warning: heyting_hom.comp_id -> HeytingHom.comp_id is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] (f : HeytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (HeytingHom.comp.{u1, u1, u2} α α β _inst_1 _inst_1 _inst_2 f (HeytingHom.id.{u1} α _inst_1)) f
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : HeytingAlgebra.{u2} α] [_inst_2 : HeytingAlgebra.{u1} β] (f : HeytingHom.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) (HeytingHom.comp.{u2, u2, u1} α α β _inst_1 _inst_1 _inst_2 f (HeytingHom.id.{u2} α _inst_1)) f
Case conversion may be inaccurate. Consider using '#align heyting_hom.comp_id HeytingHom.comp_idₓ'. -/
@[simp]
theorem comp_id (f : HeytingHom α β) : f.comp (HeytingHom.id α) = f :=
  ext fun a => rfl
#align heyting_hom.comp_id HeytingHom.comp_id

/- warning: heyting_hom.id_comp -> HeytingHom.id_comp is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] (f : HeytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (HeytingHom.comp.{u1, u2, u2} α β β _inst_1 _inst_2 _inst_2 (HeytingHom.id.{u2} β _inst_2) f) f
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : HeytingAlgebra.{u2} α] [_inst_2 : HeytingAlgebra.{u1} β] (f : HeytingHom.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (HeytingHom.{u2, u1} α β _inst_1 _inst_2) (HeytingHom.comp.{u2, u1, u1} α β β _inst_1 _inst_2 _inst_2 (HeytingHom.id.{u1} β _inst_2) f) f
Case conversion may be inaccurate. Consider using '#align heyting_hom.id_comp HeytingHom.id_compₓ'. -/
@[simp]
theorem id_comp (f : HeytingHom α β) : (HeytingHom.id β).comp f = f :=
  ext fun a => rfl
#align heyting_hom.id_comp HeytingHom.id_comp

/- warning: heyting_hom.cancel_right -> HeytingHom.cancel_right is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] [_inst_3 : HeytingAlgebra.{u3} γ] {f : HeytingHom.{u1, u2} α β _inst_1 _inst_2} {g₁ : HeytingHom.{u2, u3} β γ _inst_2 _inst_3} {g₂ : HeytingHom.{u2, u3} β γ _inst_2 _inst_3}, (Function.Surjective.{succ u1, succ u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : HeytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (HeytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u1) (succ u3)} (HeytingHom.{u1, u3} α γ _inst_1 _inst_3) (HeytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g₁ f) (HeytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u3)} (HeytingHom.{u2, u3} β γ _inst_2 _inst_3) g₁ g₂))
but is expected to have type
  forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : HeytingAlgebra.{u3} α] [_inst_2 : HeytingAlgebra.{u2} β] [_inst_3 : HeytingAlgebra.{u1} γ] {f : HeytingHom.{u3, u2} α β _inst_1 _inst_2} {g₁ : HeytingHom.{u2, u1} β γ _inst_2 _inst_3} {g₂ : HeytingHom.{u2, u1} β γ _inst_2 _inst_3}, (Function.Surjective.{succ u3, succ u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (HeytingHom.{u3, u2} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u3} α (GeneralizedHeytingAlgebra.toLattice.{u3} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} α _inst_1))) (Lattice.toInf.{u2} β (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u3} α (GeneralizedHeytingAlgebra.toLattice.{u3} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} α _inst_1))) (Lattice.toInf.{u2} β (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2))) (OrderTop.toTop.{u3} α (Preorder.toLE.{u3} α (PartialOrder.toPreorder.{u3} α (SemilatticeInf.toPartialOrder.{u3} α (Lattice.toSemilatticeInf.{u3} α (GeneralizedHeytingAlgebra.toLattice.{u3} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} α _inst_1)))))) (BoundedOrder.toOrderTop.{u3} α (Preorder.toLE.{u3} α (PartialOrder.toPreorder.{u3} α (SemilatticeInf.toPartialOrder.{u3} α (Lattice.toSemilatticeInf.{u3} α (GeneralizedHeytingAlgebra.toLattice.{u3} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} α _inst_1)))))) (HeytingAlgebra.toBoundedOrder.{u3} α _inst_1))) (OrderTop.toTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2)))))) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u2} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} α β _inst_1 _inst_2) α β (GeneralizedHeytingAlgebra.toLattice.{u3} α (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} α _inst_1)) (GeneralizedHeytingAlgebra.toLattice.{u2} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} β _inst_2)) (HeytingAlgebra.toBoundedOrder.{u3} α _inst_1) (HeytingAlgebra.toBoundedOrder.{u2} β _inst_2) (HeytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (HeytingHom.instHeytingHomClassHeytingHom.{u3, u2} α β _inst_1 _inst_2))))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (HeytingHom.{u3, u1} α γ _inst_1 _inst_3) (HeytingHom.comp.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 g₁ f) (HeytingHom.comp.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (HeytingHom.{u2, u1} β γ _inst_2 _inst_3) g₁ g₂))
Case conversion may be inaccurate. Consider using '#align heyting_hom.cancel_right HeytingHom.cancel_rightₓ'. -/
theorem cancel_right (hf : Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
  ⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, congr_arg _⟩
#align heyting_hom.cancel_right HeytingHom.cancel_right

/- warning: heyting_hom.cancel_left -> HeytingHom.cancel_left is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u2} β] [_inst_3 : HeytingAlgebra.{u3} γ] {f₁ : HeytingHom.{u1, u2} α β _inst_1 _inst_2} {f₂ : HeytingHom.{u1, u2} α β _inst_1 _inst_2} {g : HeytingHom.{u2, u3} β γ _inst_2 _inst_3}, (Function.Injective.{succ u2, succ u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (HeytingHom.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : HeytingHom.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (HeytingHom.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u1) (succ u3)} (HeytingHom.{u1, u3} α γ _inst_1 _inst_3) (HeytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g f₁) (HeytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α β _inst_1 _inst_2) f₁ f₂))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : HeytingAlgebra.{u1} α] [_inst_2 : HeytingAlgebra.{u3} β] [_inst_3 : HeytingAlgebra.{u2} γ] {f₁ : HeytingHom.{u1, u3} α β _inst_1 _inst_2} {f₂ : HeytingHom.{u1, u3} α β _inst_1 _inst_2} {g : HeytingHom.{u3, u2} β γ _inst_2 _inst_3}, (Function.Injective.{succ u3, succ u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => γ) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)))))) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)))))) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (GeneralizedHeytingAlgebra.toLattice.{u3} β (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u3} β _inst_2)) (GeneralizedHeytingAlgebra.toLattice.{u2} γ (HeytingAlgebra.toGeneralizedHeytingAlgebra.{u2} γ _inst_3)) (HeytingAlgebra.toBoundedOrder.{u3} β _inst_2) (HeytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (HeytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (HeytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (HeytingHom.instHeytingHomClassHeytingHom.{u3, u2} β γ _inst_2 _inst_3))))) g)) -> (Iff (Eq.{max (succ u1) (succ u2)} (HeytingHom.{u1, u2} α γ _inst_1 _inst_3) (HeytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g f₁) (HeytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u1) (succ u3)} (HeytingHom.{u1, u3} α β _inst_1 _inst_2) f₁ f₂))
Case conversion may be inaccurate. Consider using '#align heyting_hom.cancel_left HeytingHom.cancel_leftₓ'. -/
theorem cancel_left (hg : Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
  ⟨fun h => HeytingHom.ext fun a => hg <| by rw [← comp_apply, h, comp_apply], congr_arg _⟩
#align heyting_hom.cancel_left HeytingHom.cancel_left

end HeytingHom

namespace CoheytingHom

variable [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingAlgebra γ] [CoheytingAlgebra δ]

instance : CoheytingHomClass (CoheytingHom α β) α β
    where
  coe f := f.toFun
  coe_injective' f g h := by obtain ⟨⟨⟨_, _⟩, _⟩, _⟩ := f <;> obtain ⟨⟨⟨_, _⟩, _⟩, _⟩ := g <;> congr
  map_sup f := f.map_sup'
  map_inf f := f.map_inf'
  map_top f := f.map_top'
  map_sdiff := CoheytingHom.map_sdiff'

/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`
directly. -/
instance : CoeFun (CoheytingHom α β) fun _ => α → β :=
  FunLike.hasCoeToFun

/- warning: coheyting_hom.to_fun_eq_coe -> CoheytingHom.toFun_eq_coe is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] {f : CoheytingHom.{u1, u2} α β _inst_1 _inst_2}, Eq.{max (succ u1) (succ u2)} (α -> β) (SupHom.toFun.{u1, u2} α β (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))) (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2)))) (LatticeHom.toSupHom.{u1, u2} α β (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2)) (CoheytingHom.toLatticeHom.{u1, u2} α β _inst_1 _inst_2 f))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u1} β] {f : CoheytingHom.{u2, u1} α β _inst_1 _inst_2}, Eq.{max (succ u2) (succ u1)} (α -> β) (SupHom.toFun.{u2, u1} α β (SemilatticeSup.toSup.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))) (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))) (LatticeHom.toSupHom.{u2, u1} α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)) (CoheytingHom.toLatticeHom.{u2, u1} α β _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u2, u1} α β _inst_1 _inst_2))))) f)
Case conversion may be inaccurate. Consider using '#align coheyting_hom.to_fun_eq_coe CoheytingHom.toFun_eq_coeₓ'. -/
@[simp]
theorem toFun_eq_coe {f : CoheytingHom α β} : f.toFun = (f : α → β) :=
  rfl
#align coheyting_hom.to_fun_eq_coe CoheytingHom.toFun_eq_coe

/- warning: coheyting_hom.ext -> CoheytingHom.ext is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] {f : CoheytingHom.{u1, u2} α β _inst_1 _inst_2} {g : CoheytingHom.{u1, u2} α β _inst_1 _inst_2}, (forall (a : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f a) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g a)) -> (Eq.{max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) f g)
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u1} β] {f : CoheytingHom.{u2, u1} α β _inst_1 _inst_2} {g : CoheytingHom.{u2, u1} α β _inst_1 _inst_2}, (forall (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u2, u1} α β _inst_1 _inst_2))))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u2, u1} α β _inst_1 _inst_2))))) g a)) -> (Eq.{max (succ u2) (succ u1)} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) f g)
Case conversion may be inaccurate. Consider using '#align coheyting_hom.ext CoheytingHom.extₓ'. -/
@[ext]
theorem ext {f g : CoheytingHom α β} (h : ∀ a, f a = g a) : f = g :=
  FunLike.ext f g h
#align coheyting_hom.ext CoheytingHom.ext

/- warning: coheyting_hom.copy -> CoheytingHom.copy is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] (f : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β), (Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)) -> (CoheytingHom.{u1, u2} α β _inst_1 _inst_2)
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] (f : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β), (Eq.{max (succ u1) (succ u2)} (α -> β) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2)))))) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u2} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u2} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u1, u2} α β _inst_1 _inst_2))))) f)) -> (CoheytingHom.{u1, u2} α β _inst_1 _inst_2)
Case conversion may be inaccurate. Consider using '#align coheyting_hom.copy CoheytingHom.copyₓ'. -/
/-- Copy of a `coheyting_hom` with a new `to_fun` equal to the old one. Useful to fix definitional
equalities. -/
protected def copy (f : CoheytingHom α β) (f' : α → β) (h : f' = f) : CoheytingHom α β
    where
  toFun := f'
  map_sup' := by simpa only [h] using map_sup f
  map_inf' := by simpa only [h] using map_inf f
  map_top' := by simpa only [h] using map_top f
  map_sdiff' := by simpa only [h] using map_sdiff f
#align coheyting_hom.copy CoheytingHom.copy

/- warning: coheyting_hom.coe_copy -> CoheytingHom.coe_copy is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] (f : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)), Eq.{max (succ u1) (succ u2)} (α -> β) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) (CoheytingHom.copy.{u1, u2} α β _inst_1 _inst_2 f f' h)) f'
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u1} β] (f : CoheytingHom.{u2, u1} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u2) (succ u1)} (α -> β) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u2, u1} α β _inst_1 _inst_2))))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : α), (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u2, u1} α β _inst_1 _inst_2))))) (CoheytingHom.copy.{u2, u1} α β _inst_1 _inst_2 f f' h)) f'
Case conversion may be inaccurate. Consider using '#align coheyting_hom.coe_copy CoheytingHom.coe_copyₓ'. -/
@[simp]
theorem coe_copy (f : CoheytingHom α β) (f' : α → β) (h : f' = f) : ⇑(f.copy f' h) = f' :=
  rfl
#align coheyting_hom.coe_copy CoheytingHom.coe_copy

/- warning: coheyting_hom.copy_eq -> CoheytingHom.copy_eq is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] (f : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)), Eq.{max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (CoheytingHom.copy.{u1, u2} α β _inst_1 _inst_2 f f' h) f
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u1} β] (f : CoheytingHom.{u2, u1} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u2) (succ u1)} (α -> β) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u1} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u2, u1} α β _inst_1 _inst_2))))) f)), Eq.{max (succ u2) (succ u1)} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) (CoheytingHom.copy.{u2, u1} α β _inst_1 _inst_2 f f' h) f
Case conversion may be inaccurate. Consider using '#align coheyting_hom.copy_eq CoheytingHom.copy_eqₓ'. -/
theorem copy_eq (f : CoheytingHom α β) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
  FunLike.ext' h
#align coheyting_hom.copy_eq CoheytingHom.copy_eq

variable (α)

#print CoheytingHom.id /-
/-- `id` as a `coheyting_hom`. -/
protected def id : CoheytingHom α α :=
  { TopHom.id _ with
    toLatticeHom := LatticeHom.id _
    map_sdiff' := fun a b => rfl }
#align coheyting_hom.id CoheytingHom.id
-/

/- warning: coheyting_hom.coe_id -> CoheytingHom.coe_id is a dubious translation:
lean 3 declaration is
  forall (α : Type.{u1}) [_inst_1 : CoheytingAlgebra.{u1} α], Eq.{succ u1} (α -> α) (coeFn.{succ u1, succ u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) (fun (_x : CoheytingHom.{u1, u1} α α _inst_1 _inst_1) => α -> α) (CoheytingHom.hasCoeToFun.{u1, u1} α α _inst_1 _inst_1) (CoheytingHom.id.{u1} α _inst_1)) (id.{succ u1} α)
but is expected to have type
  forall (α : Type.{u1}) [_inst_1 : CoheytingAlgebra.{u1} α], Eq.{succ u1} (forall (ᾰ : α), (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) _x) (InfHomClass.toFunLike.{u1, u1, u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (InfTopHomClass.toInfHomClass.{u1, u1, u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u1, u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1) (CoheytingHomClass.toBoundedLatticeHomClass.{u1, u1, u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u1, u1} α α _inst_1 _inst_1))))) (CoheytingHom.id.{u1} α _inst_1)) (id.{succ u1} α)
Case conversion may be inaccurate. Consider using '#align coheyting_hom.coe_id CoheytingHom.coe_idₓ'. -/
@[simp]
theorem coe_id : ⇑(CoheytingHom.id α) = id :=
  rfl
#align coheyting_hom.coe_id CoheytingHom.coe_id

variable {α}

/- warning: coheyting_hom.id_apply -> CoheytingHom.id_apply is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} [_inst_1 : CoheytingAlgebra.{u1} α] (a : α), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) (fun (_x : CoheytingHom.{u1, u1} α α _inst_1 _inst_1) => α -> α) (CoheytingHom.hasCoeToFun.{u1, u1} α α _inst_1 _inst_1) (CoheytingHom.id.{u1} α _inst_1) a) a
but is expected to have type
  forall {α : Type.{u1}} [_inst_1 : CoheytingAlgebra.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) _x) (InfHomClass.toFunLike.{u1, u1, u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (InfTopHomClass.toInfHomClass.{u1, u1, u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u1, u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1) (CoheytingHomClass.toBoundedLatticeHomClass.{u1, u1, u1} (CoheytingHom.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u1, u1} α α _inst_1 _inst_1))))) (CoheytingHom.id.{u1} α _inst_1) a) a
Case conversion may be inaccurate. Consider using '#align coheyting_hom.id_apply CoheytingHom.id_applyₓ'. -/
@[simp]
theorem id_apply (a : α) : CoheytingHom.id α a = a :=
  rfl
#align coheyting_hom.id_apply CoheytingHom.id_apply

instance : Inhabited (CoheytingHom α α) :=
  ⟨CoheytingHom.id _⟩

instance : PartialOrder (CoheytingHom α β) :=
  PartialOrder.lift _ FunLike.coe_injective

#print CoheytingHom.comp /-
/-- Composition of `coheyting_hom`s as a `coheyting_hom`. -/
def comp (f : CoheytingHom β γ) (g : CoheytingHom α β) : CoheytingHom α γ :=
  { f.toLatticeHom.comp g.toLatticeHom with
    toFun := f ∘ g
    map_top' := by simp
    map_sdiff' := fun a b => by simp }
#align coheyting_hom.comp CoheytingHom.comp
-/

variable {f f₁ f₂ : CoheytingHom α β} {g g₁ g₂ : CoheytingHom β γ}

/- warning: coheyting_hom.coe_comp -> CoheytingHom.coe_comp is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] [_inst_3 : CoheytingAlgebra.{u3} γ] (f : CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) (g : CoheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (α -> γ) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (CoheytingHom.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : CoheytingHom.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (CoheytingHom.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (CoheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f g)) (Function.comp.{succ u1, succ u2, succ u3} α β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (CoheytingHom.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u3} β] [_inst_3 : CoheytingAlgebra.{u2} γ] (f : CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) (g : CoheytingHom.{u1, u3} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) _x) (InfHomClass.toFunLike.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u1, u2} α γ _inst_1 _inst_3))))) (CoheytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 f g)) (Function.comp.{succ u1, succ u3, succ u2} α β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => γ) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (CoheytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u3, u2} β γ _inst_2 _inst_3))))) f) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u1 u3, u1, u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u1 u3, u1, u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u3, u1, u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u3, u1, u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u1, u3} α β _inst_1 _inst_2))))) g))
Case conversion may be inaccurate. Consider using '#align coheyting_hom.coe_comp CoheytingHom.coe_compₓ'. -/
@[simp]
theorem coe_comp (f : CoheytingHom β γ) (g : CoheytingHom α β) : ⇑(f.comp g) = f ∘ g :=
  rfl
#align coheyting_hom.coe_comp CoheytingHom.coe_comp

/- warning: coheyting_hom.comp_apply -> CoheytingHom.comp_apply is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] [_inst_3 : CoheytingAlgebra.{u3} γ] (f : CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) (g : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (a : α), Eq.{succ u3} γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (CoheytingHom.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : CoheytingHom.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (CoheytingHom.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (CoheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f g) a) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (CoheytingHom.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g a))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u3} β] [_inst_3 : CoheytingAlgebra.{u2} γ] (f : CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) (g : CoheytingHom.{u1, u3} α β _inst_1 _inst_2) (a : α), Eq.{succ u2} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) _x) (InfHomClass.toFunLike.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u2, u1, u2} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u1, u2} α γ _inst_1 _inst_3))))) (CoheytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 f g) a) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => γ) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (CoheytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u3, u2} β γ _inst_2 _inst_3))))) f (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u1 u3, u1, u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u1 u3, u1, u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u3, u1, u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u1} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u3, u1, u3} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u1, u3} α β _inst_1 _inst_2))))) g a))
Case conversion may be inaccurate. Consider using '#align coheyting_hom.comp_apply CoheytingHom.comp_applyₓ'. -/
@[simp]
theorem comp_apply (f : CoheytingHom β γ) (g : CoheytingHom α β) (a : α) : f.comp g a = f (g a) :=
  rfl
#align coheyting_hom.comp_apply CoheytingHom.comp_apply

/- warning: coheyting_hom.comp_assoc -> CoheytingHom.comp_assoc is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] [_inst_3 : CoheytingAlgebra.{u3} γ] [_inst_4 : CoheytingAlgebra.{u4} δ] (f : CoheytingHom.{u3, u4} γ δ _inst_3 _inst_4) (g : CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) (h : CoheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u4)} (CoheytingHom.{u1, u4} α δ _inst_1 _inst_4) (CoheytingHom.comp.{u1, u2, u4} α β δ _inst_1 _inst_2 _inst_4 (CoheytingHom.comp.{u2, u3, u4} β γ δ _inst_2 _inst_3 _inst_4 f g) h) (CoheytingHom.comp.{u1, u3, u4} α γ δ _inst_1 _inst_3 _inst_4 f (CoheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g h))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u4}} {δ : Type.{u3}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] [_inst_3 : CoheytingAlgebra.{u4} γ] [_inst_4 : CoheytingAlgebra.{u3} δ] (f : CoheytingHom.{u4, u3} γ δ _inst_3 _inst_4) (g : CoheytingHom.{u2, u4} β γ _inst_2 _inst_3) (h : CoheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (CoheytingHom.{u1, u3} α δ _inst_1 _inst_4) (CoheytingHom.comp.{u1, u2, u3} α β δ _inst_1 _inst_2 _inst_4 (CoheytingHom.comp.{u2, u4, u3} β γ δ _inst_2 _inst_3 _inst_4 f g) h) (CoheytingHom.comp.{u1, u4, u3} α γ δ _inst_1 _inst_3 _inst_4 f (CoheytingHom.comp.{u1, u2, u4} α β γ _inst_1 _inst_2 _inst_3 g h))
Case conversion may be inaccurate. Consider using '#align coheyting_hom.comp_assoc CoheytingHom.comp_assocₓ'. -/
@[simp]
theorem comp_assoc (f : CoheytingHom γ δ) (g : CoheytingHom β γ) (h : CoheytingHom α β) :
    (f.comp g).comp h = f.comp (g.comp h) :=
  rfl
#align coheyting_hom.comp_assoc CoheytingHom.comp_assoc

/- warning: coheyting_hom.comp_id -> CoheytingHom.comp_id is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] (f : CoheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (CoheytingHom.comp.{u1, u1, u2} α α β _inst_1 _inst_1 _inst_2 f (CoheytingHom.id.{u1} α _inst_1)) f
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u1} β] (f : CoheytingHom.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) (CoheytingHom.comp.{u2, u2, u1} α α β _inst_1 _inst_1 _inst_2 f (CoheytingHom.id.{u2} α _inst_1)) f
Case conversion may be inaccurate. Consider using '#align coheyting_hom.comp_id CoheytingHom.comp_idₓ'. -/
@[simp]
theorem comp_id (f : CoheytingHom α β) : f.comp (CoheytingHom.id α) = f :=
  ext fun a => rfl
#align coheyting_hom.comp_id CoheytingHom.comp_id

/- warning: coheyting_hom.id_comp -> CoheytingHom.id_comp is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] (f : CoheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (CoheytingHom.comp.{u1, u2, u2} α β β _inst_1 _inst_2 _inst_2 (CoheytingHom.id.{u2} β _inst_2) f) f
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : CoheytingAlgebra.{u2} α] [_inst_2 : CoheytingAlgebra.{u1} β] (f : CoheytingHom.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (CoheytingHom.{u2, u1} α β _inst_1 _inst_2) (CoheytingHom.comp.{u2, u1, u1} α β β _inst_1 _inst_2 _inst_2 (CoheytingHom.id.{u1} β _inst_2) f) f
Case conversion may be inaccurate. Consider using '#align coheyting_hom.id_comp CoheytingHom.id_compₓ'. -/
@[simp]
theorem id_comp (f : CoheytingHom α β) : (CoheytingHom.id β).comp f = f :=
  ext fun a => rfl
#align coheyting_hom.id_comp CoheytingHom.id_comp

/- warning: coheyting_hom.cancel_right -> CoheytingHom.cancel_right is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] [_inst_3 : CoheytingAlgebra.{u3} γ] {f : CoheytingHom.{u1, u2} α β _inst_1 _inst_2} {g₁ : CoheytingHom.{u2, u3} β γ _inst_2 _inst_3} {g₂ : CoheytingHom.{u2, u3} β γ _inst_2 _inst_3}, (Function.Surjective.{succ u1, succ u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : CoheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (CoheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u1) (succ u3)} (CoheytingHom.{u1, u3} α γ _inst_1 _inst_3) (CoheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g₁ f) (CoheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u3)} (CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) g₁ g₂))
but is expected to have type
  forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : CoheytingAlgebra.{u3} α] [_inst_2 : CoheytingAlgebra.{u2} β] [_inst_3 : CoheytingAlgebra.{u1} γ] {f : CoheytingHom.{u3, u2} α β _inst_1 _inst_2} {g₁ : CoheytingHom.{u2, u1} β γ _inst_2 _inst_3} {g₂ : CoheytingHom.{u2, u1} β γ _inst_2 _inst_3}, (Function.Surjective.{succ u3, succ u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (CoheytingHom.{u3, u2} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u3} α (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α _inst_1))) (Lattice.toInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u3} α (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α _inst_1))) (Lattice.toInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2))) (OrderTop.toTop.{u3} α (Preorder.toLE.{u3} α (PartialOrder.toPreorder.{u3} α (SemilatticeInf.toPartialOrder.{u3} α (Lattice.toSemilatticeInf.{u3} α (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α _inst_1)))))) (BoundedOrder.toOrderTop.{u3} α (Preorder.toLE.{u3} α (PartialOrder.toPreorder.{u3} α (SemilatticeInf.toPartialOrder.{u3} α (Lattice.toSemilatticeInf.{u3} α (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α _inst_1)))))) (CoheytingAlgebra.toBoundedOrder.{u3} α _inst_1))) (OrderTop.toTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2)))))) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u2} β _inst_2))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α _inst_1)) (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u3} α _inst_1) (CoheytingAlgebra.toBoundedOrder.{u2} β _inst_2) (CoheytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u3, u2} α β _inst_1 _inst_2))))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (CoheytingHom.{u3, u1} α γ _inst_1 _inst_3) (CoheytingHom.comp.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 g₁ f) (CoheytingHom.comp.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (CoheytingHom.{u2, u1} β γ _inst_2 _inst_3) g₁ g₂))
Case conversion may be inaccurate. Consider using '#align coheyting_hom.cancel_right CoheytingHom.cancel_rightₓ'. -/
theorem cancel_right (hf : Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
  ⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, congr_arg _⟩
#align coheyting_hom.cancel_right CoheytingHom.cancel_right

/- warning: coheyting_hom.cancel_left -> CoheytingHom.cancel_left is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u2} β] [_inst_3 : CoheytingAlgebra.{u3} γ] {f₁ : CoheytingHom.{u1, u2} α β _inst_1 _inst_2} {f₂ : CoheytingHom.{u1, u2} α β _inst_1 _inst_2} {g : CoheytingHom.{u2, u3} β γ _inst_2 _inst_3}, (Function.Injective.{succ u2, succ u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : CoheytingHom.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (CoheytingHom.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u1) (succ u3)} (CoheytingHom.{u1, u3} α γ _inst_1 _inst_3) (CoheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g f₁) (CoheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α β _inst_1 _inst_2) f₁ f₂))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : CoheytingAlgebra.{u1} α] [_inst_2 : CoheytingAlgebra.{u3} β] [_inst_3 : CoheytingAlgebra.{u2} γ] {f₁ : CoheytingHom.{u1, u3} α β _inst_1 _inst_2} {f₂ : CoheytingHom.{u1, u3} α β _inst_1 _inst_2} {g : CoheytingHom.{u3, u2} β γ _inst_2 _inst_3}, (Function.Injective.{succ u3, succ u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => γ) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)))))) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β _inst_2)) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingAlgebra.toBoundedOrder.{u3} β _inst_2) (CoheytingAlgebra.toBoundedOrder.{u2} γ _inst_3) (CoheytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (CoheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (CoheytingHom.instCoheytingHomClassCoheytingHom.{u3, u2} β γ _inst_2 _inst_3))))) g)) -> (Iff (Eq.{max (succ u1) (succ u2)} (CoheytingHom.{u1, u2} α γ _inst_1 _inst_3) (CoheytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g f₁) (CoheytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u1) (succ u3)} (CoheytingHom.{u1, u3} α β _inst_1 _inst_2) f₁ f₂))
Case conversion may be inaccurate. Consider using '#align coheyting_hom.cancel_left CoheytingHom.cancel_leftₓ'. -/
theorem cancel_left (hg : Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
  ⟨fun h => CoheytingHom.ext fun a => hg <| by rw [← comp_apply, h, comp_apply], congr_arg _⟩
#align coheyting_hom.cancel_left CoheytingHom.cancel_left

end CoheytingHom

namespace BiheytingHom

variable [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingAlgebra γ] [BiheytingAlgebra δ]

instance : BiheytingHomClass (BiheytingHom α β) α β
    where
  coe f := f.toFun
  coe_injective' f g h := by obtain ⟨⟨⟨_, _⟩, _⟩, _⟩ := f <;> obtain ⟨⟨⟨_, _⟩, _⟩, _⟩ := g <;> congr
  map_sup f := f.map_sup'
  map_inf f := f.map_inf'
  map_himp f := f.map_himp'
  map_sdiff f := f.map_sdiff'

/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`
directly. -/
instance : CoeFun (BiheytingHom α β) fun _ => α → β :=
  FunLike.hasCoeToFun

/- warning: biheyting_hom.to_fun_eq_coe -> BiheytingHom.toFun_eq_coe is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] {f : BiheytingHom.{u1, u2} α β _inst_1 _inst_2}, Eq.{max (succ u1) (succ u2)} (α -> β) (SupHom.toFun.{u1, u2} α β (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))) (SemilatticeSup.toHasSup.{u2} β (Lattice.toSemilatticeSup.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2))))) (LatticeHom.toSupHom.{u1, u2} α β (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2))) (BiheytingHom.toLatticeHom.{u1, u2} α β _inst_1 _inst_2 f))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : BiheytingAlgebra.{u2} α] [_inst_2 : BiheytingAlgebra.{u1} β] {f : BiheytingHom.{u2, u1} α β _inst_1 _inst_2}, Eq.{max (succ u2) (succ u1)} (α -> β) (SupHom.toFun.{u2, u1} α β (SemilatticeSup.toSup.{u2} α (Lattice.toSemilatticeSup.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))) (SemilatticeSup.toSup.{u1} β (Lattice.toSemilatticeSup.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))) (LatticeHom.toSupHom.{u2, u1} α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))) (BiheytingHom.toLatticeHom.{u2, u1} α β _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u2, u1} α β _inst_1 _inst_2)))))) f)
Case conversion may be inaccurate. Consider using '#align biheyting_hom.to_fun_eq_coe BiheytingHom.toFun_eq_coeₓ'. -/
@[simp]
theorem toFun_eq_coe {f : BiheytingHom α β} : f.toFun = (f : α → β) :=
  rfl
#align biheyting_hom.to_fun_eq_coe BiheytingHom.toFun_eq_coe

/- warning: biheyting_hom.ext -> BiheytingHom.ext is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] {f : BiheytingHom.{u1, u2} α β _inst_1 _inst_2} {g : BiheytingHom.{u1, u2} α β _inst_1 _inst_2}, (forall (a : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f a) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g a)) -> (Eq.{max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) f g)
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : BiheytingAlgebra.{u2} α] [_inst_2 : BiheytingAlgebra.{u1} β] {f : BiheytingHom.{u2, u1} α β _inst_1 _inst_2} {g : BiheytingHom.{u2, u1} α β _inst_1 _inst_2}, (forall (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u2, u1} α β _inst_1 _inst_2)))))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u2, u1} α β _inst_1 _inst_2)))))) g a)) -> (Eq.{max (succ u2) (succ u1)} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) f g)
Case conversion may be inaccurate. Consider using '#align biheyting_hom.ext BiheytingHom.extₓ'. -/
@[ext]
theorem ext {f g : BiheytingHom α β} (h : ∀ a, f a = g a) : f = g :=
  FunLike.ext f g h
#align biheyting_hom.ext BiheytingHom.ext

/- warning: biheyting_hom.copy -> BiheytingHom.copy is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] (f : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β), (Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)) -> (BiheytingHom.{u1, u2} α β _inst_1 _inst_2)
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] (f : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β), (Eq.{max (succ u1) (succ u2)} (α -> β) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2)))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (OrderTop.toTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2))))))) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u1, u2} α β _inst_1 _inst_2)))))) f)) -> (BiheytingHom.{u1, u2} α β _inst_1 _inst_2)
Case conversion may be inaccurate. Consider using '#align biheyting_hom.copy BiheytingHom.copyₓ'. -/
/-- Copy of a `biheyting_hom` with a new `to_fun` equal to the old one. Useful to fix definitional
equalities. -/
protected def copy (f : BiheytingHom α β) (f' : α → β) (h : f' = f) : BiheytingHom α β
    where
  toFun := f'
  map_sup' := by simpa only [h] using map_sup f
  map_inf' := by simpa only [h] using map_inf f
  map_himp' := by simpa only [h] using map_himp f
  map_sdiff' := by simpa only [h] using map_sdiff f
#align biheyting_hom.copy BiheytingHom.copy

/- warning: biheyting_hom.coe_copy -> BiheytingHom.coe_copy is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] (f : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)), Eq.{max (succ u1) (succ u2)} (α -> β) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) (BiheytingHom.copy.{u1, u2} α β _inst_1 _inst_2 f f' h)) f'
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : BiheytingAlgebra.{u2} α] [_inst_2 : BiheytingAlgebra.{u1} β] (f : BiheytingHom.{u2, u1} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u2) (succ u1)} (α -> β) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u2, u1} α β _inst_1 _inst_2)))))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : α), (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u2, u1} α β _inst_1 _inst_2)))))) (BiheytingHom.copy.{u2, u1} α β _inst_1 _inst_2 f f' h)) f'
Case conversion may be inaccurate. Consider using '#align biheyting_hom.coe_copy BiheytingHom.coe_copyₓ'. -/
@[simp]
theorem coe_copy (f : BiheytingHom α β) (f' : α → β) (h : f' = f) : ⇑(f.copy f' h) = f' :=
  rfl
#align biheyting_hom.coe_copy BiheytingHom.coe_copy

/- warning: biheyting_hom.copy_eq -> BiheytingHom.copy_eq is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] (f : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)), Eq.{max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (BiheytingHom.copy.{u1, u2} α β _inst_1 _inst_2 f f' h) f
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : BiheytingAlgebra.{u2} α] [_inst_2 : BiheytingAlgebra.{u1} β] (f : BiheytingHom.{u2, u1} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u2) (succ u1)} (α -> β) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (Lattice.toInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (Lattice.toInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (OrderTop.toTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (BoundedOrder.toOrderTop.{u2} α (Preorder.toLE.{u2} α (PartialOrder.toPreorder.{u2} α (SemilatticeInf.toPartialOrder.{u2} α (Lattice.toSemilatticeInf.{u2} α (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)))) (OrderTop.toTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (BoundedOrder.toOrderTop.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (SemilatticeInf.toPartialOrder.{u1} β (Lattice.toSemilatticeInf.{u1} β (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u2} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u1} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u2} α (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} β (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u2} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u1} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u2 u1, u2, u1} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u2, u1} α β _inst_1 _inst_2)))))) f)), Eq.{max (succ u2) (succ u1)} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) (BiheytingHom.copy.{u2, u1} α β _inst_1 _inst_2 f f' h) f
Case conversion may be inaccurate. Consider using '#align biheyting_hom.copy_eq BiheytingHom.copy_eqₓ'. -/
theorem copy_eq (f : BiheytingHom α β) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
  FunLike.ext' h
#align biheyting_hom.copy_eq BiheytingHom.copy_eq

variable (α)

#print BiheytingHom.id /-
/-- `id` as a `biheyting_hom`. -/
protected def id : BiheytingHom α α :=
  { HeytingHom.id _, CoheytingHom.id _ with toLatticeHom := LatticeHom.id _ }
#align biheyting_hom.id BiheytingHom.id
-/

/- warning: biheyting_hom.coe_id -> BiheytingHom.coe_id is a dubious translation:
lean 3 declaration is
  forall (α : Type.{u1}) [_inst_1 : BiheytingAlgebra.{u1} α], Eq.{succ u1} (α -> α) (coeFn.{succ u1, succ u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) (fun (_x : BiheytingHom.{u1, u1} α α _inst_1 _inst_1) => α -> α) (BiheytingHom.hasCoeToFun.{u1, u1} α α _inst_1 _inst_1) (BiheytingHom.id.{u1} α _inst_1)) (id.{succ u1} α)
but is expected to have type
  forall (α : Type.{u1}) [_inst_1 : BiheytingAlgebra.{u1} α], Eq.{succ u1} (forall (ᾰ : α), (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) _x) (InfHomClass.toFunLike.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (InfTopHomClass.toInfHomClass.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)) (CoheytingHomClass.toBoundedLatticeHomClass.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1) (BiheytingHomClass.toCoheytingHomClass.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u1, u1} α α _inst_1 _inst_1)))))) (BiheytingHom.id.{u1} α _inst_1)) (id.{succ u1} α)
Case conversion may be inaccurate. Consider using '#align biheyting_hom.coe_id BiheytingHom.coe_idₓ'. -/
@[simp]
theorem coe_id : ⇑(BiheytingHom.id α) = id :=
  rfl
#align biheyting_hom.coe_id BiheytingHom.coe_id

variable {α}

/- warning: biheyting_hom.id_apply -> BiheytingHom.id_apply is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} [_inst_1 : BiheytingAlgebra.{u1} α] (a : α), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) (fun (_x : BiheytingHom.{u1, u1} α α _inst_1 _inst_1) => α -> α) (BiheytingHom.hasCoeToFun.{u1, u1} α α _inst_1 _inst_1) (BiheytingHom.id.{u1} α _inst_1) a) a
but is expected to have type
  forall {α : Type.{u1}} [_inst_1 : BiheytingAlgebra.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => α) _x) (InfHomClass.toFunLike.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (InfTopHomClass.toInfHomClass.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (BoundedLatticeHomClass.toInfTopHomClass.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)) (CoheytingHomClass.toBoundedLatticeHomClass.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1) (BiheytingHomClass.toCoheytingHomClass.{u1, u1, u1} (BiheytingHom.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u1, u1} α α _inst_1 _inst_1)))))) (BiheytingHom.id.{u1} α _inst_1) a) a
Case conversion may be inaccurate. Consider using '#align biheyting_hom.id_apply BiheytingHom.id_applyₓ'. -/
@[simp]
theorem id_apply (a : α) : BiheytingHom.id α a = a :=
  rfl
#align biheyting_hom.id_apply BiheytingHom.id_apply

instance : Inhabited (BiheytingHom α α) :=
  ⟨BiheytingHom.id _⟩

instance : PartialOrder (BiheytingHom α β) :=
  PartialOrder.lift _ FunLike.coe_injective

#print BiheytingHom.comp /-
/-- Composition of `biheyting_hom`s as a `biheyting_hom`. -/
def comp (f : BiheytingHom β γ) (g : BiheytingHom α β) : BiheytingHom α γ :=
  { f.toLatticeHom.comp g.toLatticeHom with
    toFun := f ∘ g
    map_himp' := fun a b => by simp
    map_sdiff' := fun a b => by simp }
#align biheyting_hom.comp BiheytingHom.comp
-/

variable {f f₁ f₂ : BiheytingHom α β} {g g₁ g₂ : BiheytingHom β γ}

/- warning: biheyting_hom.coe_comp -> BiheytingHom.coe_comp is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] [_inst_3 : BiheytingAlgebra.{u3} γ] (f : BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) (g : BiheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (α -> γ) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (BiheytingHom.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : BiheytingHom.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (BiheytingHom.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (BiheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f g)) (Function.comp.{succ u1, succ u2, succ u3} α β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (BiheytingHom.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u3} β] [_inst_3 : BiheytingAlgebra.{u2} γ] (f : BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) (g : BiheytingHom.{u1, u3} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) _x) (InfHomClass.toFunLike.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (InfTopHomClass.toInfHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3) (BiheytingHomClass.toCoheytingHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u1, u2} α γ _inst_1 _inst_3)))))) (BiheytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 f g)) (Function.comp.{succ u1, succ u3, succ u2} α β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => γ) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2) (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3) (BiheytingHomClass.toCoheytingHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u3, u2} β γ _inst_2 _inst_3)))))) f) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u1, u3} α β _inst_1 _inst_2)))))) g))
Case conversion may be inaccurate. Consider using '#align biheyting_hom.coe_comp BiheytingHom.coe_compₓ'. -/
@[simp]
theorem coe_comp (f : BiheytingHom β γ) (g : BiheytingHom α β) : ⇑(f.comp g) = f ∘ g :=
  rfl
#align biheyting_hom.coe_comp BiheytingHom.coe_comp

/- warning: biheyting_hom.comp_apply -> BiheytingHom.comp_apply is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] [_inst_3 : BiheytingAlgebra.{u3} γ] (f : BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) (g : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (a : α), Eq.{succ u3} γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (BiheytingHom.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : BiheytingHom.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (BiheytingHom.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (BiheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f g) a) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (BiheytingHom.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g a))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u3} β] [_inst_3 : BiheytingAlgebra.{u2} γ] (f : BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) (g : BiheytingHom.{u1, u3} α β _inst_1 _inst_2) (a : α), Eq.{succ u2} ((fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => γ) _x) (InfHomClass.toFunLike.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (InfTopHomClass.toInfHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3) (BiheytingHomClass.toCoheytingHomClass.{max u1 u2, u1, u2} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u1, u2} α γ _inst_1 _inst_3)))))) (BiheytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 f g) a) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => γ) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2) (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3) (BiheytingHomClass.toCoheytingHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u3, u2} β γ _inst_2 _inst_3)))))) f (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (Lattice.toInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (OrderTop.toTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (BoundedOrder.toOrderTop.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u1} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u1} α (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u1} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u1 u3, u1, u3} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u1, u3} α β _inst_1 _inst_2)))))) g a))
Case conversion may be inaccurate. Consider using '#align biheyting_hom.comp_apply BiheytingHom.comp_applyₓ'. -/
@[simp]
theorem comp_apply (f : BiheytingHom β γ) (g : BiheytingHom α β) (a : α) : f.comp g a = f (g a) :=
  rfl
#align biheyting_hom.comp_apply BiheytingHom.comp_apply

/- warning: biheyting_hom.comp_assoc -> BiheytingHom.comp_assoc is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] [_inst_3 : BiheytingAlgebra.{u3} γ] [_inst_4 : BiheytingAlgebra.{u4} δ] (f : BiheytingHom.{u3, u4} γ δ _inst_3 _inst_4) (g : BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) (h : BiheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u4)} (BiheytingHom.{u1, u4} α δ _inst_1 _inst_4) (BiheytingHom.comp.{u1, u2, u4} α β δ _inst_1 _inst_2 _inst_4 (BiheytingHom.comp.{u2, u3, u4} β γ δ _inst_2 _inst_3 _inst_4 f g) h) (BiheytingHom.comp.{u1, u3, u4} α γ δ _inst_1 _inst_3 _inst_4 f (BiheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g h))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u4}} {δ : Type.{u3}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] [_inst_3 : BiheytingAlgebra.{u4} γ] [_inst_4 : BiheytingAlgebra.{u3} δ] (f : BiheytingHom.{u4, u3} γ δ _inst_3 _inst_4) (g : BiheytingHom.{u2, u4} β γ _inst_2 _inst_3) (h : BiheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (BiheytingHom.{u1, u3} α δ _inst_1 _inst_4) (BiheytingHom.comp.{u1, u2, u3} α β δ _inst_1 _inst_2 _inst_4 (BiheytingHom.comp.{u2, u4, u3} β γ δ _inst_2 _inst_3 _inst_4 f g) h) (BiheytingHom.comp.{u1, u4, u3} α γ δ _inst_1 _inst_3 _inst_4 f (BiheytingHom.comp.{u1, u2, u4} α β γ _inst_1 _inst_2 _inst_3 g h))
Case conversion may be inaccurate. Consider using '#align biheyting_hom.comp_assoc BiheytingHom.comp_assocₓ'. -/
@[simp]
theorem comp_assoc (f : BiheytingHom γ δ) (g : BiheytingHom β γ) (h : BiheytingHom α β) :
    (f.comp g).comp h = f.comp (g.comp h) :=
  rfl
#align biheyting_hom.comp_assoc BiheytingHom.comp_assoc

/- warning: biheyting_hom.comp_id -> BiheytingHom.comp_id is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] (f : BiheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (BiheytingHom.comp.{u1, u1, u2} α α β _inst_1 _inst_1 _inst_2 f (BiheytingHom.id.{u1} α _inst_1)) f
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : BiheytingAlgebra.{u2} α] [_inst_2 : BiheytingAlgebra.{u1} β] (f : BiheytingHom.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) (BiheytingHom.comp.{u2, u2, u1} α α β _inst_1 _inst_1 _inst_2 f (BiheytingHom.id.{u2} α _inst_1)) f
Case conversion may be inaccurate. Consider using '#align biheyting_hom.comp_id BiheytingHom.comp_idₓ'. -/
@[simp]
theorem comp_id (f : BiheytingHom α β) : f.comp (BiheytingHom.id α) = f :=
  ext fun a => rfl
#align biheyting_hom.comp_id BiheytingHom.comp_id

/- warning: biheyting_hom.id_comp -> BiheytingHom.id_comp is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] (f : BiheytingHom.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (BiheytingHom.comp.{u1, u2, u2} α β β _inst_1 _inst_2 _inst_2 (BiheytingHom.id.{u2} β _inst_2) f) f
but is expected to have type
  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : BiheytingAlgebra.{u2} α] [_inst_2 : BiheytingAlgebra.{u1} β] (f : BiheytingHom.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (BiheytingHom.{u2, u1} α β _inst_1 _inst_2) (BiheytingHom.comp.{u2, u1, u1} α β β _inst_1 _inst_2 _inst_2 (BiheytingHom.id.{u1} β _inst_2) f) f
Case conversion may be inaccurate. Consider using '#align biheyting_hom.id_comp BiheytingHom.id_compₓ'. -/
@[simp]
theorem id_comp (f : BiheytingHom α β) : (BiheytingHom.id β).comp f = f :=
  ext fun a => rfl
#align biheyting_hom.id_comp BiheytingHom.id_comp

/- warning: biheyting_hom.cancel_right -> BiheytingHom.cancel_right is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] [_inst_3 : BiheytingAlgebra.{u3} γ] {f : BiheytingHom.{u1, u2} α β _inst_1 _inst_2} {g₁ : BiheytingHom.{u2, u3} β γ _inst_2 _inst_3} {g₂ : BiheytingHom.{u2, u3} β γ _inst_2 _inst_3}, (Function.Surjective.{succ u1, succ u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) (fun (_x : BiheytingHom.{u1, u2} α β _inst_1 _inst_2) => α -> β) (BiheytingHom.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u1) (succ u3)} (BiheytingHom.{u1, u3} α γ _inst_1 _inst_3) (BiheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g₁ f) (BiheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u3)} (BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) g₁ g₂))
but is expected to have type
  forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : BiheytingAlgebra.{u3} α] [_inst_2 : BiheytingAlgebra.{u2} β] [_inst_3 : BiheytingAlgebra.{u1} γ] {f : BiheytingHom.{u3, u2} α β _inst_1 _inst_2} {g₁ : BiheytingHom.{u2, u1} β γ _inst_2 _inst_3} {g₂ : BiheytingHom.{u2, u1} β γ _inst_2 _inst_3}, (Function.Surjective.{succ u3, succ u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (BiheytingHom.{u3, u2} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : α) => β) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u3} α (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α (BiheytingAlgebra.toCoheytingAlgebra.{u3} α _inst_1)))) (Lattice.toInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2)))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} α β _inst_1 _inst_2) α β (Lattice.toInf.{u3} α (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α (BiheytingAlgebra.toCoheytingAlgebra.{u3} α _inst_1)))) (Lattice.toInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2)))) (OrderTop.toTop.{u3} α (Preorder.toLE.{u3} α (PartialOrder.toPreorder.{u3} α (SemilatticeInf.toPartialOrder.{u3} α (Lattice.toSemilatticeInf.{u3} α (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α (BiheytingAlgebra.toCoheytingAlgebra.{u3} α _inst_1))))))) (BoundedOrder.toOrderTop.{u3} α (Preorder.toLE.{u3} α (PartialOrder.toPreorder.{u3} α (SemilatticeInf.toPartialOrder.{u3} α (Lattice.toSemilatticeInf.{u3} α (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α (BiheytingAlgebra.toCoheytingAlgebra.{u3} α _inst_1))))))) (CoheytingAlgebra.toBoundedOrder.{u3} α (BiheytingAlgebra.toCoheytingAlgebra.{u3} α _inst_1)))) (OrderTop.toTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2))))))) (BoundedOrder.toOrderTop.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} α β _inst_1 _inst_2) α β (GeneralizedCoheytingAlgebra.toLattice.{u3} α (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} α (BiheytingAlgebra.toCoheytingAlgebra.{u3} α _inst_1))) (GeneralizedCoheytingAlgebra.toLattice.{u2} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2))) (CoheytingAlgebra.toBoundedOrder.{u3} α (BiheytingAlgebra.toCoheytingAlgebra.{u3} α _inst_1)) (CoheytingAlgebra.toBoundedOrder.{u2} β (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} α β _inst_1 _inst_2) α β (BiheytingAlgebra.toCoheytingAlgebra.{u3} α _inst_1) (BiheytingAlgebra.toCoheytingAlgebra.{u2} β _inst_2) (BiheytingHomClass.toCoheytingHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u3, u2} α β _inst_1 _inst_2)))))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (BiheytingHom.{u3, u1} α γ _inst_1 _inst_3) (BiheytingHom.comp.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 g₁ f) (BiheytingHom.comp.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (BiheytingHom.{u2, u1} β γ _inst_2 _inst_3) g₁ g₂))
Case conversion may be inaccurate. Consider using '#align biheyting_hom.cancel_right BiheytingHom.cancel_rightₓ'. -/
theorem cancel_right (hf : Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
  ⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, congr_arg _⟩
#align biheyting_hom.cancel_right BiheytingHom.cancel_right

/- warning: biheyting_hom.cancel_left -> BiheytingHom.cancel_left is a dubious translation:
lean 3 declaration is
  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u2} β] [_inst_3 : BiheytingAlgebra.{u3} γ] {f₁ : BiheytingHom.{u1, u2} α β _inst_1 _inst_2} {f₂ : BiheytingHom.{u1, u2} α β _inst_1 _inst_2} {g : BiheytingHom.{u2, u3} β γ _inst_2 _inst_3}, (Function.Injective.{succ u2, succ u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : BiheytingHom.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (BiheytingHom.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u1) (succ u3)} (BiheytingHom.{u1, u3} α γ _inst_1 _inst_3) (BiheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g f₁) (BiheytingHom.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α β _inst_1 _inst_2) f₁ f₂))
but is expected to have type
  forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : BiheytingAlgebra.{u1} α] [_inst_2 : BiheytingAlgebra.{u3} β] [_inst_3 : BiheytingAlgebra.{u2} γ] {f₁ : BiheytingHom.{u1, u3} α β _inst_1 _inst_2} {f₂ : BiheytingHom.{u1, u3} α β _inst_1 _inst_2} {g : BiheytingHom.{u3, u2} β γ _inst_2 _inst_3}, (Function.Injective.{succ u3, succ u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Order.Hom.Lattice._hyg.494 : β) => γ) _x) (InfHomClass.toFunLike.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (InfTopHomClass.toInfHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (Lattice.toInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (Lattice.toInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (OrderTop.toTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (BoundedOrder.toOrderTop.{u3} β (Preorder.toLE.{u3} β (PartialOrder.toPreorder.{u3} β (SemilatticeInf.toPartialOrder.{u3} β (Lattice.toSemilatticeInf.{u3} β (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))))))) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)))) (OrderTop.toTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (BoundedOrder.toOrderTop.{u2} γ (Preorder.toLE.{u2} γ (PartialOrder.toPreorder.{u2} γ (SemilatticeInf.toPartialOrder.{u2} γ (Lattice.toSemilatticeInf.{u2} γ (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))))))) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)))) (BoundedLatticeHomClass.toInfTopHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (GeneralizedCoheytingAlgebra.toLattice.{u3} β (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2))) (GeneralizedCoheytingAlgebra.toLattice.{u2} γ (CoheytingAlgebra.toGeneralizedCoheytingAlgebra.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3))) (CoheytingAlgebra.toBoundedOrder.{u3} β (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2)) (CoheytingAlgebra.toBoundedOrder.{u2} γ (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3)) (CoheytingHomClass.toBoundedLatticeHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ (BiheytingAlgebra.toCoheytingAlgebra.{u3} β _inst_2) (BiheytingAlgebra.toCoheytingAlgebra.{u2} γ _inst_3) (BiheytingHomClass.toCoheytingHomClass.{max u3 u2, u3, u2} (BiheytingHom.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (BiheytingHom.instBiheytingHomClassBiheytingHom.{u3, u2} β γ _inst_2 _inst_3)))))) g)) -> (Iff (Eq.{max (succ u1) (succ u2)} (BiheytingHom.{u1, u2} α γ _inst_1 _inst_3) (BiheytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g f₁) (BiheytingHom.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u1) (succ u3)} (BiheytingHom.{u1, u3} α β _inst_1 _inst_2) f₁ f₂))
Case conversion may be inaccurate. Consider using '#align biheyting_hom.cancel_left BiheytingHom.cancel_leftₓ'. -/
theorem cancel_left (hg : Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
  ⟨fun h => BiheytingHom.ext fun a => hg <| by rw [← comp_apply, h, comp_apply], congr_arg _⟩
#align biheyting_hom.cancel_left BiheytingHom.cancel_left

end BiheytingHom