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.Complements pt fe
open import Locales.Frame 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}