Ayberk Tosun, 11 September 2023 \begin{code} {-# 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.StoneImpliesSpectral (pt : propositional-truncations-exist) (fe : Fun-Ext) (sr : Set-Replacement pt) where \end{code} Importation of foundational UF stuff. \begin{code} open import Slice.Family open import UF.SubtypeClassifier open import UF.Logic open AllCombinators pt fe open PropositionalTruncation pt \end{code} Importations of other locale theory modules. \begin{code} open import Locales.AdjointFunctorTheoremForFrames open import Locales.Clopen pt fe sr open import Locales.Compactness.Definition pt fe open import Locales.Complements pt fe open import Locales.ContinuousMap.Definition pt fe open import Locales.Frame pt fe open import Locales.GaloisConnection pt fe open import Locales.InitialFrame pt fe open import Locales.ScottContinuity 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.WayBelowRelation.Definition pt fe open import Locales.WellInside pt fe sr open import Locales.ZeroDimensionality pt fe sr open Locale \end{code} The well inside relation implies the way below relation. \begin{code} ⋜₀-implies-≪-in-compact-frames : (X : Locale 𝓤 𝓥 𝓦) → is-compact X holds → (U V : ⟨ 𝒪 X ⟩) → U ⋜₀[ 𝒪 X ] V → (U ≪[ 𝒪 X ] V) holds ⋜₀-implies-≪-in-compact-frames {𝓦 = 𝓦} X κ U V (W , c₁ , c₂) S d q = ∥∥-rec ∃-is-prop θ ζ where F = 𝒪 X open PosetNotation (poset-of (𝒪 X)) open PosetReasoning (poset-of (𝒪 X)) T : Fam 𝓦 ⟨ 𝒪 X ⟩ T = ⁅ W ∨[ F ] Sᵢ ∣ Sᵢ ε S ⁆ δ : (𝟏[ F ] ≤ (⋁[ F ] T)) holds δ = 𝟏[ F ] =⟨ c₂ ⁻¹ ⟩ₚ V ∨[ F ] W ≤⟨ ∨[ F ]-left-monotone q ⟩ (⋁[ F ] S) ∨[ F ] W =⟨ ∨[ F ]-is-commutative (⋁[ F ] S) W ⟩ₚ W ∨[ F ] (⋁[ F ] S) =⟨ ∨-is-scott-continuous-eq (𝒪 X) W S d ⟩ₚ ⋁[ F ] ⁅ W ∨[ F ] Sᵢ ∣ Sᵢ ε S ⁆ ■ ε : ((W ∨[ F ] (⋁[ F ] S)) ≤ (⋁[ F ] T)) holds ε = W ∨[ F ] (⋁[ F ] S) ≤⟨ 𝟏-is-top F (W ∨[ F ] (⋁[ F ] S)) ⟩ 𝟏[ F ] ≤⟨ δ ⟩ ⋁[ F ] ⁅ W ∨[ F ] Sᵢ ∣ Sᵢ ε S ⁆ ■ up : (Ɐ i , Ɐ j , Ǝ k , (T [ i ] ≤ T [ k ]) holds × (T [ j ] ≤ T [ k ]) holds) holds up i j = ∥∥-rec ∃-is-prop r (pr₂ d i j) where r = λ (k , p , q) → ∣ k , ∨[ F ]-right-monotone p , ∨[ F ]-right-monotone q ∣ T-is-directed : (is-directed F ⁅ W ∨[ F ] Sᵢ ∣ Sᵢ ε S ⁆) holds T-is-directed = pr₁ d , up ζ : ∥ Σ i ꞉ index S , (𝟏[ F ] ≤ (W ∨[ F ] (S [ i ]))) holds ∥ ζ = κ ⁅ W ∨[ F ] Sᵢ ∣ Sᵢ ε S ⁆ T-is-directed δ θ : Σ i ꞉ index S , (𝟏[ F ] ≤ (W ∨[ F ] S [ i ])) holds → ∃ i ꞉ index S , (U ≤ S [ i ]) holds θ (i , p) = ∣ i , well-inside-implies-below F U (S [ i ]) ∣ W , c₁ , ι ∣ ∣ where η = 𝟏[ F ] ≤⟨ p ⟩ W ∨[ F ] (S [ i ]) =⟨ ∨[ F ]-is-commutative W (S [ i ]) ⟩ₚ (S [ i ]) ∨[ F ] W ■ ι = only-𝟏-is-above-𝟏 F ((S [ i ]) ∨[ F ] W) η \end{code} \begin{code} ⋜-implies-≪-in-compact-frames : (X : Locale 𝓤 𝓥 𝓦) → is-compact X holds → (U V : ⟨ 𝒪 X ⟩) → (U ⋜[ 𝒪 X ] V ⇒ U ≪[ 𝒪 X ] V) holds ⋜-implies-≪-in-compact-frames X κ U V = ∥∥-rec (holds-is-prop (U ≪[ 𝒪 X ] V)) (⋜₀-implies-≪-in-compact-frames X κ U V) \end{code} Clopens are compact in compact locales. \begin{code} clopens-are-compact-in-compact-locales : (X : Locale 𝓤 𝓥 𝓦) → is-compact X holds → (U : ⟨ 𝒪 X ⟩) → (is-clopen (𝒪 X) U ⇒ is-compact-open X U) holds clopens-are-compact-in-compact-locales X κ U = ⋜₀-implies-≪-in-compact-frames X κ U U \end{code} Clopens are basic in compact locales. \begin{code} clopens-are-basic : (X : Locale 𝓤 𝓥 𝓦) (st : stoneᴰ X) → (𝒷 : directed-basisᴰ (𝒪 X)) → (K : ⟨ 𝒪 X ⟩) → (is-clopen (𝒪 X) K ⇒ is-basic X K 𝒷) holds clopens-are-basic X (κ , _) 𝒷 K 𝕔 = compact-opens-are-basic X 𝒷 K (clopens-are-compact-in-compact-locales X κ K 𝕔) \end{code} \begin{code} stoneᴰ-implies-spectralᴰ : (X : Locale 𝓤 𝓥 𝓦) → stoneᴰ X → spectralᴰ X stoneᴰ-implies-spectralᴰ {_} {_} {𝓦} X (κₓ , zdₓ) = ℬ , β , κ , μ where open Joins (λ x y → x ≤[ poset-of (𝒪 X) ] y) ℬ : Fam 𝓦 ⟨ 𝒪 X ⟩ ℬ = basis-zd (𝒪 X) zdₓ φ : consists-of-clopens (𝒪 X) ℬ holds φ = basis-zd-consists-of-clopens (𝒪 X) zdₓ β : directed-basis-forᴰ (𝒪 X) ℬ β U = cover-index-zd (𝒪 X) zdₓ U , † , d where 𝒥 : Fam 𝓦 (index ℬ) 𝒥 = cover-index-zd (𝒪 X) zdₓ U † : (U is-lub-of ⁅ ℬ [ j ] ∣ j ε 𝒥 ⁆) holds † = basis-zd-covers-do-cover (𝒪 X) zdₓ U d : is-directed (𝒪 X) ⁅ ℬ [ j ] ∣ j ε 𝒥 ⁆ holds d = basis-zd-covers-are-directed (𝒪 X) zdₓ U X-is-compact : is-compact X holds X-is-compact = clopens-are-compact-in-compact-locales X κₓ 𝟏[ 𝒪 X ] (𝟏-is-clopen (𝒪 X)) κ : consists-of-compact-opens X ℬ holds κ i = clopens-are-compact-in-compact-locales X κₓ (ℬ [ i ]) 𝕔 where 𝕔 : is-clopen (𝒪 X) (ℬ [ i ]) holds 𝕔 = basis-zd-consists-of-clopens (𝒪 X) zdₓ i μ₀ : contains-top (𝒪 X) ℬ holds μ₀ = ∥∥-rec (holds-is-prop (contains-top (𝒪 X) ℬ)) (λ { (j , p) → ∣ j , transport (λ - → is-top (𝒪 X) - holds) (p ⁻¹) (𝟏-is-top (𝒪 X)) ∣}) (clopens-are-basic X (κₓ , zdₓ) (ℬ , β) 𝟏[ 𝒪 X ] (𝟏-is-clopen (𝒪 X))) open Meets (λ x y → x ≤[ poset-of (𝒪 X) ] y) μ₂ : closed-under-binary-meets (𝒪 X) ℬ holds μ₂ i j = ∥∥-rec ∃-is-prop † ξ where ν : is-clopen (𝒪 X) (ℬ [ i ] ∧[ 𝒪 X ] ℬ [ j ]) holds ν = clopens-are-closed-under-∧ (𝒪 X) (ℬ [ i ]) (ℬ [ j ]) (φ i) (φ j) ξ : is-basic X (ℬ [ i ] ∧[ 𝒪 X ] ℬ [ j ]) (ℬ , β) holds ξ = clopens-are-basic X (κₓ , zdₓ) (ℬ , β) (ℬ [ i ] ∧[ 𝒪 X ] ℬ [ j ]) ν † : Σ k ꞉ index ℬ , ℬ [ k ] = ℬ [ i ] ∧[ 𝒪 X ] ℬ [ j ] → (Ǝ k ꞉ index ℬ , ((ℬ [ k ]) is-glb-of (ℬ [ i ] , ℬ [ j ])) holds) holds † (k , p) = ∣ k , ∧[ 𝒪 X ]-is-glb⋆ p ∣ μ : closed-under-finite-meets (𝒪 X) ℬ holds μ = μ₀ , μ₂ \end{code} `stoneᴰ X` implies that `X` is spectral. \begin{code} stone-locales-are-spectral : (X : Locale 𝓤 𝓥 𝓦) → stoneᴰ X → is-spectral X holds stone-locales-are-spectral X σ@(κ , ζ) = spectralᴰ-gives-spectrality X σᴰ where σᴰ : spectralᴰ X σᴰ = stoneᴰ-implies-spectralᴰ X σ \end{code} Added on 2024-08-11. \begin{code} stoneᴰ-locales-are-compact : (X : Locale 𝓤 𝓥 𝓦) → stoneᴰ X → is-compact X holds stoneᴰ-locales-are-compact X (κ , _) = κ \end{code} \begin{code} module continuous-maps-of-stone-locales (X : Locale 𝓤 𝓥 𝓥) (Y : Locale 𝓤 𝓥 𝓥) (𝕤₁ : stoneᴰ X) (𝕤₂ : stoneᴰ Y) where open ContinuousMaps κ₁ : is-compact X holds κ₁ = stoneᴰ-locales-are-compact X 𝕤₁ κ₂ : is-compact Y holds κ₂ = stoneᴰ-locales-are-compact Y 𝕤₂ zd₂ : zero-dimensionalᴰ (𝒪 Y) zd₂ = pr₂ 𝕤₂ continuous-maps-between-stone-locales-are-spectral : (f : X ─c→ Y) → is-spectral-map Y X f holds continuous-maps-between-stone-locales-are-spectral 𝒻 K κ = clopens-are-compact-in-compact-locales X κ₁ (𝒻 ⋆∙ K) ϑ where open ContinuousMapNotation X Y ψ : is-clopen (𝒪 Y) K holds ψ = compacts-are-clopen-in-zd-locales Y ∣ zd₂ ∣ K κ K' : ⟨ 𝒪 Y ⟩ K' = pr₁ ψ χ : is-boolean-complement-of (𝒪 Y) K' K holds χ = pr₂ ψ χ' : is-boolean-complement-of (𝒪 Y) K K' holds χ' = complementation-is-symmetric (𝒪 Y) K' K χ † : is-boolean-complement-of (𝒪 X) (𝒻 ⋆∙ K') (𝒻 ⋆∙ K) holds † = frame-homomorphisms-preserve-complements (𝒪 Y) (𝒪 X) (_⋆ 𝒻) χ' ϑ : is-clopen (𝒪 X) (𝒻 ⋆∙ K) holds ϑ = 𝒻 ⋆∙ K' , † \end{code}