Documentation

Mathlib.Order.Heyting.Hom

Heyting algebra morphisms #

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

We use the FunLike 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 #

Typeclasses #

structure HeytingHom (α : Type u_6) (β : Type u_7) [HeytingAlgebra α] [HeytingAlgebra β] extends LatticeHom :
Type (max u_6 u_7)

The type of Heyting homomorphisms from α to β. Bounded lattice homomorphisms that preserve Heyting implication.

Instances For
    structure CoheytingHom (α : Type u_6) (β : Type u_7) [CoheytingAlgebra α] [CoheytingAlgebra β] extends LatticeHom :
    Type (max u_6 u_7)

    The type of co-Heyting homomorphisms from α to β. Bounded lattice homomorphisms that preserve difference.

    Instances For
      structure BiheytingHom (α : Type u_6) (β : Type u_7) [BiheytingAlgebra α] [BiheytingAlgebra β] extends LatticeHom :
      Type (max u_6 u_7)

      The type of bi-Heyting homomorphisms from α to β. Bounded lattice homomorphisms that preserve Heyting implication and difference.

      Instances For
        class HeytingHomClass (F : Type u_6) (α : outParam (Type u_7)) (β : outParam (Type u_8)) [HeytingAlgebra α] [HeytingAlgebra β] extends LatticeHomClass :
        Type (max (max u_6 u_7) u_8)
        • coe : Fαβ
        • coe_injective' : Function.Injective FunLike.coe
        • map_sup : ∀ (f : F) (a b : α), f (a b) = f a f b
        • map_inf : ∀ (f : F) (a b : α), f (a b) = f a f b
        • map_bot : ∀ (f : F), f =

          The proposition that a Heyting homomorphism preserves the bottom element.

        • map_himp : ∀ (f : F) (a b : α), f (a b) = f a f b

          The proposition that a Heyting homomorphism preserves the Heyting implication.

        HeytingHomClass F α β states that F is a type of Heyting homomorphisms.

        You should extend this class when you extend HeytingHom.

        Instances
          class CoheytingHomClass (F : Type u_6) (α : outParam (Type u_7)) (β : outParam (Type u_8)) [CoheytingAlgebra α] [CoheytingAlgebra β] extends LatticeHomClass :
          Type (max (max u_6 u_7) u_8)
          • coe : Fαβ
          • coe_injective' : Function.Injective FunLike.coe
          • map_sup : ∀ (f : F) (a b : α), f (a b) = f a f b
          • map_inf : ∀ (f : F) (a b : α), f (a b) = f a f b
          • map_top : ∀ (f : F), f =

            The proposition that a co-Heyting homomorphism preserves the top element.

          • map_sdiff : ∀ (f : F) (a b : α), f (a \ b) = f a \ f b

            The proposition that a co-Heyting homomorphism preserves the difference operation.

          CoheytingHomClass F α β states that F is a type of co-Heyting homomorphisms.

          You should extend this class when you extend CoheytingHom.

          Instances
            class BiheytingHomClass (F : Type u_6) (α : outParam (Type u_7)) (β : outParam (Type u_8)) [BiheytingAlgebra α] [BiheytingAlgebra β] extends LatticeHomClass :
            Type (max (max u_6 u_7) u_8)
            • coe : Fαβ
            • coe_injective' : Function.Injective FunLike.coe
            • map_sup : ∀ (f : F) (a b : α), f (a b) = f a f b
            • map_inf : ∀ (f : F) (a b : α), f (a b) = f a f b
            • map_himp : ∀ (f : F) (a b : α), f (a b) = f a f b

              The proposition that a bi-Heyting homomorphism preserves the Heyting implication.

            • map_sdiff : ∀ (f : F) (a b : α), f (a \ b) = f a \ f b

              The proposition that a bi-Heyting homomorphism preserves the difference operation.

            BiheytingHomClass F α β states that F is a type of bi-Heyting homomorphisms.

            You should extend this class when you extend BiheytingHom.

            Instances
              instance HeytingHomClass.toBoundedLatticeHomClass {F : Type u_1} {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] :
              {x : HeytingAlgebra β} → [inst : HeytingHomClass F α β] → BoundedLatticeHomClass F α β
              instance CoheytingHomClass.toBoundedLatticeHomClass {F : Type u_1} {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] :
              {x : CoheytingAlgebra β} → [inst : CoheytingHomClass F α β] → BoundedLatticeHomClass F α β
              instance BiheytingHomClass.toHeytingHomClass {F : Type u_1} {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] :
              {x : BiheytingAlgebra β} → [inst : BiheytingHomClass F α β] → HeytingHomClass F α β
              instance BiheytingHomClass.toCoheytingHomClass {F : Type u_1} {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] :
              {x : BiheytingAlgebra β} → [inst : BiheytingHomClass F α β] → CoheytingHomClass F α β
              instance OrderIsoClass.toHeytingHomClass {F : Type u_1} {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] :
              {x : HeytingAlgebra β} → [inst : OrderIsoClass F α β] → HeytingHomClass F α β
              instance OrderIsoClass.toCoheytingHomClass {F : Type u_1} {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] :
              {x : CoheytingAlgebra β} → [inst : OrderIsoClass F α β] → CoheytingHomClass F α β
              instance OrderIsoClass.toBiheytingHomClass {F : Type u_1} {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] :
              {x : BiheytingAlgebra β} → [inst : OrderIsoClass F α β] → BiheytingHomClass F α β
              @[reducible]

              This can't be an instance because of typeclass loops.

              Instances For
                @[simp]
                theorem map_compl {F : Type u_1} {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] [HeytingHomClass F α β] (f : F) (a : α) :
                f a = (f a)
                @[simp]
                theorem map_bihimp {F : Type u_1} {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] [HeytingHomClass F α β] (f : F) (a : α) (b : α) :
                f (a b) = f a f b
                @[simp]
                theorem map_hnot {F : Type u_1} {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingHomClass F α β] (f : F) (a : α) :
                f (a) = f a
                @[simp]
                theorem map_symmDiff {F : Type u_1} {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingHomClass F α β] (f : F) (a : α) (b : α) :
                f (a b) = f a f b
                instance instCoeTCHeytingHom {F : Type u_1} {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] [HeytingHomClass F α β] :
                CoeTC F (HeytingHom α β)
                instance instCoeTCCoheytingHom {F : Type u_1} {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingHomClass F α β] :
                instance instCoeTCBiheytingHom {F : Type u_1} {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingHomClass F α β] :
                theorem HeytingHom.toFun_eq_coe {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] {f : HeytingHom α β} :
                f.toFun = f
                @[simp]
                theorem HeytingHom.toFun_eq_coe_aux {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] {f : HeytingHom α β} :
                f.toLatticeHom = f
                theorem HeytingHom.ext {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] {f : HeytingHom α β} {g : HeytingHom α β} (h : ∀ (a : α), f a = g a) :
                f = g
                def HeytingHom.copy {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] (f : HeytingHom α β) (f' : αβ) (h : f' = f) :

                Copy of a HeytingHom with a new toFun equal to the old one. Useful to fix definitional equalities.

                Instances For
                  @[simp]
                  theorem HeytingHom.coe_copy {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] (f : HeytingHom α β) (f' : αβ) (h : f' = f) :
                  ↑(HeytingHom.copy f f' h) = f'
                  theorem HeytingHom.copy_eq {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] (f : HeytingHom α β) (f' : αβ) (h : f' = f) :
                  def HeytingHom.id (α : Type u_2) [HeytingAlgebra α] :

                  id as a HeytingHom.

                  Instances For
                    @[simp]
                    theorem HeytingHom.coe_id (α : Type u_2) [HeytingAlgebra α] :
                    ↑(HeytingHom.id α) = id
                    @[simp]
                    theorem HeytingHom.id_apply {α : Type u_2} [HeytingAlgebra α] (a : α) :
                    ↑(HeytingHom.id α) a = a
                    def HeytingHom.comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [HeytingAlgebra α] [HeytingAlgebra β] [HeytingAlgebra γ] (f : HeytingHom β γ) (g : HeytingHom α β) :

                    Composition of HeytingHoms as a HeytingHom.

                    Instances For
                      @[simp]
                      theorem HeytingHom.coe_comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [HeytingAlgebra α] [HeytingAlgebra β] [HeytingAlgebra γ] (f : HeytingHom β γ) (g : HeytingHom α β) :
                      ↑(HeytingHom.comp f g) = f g
                      @[simp]
                      theorem HeytingHom.comp_apply {α : Type u_2} {β : Type u_3} {γ : Type u_4} [HeytingAlgebra α] [HeytingAlgebra β] [HeytingAlgebra γ] (f : HeytingHom β γ) (g : HeytingHom α β) (a : α) :
                      ↑(HeytingHom.comp f g) a = f (g a)
                      @[simp]
                      theorem HeytingHom.comp_assoc {α : Type u_2} {β : Type u_3} {γ : Type u_4} {δ : Type u_5} [HeytingAlgebra α] [HeytingAlgebra β] [HeytingAlgebra γ] [HeytingAlgebra δ] (f : HeytingHom γ δ) (g : HeytingHom β γ) (h : HeytingHom α β) :
                      @[simp]
                      theorem HeytingHom.comp_id {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] (f : HeytingHom α β) :
                      @[simp]
                      theorem HeytingHom.id_comp {α : Type u_2} {β : Type u_3} [HeytingAlgebra α] [HeytingAlgebra β] (f : HeytingHom α β) :
                      @[simp]
                      theorem HeytingHom.cancel_right {α : Type u_2} {β : Type u_3} {γ : Type u_4} [HeytingAlgebra α] [HeytingAlgebra β] [HeytingAlgebra γ] {f : HeytingHom α β} {g₁ : HeytingHom β γ} {g₂ : HeytingHom β γ} (hf : Function.Surjective f) :
                      HeytingHom.comp g₁ f = HeytingHom.comp g₂ f g₁ = g₂
                      @[simp]
                      theorem HeytingHom.cancel_left {α : Type u_2} {β : Type u_3} {γ : Type u_4} [HeytingAlgebra α] [HeytingAlgebra β] [HeytingAlgebra γ] {f₁ : HeytingHom α β} {f₂ : HeytingHom α β} {g : HeytingHom β γ} (hg : Function.Injective g) :
                      HeytingHom.comp g f₁ = HeytingHom.comp g f₂ f₁ = f₂
                      theorem CoheytingHom.toFun_eq_coe {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] {f : CoheytingHom α β} :
                      f.toFun = f
                      @[simp]
                      theorem CoheytingHom.toFun_eq_coe_aux {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] {f : CoheytingHom α β} :
                      f.toLatticeHom = f
                      theorem CoheytingHom.ext {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] {f : CoheytingHom α β} {g : CoheytingHom α β} (h : ∀ (a : α), f a = g a) :
                      f = g
                      def CoheytingHom.copy {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] (f : CoheytingHom α β) (f' : αβ) (h : f' = f) :

                      Copy of a CoheytingHom with a new toFun equal to the old one. Useful to fix definitional equalities.

                      Instances For
                        @[simp]
                        theorem CoheytingHom.coe_copy {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] (f : CoheytingHom α β) (f' : αβ) (h : f' = f) :
                        ↑(CoheytingHom.copy f f' h) = f'
                        theorem CoheytingHom.copy_eq {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] (f : CoheytingHom α β) (f' : αβ) (h : f' = f) :

                        id as a CoheytingHom.

                        Instances For
                          @[simp]
                          theorem CoheytingHom.coe_id (α : Type u_2) [CoheytingAlgebra α] :
                          ↑(CoheytingHom.id α) = id
                          @[simp]
                          theorem CoheytingHom.id_apply {α : Type u_2} [CoheytingAlgebra α] (a : α) :
                          ↑(CoheytingHom.id α) a = a
                          def CoheytingHom.comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingAlgebra γ] (f : CoheytingHom β γ) (g : CoheytingHom α β) :

                          Composition of CoheytingHoms as a CoheytingHom.

                          Instances For
                            @[simp]
                            theorem CoheytingHom.coe_comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingAlgebra γ] (f : CoheytingHom β γ) (g : CoheytingHom α β) :
                            ↑(CoheytingHom.comp f g) = f g
                            @[simp]
                            theorem CoheytingHom.comp_apply {α : Type u_2} {β : Type u_3} {γ : Type u_4} [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingAlgebra γ] (f : CoheytingHom β γ) (g : CoheytingHom α β) (a : α) :
                            ↑(CoheytingHom.comp f g) a = f (g a)
                            @[simp]
                            theorem CoheytingHom.comp_assoc {α : Type u_2} {β : Type u_3} {γ : Type u_4} {δ : Type u_5} [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingAlgebra γ] [CoheytingAlgebra δ] (f : CoheytingHom γ δ) (g : CoheytingHom β γ) (h : CoheytingHom α β) :
                            @[simp]
                            theorem CoheytingHom.comp_id {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] (f : CoheytingHom α β) :
                            @[simp]
                            theorem CoheytingHom.id_comp {α : Type u_2} {β : Type u_3} [CoheytingAlgebra α] [CoheytingAlgebra β] (f : CoheytingHom α β) :
                            @[simp]
                            theorem CoheytingHom.cancel_right {α : Type u_2} {β : Type u_3} {γ : Type u_4} [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingAlgebra γ] {f : CoheytingHom α β} {g₁ : CoheytingHom β γ} {g₂ : CoheytingHom β γ} (hf : Function.Surjective f) :
                            CoheytingHom.comp g₁ f = CoheytingHom.comp g₂ f g₁ = g₂
                            @[simp]
                            theorem CoheytingHom.cancel_left {α : Type u_2} {β : Type u_3} {γ : Type u_4} [CoheytingAlgebra α] [CoheytingAlgebra β] [CoheytingAlgebra γ] {f₁ : CoheytingHom α β} {f₂ : CoheytingHom α β} {g : CoheytingHom β γ} (hg : Function.Injective g) :
                            CoheytingHom.comp g f₁ = CoheytingHom.comp g f₂ f₁ = f₂
                            theorem BiheytingHom.toFun_eq_coe {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] [BiheytingAlgebra β] {f : BiheytingHom α β} :
                            f.toFun = f
                            @[simp]
                            theorem BiheytingHom.toFun_eq_coe_aux {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] [BiheytingAlgebra β] {f : BiheytingHom α β} :
                            f.toLatticeHom = f
                            theorem BiheytingHom.ext {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] [BiheytingAlgebra β] {f : BiheytingHom α β} {g : BiheytingHom α β} (h : ∀ (a : α), f a = g a) :
                            f = g
                            def BiheytingHom.copy {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] [BiheytingAlgebra β] (f : BiheytingHom α β) (f' : αβ) (h : f' = f) :

                            Copy of a BiheytingHom with a new toFun equal to the old one. Useful to fix definitional equalities.

                            Instances For
                              @[simp]
                              theorem BiheytingHom.coe_copy {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] [BiheytingAlgebra β] (f : BiheytingHom α β) (f' : αβ) (h : f' = f) :
                              ↑(BiheytingHom.copy f f' h) = f'
                              theorem BiheytingHom.copy_eq {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] [BiheytingAlgebra β] (f : BiheytingHom α β) (f' : αβ) (h : f' = f) :

                              id as a BiheytingHom.

                              Instances For
                                @[simp]
                                theorem BiheytingHom.coe_id (α : Type u_2) [BiheytingAlgebra α] :
                                ↑(BiheytingHom.id α) = id
                                @[simp]
                                theorem BiheytingHom.id_apply {α : Type u_2} [BiheytingAlgebra α] (a : α) :
                                ↑(BiheytingHom.id α) a = a
                                def BiheytingHom.comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingAlgebra γ] (f : BiheytingHom β γ) (g : BiheytingHom α β) :

                                Composition of BiheytingHoms as a BiheytingHom.

                                Instances For
                                  @[simp]
                                  theorem BiheytingHom.coe_comp {α : Type u_2} {β : Type u_3} {γ : Type u_4} [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingAlgebra γ] (f : BiheytingHom β γ) (g : BiheytingHom α β) :
                                  ↑(BiheytingHom.comp f g) = f g
                                  @[simp]
                                  theorem BiheytingHom.comp_apply {α : Type u_2} {β : Type u_3} {γ : Type u_4} [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingAlgebra γ] (f : BiheytingHom β γ) (g : BiheytingHom α β) (a : α) :
                                  ↑(BiheytingHom.comp f g) a = f (g a)
                                  @[simp]
                                  theorem BiheytingHom.comp_assoc {α : Type u_2} {β : Type u_3} {γ : Type u_4} {δ : Type u_5} [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingAlgebra γ] [BiheytingAlgebra δ] (f : BiheytingHom γ δ) (g : BiheytingHom β γ) (h : BiheytingHom α β) :
                                  @[simp]
                                  theorem BiheytingHom.comp_id {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] [BiheytingAlgebra β] (f : BiheytingHom α β) :
                                  @[simp]
                                  theorem BiheytingHom.id_comp {α : Type u_2} {β : Type u_3} [BiheytingAlgebra α] [BiheytingAlgebra β] (f : BiheytingHom α β) :
                                  @[simp]
                                  theorem BiheytingHom.cancel_right {α : Type u_2} {β : Type u_3} {γ : Type u_4} [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingAlgebra γ] {f : BiheytingHom α β} {g₁ : BiheytingHom β γ} {g₂ : BiheytingHom β γ} (hf : Function.Surjective f) :
                                  BiheytingHom.comp g₁ f = BiheytingHom.comp g₂ f g₁ = g₂
                                  @[simp]
                                  theorem BiheytingHom.cancel_left {α : Type u_2} {β : Type u_3} {γ : Type u_4} [BiheytingAlgebra α] [BiheytingAlgebra β] [BiheytingAlgebra γ] {f₁ : BiheytingHom α β} {f₂ : BiheytingHom α β} {g : BiheytingHom β γ} (hg : Function.Injective g) :
                                  BiheytingHom.comp g f₁ = BiheytingHom.comp g f₂ f₁ = f₂