Ayberk Tosun.
Started on 8 September 2023.
Updated on 21 September 2023.
This module contains the definition of point of a locale.
\begin{code}[hide]
{-# OPTIONS --safe --without-K --lossy-unification #-}
open import MLTT.Spartan
open import UF.PropTrunc
open import UF.FunExt
open import UF.SubtypeClassifier
open import UF.Logic
open import UF.Equiv
module Locales.Point.Definition (pt : propositional-truncations-exist)
(fe : Fun-Ext)
where
open import UF.Powerset-MultiUniverse
open import Slice.Family
open import Locales.Frame pt fe
open Locale
open AllCombinators pt fe
\end{code}
We define the standard notion of _completely prime filter_.
\begin{code}
module DefnOfCPF (X : Locale (𝓤 ⁺) 𝓤 𝓤) where
open PosetNotation (poset-of (𝒪 X))
closed-under-binary-meets : 𝓟 {𝓤} ⟨ 𝒪 X ⟩ → Ω (𝓤 ⁺)
closed-under-binary-meets F =
Ɐ U ꞉ ⟨ 𝒪 X ⟩ , Ɐ V ꞉ ⟨ 𝒪 X ⟩ , U ∈ₚ F ⇒ V ∈ₚ F ⇒ (U ∧[ 𝒪 X ] V) ∈ₚ F
closed-under-finite-meets : 𝓟 ⟨ 𝒪 X ⟩ → Ω (𝓤 ⁺)
closed-under-finite-meets ϕ = 𝟏[ 𝒪 X ] ∈ₚ ϕ ∧ closed-under-binary-meets ϕ
is-upwards-closed : 𝓟 {𝓤} ⟨ 𝒪 X ⟩ → Ω (𝓤 ⁺)
is-upwards-closed ϕ = Ɐ U ꞉ ⟨ 𝒪 X ⟩ , Ɐ V ꞉ ⟨ 𝒪 X ⟩ , U ≤ V ⇒ ϕ U ⇒ ϕ V
is-filter : 𝓟 {𝓤} ⟨ 𝒪 X ⟩ → Ω (𝓤 ⁺)
is-filter ϕ = is-upwards-closed ϕ ∧ closed-under-finite-meets ϕ
is-completely-prime : 𝓟 {𝓤} ⟨ 𝒪 X ⟩ → Ω (𝓤 ⁺)
is-completely-prime ϕ = Ɐ S ꞉ Fam 𝓤 ⟨ 𝒪 X ⟩ ,
ϕ (⋁[ 𝒪 X ] S) ⇒ (Ǝ i ꞉ index S , ϕ (S [ i ]) holds)
is-cpf : 𝓟 ⟨ 𝒪 X ⟩ → Ω (𝓤 ⁺)
is-cpf ϕ = is-filter ϕ ∧ is-completely-prime ϕ
\end{code}
The type of points of a locale is then the completely prime filters.
\begin{code}
Point : 𝓤 ⁺ ̇
Point = Σ ϕ ꞉ 𝓟 {𝓤} ⟨ 𝒪 X ⟩ , is-cpf ϕ holds
\end{code}
With this definition of point as a completely prime filter, the points of a
locale `X` must be in bijection with continuous maps `𝟏 → X` (where `𝟏` denotes
the terminal locale).
\section{Equivalent definitions using records}
We give two equivalent definitions using records to avoid using projections
and pairings to construct inhabitants of the `Point` type.
* `Pointᵣ` corresponds directly to the Σ definition of `Point`.
* `Point′ᵣ` is another equivalent definition that breaks down the conjuncts
involved in the notion of being a completely prime filter. This is
convenient when constructing inhabitants of `Point`.
\begin{code}
record Pointᵣ (X : Locale (𝓤 ⁺) 𝓤 𝓤) : 𝓤 ⁺ ̇ where
open DefnOfCPF X
field
point : 𝓟 ⟨ 𝒪 X ⟩
point-is-cpf : is-cpf point holds
point-is-filter : is-filter point holds
point-is-filter = pr₁ point-is-cpf
point-is-completely-prime : is-completely-prime point holds
point-is-completely-prime = pr₂ point-is-cpf
point-is-upwards-closed : is-upwards-closed point holds
point-is-upwards-closed = pr₁ point-is-filter
point-is-closed-under-finite-meets : closed-under-finite-meets point holds
point-is-closed-under-finite-meets = pr₂ point-is-filter
point-is-closed-under-∧ : closed-under-binary-meets point holds
point-is-closed-under-∧ = pr₂ point-is-closed-under-finite-meets
point-contains-top : (𝟏[ 𝒪 X ] ∈ₚ point) holds
point-contains-top = pr₁ point-is-closed-under-finite-meets
open DefnOfCPF
to-pointᵣ : (X : Locale (𝓤 ⁺) 𝓤 𝓤) → Point X → Pointᵣ X
to-pointᵣ X (ϕ , cpf) = record { point = ϕ ; point-is-cpf = cpf}
to-point : (X : Locale (𝓤 ⁺) 𝓤 𝓤) → Pointᵣ X → Point X
to-point X x = point x , point-is-filter x , point-is-completely-prime x
where
open Pointᵣ
point-rec-equiv : (X : Locale (𝓤 ⁺) 𝓤 𝓤) → Pointᵣ X ≃ Point X
point-rec-equiv X =
to-point X , (to-pointᵣ X , λ _ → refl) , (to-pointᵣ X) , (λ _ → refl)
\end{code}
\begin{code}
record Point′ᵣ (X : Locale (𝓤 ⁺) 𝓤 𝓤) : 𝓤 ⁺ ̇ where
field
point : 𝓟 {𝓤} ⟨ 𝒪 X ⟩
point-is-upwards-closed : is-upwards-closed X point holds
point-contains-top : (𝟏[ 𝒪 X ] ∈ₚ point) holds
point-is-closed-under-∧ : closed-under-binary-meets X point holds
point-is-completely-prime : is-completely-prime X point holds
point-is-cpf : is-cpf X point holds
point-is-cpf = (⦅𝟏⦆ , ⦅𝟐⦆ , ⦅𝟑⦆) , ⦅𝟒⦆
where
⦅𝟏⦆ : is-upwards-closed X point holds
⦅𝟏⦆ = point-is-upwards-closed
⦅𝟐⦆ : 𝟏[ 𝒪 X ] ∈ point
⦅𝟐⦆ = point-contains-top
⦅𝟑⦆ : closed-under-binary-meets X point holds
⦅𝟑⦆ = point-is-closed-under-∧
⦅𝟒⦆ : is-completely-prime X point holds
⦅𝟒⦆ = point-is-completely-prime
\end{code}
\begin{code}
to-point′ᵣ : (X : Locale (𝓤 ⁺) 𝓤 𝓤) → Pointᵣ X → Point′ᵣ X
to-point′ᵣ X 𝓍 =
record
{ point = Pointᵣ.point 𝓍
; point-is-upwards-closed = Pointᵣ.point-is-upwards-closed 𝓍
; point-contains-top = Pointᵣ.point-contains-top 𝓍
; point-is-closed-under-∧ = Pointᵣ.point-is-closed-under-∧ 𝓍
; point-is-completely-prime = Pointᵣ.point-is-completely-prime 𝓍
}
point′ᵣ-to-pointᵣ : (X : Locale (𝓤 ⁺) 𝓤 𝓤) → Point′ᵣ X → Pointᵣ X
point′ᵣ-to-pointᵣ X 𝓍 =
record
{ point = Point′ᵣ.point 𝓍
; point-is-cpf = Point′ᵣ.point-is-cpf 𝓍
}
\end{code}