\begin{code}
{-# OPTIONS --safe --without-K --lossy-unification #-}
open import MLTT.Spartan hiding (π)
open import UF.FunExt
open import UF.PropTrunc
open import UF.Size
open import UF.SubtypeClassifier
module Locales.HeytingComplementation (pt : propositional-truncations-exist)
(fe : Fun-Ext)
(sr : Set-Replacement pt) where
open import Locales.Frame pt fe
open import Locales.HeytingImplication pt fe
open import Locales.Complements pt fe
open import Locales.Clopen pt fe sr
open import UF.Logic
open AllCombinators pt fe
open Locale
module HeytingComplementationLemmas (X : Locale π€ π₯ π₯)
(π· : has-basis (πͺ X) holds) where
open HeytingImplicationConstruction X π·
complement-is-heyting-complement : (C Cβ² : β¨ πͺ X β©)
β is-boolean-complement-of (πͺ X) Cβ² C holds
β Cβ² οΌ C ==> π[ πͺ X ]
complement-is-heyting-complement C Cβ² (p , q) =
β€-is-antisymmetric (poset-of (πͺ X)) β β‘
where
open PosetReasoning (poset-of (πͺ X))
β» : (((C ==> π[ πͺ X ]) β§[ πͺ X ] (C β¨[ πͺ X ] Cβ²)) β€[ poset-of (πͺ X) ] Cβ²) holds
β» =
(C ==> π[ πͺ X ]) β§[ πͺ X ] (C β¨[ πͺ X ] Cβ²) οΌβ¨ β
β©β
((C ==> π[ πͺ X ]) β§[ πͺ X ] C) β¨[ πͺ X ] ((C ==> π[ πͺ X ]) β§[ πͺ X ] Cβ²) β€β¨ β
‘ β©
Cβ² β
where
β
= binary-distributivity (πͺ X) (C ==> π[ πͺ X ]) C Cβ²
β
‘ = β¨[ πͺ X ]-least
((C ==> π[ πͺ X ]) β§[ πͺ X ] C β€β¨ mp-right C π[ πͺ X ] β©
π[ πͺ X ] β€β¨ π-is-bottom (πͺ X) Cβ² β©
Cβ² β )
(β§[ πͺ X ]-lowerβ (C ==> π[ πͺ X ]) Cβ²)
β : (Cβ² β€[ poset-of (πͺ X) ] (C ==> π[ πͺ X ])) holds
β = heyting-implicationβ C π[ πͺ X ] Cβ² β β
where
β β : ((Cβ² β§[ πͺ X ] C) β€[ poset-of (πͺ X) ] π[ πͺ X ]) holds
β β = Cβ² β§[ πͺ X ] C οΌβ¨ β§[ πͺ X ]-is-commutative Cβ² C β©β
C β§[ πͺ X ] Cβ² οΌβ¨ p β©β
π[ πͺ X ] β
β‘ : (C ==> π[ πͺ X ] β€[ poset-of (πͺ X) ] Cβ²) holds
β‘ = C ==> π[ πͺ X ] β€β¨ β
β©
(C β¨[ πͺ X ] Cβ²) ==> Cβ² οΌβ¨ β
‘ β©β
π[ πͺ X ] ==> Cβ² οΌβ¨ π-==>-law Cβ² β»ΒΉ β©β
Cβ² β
where
β
= heyting-implicationβ (C β¨[ πͺ X ] Cβ²) Cβ² (C ==> π[ πͺ X ]) β»
β
‘ = ap (Ξ» - β - ==> Cβ²) q
heyting-complement-is-complement : (C Cβ² : β¨ πͺ X β©)
β is-boolean-complement-of (πͺ X) Cβ² C holds
β is-boolean-complement-of (πͺ X) (C ==> π[ πͺ X ]) C holds
heyting-complement-is-complement C Cβ² (p , q) = β , β‘
where
β : C β§[ πͺ X ] (C ==> π[ πͺ X ]) οΌ π[ πͺ X ]
β = C β§[ πͺ X ] (C ==> π[ πͺ X ]) οΌβ¨ β» β©
C β§[ πͺ X ] Cβ² οΌβ¨ p β©
π[ πͺ X ] β
where
β» = ap
(Ξ» - β C β§[ πͺ X ] -)
(complement-is-heyting-complement C Cβ² (p , q) β»ΒΉ)
β‘ : C β¨[ πͺ X ] (C ==> π[ πͺ X ]) οΌ π[ πͺ X ]
β‘ = C β¨[ πͺ X ] (C ==> π[ πͺ X ]) οΌβ¨ β» β©
C β¨[ πͺ X ] Cβ² οΌβ¨ q β©
π[ πͺ X ] β
where
β» = ap
(Ξ» - β C β¨[ πͺ X ] -)
(complement-is-heyting-complement C Cβ² (p , q) β»ΒΉ)
material-implication : (C U : β¨ πͺ X β©)
β is-clopenβ (πͺ X) C
β (C ==> U) οΌ (C ==> π[ πͺ X ]) β¨[ πͺ X ] U
material-implication C U (Cβ² , p , q) = β€-is-antisymmetric (poset-of (πͺ X)) β β‘
where
open PosetReasoning (poset-of (πͺ X))
β : ((C ==> U) β€[ poset-of (πͺ X) ] ((C ==> π[ πͺ X ]) β¨[ πͺ X ] U)) holds
β = (C ==> U) β€β¨ β
β©
(C β¨[ πͺ X ] Cβ²) ==> ((C ==> π[ πͺ X ]) β¨[ πͺ X ] U) οΌβ¨ β
‘ β©β
π[ πͺ X ] ==> ((C ==> π[ πͺ X ]) β¨[ πͺ X ] U) οΌβ¨ β
’ β©β
(C ==> π[ πͺ X ]) β¨[ πͺ X ] U β
where
β» = (C ==> U) β§[ πͺ X ] (C β¨[ πͺ X ] Cβ²) οΌβ¨ β
β©β
((C ==> U) β§[ πͺ X ] C) β¨[ πͺ X ] ((C ==> U) β§[ πͺ X ] Cβ²) β€β¨ β
‘ β©
U β¨[ πͺ X ] ((C ==> U) β§[ πͺ X ] Cβ²) β€β¨ β
’ β©
U β¨[ πͺ X ] Cβ² οΌβ¨ β
£ β©β
Cβ² β¨[ πͺ X ] U οΌβ¨ β
€ β©β
(C ==> π[ πͺ X ]) β¨[ πͺ X ] U β
where
β
= binary-distributivity (πͺ X) (C ==> U) C Cβ²
β
‘ = β¨[ πͺ X ]-left-monotone (mp-right C U)
β
’ = β¨[ πͺ X ]-right-monotone (β§[ πͺ X ]-lowerβ (C ==> U) Cβ²)
β
£ = β¨[ πͺ X ]-is-commutative U Cβ²
β
€ = ap
(Ξ» - β - β¨[ πͺ X ] U)
(complement-is-heyting-complement C Cβ² (p , q))
β
= heyting-implicationβ
(C β¨[ πͺ X ] Cβ²)
((C ==> π[ πͺ X ]) β¨[ πͺ X ] U)
(C ==> U)
β»
β
‘ = ap (Ξ» - β - ==> ((C ==> π[ πͺ X ]) β¨[ πͺ X ] U)) q
β
’ = π-==>-law ((C ==> π[ πͺ X ]) β¨[ πͺ X ] U) β»ΒΉ
β‘ : (((C ==> π[ πͺ X ]) β¨[ πͺ X ] U) β€[ poset-of (πͺ X) ] (C ==> U)) holds
β‘ = heyting-implicationβ C U ((C ==> π[ πͺ X ]) β¨[ πͺ X ] U) β‘β
where
β‘β : ((((C ==> π[ πͺ X ]) β¨[ πͺ X ] U) β§[ πͺ X ] C)
β€[ poset-of (πͺ X) ]
U) holds
β‘β = ((C ==> π[ πͺ X ]) β¨[ πͺ X ] U) β§[ πͺ X ] C οΌβ¨ β
β©β
((C ==> π[ πͺ X ]) β§[ πͺ X ] C) β¨[ πͺ X ] (U β§[ πͺ X ] C) β€β¨ β
‘ β©
U β
where
β» = (C ==> π[ πͺ X ]) β§[ πͺ X ] C β€β¨ mp-right C π[ πͺ X ] β©
π[ πͺ X ] β€β¨ π-is-bottom (πͺ X) U β©
U β
β
= binary-distributivity-right (πͺ X)
β
‘ = β¨[ πͺ X ]-least β» (β§[ πͺ X ]-lowerβ U C)
double-negation-elimination : (C : β¨ πͺ X β©)
β is-clopenβ (πͺ X) C
β (C ==> π[ πͺ X ]) ==> π[ πͺ X ] οΌ C
double-negation-elimination C (Cβ² , p , q) =
β€-is-antisymmetric (poset-of (πͺ X)) β β‘
where
open PosetReasoning (poset-of (πͺ X))
β : (((C ==> π[ πͺ X ]) ==> π[ πͺ X ]) β€[ poset-of (πͺ X) ] C) holds
β = (C ==> π[ πͺ X ]) ==> π[ πͺ X ] οΌβ¨ β
β©β
Cβ² ==> π[ πͺ X ] οΌβ¨ β
‘ β©β
C β
where
β
= ap
(Ξ» - β - ==> π[ πͺ X ])
(complement-is-heyting-complement C Cβ² (p , q) β»ΒΉ)
β
‘ = complement-is-heyting-complement Cβ² C (β
‘β , β
‘β) β»ΒΉ
where
β
‘β = Cβ² β§[ πͺ X ] C οΌβ¨ β§[ πͺ X ]-is-commutative Cβ² C β©
C β§[ πͺ X ] Cβ² οΌβ¨ p β©
π[ πͺ X ] β
β
‘β = Cβ² β¨[ πͺ X ] C οΌβ¨ β¨[ πͺ X ]-is-commutative Cβ² C β©
C β¨[ πͺ X ] Cβ² οΌβ¨ q β©
π[ πͺ X ] β
β‘ : (C β€[ poset-of (πͺ X) ] (C ==> π[ πͺ X ]) ==> π[ πͺ X ]) holds
β‘ = heyting-implicationβ (C ==> π[ πͺ X ]) π[ πͺ X ] C β‘β
where
β‘β : ((C β§[ πͺ X ] (C ==> π[ πͺ X ])) β€[ poset-of (πͺ X) ] π[ πͺ X ]) holds
β‘β = mp-left C π[ πͺ X ]
negation-β¨-lemmaβ : {U V W : β¨ πͺ X β©}
β is-clopenβ (πͺ X) V
β (U β€[ poset-of (πͺ X) ] (V β¨[ πͺ X ] W)) holds
β ((U β§[ πͺ X ] (V ==> π[ πͺ X ]))
β€[ poset-of (πͺ X) ]
W) holds
negation-β¨-lemmaβ {U} {V} {W} (Vβ² , p , q) Ο =
U β§[ πͺ X ] (V ==> π[ πͺ X ]) οΌβ¨ β
β©β
U β§[ πͺ X ] Vβ² β€β¨ β
‘ β©
(V β¨[ πͺ X ] W) β§[ πͺ X ] Vβ² οΌβ¨ β
’ β©β
(V β§[ πͺ X ] Vβ²) β¨[ πͺ X ] (W β§[ πͺ X ] Vβ²) οΌβ¨ β
£ β©β
π[ πͺ X ] β¨[ πͺ X ] (W β§[ πͺ X ] Vβ²) οΌβ¨ β
€ β©β
W β§[ πͺ X ] Vβ² β€β¨ β
₯ β©
W β
where
open PosetReasoning (poset-of (πͺ X))
β
= ap
(Ξ» - β U β§[ πͺ X ] -)
(complement-is-heyting-complement V Vβ² (p , q) β»ΒΉ)
β
‘ = β§[ πͺ X ]-left-monotone Ο
β
’ = binary-distributivity-right (πͺ X)
β
£ = ap (Ξ» - β - β¨[ πͺ X ] (W β§[ πͺ X ] Vβ²)) p
β
€ = π-right-unit-of-β¨ (πͺ X) (W β§[ πͺ X ] Vβ²)
β
₯ = β§[ πͺ X ]-lowerβ W Vβ²
negation-β¨-lemmaβ : {U V W : β¨ πͺ X β©}
β is-clopenβ (πͺ X) V
β ((U β§[ πͺ X ] (V ==> π[ πͺ X ]))
β€[ poset-of (πͺ X) ]
W) holds
β (U β€[ poset-of (πͺ X) ] (V β¨[ πͺ X ] W)) holds
negation-β¨-lemmaβ {U} {V} {W} (Vβ² , p , q) Ο =
U οΌβ¨ β
β©β
U β§[ πͺ X ] π[ πͺ X ] οΌβ¨ β
‘ β©β
U β§[ πͺ X ] (V β¨[ πͺ X ] Vβ²) οΌβ¨ β
’ β©β
(U β§[ πͺ X ] V) β¨[ πͺ X ] (U β§[ πͺ X ] Vβ²) οΌβ¨ β
£ β©β
(U β§[ πͺ X ] V) β¨[ πͺ X ] (U β§[ πͺ X ] (V ==> π[ πͺ X ])) β€β¨ β
€ β©
(U β§[ πͺ X ] V) β¨[ πͺ X ] W β€β¨ β
₯ β©
V β¨[ πͺ X ] W β
where
open PosetReasoning (poset-of (πͺ X))
β
= π-right-unit-of-β§ (πͺ X) U β»ΒΉ
β
‘ = ap (Ξ» - β U β§[ πͺ X ] -) (q β»ΒΉ)
β
’ = binary-distributivity (πͺ X) U V Vβ²
β
£ = ap
(Ξ» - β (U β§[ πͺ X ] V) β¨[ πͺ X ] (U β§[ πͺ X ] -))
(complement-is-heyting-complement V Vβ² (p , q))
β
€ = β¨[ πͺ X ]-right-monotone Ο
β
₯ = β¨[ πͺ X ]-left-monotone (β§[ πͺ X ]-lowerβ U V)
\end{code}