--- title: Equivalence of sharp elements and the points of patch author: Ayberk Tosun date-started: 2024-08-04 date-completed: 2024-08-13 --- Joint work with Martín Escardó. We prove that the sharp elements of a Scott domain `𝓓` are in bijection with the points of `Patch(Scott(𝓓))`. \begin{code}[hide] {-# OPTIONS --safe --without-K --lossy-unification #-} open import MLTT.Spartan open import UF.FunExt open import UF.PropTrunc open import UF.Size open import UF.Subsingletons open import UF.UA-FunExt open import UF.Univalence module Locales.LawsonLocale.PointsOfPatch (𝓤 : Universe) (ua : Univalence) (pt : propositional-truncations-exist) (sr : Set-Replacement pt) where private fe : Fun-Ext fe {𝓤} {𝓥} = univalence-gives-funext' 𝓤 𝓥 (ua 𝓤) (ua (𝓤 ⊔ 𝓥)) pe : Prop-Ext pe {𝓤} = univalence-gives-propext (ua 𝓤) open import DomainTheory.BasesAndContinuity.ScottDomain pt fe 𝓤 open import DomainTheory.Basics.Dcpo pt fe 𝓤 renaming (⟨_⟩ to ⟨_⟩∙) open import Locales.ContinuousMap.Definition pt fe open import Locales.ContinuousMap.FrameHomomorphism-Properties pt fe open import Locales.Frame pt fe open import Locales.InitialFrame pt fe hiding (_⊑_) open import Locales.LawsonLocale.CompactElementsOfPoint 𝓤 fe pe pt sr open import Locales.LawsonLocale.SharpElementsCoincideWithSpectralPoints 𝓤 ua pt sr open import Locales.PatchLocale pt fe sr open import Locales.PatchProperties pt fe sr open import Locales.PerfectMaps pt fe open import Locales.Point.SpectralPoint-Definition pt fe pe open import Locales.ScottLocale.ScottLocalesOfScottDomains pt fe sr 𝓤 open import Locales.SmallBasis pt fe sr open import Locales.Spectrality.SpectralMap pt fe open import Locales.Spectrality.SpectralityOfOmega pt fe sr 𝓤 pe open import Locales.Stone pt fe sr open import Locales.StoneImpliesSpectral pt fe sr open import Locales.TerminalLocale.Properties pt fe sr open import Locales.UniversalPropertyOfPatch pt fe sr open import Locales.ZeroDimensionality pt fe sr open import UF.Base open import UF.Equiv open import UF.Logic open import UF.SubtypeClassifier renaming (⊥ to ⊥ₚ) open AllCombinators pt fe open DefinitionOfScottDomain open Locale open PerfectMaps open PropositionalTruncation pt hiding (_∨_) \end{code} In the module below, we show that points `𝟏 → Patch(Scott(𝓓))` are in bijection with spectral points `𝟏 → Scott(𝓓)`. This is done by constructing an equivalence ``` Point(Patch(Scott(𝓓))) ≃ Spectral-Point(Patch(Scott(𝓓))) ≃ Spectral-Point(Scott(𝓓)) ``` We then use this equivalence to show that the sharp elements of `𝓓` are in bijection with `Point(Patch(Scott(𝓓)))`. \begin{code} module sharp-elements-and-points-of-patch (𝓓 : DCPO {𝓤 ⁺} {𝓤}) (hl : has-least (underlying-order 𝓓)) (sd : is-scott-domain 𝓓 holds) (dc : decidability-condition 𝓓) where zd : zero-dimensionalᴰ {𝓤 ⁺} (𝒪 (𝟏Loc pe)) zd = 𝟏-zero-dimensionalᴰ pe open SpectralScottLocaleConstruction₂ 𝓓 ua hl sd dc pe renaming (σ⦅𝓓⦆ to Scott⦅𝓓⦆) \end{code} Some more module opening bureaucracy. \begin{code} open ClosedNucleus Scott⦅𝓓⦆ scott-locale-is-spectral open ContinuousMaps open Epsilon Scott⦅𝓓⦆ scott-locale-spectralᴰ open Notion-Of-Spectral-Point open PatchStoneᴰ Scott⦅𝓓⦆ scott-locale-spectralᴰ open Preliminaries open SmallPatchConstruction Scott⦅𝓓⦆ scott-locale-spectralᴰ open UniversalProperty Scott⦅𝓓⦆ (𝟏Loc pe) scott-locale-spectralᴰ zd 𝟎Frm-is-compact \end{code} We define an alias for Patch(Scott(𝓓)). \begin{code} Patch⦅Scott⦅𝓓⦆⦆ : Locale (𝓤 ⁺) 𝓤 𝓤 Patch⦅Scott⦅𝓓⦆⦆ = SmallPatch Patch⦅Scott⦅𝓓⦆⦆-stoneᴰ : stoneᴰ Patch⦅Scott⦅𝓓⦆⦆ Patch⦅Scott⦅𝓓⦆⦆-stoneᴰ = patchₛ-is-compact , patchₛ-zero-dimensionalᴰ \end{code} We now instantiate the universal property of `Patch⦅Scott⦅𝓓⦆⦆` to points `𝟏 → Scott⦅𝓓⦆`. \begin{code} patch-ump : (𝓅@(p , _) : 𝟏Loc pe ─c→ Scott⦅𝓓⦆) → is-spectral-map Scott⦅𝓓⦆ (𝟏Loc pe) 𝓅 holds → let open ContinuousMapNotation (𝟏Loc pe) Patch⦅Scott⦅𝓓⦆⦆ in ∃! 𝒻⁻ ꞉ 𝟏Loc pe ─c→ Patch⦅Scott⦅𝓓⦆⦆ , ((U : ⟨ 𝒪 Scott⦅𝓓⦆ ⟩) → p U = 𝒻⁻ ⋆∙ ‘ U ’ ) patch-ump = ump-of-patch Scott⦅𝓓⦆ scott-locale-is-spectral scott-locale-has-small-𝒦 (𝟏Loc pe) (𝟏-is-stone pe) \end{code} This universal property immediately gives us a map from the spectral points of `Scott⦅𝓓⦆` into the spectral points of `Patch⦅Scott⦅𝓓⦆⦆`. We call this map `to-patch-point`. \begin{code} to-patch-point : Spectral-Point Scott⦅𝓓⦆ → Spectral-Point Patch⦅Scott⦅𝓓⦆⦆ to-patch-point ℱ = to-spectral-point Patch⦅Scott⦅𝓓⦆⦆ (𝓅 , †) where open Spectral-Point ℱ renaming (point to F; point-preserves-compactness to 𝕤) open continuous-maps-of-stone-locales (𝟏Loc pe) Patch⦅Scott⦅𝓓⦆⦆ 𝓅 : 𝟏Loc pe ─c→ Patch⦅Scott⦅𝓓⦆⦆ 𝓅 = ∃!-witness (patch-ump F 𝕤) † : is-spectral-map Patch⦅Scott⦅𝓓⦆⦆ (𝟏Loc pe) 𝓅 holds † = continuous-maps-between-stone-locales-are-spectral (𝟏-stoneᴰ pe) Patch⦅Scott⦅𝓓⦆⦆-stoneᴰ 𝓅 \end{code} Recall that the map `ϵ` denotes the continuous map given by the frame homomorphism `x ↦ ‘ x ’`. \begin{code} ϵ-is-a-spectral-map : is-spectral-map Scott⦅𝓓⦆ Patch⦅Scott⦅𝓓⦆⦆ ϵ holds ϵ-is-a-spectral-map = perfect-maps-are-spectral Patch⦅Scott⦅𝓓⦆⦆ Scott⦅𝓓⦆ ∣ spectralᴰ-implies-basisᴰ Scott⦅𝓓⦆ scott-locale-spectralᴰ ∣ ϵ ϵ-is-a-perfect-map \end{code} TODO: The proof above should be placed in a more appropriate place. We now define the inverse of `to-patch-point`: given a spectral point `𝟏 → Patch⦅Scott⦅𝓓⦆⦆`, we can compose this with `ϵ : Patch⦅Scott⦅𝓓⦆⦆ → Scott⦅𝓓⦆` to obtain a spectral point `𝟏 → Scott⦅𝓓⦆`. We call this map `to-scott-point`. \begin{code} to-scott-point : Spectral-Point Patch⦅Scott⦅𝓓⦆⦆ → Spectral-Point Scott⦅𝓓⦆ to-scott-point 𝓅 = to-spectral-point Scott⦅𝓓⦆ (𝓅₀ , 𝕤) where open Spectral-Point 𝓅 renaming (point to 𝓅⋆) 𝓅₀ : 𝟏Loc pe ─c→ Scott⦅𝓓⦆ 𝓅₀ = cont-comp (𝟏Loc pe) Patch⦅Scott⦅𝓓⦆⦆ Scott⦅𝓓⦆ ϵ 𝓅⋆ 𝕤 : is-spectral-map Scott⦅𝓓⦆ (𝟏Loc pe) 𝓅₀ holds 𝕤 K κ = point-preserves-compactness ‘ K ’ (ϵ-is-a-spectral-map K κ) \end{code} We now proceed to show that these maps form a section-retraction pair. The fact that `to-scott-point` is a retraction of `to-patch-point` follows directly from the existence part of the universal property. \begin{code} to-scott-point-cancels-to-patch-point : to-scott-point ∘ to-patch-point ∼ id to-scott-point-cancels-to-patch-point 𝓅 = to-spectral-point-= Scott⦅𝓓⦆ (to-scott-point (to-patch-point 𝓅)) 𝓅 † where open Spectral-Point 𝓅 using () renaming (point to 𝓅⋆; point-fn to p⋆; point-preserves-compactness to 𝕤) 𝓅′ : Spectral-Point Scott⦅𝓓⦆ 𝓅′ = to-scott-point (to-patch-point 𝓅) open Spectral-Point 𝓅′ using () renaming (point to 𝓅′⋆; point-fn to p′⋆) ‡ : p′⋆ ∼ p⋆ ‡ U = pr₂ (description (patch-ump 𝓅⋆ 𝕤)) U ⁻¹ † : p′⋆ = p⋆ † = dfunext fe ‡ \end{code} The fact that it is a section follows from the uniqueness. \begin{code} to-patch-point-cancels-to-scott-point : to-patch-point ∘ to-scott-point ∼ id to-patch-point-cancels-to-scott-point 𝓅 = to-spectral-point-=' Patch⦅Scott⦅𝓓⦆⦆ 𝓅′ 𝓅 † where open Spectral-Point 𝓅 using () renaming (point to 𝓅⋆; point-fn to p⋆; point-preserves-compactness to 𝕤) open ContinuousMapNotation (𝟏Loc pe) Patch⦅Scott⦅𝓓⦆⦆ 𝓅′ : Spectral-Point Patch⦅Scott⦅𝓓⦆⦆ 𝓅′ = to-patch-point (to-scott-point 𝓅) 𝓅₀ : 𝟏Loc pe ─c→ Scott⦅𝓓⦆ 𝓅₀ = cont-comp (𝟏Loc pe) Patch⦅Scott⦅𝓓⦆⦆ Scott⦅𝓓⦆ ϵ 𝓅⋆ p₀ : ⟨ 𝒪 Scott⦅𝓓⦆ ⟩ → ⟨ 𝒪 (𝟏Loc pe) ⟩ p₀ = pr₁ 𝓅₀ 𝕤₀ : is-spectral-map Scott⦅𝓓⦆ (𝟏Loc pe) 𝓅₀ holds 𝕤₀ K κ = 𝕤 ‘ K ’ (ϵ-is-a-spectral-map K κ) open Spectral-Point 𝓅′ using () renaming (point to 𝓅′⋆; point-fn to p′⋆) υ : ∃! 𝓅₀⁻ ꞉ 𝟏Loc pe ─c→ Patch⦅Scott⦅𝓓⦆⦆ , ((U : ⟨ 𝒪 Scott⦅𝓓⦆ ⟩) → p₀ U = 𝓅₀⁻ ⋆∙ ‘ U ’) υ = patch-ump 𝓅₀ 𝕤₀ r : (U : ⟨ 𝒪 Scott⦅𝓓⦆ ⟩) → p₀ U = p⋆ ‘ U ’ r = λ _ → refl † : 𝓅′⋆ = 𝓅⋆ † = pr₁ (from-Σ-= (∃!-uniqueness υ 𝓅⋆ r)) \end{code} We package these up into a proof that `to-patch-point` and `to-scott-point` form an equivalence. \begin{code} to-patch-point-is-invertible : invertible to-patch-point to-patch-point-is-invertible = to-scott-point , † , ‡ where † : to-scott-point ∘ to-patch-point ∼ id † = to-scott-point-cancels-to-patch-point ‡ : to-patch-point ∘ to-scott-point ∼ id ‡ = to-patch-point-cancels-to-scott-point spectral-points-of-patch-are-equivalent-to-spectral-points-of-scott : Spectral-Point Scott⦅𝓓⦆ ≃ Spectral-Point Patch⦅Scott⦅𝓓⦆⦆ spectral-points-of-patch-are-equivalent-to-spectral-points-of-scott = to-patch-point , qinvs-are-equivs to-patch-point to-patch-point-is-invertible \end{code} We now proceed to show that `Point⦅Patch⦅Scott⦅𝓓⦆⦆⦆` is equivalent to `Spectral-Point⦅Patch⦅Scott⦅𝓓⦆⦆⦆`, since all points of `Patch⦅Scott⦅𝓓⦆⦆` are _automatically_ spectral. \begin{code} forget-spectrality : Spectral-Point Patch⦅Scott⦅𝓓⦆⦆ → Point Patch⦅Scott⦅𝓓⦆⦆ forget-spectrality = Spectral-Point.point to-spectral-point-of-patch : Point Patch⦅Scott⦅𝓓⦆⦆ → Spectral-Point Patch⦅Scott⦅𝓓⦆⦆ to-spectral-point-of-patch 𝓅 = to-spectral-point Patch⦅Scott⦅𝓓⦆⦆ (𝓅 , 𝕤) where open continuous-maps-of-stone-locales (𝟏Loc pe) Patch⦅Scott⦅𝓓⦆⦆ 𝕤 : is-spectral-map Patch⦅Scott⦅𝓓⦆⦆ (𝟏Loc pe) 𝓅 holds 𝕤 = continuous-maps-between-stone-locales-are-spectral (𝟏-stoneᴰ pe) Patch⦅Scott⦅𝓓⦆⦆-stoneᴰ 𝓅 open FrameHomomorphismProperties forget-spectrality-is-invertible : invertible forget-spectrality forget-spectrality-is-invertible = to-spectral-point-of-patch , † , ‡ where † : to-spectral-point-of-patch ∘ forget-spectrality ∼ id † 𝓅ₛ = to-spectral-point-= Patch⦅Scott⦅𝓓⦆⦆ 𝓅 𝓅ₛ refl where 𝓅 : Spectral-Point Patch⦅Scott⦅𝓓⦆⦆ 𝓅 = to-spectral-point-of-patch (forget-spectrality 𝓅ₛ) ‡ : forget-spectrality ∘ to-spectral-point-of-patch ∼ id ‡ 𝓅 = to-frame-homomorphism-= (𝒪 Patch⦅Scott⦅𝓓⦆⦆) (𝒪 (𝟏Loc pe)) 𝓅 𝓅′ (λ _ → refl) where 𝓅′ : Point Patch⦅Scott⦅𝓓⦆⦆ 𝓅′ = forget-spectrality (to-spectral-point-of-patch 𝓅) spectral-points-of-patch-are-equivalent-to-points-of-patch : Spectral-Point Patch⦅Scott⦅𝓓⦆⦆ ≃ Point Patch⦅Scott⦅𝓓⦆⦆ spectral-points-of-patch-are-equivalent-to-points-of-patch = forget-spectrality , e where e : is-equiv forget-spectrality e = qinvs-are-equivs forget-spectrality forget-spectrality-is-invertible \end{code} We combine these two equivalences to obtain an equivalence between the points of `Patch⦅Scott⦅𝓓⦆⦆` and spectral points of `Scott⦅𝓓⦆`. \begin{code} points-of-patch-are-spectral-points-of-scott : Point Patch⦅Scott⦅𝓓⦆⦆ ≃ Spectral-Point Scott⦅𝓓⦆ points-of-patch-are-spectral-points-of-scott = Point Patch⦅Scott⦅𝓓⦆⦆ ≃⟨ Ⅰ ⟩ Spectral-Point Patch⦅Scott⦅𝓓⦆⦆ ≃⟨ Ⅱ ⟩ Spectral-Point Scott⦅𝓓⦆ ■ where Ⅰ = ≃-sym spectral-points-of-patch-are-equivalent-to-points-of-patch Ⅱ = ≃-sym spectral-points-of-patch-are-equivalent-to-spectral-points-of-scott \end{code} Finally, we combine this equivalence with the equivalence between sharp elements and spectral points. \begin{code} open Sharp-Element-Spectral-Point-Equivalence 𝓓 hl sd dc points-of-patch-are-the-sharp-elements : ♯𝓓 ≃ Point Patch⦅Scott⦅𝓓⦆⦆ points-of-patch-are-the-sharp-elements = ♯𝓓 ≃⟨ Ⅰ ⟩ Spectral-Point Scott⦅𝓓⦆ ≃⟨ Ⅱ ⟩ Point Patch⦅Scott⦅𝓓⦆⦆ ■ where Ⅰ = ♯𝓓-equivalent-to-spectral-points-of-Scott⦅𝓓⦆ Ⅱ = ≃-sym points-of-patch-are-spectral-points-of-scott \end{code}