Ayberk Tosun, 23 April 2022 (date started)
Based on `ayberkt/formal-topology-in-UF`.
\begin{code}[hide]
{-# OPTIONS --safe --without-K --lossy-unification #-}
open import UF.FunExt
open import UF.PropTrunc
open import UF.Size
\end{code}
\begin{code}[hide]
module Locales.PatchProperties
(pt : propositional-truncations-exist)
(fe : Fun-Ext)
(sr : Set-Replacement pt) where
open import Locales.AdjointFunctorTheoremForFrames pt fe
open import Locales.CharacterisationOfContinuity pt fe
open import Locales.Clopen pt fe sr
open import Locales.CompactRegular pt fe using (β¨-is-scott-continuous)
open import Locales.Compactness.Definition pt fe
open import Locales.Complements pt fe
open import Locales.ContinuousMap.Definition pt fe
open import Locales.ContinuousMap.FrameHomomorphism-Definition pt fe
open import Locales.ContinuousMap.FrameHomomorphism-Properties pt fe
open import Locales.Frame pt fe
open import Locales.HeytingImplication pt fe
open import Locales.Nucleus pt fe
open import Locales.PatchLocale pt fe sr
open import Locales.PerfectMaps pt fe
open import Locales.Regular pt fe sr
open import Locales.SmallBasis pt fe sr
open import Locales.Spectrality.SpectralLocale pt fe
open import Locales.Spectrality.SpectralMap pt fe
open import Locales.Stone pt fe sr
open import Locales.StoneImpliesSpectral pt fe sr
open import Locales.ZeroDimensionality pt fe sr
open import MLTT.List hiding ([_])
open import MLTT.Spartan hiding (π)
open import Slice.Family
open import UF.EquivalenceExamples
open import UF.Logic
open import UF.Subsingletons
open import UF.SubtypeClassifier
open AllCombinators pt fe
open ContinuousMaps
open FrameHomomorphismProperties
open FrameHomomorphisms hiding (fun-syntax; fun)
open Locale
open PropositionalTruncation pt
\end{code}
\section{Basic properties}
\begin{code}
module BasicProperties (X : Locale π€ π₯ π¦) (Ο : is-spectral X holds) where
open PatchConstruction X Ο renaming (Perfect-Nucleus to Perfect-Nucleus-on-X;
Patch to Patch-of-X)
\end{code}
We first prove the following lemma about directed families of nuclei, which
amounts the fact that the directification of an already directed family is
cofinal in the original family.
\begin{code}
directedness-lemma : (K : Fam π¦ Perfect-Nucleus-on-X)
β is-directed (πͺ Patch-of-X) K holds
β let
Kβ = β
prβ k β£ k Ξ΅ K β
in
(is : index (π‘π¦π― Kβ))
β β i κ index K , (((π‘π¦π― Kβ [ is ]) βΌβ (Kβ [ i ])) holds )
directedness-lemma K Ξ΄ [] = β₯β₯-rec β-is-prop Ξ³ Ξ²
where
open PosetReasoning (poset-of (πͺ X))
Kβ = β
prβ k β£ k Ξ΅ K β
Ξ² : β₯ index K β₯
Ξ² = directedness-entails-inhabitation (πͺ Patch-of-X) K Ξ΄
Ξ³ : index K β _
Ξ³ i = β£ i , πβ (πͺ X) (nucleus-of (K [ i ])) β£
directedness-lemma K Ξ΄ (i β· is) = β₯β₯-rec β-is-prop Ξ³ IH
where
open PosetReasoning (poset-of (πͺ X))
Kβ = β
prβ k β£ k Ξ΅ K β
Kβ = β
nucleus-of k β£ k Ξ΅ K β
Ξ³ : (Ξ£ j κ index K , (((π‘π¦π― Kβ [ is ]) βΌβ (Kβ [ j ])) holds))
β _
Ξ³ (j , Ο) = β₯β₯-rec β-is-prop β» (prβ Ξ΄ i j)
where
β» : _ β _
β» (l , Οβ , Οβ) = β£ l , β β£
where
β : ((π‘π¦π― Kβ [ i β· is ]) βΌβ (Kβ [ l ])) holds
β U = (π‘π¦π― Kβ [ is ]) ((Kβ [ i ]) U) β€β¨ β₯ β©
(Kβ [ j ]) ((Kβ [ i ]) U) β€β¨ β β©
(Kβ [ j ]) ((Kβ [ l ]) U) β€β¨ β£ β©
(Kβ [ l ]) ((Kβ [ l ]) U) οΌβ¨ β’ β©β
(Kβ [ l ]) U β
where
β₯ = Ο ((Kβ [ i ]) U)
β = nuclei-are-monotone (πͺ X) (Kβ [ j ]) _ (Οβ U)
β£ = Οβ ((Kβ [ l ]) U)
β’ = nuclei-are-idempotent (πͺ X) (Kβ [ l ]) U
IH : β j κ index K , (((π‘π¦π― Kβ [ is ]) βΌβ (Kβ [ j ])) holds)
IH = directedness-lemma K Ξ΄ is
\end{code}
\begin{code}
directed-joins-are-computed-pointwise : (K : Fam π¦ Perfect-Nucleus-on-X)
β is-directed (πͺ Patch-of-X) K holds
β (U : β¨ πͺ X β©)
β (β[ πͺ Patch-of-X ] K) $ U οΌ β[ πͺ X ] β
k $ U β£ k Ξ΅ K β
directed-joins-are-computed-pointwise K Ξ΄ U =
β€-is-antisymmetric (poset-of (πͺ X)) Ξ² Ξ³
where
open Joins (Ξ» x y β x β€[ poset-of (πͺ X) ] y)
open PosetReasoning (poset-of (πͺ X))
ππ½π = (β[ πͺ Patch-of-X ] K) $ U
ππ½π = β[ πͺ X ] β
k $ U β£ k Ξ΅ K β
Kβ = β
_$_ k β£ k Ξ΅ K β
β‘ : cofinal-in (πͺ X) β
Ξ± U β£ Ξ± Ξ΅ π‘π¦π― Kβ β β
k $ U β£ k Ξ΅ K β holds
β‘ is = β₯β₯-rec β-is-prop (Ξ» (j , Ο) β β£ j , Ο U β£) (directedness-lemma K Ξ΄ is)
Ξ² : (ππ½π β€[ poset-of (πͺ X) ] ππ½π) holds
Ξ² = cofinal-implies-join-covered (πͺ X) _ _ β‘
Ξ³ : (ππ½π β€[ poset-of (πͺ X) ] ππ½π) holds
Ξ³ = β[ πͺ X ]-least β
k $ U β£ k Ξ΅ K β (ππ½π , β )
where
β : (ππ½π is-an-upper-bound-of β
k $ U β£ k Ξ΅ K β) holds
β i = β[ πͺ Patch-of-X ]-upper K i U
\end{code}
\section{Open and closed nuclei}
\begin{code}
module ClosedNucleus (X : Locale π€ π₯ π¦) (Ο : is-spectral X holds) where
open PatchConstruction X Ο renaming (Perfect-Nucleus to Perfect-Nucleus-on-X)
β_β : β¨ πͺ X β© β Perfect-Nucleus-on-X
β U β = binary-join (πͺ X) U , β¨-is-nucleus (πͺ X) U , β¨-is-scott-continuous (πͺ X) U
\end{code}
\begin{code}
module OpenNucleus (X : Locale π€ π₯ π₯)
(Οα΄° : spectralα΄° X)
(sk : π¦ X is π₯ small) where
private
Ο : is-spectral X holds
Ο = spectralα΄°-gives-spectrality X Οα΄°
open PatchConstruction X Ο renaming (Perfect-Nucleus to Perfect-Nucleus-on-X)
private
X-has-small-basis : β₯ basisα΄° (πͺ X) β₯
X-has-small-basis = β£ spectralα΄°-implies-basisα΄° X Οα΄° β£
open HeytingImplicationConstruction X X-has-small-basis
opn : β¨ πͺ X β© β β¨ πͺ X β© β β¨ πͺ X β©
opn U = U ==>_
opn-monotone : (U : β¨ πͺ X β©)
β is-monotonic (poset-of (πͺ X)) (poset-of (πͺ X)) (opn U) holds
opn-monotone U (V , W) p = heyting-implicationβ U W (U ==> V) β
where
open PosetReasoning (poset-of (πͺ X))
β : (((U ==> V) β§[ πͺ X ] U) β€[ poset-of (πͺ X) ] W) holds
β = (U ==> V) β§[ πͺ X ] U β€β¨ mp-right U V β© V β€β¨ p β© W β
opn-is-inflationary : (U : β¨ πͺ X β©) β is-inflationary (πͺ X) (opn U) holds
opn-is-inflationary U V = heyting-implicationβ U V V (β§[ πͺ X ]-lowerβ V U)
opn-is-idempotent : (U : β¨ πͺ X β©) β is-idempotent (πͺ X) (opn U) holds
opn-is-idempotent U V = heyting-implicationβ U V (U ==> (U ==> V)) Ξ³
where
open PosetReasoning (poset-of (πͺ X))
Ξ³ : (((U ==> (U ==> V)) β§[ πͺ X ] U) β€[ poset-of (πͺ X) ] V) holds
Ξ³ = (U ==> (U ==> V)) β§[ πͺ X ] U οΌβ¨ i β©β
(U ==> (U ==> V)) β§[ πͺ X ] (U β§[ πͺ X ] U) οΌβ¨ ii β©β
((U ==> (U ==> V)) β§[ πͺ X ] U) β§[ πͺ X ] U β€β¨ iii β©
(U ==> V) β§[ πͺ X ] U β€β¨ iv β©
V β
where
i = ap (Ξ» - β (U ==> (U ==> V)) β§[ πͺ X ] -) (β§[ πͺ X ]-is-idempotent U)
ii = β§[ πͺ X ]-is-associative (U ==> (U ==> V)) U U
iii = β§[ πͺ X ]-left-monotone
(modus-ponens X (==>-is-heyting-implication U (U ==> V)))
iv = modus-ponens X (==>-is-heyting-implication U V)
opn-preserves-meets : (U : β¨ πͺ X β©)
β preserves-binary-meets (πͺ X) (πͺ X) (opn U) holds
opn-preserves-meets U V W = β€-is-antisymmetric (poset-of (πͺ X)) Ξ² Ξ³
where
open PosetReasoning (poset-of (πͺ X))
Ξ² : ((U ==> (V β§[ πͺ X ] W))
β€[ poset-of (πͺ X) ]
(U ==> V β§[ πͺ X ] (U ==> W)))
holds
Ξ² = β§[ πͺ X ]-greatest (U ==> V) (U ==> W) (U ==> meet-of (πͺ X) V W) Ξ²β Ξ²β
where
Ξ΄β : ((U ==> (V β§[ πͺ X ] W) β§[ πͺ X ] U) β€ V) holds
Ξ΄β = (U ==> (V β§[ πͺ X ] W)) β§[ πͺ X ] U β€β¨ mp-right U (V β§[ πͺ X ] W) β©
V β§[ πͺ X ] W β€β¨ β§[ πͺ X ]-lowerβ V W β©
V β
Ξ²β : ((U ==> (V β§[ πͺ X ] W)) β€[ poset-of (πͺ X) ] (U ==> V)) holds
Ξ²β = heyting-implicationβ U V (U ==> (V β§[ πͺ X ] W)) Ξ΄β
Ξ΄β : ((U ==> (V β§[ πͺ X ] W) β§[ πͺ X ] U) β€ W) holds
Ξ΄β = (U ==> (V β§[ πͺ X ] W)) β§[ πͺ X ] U β€β¨ mp-right U (V β§[ πͺ X ] W) β©
V β§[ πͺ X ] W β€β¨ β§[ πͺ X ]-lowerβ V W β©
W β
Ξ²β : ((U ==> (V β§[ πͺ X ] W)) β€[ poset-of (πͺ X) ] (U ==> W)) holds
Ξ²β = heyting-implicationβ U W (U ==> (V β§[ πͺ X ] W)) Ξ΄β
Ξ³ : (((U ==> V) β§[ πͺ X ] (U ==> W))
β€[ poset-of (πͺ X) ]
(U ==> (V β§[ πͺ X ] W)))
holds
Ξ³ = heyting-implicationβ U (V β§[ πͺ X ] W) ((U ==> V) β§[ πͺ X ] (U ==> W)) Ξ΄
where
i = ap
(Ξ» - β ((U ==> V) β§[ πͺ X ] (U ==> W)) β§[ πͺ X ] -)
(β§[ πͺ X ]-is-idempotent U)
ii = β§[ πͺ X ]-is-associative (U ==> V) (U ==> W) (U β§[ πͺ X ] U) β»ΒΉ
iii = ap
(Ξ» - β (U ==> V) β§[ πͺ X ] -)
(β§[ πͺ X ]-is-associative (U ==> W) U U)
iv = β§[ πͺ X ]-right-monotone (β§[ πͺ X ]-left-monotone (mp-right U W))
v = ap (Ξ» - β meet-of (πͺ X) (U ==> V) -) (β§[ πͺ X ]-is-commutative W U)
vi = β§[ πͺ X ]-is-associative (U ==> V) U W
vii = β§[ πͺ X ]-left-monotone (mp-right U V)
Ξ΄ : ((((U ==> V) β§[ πͺ X ] (U ==> W)) β§[ πͺ X ] U)
β€[ poset-of (πͺ X) ]
(V β§[ πͺ X ] W)) holds
Ξ΄ = ((U ==> V) β§[ πͺ X ] (U ==> W)) β§[ πͺ X ] U οΌβ¨ i β©β
((U ==> V) β§[ πͺ X ] (U ==> W)) β§[ πͺ X ] (U β§[ πͺ X ] U) οΌβ¨ ii β©β
(U ==> V) β§[ πͺ X ] ((U ==> W) β§[ πͺ X ] (U β§[ πͺ X ] U)) οΌβ¨ iii β©β
(U ==> V) β§[ πͺ X ] (((U ==> W) β§[ πͺ X ] U) β§[ πͺ X ] U) β€β¨ iv β©
(U ==> V) β§[ πͺ X ] (W β§[ πͺ X ] U) οΌβ¨ v β©β
(U ==> V) β§[ πͺ X ] (U β§[ πͺ X ] W) οΌβ¨ vi β©β
((U ==> V) β§[ πͺ X ] U) β§[ πͺ X ] W β€β¨ vii β©
V β§[ πͺ X ] W β
opn-perfect : ((K , _) : π¦ X) β is-perfect (opn K) holds
opn-perfect (K , ΞΊ) = characterisation-of-continuity X X Ο (opn K) (opn-monotone K) Ξ³
where
open PosetReasoning (poset-of (πͺ X))
Ξ³ : continuity-condition X X (opn K) holds
Ξ³ Kβ U ΞΊβ p = β£ (K β§[ πͺ X ] Kβ) , ΞΊβ² , β , β₯ β£
where
ΞΊβ² : is-compact-open X (K β§[ πͺ X ] Kβ) holds
ΞΊβ² = binary-coherence X Ο K Kβ ΞΊ ΞΊβ
β : ((K β§[ πͺ X ] Kβ) β€[ poset-of (πͺ X) ] U) holds
β = K β§[ πͺ X ] Kβ β€β¨ i β©
K β§[ πͺ X ] (K ==> U) β€β¨ ii β©
U β
where
i = β§[ πͺ X ]-right-monotone p
ii = mp-left K U
β£ : ((Kβ β§[ πͺ X ] K) β€[ poset-of (πͺ X) ] (K β§[ πͺ X ] Kβ)) holds
β£ = reflexivity+ (poset-of (πͺ X)) (β§[ πͺ X ]-is-commutative Kβ K)
β₯ : (Kβ β€[ poset-of (πͺ X) ] opn K (K β§[ πͺ X ] Kβ)) holds
β₯ = heyting-implicationβ K (K β§[ πͺ X ] Kβ) Kβ β£
opn-is-nucleus : (U : β¨ πͺ X β©) β is-nucleus (πͺ X) (opn U) holds
opn-is-nucleus U = opn-is-inflationary U
, opn-is-idempotent U
, opn-preserves-meets U
Β¬β_β : π¦ X β Perfect-Nucleus-on-X
Β¬β (K , ΞΊ) β = K ==>_ , (opn-is-nucleus K , opn-perfect (K , ΞΊ))
\end{code}
\begin{code}
opn-reverses-binary-joins : (U V : β¨ πͺ X β©) β opn (U β¨[ πͺ X ] V) οΌ opn U ββ opn V
opn-reverses-binary-joins U V = dfunext fe Ξ³
where
open PosetReasoning (poset-of (πͺ X))
Ξ³ : opn (U β¨[ πͺ X ] V) βΌ (opn U ββ opn V)
Ξ³ W = β€-is-antisymmetric (poset-of (πͺ X)) Ξ΄ Ξ΅
where
Ξ΄ : (((U β¨[ πͺ X ] V) ==> W) β€ (U ==> W β§[ πͺ X ] V ==> W)) holds
Ξ΄ = β§[ πͺ X ]-greatest (U ==> W) (V ==> W) _ Ξ΄β Ξ΄β
where
β : (((opn (U β¨[ πͺ X ] V) W) β§[ πͺ X ] U) β€[ poset-of (πͺ X) ] W) holds
β = ((U β¨[ πͺ X ] V) ==> W) β§[ πͺ X ] U β€β¨ i β©
((U β¨[ πͺ X ] V) ==> W) β§[ πͺ X ] (U β¨[ πͺ X ] V) β€β¨ ii β©
W β
where
i = β§[ πͺ X ]-right-monotone (β¨[ πͺ X ]-upperβ U V)
ii = modus-ponens X (==>-is-heyting-implication (U β¨[ πͺ X ] V) W)
β‘ : ((opn (U β¨[ πͺ X ] V) W β§[ πͺ X ] V) β€[ poset-of (πͺ X) ] W) holds
β‘ = opn (U β¨[ πͺ X ] V) W β§[ πͺ X ] V β€β¨ i β©
opn (U β¨[ πͺ X ] V) W β§[ πͺ X ] (U β¨[ πͺ X ] V) β€β¨ ii β©
W β
where
i = β§[ πͺ X ]-right-monotone (β¨[ πͺ X ]-upperβ U V)
ii = modus-ponens X (==>-is-heyting-implication (U β¨[ πͺ X ] V) W)
Ξ΄β : (opn (U β¨[ πͺ X ] V) W β€[ poset-of (πͺ X) ] (U ==> W)) holds
Ξ΄β = heyting-implicationβ U W _ β
Ξ΄β : (opn (U β¨[ πͺ X ] V) W β€[ poset-of (πͺ X) ] (V ==> W)) holds
Ξ΄β = heyting-implicationβ V W _ β‘
Ξ΅β : ((U ==> W β§[ πͺ X ] V ==> W β§[ πͺ X ] (U β¨[ πͺ X ] V)) β€ W) holds
Ξ΅β =
T β§[ πͺ X ] (U β¨[ πͺ X ] V) οΌβ¨ i β©β
(T β§[ πͺ X ] U) β¨[ πͺ X ] (T β§[ πͺ X ] V) β€β¨ ii β©
(U ==> W β§[ πͺ X ] U) β¨[ πͺ X ] ((U ==> W β§[ πͺ X ] V ==> W) β§[ πͺ X ] V) β€β¨ iii β©
W β¨[ πͺ X ] ((U ==> W β§[ πͺ X ] V ==> W) β§[ πͺ X ] V) β€β¨ iv β©
W β¨[ πͺ X ] (V ==> W β§[ πͺ X ] V) β€β¨ v β©
W β¨[ πͺ X ] W β€β¨ vi β©
W β
where
T = (U ==> W) β§[ πͺ X ] (V ==> W)
i = binary-distributivity (πͺ X) _ U V
ii = β¨[ πͺ X ]-left-monotone
(β§[ πͺ X ]-left-monotone
(β§[ πͺ X ]-lowerβ (opn U W) (opn V W)))
iii = β¨[ πͺ X ]-left-monotone
(modus-ponens
X
(==>-is-heyting-implication U W))
iv = β¨[ πͺ X ]-right-monotone
(β§[ πͺ X ]-left-monotone
(β§[ πͺ X ]-lowerβ (U ==> W) (V ==> W)))
v = β¨[ πͺ X ]-right-monotone
(modus-ponens X (==>-is-heyting-implication V W))
vi = β¨[ πͺ X ]-least
(β€-is-reflexive (poset-of (πͺ X)) W)
(β€-is-reflexive (poset-of (πͺ X)) W)
Ξ΅ : ((opn U W β§[ πͺ X ] opn V W)
β€[ poset-of (πͺ X) ]
opn (U β¨[ πͺ X ] V) W) holds
Ξ΅ = heyting-implicationβ (U β¨[ πͺ X ] V) W (opn U W β§[ πͺ X ] opn V W) Ξ΅β
nuclei-preserve-==> : (U V : β¨ πͺ X β©) ((j , _) : Nucleus (πͺ X))
β ((U ==> V) β€[ poset-of (πͺ X) ] (j U ==> j V)) holds
nuclei-preserve-==> U V πΏ@(j , _) = U ==> V β€β¨ β β©
U ==> j V β€β¨ β‘ β©
j U ==> j V β
where
open PosetReasoning (poset-of (πͺ X))
β : (((U ==> V) β§[ πͺ X ] U) β€[ poset-of (πͺ X) ] j V) holds
β = (U ==> V) β§[ πͺ X ] U β€β¨ mp-right U V β© V β€β¨ πβ (πͺ X) πΏ V β© j V β
β£ : (((U ==> j V) β§[ πͺ X ] (j U)) β€[ poset-of (πͺ X) ] j V) holds
β£ = (U ==> j V) β§[ πͺ X ] j U β€β¨ i β©
j (U ==> j V) β§[ πͺ X ] j U οΌβ¨ ii β©β
j ((U ==> j V) β§[ πͺ X ] U) β€β¨ iii β©
j (j V) οΌβ¨ iv β©β
j V β
where
i = β§[ πͺ X ]-left-monotone (πβ (πͺ X) πΏ (U ==> j V))
ii = πβ (πͺ X) πΏ (U ==> j V) U β»ΒΉ
iii = nuclei-are-monotone (πͺ X) πΏ _ (mp-right U (j V))
iv = nuclei-are-idempotent (πͺ X) πΏ V
β = heyting-implicationβ U (j V) (U ==> V) β
β‘ = heyting-implicationβ (j U) (j V) (U ==> j V) β£
\end{code}
\begin{code}
module Epsilon (X : Locale (π€ βΊ) π€ π€) (Οα΄° : spectralα΄° X) where
private
Ο : is-spectral X holds
Ο = spectralα΄°-gives-spectrality X Οα΄°
β¬β : Fam π€ β¨ πͺ X β©
β¬β = basisβ X Οα΄°
d : directed-basisα΄° (πͺ X)
d = β¬β , basisβ-is-directed-basis X Οα΄°
Ξ² : has-basis (πͺ X) holds
Ξ² = β£ spectralα΄°-implies-basisα΄° X Οα΄° β£
ΞΊ : consists-of-compact-opens X β¬β holds
ΞΊ = basisβ-consists-of-compact-opens X Οα΄°
sk : π¦ X is π€ small
sk = π¦-is-small X d ΞΊ (local-smallness X)
open PatchConstruction X Ο renaming (Perfect-Nucleus to Perfect-Nucleus-on-X)
open SmallPatchConstruction X Οα΄° renaming (SmallPatch to Patchβ-X)
open ClosedNucleus X Ο
open OpenNucleus X Οα΄° sk
open HeytingImplicationConstruction X Ξ²
πβ : π¦ X
πβ = π[ πͺ X ] , π-is-compact X
Β¬ββ-reflects-π : Β¬β πβ β οΌ π[ πͺ Patchβ-X ]
Β¬ββ-reflects-π = only-π-is-above-π (πͺ Patchβ-X) Β¬β πβ β β
where
open PosetReasoning (poset-of (πͺ X))
β : (π[ πͺ Patchβ-X ] β€[ poset-of (πͺ Patchβ-X) ] Β¬β πβ β) holds
β i = ex-falso-quodlibet (β¬ [ i ])
Ο΅-preserves-π : β π[ πͺ X ] β οΌ π[ πͺ Patchβ-X ]
Ο΅-preserves-π = perfect-nuclei-eq β π[ πͺ X ] β π[ πͺ Patchβ-X ] (dfunext fe β )
where
β : (U : β¨ πͺ X β©) β π[ πͺ X ] β¨[ πͺ X ] U οΌ π[ πͺ X ]
β U = π-left-annihilator-for-β¨ (πͺ X) U
Ο΅-preserves-β : let
open Joins (Ξ» x y β x β€[ poset-of (πͺ Patchβ-X) ] y)
in
(β±― S κ Fam π€ β¨ πͺ X β© , β β[ πͺ X ] S β is-lub-of β
β U β β£ U Ξ΅ S β) holds
Ο΅-preserves-β S = β , β‘
where
open Joins (Ξ» x y β x β€[ poset-of (πͺ Patchβ-X) ] y)
open PosetReasoning (poset-of (πͺ X))
β : (β β[ πͺ X ] S β is-an-upper-bound-of β
β U β β£ U Ξ΅ S β) holds
β i j = β¨[ πͺ X ]-least β₯ β
where
β₯ : ((S [ i ]) β€[ poset-of (πͺ X) ] β β[ πͺ X ] S β .prβ (β¬ [ j ])) holds
β₯ = S [ i ] β€β¨ β[ πͺ X ]-upper S i β©
β[ πͺ X ] S β€β¨ β¨[ πͺ X ]-upperβ (β[ πͺ X ] S) (β¬ [ j ]) β©
(β[ πͺ X ] S) β¨[ πͺ X ] (β¬ [ j ]) β
β : ((β¬ [ j ]) β€[ poset-of (πͺ X) ] ((β[ πͺ X ] S) β¨[ πͺ X ] (β¬ [ j ]))) holds
β = β¨[ πͺ X ]-upperβ (β[ πͺ X ] S) (β¬ [ j ])
β‘ : (β±― (πΏ , _) κ upper-bound β
β U β β£ U Ξ΅ S β ,
β β[ πͺ X ] S β β€[ poset-of (πͺ Patchβ-X) ] πΏ) holds
β‘ (πΏ@(j , _) , Ο) i =
β¨[ πͺ X ]-least Ξ΄ (πβ (πͺ X) (nucleus-of πΏ) (β¬ [ i ]))
where
Ξ΄ : ((β[ πͺ X ] S) β€[ poset-of (πͺ X) ] j (β¬ [ i ])) holds
Ξ΄ = β[ πͺ X ]-least S (j (β¬ [ i ]) , Ξ΅)
where
open Joins (Ξ» x y β x β€[ poset-of (πͺ X) ] y)
renaming (_is-an-upper-bound-of_ to _is-an-upper-bound-ofβ_)
Ξ΅ : (j (β¬ [ i ]) is-an-upper-bound-ofβ S) holds
Ξ΅ l =
S [ l ] β€β¨ β¨[ πͺ X ]-upperβ (S [ l ]) (β¬ [ i ]) β©
(S [ l ]) β¨[ πͺ X ] (β¬ [ i ]) β€β¨ Ο l i β©
j (β¬ [ i ]) β
Ο΅ : Patchβ-X βcβ X
Ο΅ = β_β , Ο΅-preserves-π , Ξ²β² , Ο΅-preserves-β
where
Ξ²β² : preserves-binary-meets (πͺ X) (πͺ Patchβ-X) β_β holds
Ξ²β² U V = perfect-nuclei-eq
β U β§[ πͺ X ] V β
(β U β β§[ πͺ Patchβ-X ] β V β)
(dfunext fe β )
where
β : (W : β¨ πͺ X β©) β β U β§[ πͺ X ] V β $ W οΌ (β U β β§[ πͺ Patchβ-X ] β V β) $ W
β W = (U β§[ πͺ X ] V) β¨[ πͺ X ] W οΌβ¨ i β©
W β¨[ πͺ X ] (U β§[ πͺ X ] V) οΌβ¨ ii β©
(W β¨[ πͺ X ] U) β§[ πͺ X ] (W β¨[ πͺ X ] V) οΌβ¨ iii β©
(U β¨[ πͺ X ] W) β§[ πͺ X ] (W β¨[ πͺ X ] V) οΌβ¨ iv β©
(U β¨[ πͺ X ] W) β§[ πͺ X ] (V β¨[ πͺ X ] W) β
where
i = β¨[ πͺ X ]-is-commutative (U β§[ πͺ X ] V) W
ii = binary-distributivity-op (πͺ X) W U V
iii = ap
(Ξ» - β - β§[ πͺ X ] (W β¨[ πͺ X ] V))
(β¨[ πͺ X ]-is-commutative W U)
iv = ap
(Ξ» - β (U β¨[ πͺ X ] W) β§[ πͺ X ] -)
(β¨[ πͺ X ]-is-commutative W V)
open Joins (Ξ» x y β x β€[ poset-of (πͺ Patchβ-X) ] y)
π· : has-basis (πͺ X) holds
π· = β£ spectralα΄°-implies-basisα΄° X Οα΄° β£
open PerfectMaps Patchβ-X X
open AdjointFunctorTheorem Patchβ-X X π·
open BasicProperties X Ο
open PatchConstruction X Ο using () renaming (Patch to Patch-of-X)
\end{code}
The right adjoint `Ο΅β` of `Ο΅` is the function applying a given perfect nucleus
to the bottom element `π` of the locale in consideration.
\begin{code}
Ο΅β-is-application-to-π : (πΏ : Perfect-Nucleus-on-X)
β Ο΅ βΒ· πΏ οΌ πΏ $ π[ πͺ X ]
Ο΅β-is-application-to-π πΏ@(j , _) =
β€-is-antisymmetric (poset-of (πͺ X)) Ξ²β² Ξ³
where
\end{code}
We break this up into two directions by using antisymmetry: `Ξ²` and `Ξ³`.
The nontrivial direction is the `Ξ²` direction, so let's get the trivial
`Ξ³` direction out of the way first:
\begin{code}
Ξ³ : (j π[ πͺ X ] β€[ poset-of (πͺ X) ] (Ο΅ βΒ· πΏ)) holds
Ξ³ = adjunction-inequality-forward Ο΅ πΏ (j π[ πͺ X ]) β
where
β : (β j π[ πͺ X ] β β€[ poset-of (πͺ Patchβ-X) ] πΏ) holds
β i = β¨[ πͺ X ]-least β‘β β‘β
where
β‘β : (j π[ πͺ X ] β€[ poset-of (πͺ X) ] j (β¬ [ i ])) holds
β‘β = nuclei-are-monotone (πͺ X) (nucleus-of πΏ) _ (π-is-bottom (πͺ X) (β¬ [ i ]))
β‘β : ((β¬ [ i ]) β€[ poset-of (πͺ X) ] j (β¬ [ i ])) holds
β‘β = πβ (πͺ X) (nucleus-of πΏ) (β¬ [ i ])
\end{code}
We use Yoneda for the `Ξ²` direction.
\begin{code}
Ξ²β² : ((Ο΅ βΒ· πΏ) β€[ poset-of (πͺ X) ] j π[ πͺ X ]) holds
Ξ²β² = yoneda (πͺ X) (Ο΅ βΒ· πΏ) (j π[ πͺ X ]) β
where
open PosetReasoning (poset-of (πͺ X))
β : (z : β¨ πͺ X β©)
β (rel-syntax (poset-of (πͺ X)) z (Ο΅ βΒ· (j , _))
β rel-syntax (poset-of (πͺ X)) z (j π[ πͺ X ])) holds
β U Ο = U β€β¨ β¨[ πͺ X ]-upperβ U π[ πͺ X ] β©
U β¨[ πͺ X ] π[ πͺ X ] β€β¨ Ξ· β©
j π[ πͺ X ] β
where
ΞΆ : (β U β β€[ poset-of (πͺ Patchβ-X) ] πΏ) holds
ΞΆ = adjunction-inequality-backward Ο΅ πΏ U Ο
Ξ· : ((U β¨[ πͺ X ] π[ πͺ X ]) β€[ poset-of (πͺ X) ] j π[ πͺ X ]) holds
Ξ· = βΌα΅-implies-βΌ β U β πΏ ΞΆ π[ πͺ X ]
\end{code}
\begin{code}
Ο΅-is-a-perfect-map : is-perfect-map π· Ο΅ holds
Ο΅-is-a-perfect-map π¦ Ξ΄ =
transport (Ξ» - β (- is-lub-of β
Ο΅ βΒ· k β£ k Ξ΅ π¦ β) holds) (Ξ³ β»ΒΉ) β
where
open Joins (Ξ» x y β x β€[ poset-of (πͺ X) ] y)
Ξ΄β² : is-directed (πͺ Patch-of-X) π¦ holds
Ξ΄β² = prβ Ξ΄ , ΞΆ
where
ΞΆ : (β±― i κ index π¦ , β±― j κ index π¦ ,
Ζ k κ index π¦ , (((π¦ [ i ]) βΌ (π¦ [ k ])) holds)
Γ (((π¦ [ j ]) βΌ (π¦ [ k ])) holds)) holds
ΞΆ i j = β₯β₯-rec β-is-prop Ξ· (prβ Ξ΄ i j)
where
Ξ· : _
Ξ· (k , Ο , Ο) =
β£ k
, βΌα΅-implies-βΌ (π¦ [ i ]) (π¦ [ k ]) Ο
, βΌα΅-implies-βΌ (π¦ [ j ]) (π¦ [ k ]) Ο
β£
Ξ³ : Ο΅ βΒ· (β[ πͺ Patchβ-X ] π¦) οΌ β[ πͺ X ] β
Ο΅ βΒ· k β£ k Ξ΅ π¦ β
Ξ³ = Ο΅ βΒ· (β[ πͺ Patchβ-X ] π¦) οΌβ¨ i β©
(β[ πͺ Patchβ-X ] π¦) $ π[ πͺ X ] οΌβ¨ ii β©
β[ πͺ X ] β
k $ π[ πͺ X ] β£ k Ξ΅ π¦ β οΌβ¨ iii β©
β[ πͺ X ] β
Ο΅ βΒ· k β£ k Ξ΅ π¦ β β
where
β» : (i : index π¦) β (π¦ [ i ]) $ π[ πͺ X ] οΌ Ο΅ βΒ· (π¦ [ i ])
β» = Ξ» i β Ο΅β-is-application-to-π (π¦ [ i ]) β»ΒΉ
i = Ο΅β-is-application-to-π (β[ πͺ Patchβ-X ] π¦)
ii = directed-joins-are-computed-pointwise π¦ Ξ΄β² π[ πͺ X ]
iii = ap (Ξ» - β β[ πͺ X ] (index π¦ , -)) (dfunext fe β»)
β : ((β[ πͺ X ] β
Ο΅ βΒ· k β£ k Ξ΅ π¦ β) is-lub-of β
Ο΅ βΒ· k β£ k Ξ΅ π¦ β) holds
β = β[ πͺ X ]-upper β
Ο΅ βΒ· k β£ k Ξ΅ π¦ β , β[ πͺ X ]-least β
Ο΅ βΒ· k β£ k Ξ΅ π¦ β
\end{code}
\section{Open and Closed Nuclei are Complements}
\begin{code}
module PatchComplementation (X : Locale (π€ βΊ) π€ π€) (Οα΄° : spectralα΄° X) where
Ο : is-spectral X holds
Ο = spectralα΄°-gives-spectrality X Οα΄°
β¬β : Fam π€ β¨ πͺ X β©
β¬β = basisβ X Οα΄°
d : directed-basisα΄° (πͺ X)
d = β¬β , basisβ-is-directed-basis X Οα΄°
Ξ² : has-basis (πͺ X) holds
Ξ² = β£ spectralα΄°-implies-basisα΄° X Οα΄° β£
ΞΊ : consists-of-compact-opens X β¬β holds
ΞΊ = basisβ-consists-of-compact-opens X Οα΄°
sk : π¦ X is π€ small
sk = π¦-is-small X d ΞΊ (local-smallness X)
X-has-small-basis : β₯ basisα΄° (πͺ X) β₯
X-has-small-basis = β£ spectralα΄°-implies-basisα΄° X Οα΄° β£
open SmallPatchConstruction X Οα΄° renaming (SmallPatch to Patchβ-X)
open PatchConstruction X Ο using (_$_; π‘π¦π―)
open ClosedNucleus X Ο
open OpenNucleus X Οα΄° sk
open HeytingImplicationConstruction X X-has-small-basis
open-complements-closed : (K : β¨ πͺ X β©)
β (ΞΊ : is-compact-open X K holds)
β (is-boolean-complement-of (πͺ Patchβ-X) Β¬β (K , ΞΊ) β β K β ) holds
open-complements-closed K ΞΊ = β , β‘
where
open PosetReasoning (poset-of (πͺ X))
β β : ((β K β β§[ πͺ Patchβ-X ] Β¬β (K , ΞΊ) β)
β€[ poset-of (πͺ Patchβ-X) ]
π[ πͺ Patchβ-X ]) holds
β β l =
(K β¨[ πͺ X ] (β¬ [ l ])) β§[ πͺ X ] ((K ==> (β¬ [ l ]))) οΌβ¨ β
β©β
(K β§[ πͺ X ] (K ==> (β¬ [ l ]))) β¨[ πͺ X ] (β¬ [ l ] β§[ πͺ X ] (K ==> (β¬ [ l ]))) β€β¨ β
‘ β©
(β¬ [ l ]) β¨[ πͺ X ] (β¬ [ l ] β§[ πͺ X ] (K ==> (β¬ [ l ]))) β€β¨ β
’ β©
β¬ [ l ] οΌβ¨ β
£ β©β
π[ πͺ Patchβ-X ] $ (β¬ [ l ]) β
where
β
= binary-distributivity-right (πͺ X)
β
‘ = β¨[ πͺ X ]-left-monotone (mp-left K (β¬ [ l ]))
β
’ = β¨[ πͺ X ]-least β₯ β
where
β₯ = β€-is-reflexive (poset-of (πͺ X)) (β¬ [ l ])
β = β§[ πͺ X ]-lowerβ (β¬ [ l ]) (K ==> (β¬ [ l ]))
β
£ = π-is-id (β¬ [ l ]) β»ΒΉ
β‘β : (π[ πͺ Patchβ-X ] βΌα΅ (β K β β¨[ πͺ Patchβ-X ] Β¬β (K , ΞΊ) β)) holds
β‘β l =
π[ πͺ X ] β€β¨ β
β©
K ==> (K β¨[ πͺ X ] (β¬ [ l ])) β€β¨ β
‘ β©
(β K β β¨[ πͺ Patchβ-X ] Β¬β (K , ΞΊ) β) $ (β¬ [ l ]) β
where
β» : ((π[ πͺ X ] β§[ πͺ X ] K) β€[ poset-of (πͺ X) ] (K β¨[ πͺ X ] β¬ [ l ])) holds
β» = π[ πͺ X ] β§[ πͺ X ] K β€β¨ β§[ πͺ X ]-lowerβ (π[ πͺ X ]) K β©
K β€β¨ β¨[ πͺ X ]-upperβ K (β¬ [ l ]) β©
K β¨[ πͺ X ] β¬ [ l ] β
β
= heyting-implicationβ K (K β¨[ πͺ X ] (β¬ [ l ])) π[ πͺ X ] β»
β
‘ = β[ πͺ X ]-upper _ (inl β β· inr β β· [])
β : β K β β§[ πͺ Patchβ-X ] Β¬β (K , ΞΊ) β οΌ π[ πͺ Patchβ-X ]
β = only-π-is-below-π (πͺ Patchβ-X) _ β β
β‘ : β K β β¨[ πͺ Patchβ-X ] Β¬β (K , ΞΊ) β οΌ π[ πͺ Patchβ-X ]
β‘ = only-π-is-above-π (πͺ Patchβ-X) _ β‘β
closed-complements-open : (K : β¨ πͺ X β©)
β (ΞΊ : is-compact-open X K holds)
β is-boolean-complement-of (πͺ Patchβ-X) β K β Β¬β (K , ΞΊ) β holds
closed-complements-open K ΞΊ =
complementation-is-symmetric (πͺ Patchβ-X) Β¬β (K , ΞΊ) β β K β β»
where
β» = open-complements-closed K ΞΊ
\end{code}
I define below an alternative version of the module above due to a technical
problem. Consider a spectral locale `A` with a proof `Ο` of spectrality. When
the module above is called with the data contained in `Ο` (let's call this
`Οα΄°`), Agda does not recognise the fact that `Ο = β£ Οα΄° β£`. To circumvent this
problem, I'm defining a version of this module that takes as argument the proof
of spectrality instead of the structure contained within.
\begin{code}
\end{code}
\section{Basis of Patch}
\begin{code}
module BasisOfPatch (X : Locale (π€ βΊ) π€ π€) (Οα΄° : spectralα΄° X) where
Ο : is-spectral X holds
Ο = spectralα΄°-gives-spectrality X Οα΄°
β¬β : Fam π€ β¨ πͺ X β©
β¬β = basisβ X Οα΄°
d : directed-basisα΄° (πͺ X)
d = β¬β , basisβ-is-directed-basis X Οα΄°
Ξ² : has-basis (πͺ X) holds
Ξ² = β£ spectralα΄°-implies-basisα΄° X Οα΄° β£
ΞΊ : consists-of-compact-opens X β¬β holds
ΞΊ = basisβ-consists-of-compact-opens X Οα΄°
sk : π¦ X is π€ small
sk = π¦-is-small X d ΞΊ (local-smallness X)
open PatchConstruction X Ο
using (_βΌ_; _β_; nucleus-of; _$_; ββ)
renaming (Patch to Patch-X; Perfect-Nucleus to Perfect-Nucleus-on-X)
open SmallPatchConstruction X Οα΄° renaming (SmallPatch to Patchβ-X)
open HeytingImplicationConstruction X β£ spectralα΄°-implies-basisα΄° X Οα΄° β£
open ClosedNucleus X Ο
open OpenNucleus X Οα΄° sk
\end{code}
For convenience, we define the following auxiliary notation for the open nucleus:
\begin{code}
π : index β¬ β β¨ πͺ Patchβ-X β©
π i = β β¬ [ i ] β
π¬ : index β¬ β β¨ πͺ Patchβ-X β©
π¬ i = Β¬β β¬ [ i ] , prβ (prβ (prβ Οα΄°)) i β
π : (i : index β¬) β is-compact-open X (β¬ [ i ]) holds
π = prβ (prβ (prβ Οα΄°))
\end{code}
We define the following basis for Patch:
\begin{code}
β¬-patch : Fam π€ β¨ πͺ Patchβ-X β©
β¬-patch = β
π k β π¬ l β£ (k , l) βΆ (index β¬ Γ index β¬) β
β¬-patch-consists-of-clopens : consists-of-clopens (πͺ Patch-X) β¬-patch holds
β¬-patch-consists-of-clopens (k , l) = (π¬ k β¨[ πͺ Patch-X ] π l) , β»
where
open PatchComplementation X Οα΄°
β : is-boolean-complement-of (πͺ Patch-X) (π k) (π¬ k) holds
β = closed-complements-open (β¬ [ k ]) (π k)
β‘ : is-boolean-complement-of (πͺ Patch-X) (π¬ l) (π l) holds
β‘ = open-complements-closed (β¬ [ l ]) (π l)
β» : is-boolean-complement-of
(πͺ Patch-X)
(π¬ k β¨[ πͺ Patch-X ] π l)
(π k β§[ πͺ Patch-X ] π¬ l) holds
β» = β§-complement (πͺ Patch-X) β β‘
β¬-patchβ-consists-of-clopens : consists-of-clopens (πͺ Patchβ-X) β¬-patch holds
β¬-patchβ-consists-of-clopens (k , l) = (π¬ k β¨[ πͺ Patchβ-X ] π l) , β»
where
open PatchComplementation X Οα΄°
abstract
β : is-boolean-complement-of (πͺ Patchβ-X) (π k) (π¬ k) holds
β = closed-complements-open (β¬ [ k ]) (π k)
β‘ : is-boolean-complement-of (πͺ Patchβ-X) (π¬ l) (π l) holds
β‘ = open-complements-closed (β¬ [ l ]) (π l)
β» : is-boolean-complement-of
(πͺ Patchβ-X)
(π¬ k β¨[ πͺ Patchβ-X ] π l)
(π k β§[ πͺ Patch-X ] π¬ l)
holds
β» = β§-complement (πͺ Patchβ-X) β β‘
β¬-patch-β : Fam π€ β¨ πͺ Patchβ-X β©
β¬-patch-β = directify (πͺ Patchβ-X) β¬-patch
\end{code}
Given a perfect nucleus `j : π(X) β π(X)`, the basic covering family for it
is given by the restriction of the family, given by the function `ππ π§`
\begin{code}
basic-below : Perfect-Nucleus-on-X β π€ Μ
basic-below πΏ@(j , _) =
Ξ£ (k , l) κ (index β¬ Γ index β¬) , ((β¬ [ k ]) β€[ poset-of (πͺ X) ] j (β¬ [ l ])) holds
proj : (πΏ : Perfect-Nucleus-on-X) β basic-below πΏ β index β¬ Γ index β¬
proj πΏ ((k , l) , _)= k , l
ππ π§β : Perfect-Nucleus-on-X β Fam π€ β¨ πͺ Patchβ-X β©
ππ π§β πΏ@(j , _) = β
π k β§[ πͺ Patchβ-X ] π¬ l β£ ((k , l) , _) βΆ basic-below πΏ β
πβ² : Perfect-Nucleus-on-X β index β¬ β β¨ πͺ Patchβ-X β©
πβ² (j , _) l = β j (β¬ [ l ]) β β§[ πͺ Patchβ-X ] π¬ l
ππ π§β : Perfect-Nucleus-on-X β Fam π€ β¨ πͺ Patchβ-X β©
ππ π§β πΏ = β
πβ² πΏ i β£ i βΆ index β¬ β
\end{code}
\begin{code}
πβ±Όi-is-below-j : (πΏ : Perfect-Nucleus-on-X) (i : index β¬) β (πβ² πΏ i βΌα΅ πΏ) holds
πβ±Όi-is-below-j πΏ@(j , _) i l =
πβ² πΏ i $ (β¬ [ l ]) οΌβ¨ refl β©β
(j β¬α΅’ β¨[ πͺ X ] β¬β) β§[ πͺ X ] (β¬α΅’ ==> β¬β) β€β¨ α β©
(j β¬α΅’ β¨[ πͺ X ] β¬β) β§[ πͺ X ] (j β¬α΅’ ==> j β¬β) β€β¨ α£ β©
(j β¬α΅’ β¨[ πͺ X ] β¬β) β§[ πͺ X ] ((j β¬α΅’ β¨[ πͺ X ] β¬β) ==> j β¬β) β€β¨ α¬ β©
j (β¬ [ l ]) β
where
open PosetReasoning (poset-of (πͺ X))
β¬α΅’ = β¬ [ i ]
β¬β = β¬ [ l ]
β
= binary-distributivity (πͺ X) (j β¬α΅’ ==> j β¬β) (j β¬α΅’) β¬β
β
‘ = β¨[ πͺ X ]-left-monotone (mp-right (j β¬α΅’) (j β¬β))
β
’ = β¨[ πͺ X ]-right-monotone (β§[ πͺ X ]-lowerβ (j β¬α΅’ ==> j β¬β) β¬β)
β
£ = β¨[ πͺ X ]-least (β€-is-reflexive (poset-of (πͺ X)) (j β¬β)) (πβ (πͺ X) (nucleus-of πΏ) β¬β)
β£ : ((j β¬α΅’ ==> j β¬β β§[ πͺ X ] (j β¬α΅’ β¨[ πͺ X ] β¬β)) β€[ poset-of (πͺ X) ] j β¬β) holds
β£ = j β¬α΅’ ==> j β¬β β§[ πͺ X ] (j β¬α΅’ β¨[ πͺ X ] β¬β) οΌβ¨ β
β©β
((j β¬α΅’ ==> j β¬β) β§[ πͺ X ] j β¬α΅’) β¨[ πͺ X ] (j β¬α΅’ ==> j β¬β) β§[ πͺ X ] β¬β β€β¨ β
‘ β©
j β¬β β¨[ πͺ X ] (j β¬α΅’ ==> j β¬β) β§[ πͺ X ] β¬β β€β¨ β
’ β©
j β¬β β¨[ πͺ X ] β¬β β€β¨ β
£ β©
j β¬β β
β : ((j β¬α΅’ ==> j β¬β) β€[ poset-of (πͺ X) ] ((j β¬α΅’ β¨[ πͺ X ] β¬β) ==> j β¬β)) holds
β = heyting-implicationβ _ (j β¬β) (j β¬α΅’ ==> j β¬β) β£
α = β§[ πͺ X ]-right-monotone (nuclei-preserve-==> β¬α΅’ β¬β (nucleus-of πΏ))
α£ = β§[ πͺ X ]-right-monotone β
α¬ = mp-left (j β¬α΅’ β¨[ πͺ X ] β¬β) (j β¬β)
\end{code}
This lemma can be strengthened to an equality in the case where `πβ±Ό(i)` is being
applied to `β¬β±Ό`.
\begin{code}
π-πΏ-eq : (πΏ : Perfect-Nucleus-on-X) (i : index β¬) β πβ² πΏ i $ (β¬ [ i ]) οΌ πΏ $ (β¬ [ i ])
π-πΏ-eq πΏ@(j , _) i = β€-is-antisymmetric (poset-of (πͺ X)) β β‘
where
open PosetReasoning (poset-of (πͺ X))
β¬α΅’ = β¬ [ i ]
β : (((πβ² πΏ i) $ (β¬ [ i ])) β€[ poset-of (πͺ X) ] (πΏ $ (β¬ [ i ]))) holds
β = πβ±Όi-is-below-j πΏ i i
β
= β¨[ πͺ X ]-upperβ (j (β¬ [ i ])) (β¬ [ i ])
β
‘ = π-right-unit-of-β§ (πͺ X) (j (β¬ [ i ]) β¨[ πͺ X ] β¬ [ i ]) β»ΒΉ
β
’ = ap
(Ξ» - β (j (β¬ [ i ]) β¨[ πͺ X ] β¬ [ i ]) β§[ πͺ X ] -)
(heyting-implication-identity (β¬ [ i ]) β»ΒΉ)
β‘ : ((πΏ $ (β¬ [ i ])) β€[ poset-of (πͺ X) ] (πβ² πΏ i $ (β¬ [ i ]))) holds
β‘ = πΏ $ (β¬ [ i ]) β€β¨ β
β©
j (β¬ [ i ]) β¨[ πͺ X ] β¬ [ i ] οΌβ¨ β
‘ β©β
(j (β¬ [ i ]) β¨[ πͺ X ] β¬ [ i ]) β§[ πͺ X ] π[ πͺ X ] οΌβ¨ β
’ β©β
(j (β¬ [ i ]) β¨[ πͺ X ] β¬ [ i ]) β§[ πͺ X ] ((β¬ [ i ]) ==> (β¬ [ i ])) οΌβ¨ refl β©β
πβ² πΏ i $ (β¬ [ i ]) β
\end{code}
The first lemma we prove is the fact that `πΏ = ππ π§β πΏ` which we call
*Johnstone's lemma*.
\begin{code}
lemma-johnstone : (πΏ : Perfect-Nucleus-on-X) β πΏ οΌ β[ πͺ Patchβ-X ] ππ π§β πΏ
lemma-johnstone πΏ@(j , _) = β[ πͺ Patchβ-X ]-unique (ππ π§β πΏ) πΏ (β , β‘)
where
open Joins (Ξ» πΏ π β πΏ β€[ poset-of (πͺ Patchβ-X) ] π)
open PosetReasoning (poset-of (πͺ X))
β : (πΏ is-an-upper-bound-of ππ π§β πΏ) holds
β = πβ±Όi-is-below-j πΏ
β‘ : ((π , _) : upper-bound (ππ π§β πΏ)) β (πΏ βΌα΅ π) holds
β‘ (π , Ο
) l = j (β¬ [ l ]) οΌβ¨ π-πΏ-eq πΏ l β»ΒΉ β©β
πβ² πΏ l $ (β¬ [ l ]) β€β¨ Ο
l l β©
π $ (β¬ [ l ]) β
\end{code}
\begin{code}
open Epsilon X Οα΄°
ββ-is-monotone : (U V : β¨ πͺ X β©)
β (U β€[ poset-of (πͺ X) ] V) holds
β (β U β β€[ poset-of (πͺ Patch-X) ] β V β) holds
ββ-is-monotone U V p W = β¨[ πͺ X ]-least β β‘
where
open PosetReasoning (poset-of (πͺ X))
β : (U β€[ poset-of (πͺ X) ] (V β¨[ πͺ X ] W)) holds
β = U β€β¨ p β© V β€β¨ β¨[ πͺ X ]-upperβ V W β© V β¨[ πͺ X ] W β
β‘ : (W β€[ poset-of (πͺ X) ] (V β¨[ πͺ X ] W)) holds
β‘ = β¨[ πͺ X ]-upperβ V W
ππ π§β=ππ π§β : (πΏ : Perfect-Nucleus-on-X) β ββ (ππ π§β πΏ) οΌ ββ (ππ π§β πΏ)
ππ π§β=ππ π§β πΏ@(j , _) = β€-is-antisymmetric (poset-of (πͺ Patch-X)) β β‘
where
Ξ²β² : cofinal-in (πͺ Patch-X) (ππ π§β πΏ) (ππ π§β πΏ) holds
Ξ²β² ((k , l) , p) = β£ l , β» β£
where
open PosetReasoning (poset-of (πͺ Patch-X))
β : ((π k β§[ πͺ Patch-X ] π¬ l)
β€[ poset-of (πͺ Patch-X) ]
(β j (β¬ [ l ]) β β§[ πͺ Patchβ-X ] π¬ l)) holds
β = β§[ πͺ Patch-X ]-left-monotone (ββ-is-monotone (β¬ [ k ]) (j (β¬ [ l ])) p)
β» : ((ππ π§β πΏ [ (k , l) , p ]) β€[ poset-of (πͺ Patch-X) ] ((ππ π§β πΏ) [ l ])) holds
β» = ππ π§β πΏ [ (k , l) , p ] οΌβ¨ refl β©β
π k β§[ πͺ Patch-X ] π¬ l β€β¨ β β©
β j (β¬ [ l ]) β β§[ πͺ Patchβ-X ] π¬ l οΌβ¨ refl β©β
ππ π§β πΏ [ l ] β
β : (ββ (ππ π§β πΏ) βΌ ββ (ππ π§β πΏ)) holds
β = cofinal-implies-join-covered (πͺ Patch-X) (ππ π§β πΏ) (ππ π§β πΏ) Ξ²β²
β‘ : (ββ (ππ π§β πΏ) β€[ poset-of (πͺ Patch-X) ] (ββ (ππ π§β πΏ))) holds
β‘ = β[ πͺ Patch-X ]-least (ππ π§β πΏ) (ββ (ππ π§β πΏ) , β»)
where
open Joins (Ξ» x y β x β€[ poset-of (πͺ Patch-X) ] y)
open PosetReasoning (poset-of (πͺ X))
β» : (ββ (ππ π§β πΏ) is-an-upper-bound-of (ππ π§β πΏ)) holds
β» i U =
(ππ π§β πΏ [ i ]) $ U οΌβ¨ refl β©β
πβ² πΏ i $ U οΌβ¨ refl β©β
(β j (β¬ [ i ]) β β§[ πͺ Patchβ-X ] π¬ i) $ U οΌβ¨ β
β©β
(β β[ πͺ X ] β
β¬ [ l ] β£ l Ξ΅ β β β β§[ πͺ Patchβ-X ] π¬ i) $ U οΌβ¨ β
‘ β©β
((β[ πͺ Patchβ-X ] β
β β¬ [ l ] β β£ l Ξ΅ β β) β§[ πͺ Patchβ-X ] π¬ i) $ U οΌβ¨ β
’ β©β
((β[ πͺ Patchβ-X ] β
β β¬ [ l ] β β§[ πͺ Patchβ-X ] π¬ i β£ l Ξ΅ β β) $ U) β€β¨ β₯ β©
ββ (ππ π§β πΏ) $ U β
where
β : Fam π€ (index β¬)
β = cover-indexβ X Οα΄° (πΏ $ (β¬ [ i ]))
p : j (β¬ [ i ]) οΌ β[ πͺ X ] β
β¬ [ l ] β£ l Ξ΅ β β
p = (β[ πͺ X ]-unique β
β¬ [ l ] β£ l Ξ΅ β β
(j (β¬ [ i ]))
(basisβ-covers-do-cover X Οα΄° (j (β¬ [ i ]))))
β
= ap (Ξ» - β (β - β β§[ πͺ Patchβ-X ] π¬ i) $ U) p
β
‘ = ap
(Ξ» - β (- β§[ πͺ Patchβ-X ] π¬ i) $ U)
(β[ πͺ Patchβ-X ]-unique
β
β β¬ [ l ] β β£ l Ξ΅ β β
_
(Ο΅-preserves-β β
β¬ [ l ] β£ l Ξ΅ β β))
β
’ = ap (Ξ» - β - $ U) (distributivityβ²-right _ _ _)
β£ : (l : index β)
β ((β β¬ [ β [ l ] ] β β§[ πͺ Patchβ-X ] π¬ i) β€[ poset-of (πͺ Patchβ-X) ] (β[ πͺ Patchβ-X ] ππ π§β πΏ)) holds
β£ l = β[ πͺ Patchβ-X ]-upper (ππ π§β πΏ) ((β [ l ] , i) , Ξ³)
where
Ξ³ : ((β¬ [ β [ l ] ]) β€[ poset-of (πͺ X) ] j (β¬ [ i ])) holds
Ξ³ = β¬ [ β [ l ] ] β€β¨ β[ πͺ X ]-upper β
β¬ [ l ] β£ l Ξ΅ β β l β©
β[ πͺ X ] β
β¬ [ l ] β£ l Ξ΅ β β οΌβ¨ p β»ΒΉ β©β
j (β¬ [ i ]) β
β = β[ πͺ Patchβ-X ]-least
β
β β¬ [ l ] β β§[ πͺ Patchβ-X ] π¬ i β£ l Ξ΅ β β
((β[ πͺ Patchβ-X ] ππ π§β πΏ) , β£)
β₯ = βΌα΅-implies-βΌ _ _ β U
\end{code}
We first prove that this forms a basis.
\begin{code}
main-covering-lemma : (πΏ : Perfect-Nucleus-on-X) β πΏ οΌ β[ πͺ Patch-X ] (ππ π§β πΏ)
main-covering-lemma πΏ =
πΏ οΌβ¨ lemma-johnstone πΏ β©
β[ πͺ Patch-X ] (ππ π§β πΏ) οΌβ¨ (ππ π§β=ππ π§β πΏ) β»ΒΉ β©
β[ πͺ Patch-X ] (ππ π§β πΏ) β
β¬-is-basis-for-patch : is-basis-for (πͺ Patch-X) β¬-patch
β¬-is-basis-for-patch πΏ = (basic-below πΏ , proj πΏ) , β»
where
open Joins _βΌ_
β» : (πΏ is-lub-of (ππ π§β πΏ)) holds
β» = transport
(Ξ» - β (- is-lub-of (ππ π§β πΏ)) holds)
(main-covering-lemma πΏ β»ΒΉ)
((β[ πͺ Patch-X ]-upper (ππ π§β πΏ) , β[ πͺ Patch-X ]-least (ππ π§β πΏ)))
β¬-is-basis-for-patchβ : is-basis-for (πͺ Patchβ-X) β¬-patch
β¬-is-basis-for-patchβ πΏ = (basic-below πΏ , proj πΏ) , β»
where
open Joins (Ξ» x y β x β€[ poset-of (πͺ Patchβ-X) ] y)
β» : (πΏ is-lub-of ππ π§β πΏ) holds
β» = transport
(Ξ» - β (- is-lub-of (ππ π§β πΏ)) holds)
(main-covering-lemma πΏ β»ΒΉ)
(β[ πͺ Patchβ-X ]-upper (ππ π§β πΏ) , β[ πͺ Patchβ-X ]-least (ππ π§β πΏ))
\end{code}
\begin{code}
module PatchStoneα΄° (X : Locale (π€ βΊ) π€ π€) (Οα΄° : spectralα΄° X) where
private
Ο : is-spectral X holds
Ο = spectralα΄°-gives-spectrality X Οα΄°
β¬β : Fam π€ β¨ πͺ X β©
β¬β = basisβ X Οα΄°
d : directed-basisα΄° (πͺ X)
d = β¬β , basisβ-is-directed-basis X Οα΄°
Ξ² : has-basis (πͺ X) holds
Ξ² = β£ spectralα΄°-implies-basisα΄° X Οα΄° β£
ΞΊ : consists-of-compact-opens X β¬β holds
ΞΊ = basisβ-consists-of-compact-opens X Οα΄°
sk : π¦ X is π€ small
sk = π¦-is-small X d ΞΊ (local-smallness X)
open ClosedNucleus X Ο
open OpenNucleus X Οα΄°
open SmallPatchConstruction X Οα΄° renaming (SmallPatch to Patchβ-X)
open PatchConstruction X Ο using (_βΌ_; ββ) renaming (Patch to Patch-X)
open Epsilon X Οα΄°
open PerfectMaps Patchβ-X X π·
X-is-compact : is-compact X holds
X-is-compact = spectral-implies-compact X Ο
\end{code}
\begin{code}
patchβ-is-compact : is-compact Patchβ-X holds
patchβ-is-compact = compact-codomain-of-perfect-map-implies-compact-domain
Ο΅
Ο΅-is-a-perfect-map
X-is-compact
patch-is-compact : is-compact Patch-X holds
patch-is-compact S Ξ΄ p = β₯β₯-rec β-is-prop Ξ³ (patchβ-is-compact S ΞΆ β )
where
Ξ³ : (Ξ£ i κ index S , (π[ πͺ Patchβ-X ] βΌα΅ (S [ i ])) holds)
β β i κ index S , (π[ πͺ Patch-X ] βΌ (S [ i ])) holds
Ξ³ (i , q) = β£ i , βΌα΅-implies-βΌ π[ πͺ Patch-X ] (S [ i ]) q β£
ΞΆ : is-directed (πͺ Patchβ-X) S holds
ΞΆ = prβ Ξ΄ , β
where
β : (i j : index S) β (Ζ k κ index S , (((S [ i ]) βΌα΅ (S [ k ]))
β§ ((S [ j ]) βΌα΅ (S [ k ]))) holds) holds
β i j = β₯β₯-rec β-is-prop β‘ (prβ Ξ΄ i j)
where
β‘ : _
β‘ (k , Ο , Ο) = β£ k
, βΌ-implies-βΌα΅ (S [ i ]) (S [ k ]) Ο
, βΌ-implies-βΌα΅ (S [ j ]) (S [ k ]) Ο β£
β : (π[ πͺ Patch-X ] βΌα΅ ββ S) holds
β = βΌ-implies-βΌα΅ π[ πͺ Patch-X ] (ββ S) p
\end{code}
\begin{code}
open BasisOfPatch X Οα΄°
β¬-patch-Ξ²β : directed-basis-forα΄° (πͺ Patch-X) β¬-patch-β
β¬-patch-Ξ²β U = prβ Ξ£-assoc (Ξ²β U , Ξ΄)
where
Ξ²β : is-basis-for (πͺ Patch-X) (directify (πͺ Patch-X) β¬-patch)
Ξ²β = directified-basis-is-basis (πͺ Patch-X) β¬-patch β¬-is-basis-for-patch
Ξ΄ : is-directed (πͺ Patch-X) β
β¬-patch-β [ j ] β£ j Ξ΅ prβ (Ξ²β U) β holds
Ξ΄ = covers-of-directified-basis-are-directed
(πͺ Patch-X)
β¬-patch
β¬-is-basis-for-patch
U
β¬-patchβ-Ξ²β : directed-basis-forα΄° (πͺ Patchβ-X) β¬-patch-β
β¬-patchβ-Ξ²β U = prβ Ξ£-assoc (Ξ²β U , Ξ΄)
where
Ξ²β : is-basis-for (πͺ Patchβ-X) (directify (πͺ Patchβ-X) β¬-patch)
Ξ²β = directified-basis-is-basis (πͺ Patchβ-X) β¬-patch β¬-is-basis-for-patchβ
Ξ΄ : is-directed (πͺ Patchβ-X) β
β¬-patch-β [ j ] β£ j Ξ΅ prβ (Ξ²β U) β holds
Ξ΄ = covers-of-directified-basis-are-directed
(πͺ Patchβ-X)
β¬-patch
β¬-is-basis-for-patchβ
U
patch-zero-dimensionalα΄° : zero-dimensionalα΄° (πͺ Patch-X)
patch-zero-dimensionalα΄° = β¬-patch-β , β¬-patch-Ξ²β , β
where
β : consists-of-clopens (πͺ Patch-X) β¬-patch-β holds
β [] = π-is-clopen (πͺ Patch-X)
β (i β· is) = clopens-are-closed-under-β¨ (πͺ Patch-X) (β¬-patch [ i ]) (β¬-patch-β [ is ]) (β¬-patch-consists-of-clopens i) (β is)
patch-zero-dimensional : is-zero-dimensional (πͺ Patch-X) holds
patch-zero-dimensional = β£ patch-zero-dimensionalα΄° β£
β¬-patch-β-is-directed-basisβ : is-directed-basis (πͺ Patchβ-X) β¬-patch-β
β¬-patch-β-is-directed-basisβ =
Ξ²β² , covers-of-directified-basis-are-directed (πͺ Patchβ-X) β¬-patch β¬-is-basis-for-patchβ
where
Ξ²β² : is-basis-for (πͺ Patchβ-X) β¬-patch-β
Ξ²β² = directified-basis-is-basis (πͺ Patchβ-X) β¬-patch β¬-is-basis-for-patchβ
patchβ-zero-dimensionalα΄° : zero-dimensionalα΄° (πͺ Patchβ-X)
patchβ-zero-dimensionalα΄° = β¬-patch-β , β¬-patchβ-Ξ²β , Ξ³
where
Ξ²β² : is-basis-for (πͺ Patchβ-X) β¬-patch-β
Ξ²β² = directified-basis-is-basis (πͺ Patchβ-X) β¬-patch β¬-is-basis-for-patchβ
Ξ³ : consists-of-clopens (πͺ Patchβ-X) β¬-patch-β holds
Ξ³ [] = π-is-clopen (πͺ Patchβ-X)
Ξ³ (i β· is) = clopens-are-closed-under-β¨
(πͺ Patchβ-X)
(β¬-patch [ i ])
(β¬-patch-β [ is ])
(β¬-patchβ-consists-of-clopens i)
(Ξ³ is)
patchβ-is-stone : is-stone Patchβ-X holds
patchβ-is-stone =
stoneα΄°-implies-stone Patchβ-X (patchβ-is-compact , patchβ-zero-dimensionalα΄°)
patchβ-spectralα΄° : spectralα΄° Patchβ-X
patchβ-spectralα΄° = stoneα΄°-implies-spectralα΄°
Patchβ-X
(patchβ-is-compact , patchβ-zero-dimensionalα΄°)
patchβ-is-spectral : is-spectral Patchβ-X holds
patchβ-is-spectral =
spectralα΄°-gives-spectrality Patchβ-X patchβ-spectralα΄°
\end{code}
\begin{code}
\end{code}
\begin{code}
module OpenMeetClosedLemmata (X : Locale (π€ βΊ) π€ π€) (Οα΄° : spectralα΄° X) (sk : π¦ X is π€ small) where
private
Ο : is-spectral X holds
Ο = spectralα΄°-gives-spectrality X Οα΄°
Ξ² : has-basis (πͺ X) holds
Ξ² = β£ spectralα΄°-implies-basisα΄° X Οα΄° β£
open ClosedNucleus X Ο
open OpenNucleus X Οα΄° sk
open SmallPatchConstruction X Οα΄° using (π-is-id)
renaming (SmallPatch to Patchβ-X)
open PatchConstruction X Ο
open HeytingImplicationConstruction X Ξ²
closed-meet-open-π-lemma : (C D : β¨ πͺ X β©)
β (ΞΊ : is-compact-open X D holds)
β (β C β β§[ πͺ Patchβ-X ] Β¬β (D , ΞΊ) β) οΌ π[ πͺ Patchβ-X ]
β (C β€[ poset-of (πͺ X) ] D) holds
closed-meet-open-π-lemma C D ΞΊ p = connecting-lemmaβ (πͺ X) (β‘ β»ΒΉ)
where
β : (C β¨[ πͺ X ] D) β§[ πͺ X ] (D ==> D) οΌ π[ πͺ Patchβ-X ] $ D
β =
perfect-nuclei-eq-inverse
(β C β β§[ πͺ Patchβ-X ] Β¬β D , ΞΊ β)
π[ πͺ Patchβ-X ]
p
D
β‘ : C β¨[ πͺ X ] D οΌ D
β‘ = C β¨[ πͺ X ] D οΌβ¨ β
β©
(C β¨[ πͺ X ] D) β§[ πͺ X ] π[ πͺ X ] οΌβ¨ β
‘ β©
(C β¨[ πͺ X ] D) β§[ πͺ X ] (D ==> D) οΌβ¨ β
’ β©
π[ πͺ Patchβ-X ] $ D οΌβ¨ β
£ β©
D β
where
β
= π-right-unit-of-β§ (πͺ X) (C β¨[ πͺ X ] D) β»ΒΉ
β
‘ = ap
(Ξ» - β (C β¨[ πͺ X ] D) β§[ πͺ X ] -)
(heyting-implication-identity D β»ΒΉ)
β
’ = β
β
£ = π-is-id D
module AdditionalLemmata (X : Locale (π€ βΊ) π€ π€) where
β¨-distributivity-over-β : (S T : Fam π€ β¨ πͺ X β©)
β β₯ index S β₯
β β₯ index T β₯
β (β[ πͺ X ] S) β¨[ πͺ X ] (β[ πͺ X ] T)
οΌ β[ πͺ X ] β
(S [ i ]) β¨[ πͺ X ] (T [ j ])
β£ (i , j) βΆ (index S Γ index T) β
β¨-distributivity-over-β S T β£iβ£ β£jβ£ = β€-is-antisymmetric (poset-of (πͺ X)) β β‘
where
open Joins (Ξ» x y β x β€[ poset-of (πͺ X) ] y)
open PosetReasoning (poset-of (πͺ X))
ππ½π = (β[ πͺ X ] S) β¨[ πͺ X ] (β[ πͺ X ] T)
ππ½π = β[ πͺ X ] β
(S [ i ]) β¨[ πͺ X ] (T [ j ]) β£ (i , j) βΆ (index S Γ index T) β
β : (ππ½π β€[ poset-of (πͺ X) ] ππ½π) holds
β = β¨[ πͺ X ]-least β β β β
where
β£β : index T β ((β[ πͺ X ] S) β€[ poset-of (πͺ X) ] ππ½π) holds
β£β j = β[ πͺ X ]-least S (ππ½π , β»)
where
β» : (ππ½π is-an-upper-bound-of S) holds
β» i =
S [ i ] β€β¨ β¨[ πͺ X ]-upperβ (S [ i ]) (T [ j ]) β©
(S [ i ]) β¨[ πͺ X ] (T [ j ]) β€β¨ β[ πͺ X ]-upper _ (i , j) β©
ππ½π β
β β : ((β[ πͺ X ] S) β€[ poset-of (πͺ X) ] ππ½π) holds
β β = β₯β₯-rec (holds-is-prop ((β[ πͺ X ] S) β€[ poset-of (πͺ X) ] ππ½π)) β£β β£jβ£
β£β : index S β ((β[ πͺ X ] T) β€[ poset-of (πͺ X) ] ππ½π) holds
β£β i = β[ πͺ X ]-least T (ππ½π , β»)
where
β» : (ππ½π is-an-upper-bound-of T) holds
β» j =
T [ j ] β€β¨ β¨[ πͺ X ]-upperβ (S [ i ]) (T [ j ]) β©
(S [ i ]) β¨[ πͺ X ] (T [ j ]) β€β¨ β[ πͺ X ]-upper _ (i , j) β©
ππ½π β
β β : ((β[ πͺ X ] T) β€[ poset-of (πͺ X) ] ππ½π) holds
β β = β₯β₯-rec (holds-is-prop ((β[ πͺ X ] T) β€[ poset-of (πͺ X) ] ππ½π)) β£β β£iβ£
β‘ : (ππ½π β€[ poset-of (πͺ X) ] ππ½π) holds
β‘ = β[ πͺ X ]-least
β
(S [ i ]) β¨[ πͺ X ] (T [ j ]) β£ (i , j) βΆ (index S Γ index T) β
(ππ½π , β»)
where
β» : (ππ½π
is-an-upper-bound-of
β
(S [ i ]) β¨[ πͺ X ] (T [ j ]) β£ (i , j) βΆ (index S Γ index T) β)
holds
β» (i , j) = (S [ i ]) β¨[ πͺ X ] (T [ j ]) β€β¨ β
β©
(β[ πͺ X ] S) β¨[ πͺ X ] (T [ j ]) β€β¨ β
‘ β©
(β[ πͺ X ] S) β¨[ πͺ X ] (β[ πͺ X ] T) β
where
β
= β¨[ πͺ X ]-left-monotone (β[ πͺ X ]-upper S i)
β
‘ = β¨[ πͺ X ]-right-monotone (β[ πͺ X ]-upper T j)
module BasicComplements (X : Locale π€ π₯ π¦) (π : is-compact X holds) (zα΄° : zero-dimensionalα΄° (πͺ X)) where
private
β¬ : Fam π¦ β¨ πͺ X β©
β¬ = prβ zα΄°
π£ : is-regular (πͺ X) holds
π£ = zero-dimensional-locales-are-regular (πͺ X) β£ zα΄° β£
Β¬β_ : Ξ£ c κ β¨ πͺ X β© , is-compact-open X c holds β β¨ πͺ X β©
Β¬β_ (c , ΞΊ) = prβ (compacts-are-clopen-in-regular-frames X π£ c ΞΊ)
Β¬β-gives-complement : (c : β¨ πͺ X β©)
β (ΞΊ : is-compact-open X c holds)
β is-boolean-complement-of (πͺ X) (Β¬β (c , ΞΊ)) c holds
Β¬β-gives-complement c ΞΊ = prβ (compacts-are-clopen-in-regular-frames X π£ c ΞΊ)
module SomeOtherLemmata
(A X : Locale (π€ βΊ) π€ π€)
(Οα΄° : spectralα΄° A)
(π : is-compact X holds)
(π«α΄° : zero-dimensionalα΄° (πͺ X))
(π» : X βcβ A)
(f-is-a-spectral-map : is-spectral-map A X π» holds)
where
open BasicComplements X π π«α΄°
open ContinuousMapNotation X A
β¬A : Fam π€ β¨ πͺ A β©
β¬A = basisβ A Οα΄°
β¬X : Fam π€ β¨ πͺ X β©
β¬X = prβ π«α΄°
Β¬π» : index β¬A β β¨ πͺ X β©
Β¬π» i = Β¬β (π» ββ (β¬A [ i ]) , ΞΊ)
where
ΞΊ : is-compact-open X (π» ββ (β¬A [ i ])) holds
ΞΊ = f-is-a-spectral-map (β¬A [ i ]) (prβ (prβ (prβ Οα΄°)) i)
\end{code}
The following lemma was proved by Igor Arrieta for the purpose of solving the
binary join preservation problem that arose when proving the universal property
of Patch.
\begin{code}
module IgorsLemma (X Y : Locale (π€ βΊ) π€ π€) (π· : has-basis (πͺ Y) holds) where
open ContinuousMapNotation X Y
open HeytingImplicationConstruction Y π·
igors-lemma-β : (f : X βcβ Y) (U V : β¨ πͺ Y β©) (W : β¨ πͺ X β©)
β ((f ββ U) β€[ poset-of (πͺ X) ] (W β¨[ πͺ X ] (f ββ V))) holds
β (T : β¨ πͺ Y β©)
β ((f ββ (U β¨[ πͺ Y ] T) β§[ πͺ X ] (f ββ (V ==> T)))
β€[ poset-of (πͺ X) ]
(W β¨[ πͺ X ] f ββ T))
holds
igors-lemma-β f U V W p T =
f ββ (U β¨[ πͺ Y ] T) β§[ πͺ X ] f ββ (V ==> T) οΌβ¨ β
β©β
(f ββ U β¨[ πͺ X ] f ββ T) β§[ πͺ X ] f ββ (V ==> T) β€β¨ β
‘ β©
((W β¨[ πͺ X ] (f ββ V)) β¨[ πͺ X ] f ββ T) β§[ πͺ X ] f ββ (V ==> T) οΌβ¨ β
’ β©β
(W β¨[ πͺ X ] ((f ββ V) β¨[ πͺ X ] f ββ T)) β§[ πͺ X ] f ββ (V ==> T) οΌβ¨ β
£ β©β
(W β¨[ πͺ X ] (f ββ (V β¨[ πͺ Y ] T))) β§[ πͺ X ] f ββ (V ==> T) οΌβ¨ β
€ β©β
f ββ (V ==> T) β§[ πͺ X ] (W β¨[ πͺ X ] (f ββ (V β¨[ πͺ Y ] T))) οΌβ¨ β
₯ β©β
((f ββ (V ==> T)) β§[ πͺ X ] W) β¨[ πͺ X ] (f ββ (V ==> T) β§[ πͺ X ] f ββ (V β¨[ πͺ Y ] T)) β€β¨ β
§ β©
W β¨[ πͺ X ] (f ββ (V ==> T) β§[ πͺ X ] f ββ (V β¨[ πͺ Y ] T)) οΌβ¨ β
¨ β©β
W β¨[ πͺ X ] (f ββ ((V ==> T) β§[ πͺ Y ] (V β¨[ πͺ Y ] T))) οΌβ¨ β£ β©β
W β¨[ πͺ X ] (f ββ T) β
where
open PosetReasoning (poset-of (πͺ X))
β
= ap
(Ξ» - β - β§[ πͺ X ] f ββ (V ==> T))
(frame-homomorphisms-preserve-binary-joins (πͺ Y) (πͺ X) f U T)
β
‘ = β§[ πͺ X ]-left-monotone (β¨[ πͺ X ]-left-monotone p)
β
’ = ap
(Ξ» - β - β§[ πͺ X ] f ββ (V ==> T))
(β¨[ πͺ X ]-assoc W (f ββ V) (f ββ T))
β
£ = ap
(Ξ» - β (W β¨[ πͺ X ] -) β§[ πͺ X ] (f ββ (V ==> T)))
(frame-homomorphisms-preserve-binary-joins (πͺ Y) (πͺ X) f V T β»ΒΉ)
β
€ = β§[ πͺ X ]-is-commutative
(W β¨[ πͺ X ] (f ββ (V β¨[ πͺ Y ] T)))
(f ββ (V ==> T))
β
₯ = binary-distributivity (πͺ X) (f ββ (V ==> T)) W (f ββ (V β¨[ πͺ Y ] T))
β
§ = β¨[ πͺ X ]-left-monotone (β§[ πͺ X ]-lowerβ (f ββ (V ==> T)) W)
β
¨ = ap
(Ξ» - β W β¨[ πͺ X ] -)
(frame-homomorphisms-preserve-meets (πͺ Y) (πͺ X) f (V ==> T) (V β¨[ πͺ Y ] T) β»ΒΉ)
β£β = f ββ ((V ==> T) β§[ πͺ Y ] (V β¨[ πͺ Y ] T)) οΌβ¨ ap (Ξ» - β f ββ ((V ==> T) β§[ πͺ Y ] -)) (β¨[ πͺ Y ]-is-commutative V T) β©
f ββ ((V ==> T) β§[ πͺ Y ] (T β¨[ πͺ Y ] V)) οΌβ¨ ap (f ββ_) (β§[ πͺ Y ]-is-commutative (V ==> T) (T β¨[ πͺ Y ] V)) β©
f ββ ((T β¨[ πͺ Y ] V) β§[ πͺ Y ] (V ==> T)) οΌβ¨ ap (f ββ_) (Hβ T V β»ΒΉ) β©
(f ββ T) β
β£ = ap (Ξ» - β W β¨[ πͺ X ] -) β£β
igors-lemma-β : (f : X βcβ Y) (U V : β¨ πͺ Y β©) (W : β¨ πͺ X β©)
β ((T : β¨ πͺ Y β©)
β ((f ββ (U β¨[ πͺ Y ] T) β§[ πͺ X ] (f ββ (V ==> T)))
β€[ poset-of (πͺ X) ]
(W β¨[ πͺ X ] f ββ T)) holds)
β ((f ββ U) β€[ poset-of (πͺ X) ] (W β¨[ πͺ X ] (f ββ V))) holds
igors-lemma-β f U V W Ο =
f ββ U β€β¨ I β©
W β¨[ πͺ X ] f ββ (U β§[ πͺ Y ] V) β€β¨ II β©
W β¨[ πͺ X ] f ββ V β
where
open PosetReasoning (poset-of (πͺ X))
β£ : ((f ββ (U β¨[ πͺ Y ] (V β§[ πͺ Y ] U)) β§[ πͺ X ] f ββ (V ==> (V β§[ πͺ Y ] U)))
β€[ poset-of (πͺ X) ]
(W β¨[ πͺ X ] f ββ (V β§[ πͺ Y ] U))) holds
β£ = Ο (V β§[ πͺ Y ] U)
II : ((W β¨[ πͺ X ] (f ββ (U β§[ πͺ Y ] V)))
β€[ poset-of (πͺ X) ]
(W β¨[ πͺ X ] f ββ V)) holds
II = β¨[ πͺ X ]-right-monotone
(frame-morphisms-are-monotonic
(πͺ Y)
(πͺ X)
(f .prβ)
(f .prβ)
(_ , _)
(β§[ πͺ Y ]-lowerβ U V))
I : ((f ββ U) β€[ poset-of (πͺ X) ] (W β¨[ πͺ X ] f ββ (U β§[ πͺ Y ] V))) holds
I =
f ββ U β€β¨ π β©
f ββ (U β§[ πͺ Y ] (V ==> U)) οΌβ¨ π β©β
(f ββ U) β§[ πͺ X ] (f ββ (V ==> U)) οΌβ¨ π β©β
(f ββ U) β§[ πͺ X ] (f ββ (V ==> (V β§[ πͺ Y ] U))) β€β¨ π β©
f ββ (U β¨[ πͺ Y ] (V β§[ πͺ Y ] U)) β§[ πͺ X ] f ββ (V ==> (V β§[ πͺ Y ] U)) β€β¨ π β©
W β¨[ πͺ X ] f ββ (V β§[ πͺ Y ] U) οΌβ¨ π β©β
W β¨[ πͺ X ] f ββ (U β§[ πͺ Y ] V) β
where
π = frame-morphisms-are-monotonic
(πͺ Y)
(πͺ X)
(f .prβ)
(f .prβ)
(_ , _)
(β§[ πͺ Y ]-greatest _ _ _
(β€-is-reflexive (poset-of (πͺ Y)) U) (weakening V U))
π = frame-homomorphisms-preserve-meets (πͺ Y) (πͺ X) f U (V ==> U)
π = ap (Ξ» - β f ββ U β§[ πͺ X ] (f ββ -)) (heyting-implication-lawβ V U)
π = β§[ πͺ X ]-left-monotone
(frame-morphisms-are-monotonic
(πͺ Y)
(πͺ X)
(f .prβ)
(f .prβ)
(_ , _)
(β¨[ πͺ Y ]-upperβ U (V β§[ πͺ Y ] U)))
π = β£
π = ap (Ξ» - β W β¨[ πͺ X ] (f ββ -)) (β§[ πͺ Y ]-is-commutative V U)
\end{code}