Heyting algebras #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines Heyting, co-Heyting and bi-Heyting algebras.
An Heyting algebra is a bounded distributive lattice with an implication operation ⇨
such that
a ≤ b ⇨ c ↔ a ⊓ b ≤ c
. It also comes with a pseudo-complement ᶜ
, such that aᶜ = a ⇨ ⊥
.
Co-Heyting algebras are dual to Heyting algebras. They have a difference \
and a negation ¬
such that a \ b ≤ c ↔ a ≤ b ⊔ c
and ¬a = ⊤ \ a
.
Bi-Heyting algebras are Heyting algebras that are also co-Heyting algebras.
From a logic standpoint, Heyting algebras precisely model intuitionistic logic, whereas boolean algebras model classical logic.
Heyting algebras are the order theoretic equivalent of cartesian-closed categories.
Main declarations #
generalized_heyting_algebra
: Heyting algebra without a top element (nor negation).generalized_coheyting_algebra
: Co-Heyting algebra without a bottom element (nor complement).heyting_algebra
: Heyting algebra.coheyting_algebra
: Co-Heyting algebra.biheyting_algebra
: bi-Heyting algebra.
Notation #
⇨
: Heyting implication\
: Difference¬
: Heyting negationᶜ
: (Pseudo-)complement
References #
Tags #
Heyting, Brouwer, algebra, implication, negation, intuitionistic
Notation #
Syntax typeclass for Heyting implication ⇨
.
Instances of this typeclass
Instances of other typeclasses for has_himp
- has_himp.has_sizeof_inst
- hnot : α → α
Syntax typeclass for Heyting negation ¬
.
The difference between has_compl
and has_hnot
is that the former belongs to Heyting algebras,
while the latter belongs to co-Heyting algebras. They are both pseudo-complements, but compl
underestimates while hnot
overestimates. In boolean algebras, they are equal. See hnot_eq_compl
.
Instances of this typeclass
Instances of other typeclasses for has_hnot
- has_hnot.has_sizeof_inst
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- le_trans : ∀ (a b c : α), a ≤ b → b ≤ c → a ≤ c
- lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
- le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
- le_sup_left : ∀ (a b : α), a ≤ a ⊔ b
- le_sup_right : ∀ (a b : α), b ≤ a ⊔ b
- sup_le : ∀ (a b c : α), a ≤ c → b ≤ c → a ⊔ b ≤ c
- inf : α → α → α
- inf_le_left : ∀ (a b : α), a ⊓ b ≤ a
- inf_le_right : ∀ (a b : α), a ⊓ b ≤ b
- le_inf : ∀ (a b c : α), a ≤ b → a ≤ c → a ≤ b ⊓ c
- top : α
- himp : α → α → α
- le_top : ∀ (a : α), a ≤ ⊤
- le_himp_iff : ∀ (a b c : α), a ≤ b ⇨ c ↔ a ⊓ b ≤ c
A generalized Heyting algebra is a lattice with an additional binary operation ⇨
called
Heyting implication such that a ⇨
is right adjoint to a ⊓
.
This generalizes heyting_algebra
by not requiring a bottom element.
Instances of this typeclass
Instances of other typeclasses for generalized_heyting_algebra
- generalized_heyting_algebra.has_sizeof_inst
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- le_trans : ∀ (a b c : α), a ≤ b → b ≤ c → a ≤ c
- lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
- le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
- le_sup_left : ∀ (a b : α), a ≤ a ⊔ b
- le_sup_right : ∀ (a b : α), b ≤ a ⊔ b
- sup_le : ∀ (a b c : α), a ≤ c → b ≤ c → a ⊔ b ≤ c
- inf : α → α → α
- inf_le_left : ∀ (a b : α), a ⊓ b ≤ a
- inf_le_right : ∀ (a b : α), a ⊓ b ≤ b
- le_inf : ∀ (a b c : α), a ≤ b → a ≤ c → a ≤ b ⊓ c
- bot : α
- sdiff : α → α → α
- bot_le : ∀ (a : α), ⊥ ≤ a
- sdiff_le_iff : ∀ (a b c : α), a \ b ≤ c ↔ a ≤ b ⊔ c
A generalized co-Heyting algebra is a lattice with an additional binary difference operation \
such that \ a
is right adjoint to ⊔ a
.
This generalizes coheyting_algebra
by not requiring a top element.
Instances of this typeclass
Instances of other typeclasses for generalized_coheyting_algebra
- generalized_coheyting_algebra.has_sizeof_inst
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- le_trans : ∀ (a b c : α), a ≤ b → b ≤ c → a ≤ c
- lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
- le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
- le_sup_left : ∀ (a b : α), a ≤ a ⊔ b
- le_sup_right : ∀ (a b : α), b ≤ a ⊔ b
- sup_le : ∀ (a b c : α), a ≤ c → b ≤ c → a ⊔ b ≤ c
- inf : α → α → α
- inf_le_left : ∀ (a b : α), a ⊓ b ≤ a
- inf_le_right : ∀ (a b : α), a ⊓ b ≤ b
- le_inf : ∀ (a b c : α), a ≤ b → a ≤ c → a ≤ b ⊓ c
- top : α
- himp : α → α → α
- le_top : ∀ (a : α), a ≤ ⊤
- le_himp_iff : ∀ (a b c : α), a ≤ b ⇨ c ↔ a ⊓ b ≤ c
- bot : α
- compl : α → α
- bot_le : ∀ (a : α), ⊥ ≤ a
- himp_bot : ∀ (a : α), a ⇨ ⊥ = aᶜ
A Heyting algebra is a bounded lattice with an additional binary operation ⇨
called Heyting
implication such that a ⇨
is right adjoint to a ⊓
.
Instances of this typeclass
Instances of other typeclasses for heyting_algebra
- heyting_algebra.has_sizeof_inst
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- le_trans : ∀ (a b c : α), a ≤ b → b ≤ c → a ≤ c
- lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
- le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
- le_sup_left : ∀ (a b : α), a ≤ a ⊔ b
- le_sup_right : ∀ (a b : α), b ≤ a ⊔ b
- sup_le : ∀ (a b c : α), a ≤ c → b ≤ c → a ⊔ b ≤ c
- inf : α → α → α
- inf_le_left : ∀ (a b : α), a ⊓ b ≤ a
- inf_le_right : ∀ (a b : α), a ⊓ b ≤ b
- le_inf : ∀ (a b c : α), a ≤ b → a ≤ c → a ≤ b ⊓ c
- bot : α
- sdiff : α → α → α
- bot_le : ∀ (a : α), ⊥ ≤ a
- sdiff_le_iff : ∀ (a b c : α), a \ b ≤ c ↔ a ≤ b ⊔ c
- top : α
- hnot : α → α
- le_top : ∀ (a : α), a ≤ ⊤
- top_sdiff : ∀ (a : α), ⊤ \ a = ¬a
A co-Heyting algebra is a bounded lattice with an additional binary difference operation \
such that \ a
is right adjoint to ⊔ a
.
Instances of this typeclass
Instances of other typeclasses for coheyting_algebra
- coheyting_algebra.has_sizeof_inst
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- le_trans : ∀ (a b c : α), a ≤ b → b ≤ c → a ≤ c
- lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
- le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
- le_sup_left : ∀ (a b : α), a ≤ a ⊔ b
- le_sup_right : ∀ (a b : α), b ≤ a ⊔ b
- sup_le : ∀ (a b c : α), a ≤ c → b ≤ c → a ⊔ b ≤ c
- inf : α → α → α
- inf_le_left : ∀ (a b : α), a ⊓ b ≤ a
- inf_le_right : ∀ (a b : α), a ⊓ b ≤ b
- le_inf : ∀ (a b c : α), a ≤ b → a ≤ c → a ≤ b ⊓ c
- top : α
- himp : α → α → α
- le_top : ∀ (a : α), a ≤ ⊤
- le_himp_iff : ∀ (a b c : α), a ≤ b ⇨ c ↔ a ⊓ b ≤ c
- bot : α
- compl : α → α
- bot_le : ∀ (a : α), ⊥ ≤ a
- himp_bot : ∀ (a : α), a ⇨ ⊥ = aᶜ
- sdiff : α → α → α
- hnot : α → α
- sdiff_le_iff : ∀ (a b c : α), a \ b ≤ c ↔ a ≤ b ⊔ c
- top_sdiff : ∀ (a : α), ⊤ \ a = ¬a
A bi-Heyting algebra is a Heyting algebra that is also a co-Heyting algebra.
Instances of this typeclass
Instances of other typeclasses for biheyting_algebra
- biheyting_algebra.has_sizeof_inst
Equations
- generalized_heyting_algebra.to_order_top = {top := generalized_heyting_algebra.top _inst_1, le_top := _}
Equations
- generalized_coheyting_algebra.to_order_bot = {bot := generalized_coheyting_algebra.bot _inst_1, bot_le := _}
Equations
- heyting_algebra.to_bounded_order = {top := heyting_algebra.top _inst_1, le_top := _, bot := heyting_algebra.bot _inst_1, bot_le := _}
Equations
- coheyting_algebra.to_bounded_order = {top := coheyting_algebra.top _inst_1, le_top := _, bot := coheyting_algebra.bot _inst_1, bot_le := _}
Equations
- biheyting_algebra.to_coheyting_algebra = {sup := biheyting_algebra.sup _inst_1, le := biheyting_algebra.le _inst_1, lt := biheyting_algebra.lt _inst_1, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := biheyting_algebra.inf _inst_1, inf_le_left := _, inf_le_right := _, le_inf := _, bot := biheyting_algebra.bot _inst_1, sdiff := biheyting_algebra.sdiff _inst_1, bot_le := _, sdiff_le_iff := _, top := biheyting_algebra.top _inst_1, hnot := biheyting_algebra.hnot _inst_1, le_top := _, top_sdiff := _}
Construct a Heyting algebra from the lattice structure and Heyting implication alone.
Equations
- heyting_algebra.of_himp himp le_himp_iff = {sup := distrib_lattice.sup _inst_1, le := distrib_lattice.le _inst_1, lt := distrib_lattice.lt _inst_1, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := distrib_lattice.inf _inst_1, inf_le_left := _, inf_le_right := _, le_inf := _, top := bounded_order.top _inst_2, himp := himp, le_top := _, le_himp_iff := le_himp_iff, bot := bounded_order.bot _inst_2, compl := λ (a : α), himp a ⊥, bot_le := _, himp_bot := _}
Construct a Heyting algebra from the lattice structure and complement operator alone.
Equations
- heyting_algebra.of_compl compl le_himp_iff = {sup := distrib_lattice.sup _inst_1, le := distrib_lattice.le _inst_1, lt := distrib_lattice.lt _inst_1, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := distrib_lattice.inf _inst_1, inf_le_left := _, inf_le_right := _, le_inf := _, top := bounded_order.top _inst_2, himp := λ (a : α), has_sup.sup (compl a), le_top := _, le_himp_iff := le_himp_iff, bot := bounded_order.bot _inst_2, compl := compl, bot_le := _, himp_bot := _}
Construct a co-Heyting algebra from the lattice structure and the difference alone.
Equations
- coheyting_algebra.of_sdiff sdiff sdiff_le_iff = {sup := distrib_lattice.sup _inst_1, le := distrib_lattice.le _inst_1, lt := distrib_lattice.lt _inst_1, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := distrib_lattice.inf _inst_1, inf_le_left := _, inf_le_right := _, le_inf := _, bot := bounded_order.bot _inst_2, sdiff := sdiff, bot_le := _, sdiff_le_iff := sdiff_le_iff, top := bounded_order.top _inst_2, hnot := λ (a : α), sdiff ⊤ a, le_top := _, top_sdiff := _}
Construct a co-Heyting algebra from the difference and Heyting negation alone.
Equations
- coheyting_algebra.of_hnot hnot sdiff_le_iff = {sup := distrib_lattice.sup _inst_1, le := distrib_lattice.le _inst_1, lt := distrib_lattice.lt _inst_1, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := distrib_lattice.inf _inst_1, inf_le_left := _, inf_le_right := _, le_inf := _, bot := bounded_order.bot _inst_2, sdiff := λ (a b : α), a ⊓ hnot b, bot_le := _, sdiff_le_iff := sdiff_le_iff, top := bounded_order.top _inst_2, hnot := hnot, le_top := _, top_sdiff := _}
The deduction theorem in the Heyting algebra model of intuitionistic logic: an implication holds iff the conclusion follows from the hypothesis.
See himp_le
for a stronger version in Boolean algebras.
Equations
- generalized_heyting_algebra.to_distrib_lattice = distrib_lattice.of_inf_sup_le generalized_heyting_algebra.to_distrib_lattice._proof_1
Equations
- order_dual.generalized_coheyting_algebra = {sup := lattice.sup (order_dual.lattice α), le := lattice.le (order_dual.lattice α), lt := lattice.lt (order_dual.lattice α), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (order_dual.lattice α), inf_le_left := _, inf_le_right := _, le_inf := _, bot := order_bot.bot (order_dual.order_bot α), sdiff := λ (a b : αᵒᵈ), ⇑order_dual.to_dual (⇑order_dual.of_dual b ⇨ ⇑order_dual.of_dual a), bot_le := _, sdiff_le_iff := _}
Equations
- prod.generalized_heyting_algebra = {sup := lattice.sup (prod.lattice α β), le := lattice.le (prod.lattice α β), lt := lattice.lt (prod.lattice α β), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (prod.lattice α β), inf_le_left := _, inf_le_right := _, le_inf := _, top := order_top.top (prod.order_top α β), himp := has_himp.himp prod.has_himp, le_top := _, le_himp_iff := _}
Equations
- pi.generalized_heyting_algebra = {sup := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), generalized_heyting_algebra.sup (ᾰ i) (ᾰ_1 i), le := partial_order.le pi.partial_order, lt := partial_order.lt pi.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), generalized_heyting_algebra.inf (ᾰ i) (ᾰ_1 i), inf_le_left := _, inf_le_right := _, le_inf := _, top := λ (i : ι), generalized_heyting_algebra.top, himp := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), generalized_heyting_algebra.himp (ᾰ i) (ᾰ_1 i), le_top := _, le_himp_iff := _}
Alias of sdiff_sup_self
.
Alias of sup_sdiff_self
.
See le_sdiff
for a stronger version in generalised Boolean algebras.
Equations
- generalized_coheyting_algebra.to_distrib_lattice = {sup := generalized_coheyting_algebra.sup _inst_1, le := generalized_coheyting_algebra.le _inst_1, lt := generalized_coheyting_algebra.lt _inst_1, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := generalized_coheyting_algebra.inf _inst_1, inf_le_left := _, inf_le_right := _, le_inf := _, le_sup_inf := _}
Equations
- order_dual.generalized_heyting_algebra = {sup := lattice.sup (order_dual.lattice α), le := lattice.le (order_dual.lattice α), lt := lattice.lt (order_dual.lattice α), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (order_dual.lattice α), inf_le_left := _, inf_le_right := _, le_inf := _, top := order_top.top (order_dual.order_top α), himp := λ (a b : αᵒᵈ), ⇑order_dual.to_dual (⇑order_dual.of_dual b \ ⇑order_dual.of_dual a), le_top := _, le_himp_iff := _}
Equations
- prod.generalized_coheyting_algebra = {sup := lattice.sup (prod.lattice α β), le := lattice.le (prod.lattice α β), lt := lattice.lt (prod.lattice α β), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (prod.lattice α β), inf_le_left := _, inf_le_right := _, le_inf := _, bot := order_bot.bot (prod.order_bot α β), sdiff := has_sdiff.sdiff prod.has_sdiff, bot_le := _, sdiff_le_iff := _}
Equations
- pi.generalized_coheyting_algebra = {sup := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), generalized_coheyting_algebra.sup (ᾰ i) (ᾰ_1 i), le := partial_order.le pi.partial_order, lt := partial_order.lt pi.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), generalized_coheyting_algebra.inf (ᾰ i) (ᾰ_1 i), inf_le_left := _, inf_le_right := _, le_inf := _, bot := λ (i : ι), generalized_coheyting_algebra.bot, sdiff := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), generalized_coheyting_algebra.sdiff (ᾰ i) (ᾰ_1 i), bot_le := _, sdiff_le_iff := _}
Alias of the reverse direction of le_compl_iff_disjoint_right
.
Alias of the reverse direction of le_compl_iff_disjoint_left
.
Alias of le_compl_comm
.
Alias of the forward direction of le_compl_comm
.
Equations
- order_dual.coheyting_algebra = {sup := lattice.sup (order_dual.lattice α), le := lattice.le (order_dual.lattice α), lt := lattice.lt (order_dual.lattice α), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (order_dual.lattice α), inf_le_left := _, inf_le_right := _, le_inf := _, bot := bounded_order.bot (order_dual.bounded_order α), sdiff := λ (a b : αᵒᵈ), ⇑order_dual.to_dual (⇑order_dual.of_dual b ⇨ ⇑order_dual.of_dual a), bot_le := _, sdiff_le_iff := _, top := bounded_order.top (order_dual.bounded_order α), hnot := ⇑order_dual.to_dual ∘ has_compl.compl ∘ ⇑order_dual.of_dual, le_top := _, top_sdiff := _}
Equations
- prod.heyting_algebra = {sup := generalized_heyting_algebra.sup prod.generalized_heyting_algebra, le := generalized_heyting_algebra.le prod.generalized_heyting_algebra, lt := generalized_heyting_algebra.lt prod.generalized_heyting_algebra, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := generalized_heyting_algebra.inf prod.generalized_heyting_algebra, inf_le_left := _, inf_le_right := _, le_inf := _, top := generalized_heyting_algebra.top prod.generalized_heyting_algebra, himp := generalized_heyting_algebra.himp prod.generalized_heyting_algebra, le_top := _, le_himp_iff := _, bot := bounded_order.bot (prod.bounded_order α β), compl := has_compl.compl prod.has_compl, bot_le := _, himp_bot := _}
Equations
- pi.heyting_algebra = {sup := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), heyting_algebra.sup (ᾰ i) (ᾰ_1 i), le := partial_order.le pi.partial_order, lt := partial_order.lt pi.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), heyting_algebra.inf (ᾰ i) (ᾰ_1 i), inf_le_left := _, inf_le_right := _, le_inf := _, top := λ (i : ι), heyting_algebra.top, himp := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), heyting_algebra.himp (ᾰ i) (ᾰ_1 i), le_top := _, le_himp_iff := _, bot := λ (i : ι), heyting_algebra.bot, compl := λ (ᾰ : Π (i : ι), α i) (i : ι), heyting_algebra.compl (ᾰ i), bot_le := _, himp_bot := _}
Equations
- coheyting_algebra.to_distrib_lattice = {sup := coheyting_algebra.sup _inst_1, le := coheyting_algebra.le _inst_1, lt := coheyting_algebra.lt _inst_1, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := coheyting_algebra.inf _inst_1, inf_le_left := _, inf_le_right := _, le_inf := _, le_sup_inf := _}
Alias of the reverse direction of hnot_le_iff_codisjoint_right
.
Alias of the reverse direction of hnot_le_iff_codisjoint_left
.
Equations
- order_dual.heyting_algebra = {sup := lattice.sup (order_dual.lattice α), le := lattice.le (order_dual.lattice α), lt := lattice.lt (order_dual.lattice α), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (order_dual.lattice α), inf_le_left := _, inf_le_right := _, le_inf := _, top := bounded_order.top (order_dual.bounded_order α), himp := λ (a b : αᵒᵈ), ⇑order_dual.to_dual (⇑order_dual.of_dual b \ ⇑order_dual.of_dual a), le_top := _, le_himp_iff := _, bot := bounded_order.bot (order_dual.bounded_order α), compl := ⇑order_dual.to_dual ∘ has_hnot.hnot ∘ ⇑order_dual.of_dual, bot_le := _, himp_bot := _}
Equations
- prod.coheyting_algebra = {sup := lattice.sup (prod.lattice α β), le := lattice.le (prod.lattice α β), lt := lattice.lt (prod.lattice α β), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (prod.lattice α β), inf_le_left := _, inf_le_right := _, le_inf := _, bot := bounded_order.bot (prod.bounded_order α β), sdiff := has_sdiff.sdiff prod.has_sdiff, bot_le := _, sdiff_le_iff := _, top := bounded_order.top (prod.bounded_order α β), hnot := has_hnot.hnot prod.has_hnot, le_top := _, top_sdiff := _}
Equations
- pi.coheyting_algebra = {sup := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), coheyting_algebra.sup (ᾰ i) (ᾰ_1 i), le := partial_order.le pi.partial_order, lt := partial_order.lt pi.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), coheyting_algebra.inf (ᾰ i) (ᾰ_1 i), inf_le_left := _, inf_le_right := _, le_inf := _, bot := λ (i : ι), coheyting_algebra.bot, sdiff := λ (ᾰ ᾰ_1 : Π (i : ι), α i) (i : ι), coheyting_algebra.sdiff (ᾰ i) (ᾰ_1 i), bot_le := _, sdiff_le_iff := _, top := λ (i : ι), coheyting_algebra.top, hnot := λ (ᾰ : Π (i : ι), α i) (i : ι), coheyting_algebra.hnot (ᾰ i), le_top := _, top_sdiff := _}
Propositions form a Heyting algebra with implication as Heyting implication and negation as complement.
Equations
- Prop.heyting_algebra = {sup := distrib_lattice.sup Prop.distrib_lattice, le := distrib_lattice.le Prop.distrib_lattice, lt := distrib_lattice.lt Prop.distrib_lattice, le_refl := Prop.heyting_algebra._proof_1, le_trans := Prop.heyting_algebra._proof_2, lt_iff_le_not_le := Prop.heyting_algebra._proof_3, le_antisymm := Prop.heyting_algebra._proof_4, le_sup_left := Prop.heyting_algebra._proof_5, le_sup_right := Prop.heyting_algebra._proof_6, sup_le := Prop.heyting_algebra._proof_7, inf := distrib_lattice.inf Prop.distrib_lattice, inf_le_left := Prop.heyting_algebra._proof_8, inf_le_right := Prop.heyting_algebra._proof_9, le_inf := Prop.heyting_algebra._proof_10, top := bounded_order.top Prop.bounded_order, himp := λ (_x _y : Prop), _x → _y, le_top := Prop.heyting_algebra._proof_11, le_himp_iff := Prop.heyting_algebra._proof_12, bot := bounded_order.bot Prop.bounded_order, compl := has_compl.compl Prop.has_compl, bot_le := Prop.heyting_algebra._proof_13, himp_bot := Prop.heyting_algebra._proof_14}
A bounded linear order is a bi-Heyting algebra by setting
a ⇨ b = ⊤
ifa ≤ b
anda ⇨ b = b
otherwise.a \ b = ⊥
ifa ≤ b
anda \ b = a
otherwise.
Equations
- linear_order.to_biheyting_algebra = {sup := lattice.sup linear_order.to_lattice, le := lattice.le linear_order.to_lattice, lt := lattice.lt linear_order.to_lattice, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf linear_order.to_lattice, inf_le_left := _, inf_le_right := _, le_inf := _, top := bounded_order.top _inst_2, himp := λ (a b : α), ite (a ≤ b) ⊤ b, le_top := _, le_himp_iff := _, bot := bounded_order.bot _inst_2, compl := λ (a : α), ite (a = ⊥) ⊤ ⊥, bot_le := _, himp_bot := _, sdiff := λ (a b : α), ite (a ≤ b) ⊥ a, hnot := λ (a : α), ite (a = ⊤) ⊥ ⊤, sdiff_le_iff := _, top_sdiff := _}
Pullback a generalized_heyting_algebra
along an injection.
Equations
- function.injective.generalized_heyting_algebra f hf map_sup map_inf map_top map_himp = {sup := lattice.sup (function.injective.lattice f hf map_sup map_inf), le := lattice.le (function.injective.lattice f hf map_sup map_inf), lt := lattice.lt (function.injective.lattice f hf map_sup map_inf), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (function.injective.lattice f hf map_sup map_inf), inf_le_left := _, inf_le_right := _, le_inf := _, top := ⊤, himp := has_himp.himp _inst_4, le_top := _, le_himp_iff := _}
Pullback a generalized_coheyting_algebra
along an injection.
Equations
- function.injective.generalized_coheyting_algebra f hf map_sup map_inf map_bot map_sdiff = {sup := lattice.sup (function.injective.lattice f hf map_sup map_inf), le := lattice.le (function.injective.lattice f hf map_sup map_inf), lt := lattice.lt (function.injective.lattice f hf map_sup map_inf), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (function.injective.lattice f hf map_sup map_inf), inf_le_left := _, inf_le_right := _, le_inf := _, bot := ⊥, sdiff := has_sdiff.sdiff _inst_4, bot_le := _, sdiff_le_iff := _}
Pullback a heyting_algebra
along an injection.
Equations
- function.injective.heyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_himp = {sup := generalized_heyting_algebra.sup (function.injective.generalized_heyting_algebra f hf map_sup map_inf map_top map_himp), le := generalized_heyting_algebra.le (function.injective.generalized_heyting_algebra f hf map_sup map_inf map_top map_himp), lt := generalized_heyting_algebra.lt (function.injective.generalized_heyting_algebra f hf map_sup map_inf map_top map_himp), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := generalized_heyting_algebra.inf (function.injective.generalized_heyting_algebra f hf map_sup map_inf map_top map_himp), inf_le_left := _, inf_le_right := _, le_inf := _, top := generalized_heyting_algebra.top (function.injective.generalized_heyting_algebra f hf map_sup map_inf map_top map_himp), himp := generalized_heyting_algebra.himp (function.injective.generalized_heyting_algebra f hf map_sup map_inf map_top map_himp), le_top := _, le_himp_iff := _, bot := ⊥, compl := has_compl.compl _inst_5, bot_le := _, himp_bot := _}
Pullback a coheyting_algebra
along an injection.
Equations
- function.injective.coheyting_algebra f hf map_sup map_inf map_top map_bot map_hnot map_sdiff = {sup := generalized_coheyting_algebra.sup (function.injective.generalized_coheyting_algebra f hf map_sup map_inf map_bot map_sdiff), le := generalized_coheyting_algebra.le (function.injective.generalized_coheyting_algebra f hf map_sup map_inf map_bot map_sdiff), lt := generalized_coheyting_algebra.lt (function.injective.generalized_coheyting_algebra f hf map_sup map_inf map_bot map_sdiff), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := generalized_coheyting_algebra.inf (function.injective.generalized_coheyting_algebra f hf map_sup map_inf map_bot map_sdiff), inf_le_left := _, inf_le_right := _, le_inf := _, bot := generalized_coheyting_algebra.bot (function.injective.generalized_coheyting_algebra f hf map_sup map_inf map_bot map_sdiff), sdiff := generalized_coheyting_algebra.sdiff (function.injective.generalized_coheyting_algebra f hf map_sup map_inf map_bot map_sdiff), bot_le := _, sdiff_le_iff := _, top := ⊤, hnot := has_hnot.hnot _inst_5, le_top := _, top_sdiff := _}
Pullback a biheyting_algebra
along an injection.
Equations
- function.injective.biheyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_hnot map_himp map_sdiff = {sup := heyting_algebra.sup (function.injective.heyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_himp), le := heyting_algebra.le (function.injective.heyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_himp), lt := heyting_algebra.lt (function.injective.heyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_himp), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := heyting_algebra.inf (function.injective.heyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_himp), inf_le_left := _, inf_le_right := _, le_inf := _, top := heyting_algebra.top (function.injective.heyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_himp), himp := heyting_algebra.himp (function.injective.heyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_himp), le_top := _, le_himp_iff := _, bot := heyting_algebra.bot (function.injective.heyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_himp), compl := heyting_algebra.compl (function.injective.heyting_algebra f hf map_sup map_inf map_top map_bot map_compl map_himp), bot_le := _, himp_bot := _, sdiff := coheyting_algebra.sdiff (function.injective.coheyting_algebra f hf map_sup map_inf map_top map_bot map_hnot map_sdiff), hnot := coheyting_algebra.hnot (function.injective.coheyting_algebra f hf map_sup map_inf map_top map_bot map_hnot map_sdiff), sdiff_le_iff := _, top_sdiff := _}
Equations
- punit.biheyting_algebra = {sup := λ (_x _x : punit), punit.star, le := linear_order.le punit.linear_order, lt := linear_order.lt punit.linear_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := punit.biheyting_algebra._proof_1, le_sup_right := punit.biheyting_algebra._proof_2, sup_le := punit.biheyting_algebra._proof_3, inf := λ (_x _x : punit), punit.star, inf_le_left := punit.biheyting_algebra._proof_4, inf_le_right := punit.biheyting_algebra._proof_5, le_inf := punit.biheyting_algebra._proof_6, top := punit.star, himp := λ (_x _x : punit), punit.star, le_top := punit.biheyting_algebra._proof_7, le_himp_iff := punit.biheyting_algebra._proof_8, bot := punit.star, compl := λ (_x : punit), punit.star, bot_le := punit.biheyting_algebra._proof_9, himp_bot := punit.biheyting_algebra._proof_10, sdiff := λ (_x _x : punit), punit.star, hnot := λ (_x : punit), punit.star, sdiff_le_iff := punit.biheyting_algebra._proof_11, top_sdiff := punit.biheyting_algebra._proof_12}