Ayberk Tosun, 11 September 2023
\begin{code}[hide]
{-# OPTIONS --safe --without-K --lossy-unification #-}
open import MLTT.Spartan hiding (π)
open import UF.PropTrunc
open import UF.FunExt
open import UF.Size
module Locales.Clopen (pt : propositional-truncations-exist)
(fe : Fun-Ext)
(sr : Set-Replacement pt) where
open import Locales.Compactness.Definition pt fe
open import Locales.Complements pt fe
open import Locales.Frame pt fe
open import Locales.WayBelowRelation.Definition pt fe
open import Locales.WellInside pt fe sr
open import MLTT.List hiding ([_])
open import Slice.Family
open import UF.Base using (from-Ξ£-οΌ)
open import UF.Logic
open import UF.Subsingletons
open import UF.SubtypeClassifier
open AllCombinators pt fe
open PropositionalTruncation pt
open Locale
\end{code}
We define the notion of a clopen.
\begin{code}
is-clopenβ : (F : Frame π€ π₯ π¦) β β¨ F β© β π€ Μ
is-clopenβ F U = Ξ£ W κ β¨ F β© , is-boolean-complement-of F W U holds
is-clopenβ-is-prop : (F : Frame π€ π₯ π¦) β (U : β¨ F β©) β is-prop (is-clopenβ F U)
is-clopenβ-is-prop F U (Wβ , pβ , qβ) (Wβ , pβ , qβ) = to-subtype-οΌ Ξ² Ξ³
where
P = poset-of F
Ξ² : (W : β¨ F β©) β is-prop ((U β§[ F ] W οΌ π[ F ]) Γ (U β¨[ F ] W οΌ π[ F ]))
Ξ² W = Γ-is-prop carrier-of-[ P ]-is-set carrier-of-[ P ]-is-set
Ξ³ : Wβ οΌ Wβ
Ξ³ = Wβ οΌβ¨ (π-right-unit-of-β§ F Wβ) β»ΒΉ β©
Wβ β§[ F ] π[ F ] οΌβ¨ ap (Ξ» - β meet-of F Wβ -) (qβ β»ΒΉ) β©
Wβ β§[ F ] (U β¨[ F ] Wβ) οΌβ¨ binary-distributivity F Wβ U Wβ β©
(Wβ β§[ F ] U) β¨[ F ] (Wβ β§[ F ] Wβ) οΌβ¨ i β©
(U β§[ F ] Wβ) β¨[ F ] (Wβ β§[ F ] Wβ) οΌβ¨ ii β©
π[ F ] β¨[ F ] (Wβ β§[ F ] Wβ) οΌβ¨ iii β©
(U β§[ F ] Wβ) β¨[ F ] (Wβ β§[ F ] Wβ) οΌβ¨ iv β©
(Wβ β§[ F ] U) β¨[ F ] (Wβ β§[ F ] Wβ) οΌβ¨ v β©
(Wβ β§[ F ] U) β¨[ F ] (Wβ β§[ F ] Wβ) οΌβ¨ vi β©
Wβ β§[ F ] (U β¨[ F ] Wβ) οΌβ¨ vii β©
Wβ β§[ F ] π[ F ] οΌβ¨ viii β©
Wβ β
where
i = ap (Ξ» - β - β¨[ F ] (Wβ β§[ F ] Wβ)) (β§[ F ]-is-commutative Wβ U)
ii = ap (Ξ» - β - β¨[ F ] (Wβ β§[ F ] Wβ)) pβ
iii = ap (Ξ» - β - β¨[ F ] (Wβ β§[ F ] Wβ)) (pβ β»ΒΉ)
iv = ap (Ξ» - β - β¨[ F ] (Wβ β§[ F ] Wβ)) (β§[ F ]-is-commutative U Wβ)
v = ap (Ξ» - β (Wβ β§[ F ] U) β¨[ F ] -) (β§[ F ]-is-commutative Wβ Wβ)
vi = binary-distributivity F Wβ U Wβ β»ΒΉ
vii = ap (Ξ» - β Wβ β§[ F ] -) qβ
viii = π-right-unit-of-β§ F Wβ
\end{code}
The definition of the notion of clopen.
\begin{code}
is-clopen : (F : Frame π€ π₯ π¦) β β¨ F β© β Ξ© π€
is-clopen F U = is-clopenβ F U , is-clopenβ-is-prop F U
\end{code}
The type of clopens of a locale `X`.
\begin{code}
π : Locale π€ π₯ π¦ β π€ Μ
π X = Ξ£ C κ β¨ πͺ X β© , is-clopen (πͺ X) C holds
\end{code}
The top element `π` is always a clopen.
\begin{code}
π-is-clopen : (L : Frame π€ π₯ π¦) β is-clopen L π[ L ] holds
π-is-clopen L = π[ L ] , β , β‘
where
β : π[ L ] β§[ L ] π[ L ] οΌ π[ L ]
β = π-right-annihilator-for-β§ L π[ L ]
β‘ : π[ L ] β¨[ L ] π[ L ] οΌ π[ L ]
β‘ = π-left-annihilator-for-β¨ L π[ L ]
\end{code}
\begin{code}
consists-of-clopens : (F : Frame π€ π₯ π¦) β Fam π¦ β¨ F β© β Ξ© (π€ β π¦)
consists-of-clopens F S = β±― i κ index S , is-clopen F (S [ i ])
\end{code}
\begin{code}
β§-complement : (F : Frame π€ π₯ π¦)
β {x y xβ² yβ² : β¨ F β©}
β is-boolean-complement-of F x xβ² holds
β is-boolean-complement-of F y yβ² holds
β is-boolean-complement-of F (xβ² β¨[ F ] yβ²) (x β§[ F ] y) holds
β§-complement F {x} {y} {xβ²} {yβ²} Ο Ο = Ξ² , Ξ³
where
open PosetReasoning (poset-of F)
_β_ = Ξ» x y β x β§[ F ] y
Οβ : x β xβ² οΌ π[ F ]
Οβ = x β xβ² οΌβ¨ β§[ F ]-is-commutative x xβ² β© xβ² β x οΌβ¨ prβ Ο β© π[ F ] β
Οβ : y β yβ² οΌ π[ F ]
Οβ = y β yβ² οΌβ¨ β§[ F ]-is-commutative y yβ² β© yβ² β y οΌβ¨ prβ Ο β© π[ F ] β
Οβ : x β¨[ F ] xβ² οΌ π[ F ]
Οβ = x β¨[ F ] xβ² οΌβ¨ β¨[ F ]-is-commutative x xβ² β©
xβ² β¨[ F ] x οΌβ¨ prβ Ο β©
π[ F ] β
Ξ² : (x β§[ F ] y) β§[ F ] (xβ² β¨[ F ] yβ²) οΌ π[ F ]
Ξ² = (x β y) β (xβ² β¨[ F ] yβ²) οΌβ¨ β
β©
((x β y) β xβ²) β¨[ F ] ((x β y) β yβ²) οΌβ¨ β
‘ β©
((y β x) β xβ²) β¨[ F ] ((x β y) β yβ²) οΌβ¨ β
’ β©
(y β (x β xβ²)) β¨[ F ] ((x β y) β yβ²) οΌβ¨ β
£ β©
(y β π[ F ]) β¨[ F ] ((x β y) β yβ²) οΌβ¨ β
€ β©
π[ F ] β¨[ F ] ((x β y) β yβ²) οΌβ¨ β
₯ β©
(x β y) β yβ² οΌβ¨ β
¦ β©
x β (y β yβ²) οΌβ¨ β
§ β©
x β π[ F ] οΌβ¨ β
¨ β©
π[ F ] β
where
β
= binary-distributivity F (x β y) xβ² yβ²
β
‘ = ap (Ξ» - β (- β xβ²) β¨[ F ] ((x β y) β yβ²)) (β§[ F ]-is-commutative x y)
β
’ = ap (Ξ» - β - β¨[ F ] ((x β y) β yβ²)) (β§[ F ]-is-associative y x xβ² β»ΒΉ)
β
£ = ap (Ξ» - β (y β -) β¨[ F ] ((x β y) β yβ²)) Οβ
β
€ = ap (Ξ» - β - β¨[ F ] ((x β y) β yβ²)) (π-right-annihilator-for-β§ F y)
β
₯ = π-right-unit-of-β¨ F ((x β y) β yβ²)
β
¦ = β§[ F ]-is-associative x y yβ² β»ΒΉ
β
§ = ap (Ξ» - β x β -) Οβ
β
¨ = π-right-annihilator-for-β§ F x
Ξ³ : (x β y) β¨[ F ] (xβ² β¨[ F ] yβ²) οΌ π[ F ]
Ξ³ = (x β y) β¨[ F ] (xβ² β¨[ F ] yβ²) οΌβ¨ β
β©
(xβ² β¨[ F ] yβ²) β¨[ F ] (x β y) οΌβ¨ β
‘ β©
((xβ² β¨[ F ] yβ²) β¨[ F ] x) β§[ F ] ((xβ² β¨[ F ] yβ²) β¨[ F ] y) οΌβ¨ β
’ β©
((yβ² β¨[ F ] xβ²) β¨[ F ] x) β§[ F ] ((xβ² β¨[ F ] yβ²) β¨[ F ] y) οΌβ¨ β
£ β©
(yβ² β¨[ F ] (xβ² β¨[ F ] x)) β§[ F ] ((xβ² β¨[ F ] yβ²) β¨[ F ] y) οΌβ¨ β
€ β©
(yβ² β¨[ F ] π[ F ]) β§[ F ] ((xβ² β¨[ F ] yβ²) β¨[ F ] y) οΌβ¨ β
₯ β©
π[ F ] β§[ F ] ((xβ² β¨[ F ] yβ²) β¨[ F ] y) οΌβ¨ β
¦ β©
(xβ² β¨[ F ] yβ²) β¨[ F ] y οΌβ¨ β
§ β©
xβ² β¨[ F ] (yβ² β¨[ F ] y) οΌβ¨ β
¨ β©
xβ² β¨[ F ] π[ F ] οΌβ¨ β
© β©
π[ F ] β
where
β = β¨[ F ]-is-commutative xβ² yβ²
β‘ = π-right-annihilator-for-β¨ F yβ²
β
= β¨[ F ]-is-commutative (x β y) (xβ² β¨[ F ] yβ²)
β
‘ = binary-distributivity-op F (xβ² β¨[ F ] yβ²) x y
β
’ = ap (Ξ» - β (- β¨[ F ] x) β§[ F ] ((_ β¨[ F ] _) β¨[ F ] y)) β
β
£ = ap (Ξ» - β - β§[ F ] ((xβ² β¨[ F ] yβ²) β¨[ F ] y)) (β¨[ F ]-assoc yβ² xβ² x)
β
€ = ap (Ξ» - β (yβ² β¨[ F ] -) β§[ F ] ((xβ² β¨[ F ] yβ²) β¨[ F ] y)) (prβ Ο)
β
₯ = ap (Ξ» - β - β§[ F ] ((xβ² β¨[ F ] yβ²) β¨[ F ] y)) β‘
β
¦ = π-left-unit-of-β§ F ((xβ² β¨[ F ] yβ²) β¨[ F ] y)
β
§ = β¨[ F ]-assoc xβ² yβ² y
β
¨ = ap (Ξ» - β xβ² β¨[ F ] -) (prβ Ο)
β
© = π-right-annihilator-for-β¨ F xβ²
\end{code}
\begin{code}
clopens-are-closed-under-β§ : (F : Frame π€ π₯ π¦) (x y : β¨ F β©)
β (is-clopen F x
β is-clopen F y
β is-clopen F (x β§[ F ] y)) holds
clopens-are-closed-under-β§ F x y Οβ@(xβ² , Οβ , Οβ) Οβ@(yβ² , Οβ , Οβ) =
(xβ² β¨[ F ] yβ²) , β
where
β‘β : is-boolean-complement-of F x xβ² holds
β‘β = (xβ² β§[ F ] x οΌβ¨ β§[ F ]-is-commutative xβ² x β© x β§[ F ] xβ² οΌβ¨ Οβ β© π[ F ] β)
, (xβ² β¨[ F ] x οΌβ¨ β¨[ F ]-is-commutative xβ² x β© x β¨[ F ] xβ² οΌβ¨ Οβ β© π[ F ] β)
β‘β : is-boolean-complement-of F y yβ² holds
β‘β = (yβ² β§[ F ] y οΌβ¨ β§[ F ]-is-commutative yβ² y β© y β§[ F ] yβ² οΌβ¨ Οβ β© π[ F ] β)
, (yβ² β¨[ F ] y οΌβ¨ β¨[ F ]-is-commutative yβ² y β© y β¨[ F ] yβ² οΌβ¨ Οβ β© π[ F ] β)
β : is-boolean-complement-of F (xβ² β¨[ F ] yβ²) (x β§[ F ] y) holds
β = β§-complement F β‘β β‘β
\end{code}
Given a family `S`, consisting of clopens, then `directify S` also consists of
clopens.
\begin{code}
clopens-are-closed-under-β¨ : (F : Frame π€ π₯ π¦) (x y : β¨ F β©)
β (is-clopen F x
β is-clopen F y
β is-clopen F (x β¨[ F ] y)) holds
clopens-are-closed-under-β¨ F x y (xβ² , Ο‘β , Οβ) (yβ² , Ο‘β , Οβ) =
(xβ² β§[ F ] yβ²) , β , β‘
where
open PosetReasoning (poset-of F)
β β : (((x β¨[ F ] y) β§[ F ] (xβ² β§[ F ] yβ²)) β€[ poset-of F ] π[ F ]) holds
β β =
(x β¨[ F ] y) β§[ F ] (xβ² β§[ F ] yβ²) οΌβ¨ β
β©β
(x β§[ F ] (xβ² β§[ F ] yβ²)) β¨[ F ] (y β§[ F ] (xβ² β§[ F ] yβ²)) β€β¨ β
‘ β©
(x β§[ F ] xβ²) β¨[ F ] (y β§[ F ] (xβ² β§[ F ] yβ²)) β€β¨ β
’ β©
(x β§[ F ] xβ²) β¨[ F ] (y β§[ F ] yβ²) β€β¨ β
£ β©
π[ F ] β¨[ F ] (y β§[ F ] yβ²) β€β¨ β
€ β©
π[ F ] β¨[ F ] π[ F ] οΌβ¨ β
₯ β©β
π[ F ] β
where
β
= binary-distributivity-right F
β
‘ = β¨[ F ]-left-monotone (β§[ F ]-right-monotone (β§[ F ]-lowerβ xβ² yβ²))
β
’ = β¨[ F ]-right-monotone (β§[ F ]-right-monotone (β§[ F ]-lowerβ xβ² yβ²))
β
£ = β¨[ F ]-left-monotone (reflexivity+ (poset-of F) Ο‘β)
β
€ = β¨[ F ]-right-monotone (reflexivity+ (poset-of F) Ο‘β)
β
₯ = β¨[ F ]-is-idempotent π[ F ] β»ΒΉ
β : (x β¨[ F ] y) β§[ F ] (xβ² β§[ F ] yβ²) οΌ π[ F ]
β = only-π-is-below-π F _ β β
β‘β : (π[ F ] β€[ poset-of F ] ((x β¨[ F ] y) β¨[ F ] (xβ² β§[ F ] yβ²))) holds
β‘β =
π[ F ] οΌβ¨ β
β©β
π[ F ] β§[ F ] π[ F ] β€β¨ β
‘ β©
(x β¨[ F ] xβ²) β§[ F ] π[ F ] β€β¨ β
’ β©
(x β¨[ F ] xβ²) β§[ F ] (y β¨[ F ] yβ²) β€β¨ β
£ β©
((x β¨[ F ] y ) β¨[ F ] xβ²)β§[ F ] (y β¨[ F ] yβ²) β€β¨ β
€ β©
((x β¨[ F ] y ) β¨[ F ] xβ²) β§[ F ] ((x β¨[ F ] y ) β¨[ F ] yβ²) οΌβ¨ β
₯ β©β
(x β¨[ F ] y) β¨[ F ] (xβ² β§[ F ] yβ²) β
where
β
= β§[ F ]-is-idempotent π[ F ]
β
‘ = β§[ F ]-left-monotone (reflexivity+ (poset-of F) (Οβ β»ΒΉ))
β
’ = β§[ F ]-right-monotone (reflexivity+ (poset-of F) (Οβ β»ΒΉ))
β
£ = β§[ F ]-left-monotone (β¨[ F ]-left-monotone (β¨[ F ]-upperβ x y))
β
€ = β§[ F ]-right-monotone (β¨[ F ]-left-monotone (β¨[ F ]-upperβ x y))
β
₯ = binary-distributivity-op F (x β¨[ F ] y) xβ² yβ² β»ΒΉ
β‘ : (x β¨[ F ] y) β¨[ F ] (xβ² β§[ F ] yβ²) οΌ π[ F ]
β‘ = only-π-is-above-π F _ β‘β
\end{code}
The bottom element is always clopen.
\begin{code}
π-is-clopen : (F : Frame π€ π₯ π¦) β is-clopenβ F π[ F ]
π-is-clopen F = π[ F ] , Ξ² , Ξ³
where
Ξ² : π[ F ] β§[ F ] π[ F ] οΌ π[ F ]
Ξ² = π-left-annihilator-for-β§ F π[ F ]
Ξ³ : π[ F ] β¨[ F ] π[ F ] οΌ π[ F ]
Ξ³ = π-right-annihilator-for-β¨ F π[ F ]
\end{code}
\begin{code}
directification-preserves-clopenness : (F : Frame π€ π₯ π¦)
β (β¬ : Fam π¦ β¨ F β©)
β (consists-of-clopens F β¬
β consists-of-clopens F (directify F β¬))
holds
directification-preserves-clopenness F β¬ ΞΎ [] = π-is-clopen F
directification-preserves-clopenness F β¬ ΞΎ (i β· is) =
clopens-are-closed-under-β¨ F (β¬ [ i ]) (directify F β¬ [ is ]) (ΞΎ i) ββ
where
abstract
ββ : is-clopen F (directify F β¬ [ is ]) holds
ββ = directification-preserves-clopenness F β¬ ΞΎ is
\end{code}
\begin{code}
well-inside-itself-implies-clopen : (X : Locale π€ π₯ π¦)
β (U : β¨ πͺ X β©)
β ((U β[ πͺ X ] U) β is-clopen (πͺ X) U) holds
well-inside-itself-implies-clopen X U =
β₯β₯-rec (holds-is-prop (is-clopen (πͺ X) U)) id
\end{code}
\begin{code}
complements-are-unique : (F : Frame π€ π₯ π¦) (U Vβ Vβ : β¨ F β©)
β is-boolean-complement-of F Vβ U holds
β is-boolean-complement-of F Vβ U holds
β Vβ οΌ Vβ
complements-are-unique F U Vβ Vβ p q =
prβ (from-Ξ£-οΌ (is-clopenβ-is-prop F U (Vβ , p) (Vβ , q)))
\end{code}