\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}