Ayberk Tosun, 19 August 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
open import Slice.Family
open import UF.FunExt
open import UF.Logic
open import UF.PropTrunc
open import UF.SubtypeClassifier
module Locales.Spectrality.SpectralLocale (pt : propositional-truncations-exist)
                                          (fe : Fun-Ext) where
open import Locales.Frame pt fe
open import Locales.Compactness.Definition pt fe
open PropositionalTruncation pt
open AllCombinators pt fe
open Locale
\end{code}
The following predicate expresses what it means for a locale's compact opens to
be closed under binary meets.
\begin{code}
compacts-of-[_]-are-closed-under-binary-meets : Locale ๐ค ๐ฅ ๐ฆ โ ฮฉ (๐ค โ ๐ฅ โ ๐ฆ โบ)
compacts-of-[ X ]-are-closed-under-binary-meets =
 let
  _โงโ_ = meet-of (๐ช X)
 in
  โฑฏ Kโ ๊ โจ ๐ช X โฉ , โฑฏ Kโ ๊ โจ ๐ช X โฉ ,
   is-compact-open X Kโ โ is-compact-open X Kโ โ is-compact-open X (Kโ โงโ Kโ)
\end{code}
Now we express closure under finite meets, which amounts to closure under binary
meets combined with the empty meet (i.e. the top element) being compact.
\begin{code}
compacts-of-[_]-are-closed-under-finite-meets : Locale ๐ค ๐ฅ ๐ฆ โ ฮฉ (๐ค โ ๐ฅ โ ๐ฆ โบ)
compacts-of-[ X ]-are-closed-under-finite-meets =
 is-compact X โง compacts-of-[ X ]-are-closed-under-binary-meets
\end{code}
The following predicate expresses the property of a given family to consist of
compact opens i.e. all the opens it gives being compact opens.
\begin{code}
consists-of-compact-opens : (X : Locale ๐ค ๐ฅ ๐ฆ) โ Fam ๐ฆ โจ ๐ช X โฉ โ ฮฉ (๐ค โ ๐ฅ โ ๐ฆ โบ)
consists-of-compact-opens X S = โฑฏ i ๊ index S , is-compact-open X (S [ i ])
\end{code}
We are now ready to define the notion of a spectral locale:
\begin{code}
has-a-directed-cover-of-compact-opens : (X : Locale ๐ค ๐ฅ ๐ฆ) (U : โจ ๐ช X โฉ)
                                      โ ฮฉ (๐ค โ ๐ฅ โ ๐ฆ โบ)
has-a-directed-cover-of-compact-opens {_} {_} {๐ฆ} X U =
 ฦ S ๊ Fam ๐ฆ โจ ๐ช X โฉ , consists-of-compact-opens X S holds
                     ร is-directed (๐ช X) S holds
                     ร (U ๏ผ โ[ ๐ช X ] S)
is-spectral : Locale ๐ค ๐ฅ ๐ฆ โ ฮฉ (๐ค โ ๐ฅ โ ๐ฆ โบ)
is-spectral {_} {_} {๐ฆ} X = โฆ
๐โฆ โง โฆ
๐โฆ
 where
  โฆ
๐โฆ = compacts-of-[ X ]-are-closed-under-finite-meets
  โฆ
๐โฆ = โฑฏ U ๊ โจ ๐ช X โฉ , has-a-directed-cover-of-compact-opens X U
\end{code}
Spectral locales are compact:
\begin{code}
spectral-locales-are-compact : (X : Locale ๐ค ๐ฅ ๐ฆ)
                             โ (is-spectral X โ is-compact X) holds
spectral-locales-are-compact X ((ฮบ , _) , _) = ฮบ
\end{code}
We define a couple of projections of the components of being a spectral locale.
We denote by `binary-coherence` the fact that that the compact opens are closed
under binary meets.
\begin{code}
binary-coherence : (X : Locale ๐ค ๐ฅ ๐ฆ) (ฯ : is-spectral X holds) (Kโ Kโ : โจ ๐ช X โฉ)
                 โ (is-compact-open X Kโ
                 โ is-compact-open X Kโ
                 โ is-compact-open X (Kโ โง[ ๐ช X ] Kโ)) holds
binary-coherence X ฯ = prโ (prโ ฯ)
\end{code}
The fact that the top open is compact is denoted `spectral-implies-compact`.
\begin{code}
spectral-implies-compact : (X : Locale ๐ค ๐ฅ ๐ฆ) (ฯ : is-spectral X holds)
                         โ is-compact-open X ๐[ ๐ช X ] holds
spectral-implies-compact X ฯ = prโ (prโ ฯ)
\end{code}
Addition on 2024-02-24.
\begin{code}
module OperationsOnCompactOpens (X : Locale ๐ค ๐ฅ ๐ฆ) (ฯ : is-spectral X holds) where
 _โงโ_ : ๐ฆ X โ ๐ฆ X โ ๐ฆ X
 _โงโ_ (Kโ , ฮบโ) (Kโ , ฮบโ) = (Kโ โง[ ๐ช X ] Kโ) , binary-coherence X ฯ Kโ Kโ ฮบโ ฮบโ
 _โจโ_ : ๐ฆ X โ ๐ฆ X โ ๐ฆ X
 (Kโ , ฮบโ) โจโ (Kโ , ฮบโ) =
  (Kโ โจ[ ๐ช X ] Kโ) , compact-opens-are-closed-under-โจ X Kโ Kโ ฮบโ ฮบโ
\end{code}
Added on 2024-04-29.
Inclusion of the compact opens of `X`.
\begin{code}
 ฮนโ : ๐ฆ X โ โจ ๐ช X โฉ
 ฮนโ (K , _) = K
\end{code}