Ayberk Tosun, 13 September 2023

The module contains the definition of a spectral locale.

This used to live in the `CompactRegular` module which is now deprecated and
will be broken down into smaller modules.

\begin{code}[hide]

{-# OPTIONS --safe --without-K --lossy-unification #-}

open import MLTT.Spartan hiding (𝟚)
open import MLTT.List hiding ([_])
open import UF.PropTrunc
open import UF.FunExt
open import UF.Subsingletons
open import UF.SubtypeClassifier
open import UF.Size
open import UF.EquivalenceExamples

module Locales.Spectrality.SpectralityOfOmega
        (pt : propositional-truncations-exist)
        (fe : Fun-Ext)
        (sr : Set-Replacement pt)
        (𝓀 : Universe)
        (pe : propext 𝓀) where

open import Locales.InitialFrame pt fe
open import Locales.Frame        pt fe
open import Locales.Compactness.Definition pt fe
open import Slice.Family
open import Locales.Spectrality.SpectralLocale pt fe
open import Locales.Spectrality.BasisDirectification pt fe sr
open import Locales.SmallBasis pt fe sr

open import UF.Logic
open AllCombinators pt fe
open PropositionalTruncation pt

open Spectrality-of-𝟎 𝓀 pe

bottom-of-𝟎Frm-is-βŠ₯ : βŠ₯ = 𝟎[ 𝟎-π”½π•£π•ž pe ]
bottom-of-𝟎Frm-is-βŠ₯ = only-𝟎-is-below-𝟎 (𝟎-π”½π•£π•ž pe) βŠ₯ (Ξ» ())

Ξ©-frm : Frame (𝓀 ⁺) 𝓀 𝓀
Ξ©-frm = 𝟎-π”½π•£π•ž pe

𝟏-loc : Locale (𝓀 ⁺) 𝓀 𝓀
𝟏-loc = record { ⟨_βŸ©β‚— = ⟨ Ξ©-frm ⟩ ; frame-str-of = prβ‚‚ Ξ©-frm }

𝟎Frm-is-compact : is-compact 𝟏-loc holds
𝟎Frm-is-compact S (∣i∣ , u) p = βˆ₯βˆ₯-rec βˆƒ-is-prop † (p ⋆)
 where
  † : (Ξ£ j κž‰ index S , ((S [ j ]) holds))
    β†’ βˆƒ j κž‰ index S , (𝟏[ 𝟎-π”½π•£π•ž pe ] ≀[ poset-of (𝟎-π”½π•£π•ž pe) ] S [ j ]) holds
  † (j , q) = ∣ j , (Ξ» _ β†’ q) ∣

β„¬πŸŽ-consists-of-compact-opens : consists-of-compact-opens 𝟏-loc β„¬πŸŽ holds
β„¬πŸŽ-consists-of-compact-opens (inl ⋆) =
 transport
  (Ξ» - β†’ is-compact-open 𝟏-loc - holds)
  (bottom-of-𝟎Frm-is-βŠ₯ ⁻¹)
  (𝟎-is-compact 𝟏-loc)
β„¬πŸŽ-consists-of-compact-opens (inr ⋆) = 𝟎Frm-is-compact

β„¬πŸŽβ†‘-consists-of-compact-opens : consists-of-compact-opens 𝟏-loc β„¬πŸŽβ†‘ holds
β„¬πŸŽβ†‘-consists-of-compact-opens []       = 𝟎-is-compact 𝟏-loc
β„¬πŸŽβ†‘-consists-of-compact-opens (i ∷ is) =
 compact-opens-are-closed-under-∨ 𝟏-loc (β„¬πŸŽ [ i ]) (β„¬πŸŽβ†‘ [ is ]) ΞΊ IH
  where
   ΞΊ : is-compact-open 𝟏-loc (β„¬πŸŽ [ i ]) holds
   ΞΊ = β„¬πŸŽ-consists-of-compact-opens i

   IH : is-compact-open 𝟏-loc (β„¬πŸŽβ†‘ [ is ]) holds
   IH = β„¬πŸŽβ†‘-consists-of-compact-opens is

andβ‚‚-lemma₁ : (x y : 𝟚 𝓀) β†’ (β„¬πŸŽ [ andβ‚‚ x y ] ≀[ poset-of (𝟎-π”½π•£π•ž pe) ] β„¬πŸŽ [ x ]) holds
andβ‚‚-lemma₁ (inl ⋆) y       = Ξ» ()
andβ‚‚-lemma₁ (inr ⋆) (inl ⋆) = Ξ» ()
andβ‚‚-lemma₁ (inr ⋆) (inr ⋆) = Ξ» { ⋆ β†’ ⋆ }

andβ‚‚-lemmaβ‚‚ : (x y : 𝟚 𝓀) β†’ (β„¬πŸŽ [ andβ‚‚ x y ] ≀[ poset-of (𝟎-π”½π•£π•ž pe) ] β„¬πŸŽ [ y ]) holds
andβ‚‚-lemmaβ‚‚ (inl ⋆) y       = Ξ» ()
andβ‚‚-lemmaβ‚‚ (inr ⋆) (inl ⋆) = Ξ» ()
andβ‚‚-lemmaβ‚‚ (inr ⋆) (inr ⋆) = Ξ» { ⋆ β†’ ⋆ }

open Meets (Ξ» x y β†’ x ≀[ poset-of (𝟎-π”½π•£π•ž pe) ] y) hiding (is-top)

andβ‚‚-lemma₃ : (x y : 𝟚 𝓀) ((z , _) : lower-bound (β„¬πŸŽ [ x ] , β„¬πŸŽ [ y ]))
            β†’ (z ≀[ poset-of (𝟎-π”½π•£π•ž pe) ] β„¬πŸŽ [ andβ‚‚ x y ]) holds
andβ‚‚-lemma₃ (inl ⋆) y (z , p₁ , pβ‚‚) = p₁
andβ‚‚-lemma₃ (inr ⋆) y (z , p₁ , pβ‚‚) = pβ‚‚

β„¬πŸŽ-is-closed-under-binary-meets : closed-under-binary-meets (𝟎-π”½π•£π•ž pe) β„¬πŸŽ holds
β„¬πŸŽ-is-closed-under-binary-meets i j = ∣ andβ‚‚ i j , (†₁ , †₂) , andβ‚‚-lemma₃ i j ∣
 where
  †₁ : (β„¬πŸŽ [ andβ‚‚ i j ] ≀[ poset-of (𝟎-π”½π•£π•ž pe) ] β„¬πŸŽ [ i ]) holds
  †₁ = andβ‚‚-lemma₁ i j

  †₂ : (β„¬πŸŽ [ andβ‚‚ i j ] ≀[ poset-of (𝟎-π”½π•£π•ž pe) ] β„¬πŸŽ [ j ]) holds
  †₂ = andβ‚‚-lemmaβ‚‚ i j


β„¬πŸŽβ†‘-directed-basisα΄° : directed-basisα΄° (𝟎-π”½π•£π•ž pe)
β„¬πŸŽβ†‘-directed-basisα΄° = β„¬πŸŽβ†‘ , β↑
 where
  -- TODO: get rid of these projections.
  β↑ : directed-basis-forα΄° (𝟎-π”½π•£π•ž pe) β„¬πŸŽβ†‘
  β↑ U = pr₁ (pr₁ β„¬πŸŽ-is-directed-basis-for-𝟎 U)
       , (prβ‚‚ (pr₁ β„¬πŸŽ-is-directed-basis-for-𝟎 U)
       , prβ‚‚ β„¬πŸŽ-is-directed-basis-for-𝟎 U)

\end{code}

The result below was cleaned up and refactored on 2024-08-05.

\begin{code}

𝟎-π”½π•£π•ž-spectralα΄° : spectralα΄° 𝟏-loc
𝟎-π”½π•£π•ž-spectralα΄° =
 pr₁ Ξ£-assoc (β„¬πŸŽβ†‘-directed-basisα΄° , β„¬πŸŽβ†‘-consists-of-compact-opens , Ξ³)
  where
   t : is-top (𝟎-π”½π•£π•ž pe) (𝟏[ 𝟎-π”½π•£π•ž pe ] ∨[ 𝟎-π”½π•£π•ž pe ] 𝟎[ 𝟎-π”½π•£π•ž pe ]) holds
   t = transport
        (Ξ» - β†’ is-top (𝟎-π”½π•£π•ž pe) - holds)
        (𝟎-left-unit-of-∨ (𝟎-π”½π•£π•ž pe) 𝟏[ 𝟎-π”½π•£π•ž pe ] ⁻¹)
        (𝟏-is-top (𝟎-π”½π•£π•ž pe))

   c : closed-under-binary-meets (𝟎-π”½π•£π•ž pe) β„¬πŸŽβ†‘ holds
   c = directify-preserves-closure-under-∧
        (𝟎-π”½π•£π•ž pe)
        β„¬πŸŽ
        β„¬πŸŽ-is-basis-for-𝟎
        β„¬πŸŽ-is-closed-under-binary-meets

   Ξ³ : closed-under-finite-meets (𝟎-π”½π•£π•ž pe) β„¬πŸŽβ†‘ holds
   Ξ³ = ∣ (inr ⋆ ∷ []) , t ∣ , c

\end{code}

\begin{code}

𝟎-π”½π•£π•ž-is-spectral : is-spectral 𝟏-loc holds
𝟎-π”½π•£π•ž-is-spectral = spectralα΄°-gives-spectrality 𝟏-loc 𝟎-π”½π•£π•ž-spectralα΄°

\end{code}