Heyting regular elements #
This file defines Heyting regular elements, elements of a Heyting algebra that are their own double complement, and proves that they form a boolean algebra.
From a logic standpoint, this means that we can perform classical logic within intuitionistic logic by simply double-negating all propositions. This is practical for synthetic computability theory.
Main declarations #
IsRegular
:a
is Heyting-regular ifaᶜᶜ = a
.Regular
: The subtype of Heyting-regular elements.Regular.BooleanAlgebra
: Heyting-regular elements form a boolean algebra.
References #
An element of a Heyting algebra is regular if its double complement is itself.
Equations
- Heyting.IsRegular a = (aᶜᶜ = a)
Instances For
instance
Heyting.IsRegular.decidablePred
{α : Type u_1}
[HasCompl α]
[DecidableEq α]
:
DecidablePred Heyting.IsRegular
Equations
- Heyting.IsRegular.decidablePred x = inst xᶜᶜ x
theorem
Heyting.IsRegular.inf
{α : Type u_1}
[HeytingAlgebra α]
{a b : α}
(ha : Heyting.IsRegular a)
(hb : Heyting.IsRegular b)
:
Heyting.IsRegular (a ⊓ b)
theorem
Heyting.IsRegular.himp
{α : Type u_1}
[HeytingAlgebra α]
{a b : α}
(ha : Heyting.IsRegular a)
(hb : Heyting.IsRegular b)
:
Heyting.IsRegular (a ⇨ b)
theorem
Heyting.IsRegular.disjoint_compl_left_iff
{α : Type u_1}
[HeytingAlgebra α]
{a b : α}
(ha : Heyting.IsRegular a)
:
theorem
Heyting.IsRegular.disjoint_compl_right_iff
{α : Type u_1}
[HeytingAlgebra α]
{a b : α}
(hb : Heyting.IsRegular b)
:
@[reducible, inline]
abbrev
BooleanAlgebra.ofRegular
{α : Type u_1}
[HeytingAlgebra α]
(h : ∀ (a : α), Heyting.IsRegular (a ⊔ aᶜ))
:
A Heyting algebra with regular excluded middle is a boolean algebra.
Equations
- BooleanAlgebra.ofRegular h = BooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
The boolean algebra of Heyting regular elements.
Equations
- Heyting.Regular α = { a : α // Heyting.IsRegular a }
Instances For
Equations
- Heyting.Regular.instCoeOut = { coe := Heyting.Regular.val }
theorem
Heyting.Regular.coe_injective
{α : Type u_1}
[HeytingAlgebra α]
:
Function.Injective Heyting.Regular.val
@[simp]
Equations
- Heyting.Regular.inf = { min := fun (a b : Heyting.Regular α) => ⟨↑a ⊓ ↑b, ⋯⟩ }
Equations
- Heyting.Regular.himp = { himp := fun (a b : Heyting.Regular α) => ⟨↑a ⇨ ↑b, ⋯⟩ }
Equations
- Heyting.Regular.hasCompl = { compl := fun (a : Heyting.Regular α) => ⟨(↑a)ᶜ, ⋯⟩ }
@[simp]
@[simp]
@[simp]
Equations
- Heyting.Regular.instSemilatticeInf = Function.Injective.semilatticeInf Heyting.Regular.val ⋯ ⋯
Equations
- Heyting.Regular.boundedOrder = BoundedOrder.lift Heyting.Regular.val ⋯ ⋯ ⋯
@[simp]
@[simp]
Regularization of a
. The smallest regular element greater than a
.
Instances For
@[simp]
@[simp]
theorem
Heyting.Regular.toRegular_coe
{α : Type u_1}
[HeytingAlgebra α]
(a : Heyting.Regular α)
:
Heyting.Regular.toRegular ↑a = a
def
Heyting.Regular.gi
{α : Type u_1}
[HeytingAlgebra α]
:
GaloisInsertion (⇑Heyting.Regular.toRegular) Heyting.Regular.val
The Galois insertion between Regular.toRegular
and coe
.
Equations
Instances For
Equations
- Heyting.Regular.lattice = Heyting.Regular.gi.liftLattice
@[simp]
Equations
- Heyting.Regular.instBooleanAlgebra = BooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
@[simp]
A decidable proposition is intuitionistically Heyting-regular.