Ayberk Tosun, 11 September 2023 \begin{code}[hide] {-# OPTIONS --safe --without-K --lossy-unification #-} open import UF.FunExt open import UF.PropTrunc module Locales.PerfectMaps (pt : propositional-truncations-exist) (fe : Fun-Ext) where open import Locales.AdjointFunctorTheoremForFrames open import Locales.Compactness.Definition pt fe open import Locales.ContinuousMap.Definition pt fe open import Locales.ContinuousMap.FrameHomomorphism-Properties pt fe open import Locales.Frame pt fe open import Locales.GaloisConnection pt fe open import Locales.Spectrality.Properties pt fe open import Locales.Spectrality.SpectralLocale pt fe open import Locales.WayBelowRelation.Definition pt fe open import MLTT.Spartan hiding (π) open import Slice.Family open import UF.Logic open import UF.SubtypeClassifier open AllCombinators pt fe open ContinuousMaps open FrameHomomorphismProperties open Locale open PropositionalTruncation pt \end{code} \begin{code} module SpectralMaps (X : Locale π€' π₯ π₯) (Y : Locale π€ π₯ π₯) where is-spectral-map : (X βcβ Y) β Ξ© (π€ β π€' β π₯ βΊ) is-spectral-map (f , _) = β±― U κ β¨ πͺ Y β© , is-compact-open Y U β is-compact-open X (f U) module PerfectMaps (X : Locale π€ π₯ π₯) (Y : Locale π€' π₯ π₯) (π· : has-basis (πͺ Y) holds) where open AdjointFunctorTheorem pt fe X Y π· open ContinuousMapNotation X Y \end{code} A continuous map `f : X β Y` is called *perfect* if its right adjoint is Scott-continuous. \begin{code} is-perfect-map : (X βcβ Y) β Ξ© (π€ β π€' β π₯ βΊ) is-perfect-map f = is-scott-continuous (πͺ X) (πͺ Y) (prβ (right-adjoint-of f)) \end{code} \begin{code} \end{code} Perfect maps preserve the way below relation. \begin{code} perfect-preserves-way-below : (π» : X βcβ Y) β is-perfect-map π» holds β (U V : β¨ πͺ Y β©) β (U βͺ[ πͺ Y ] V) holds β (π» ββ U βͺ[ πͺ X ] π» ββ V) holds perfect-preserves-way-below f Ο U V Ο S Ξ΄ p = Ξ³ where open GaloisConnectionBetween (poset-of (πͺ Y)) (poset-of (πͺ X)) open PosetReasoning (poset-of (πͺ Y)) T : Fam π₯ β¨ πͺ Y β© T = β f βΒ· V β£ V Ξ΅ S β ΞΆβ : (V β€[ poset-of (πͺ Y) ] (f βΒ· (β[ πͺ X ] S))) holds ΞΆβ = adjunction-inequality-forward f (join-of (πͺ X) S) V p ΞΆβ : (V β€[ poset-of (πͺ Y) ] (β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β)) holds ΞΆβ = V β€β¨ ΞΆβ β© f βΒ· (β[ πͺ X ] S) οΌβ¨ β β©β β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β β where β = scott-continuous-join-eq (πͺ X) (πͺ Y) (f βΒ·_) Ο S Ξ΄ T-is-directed : is-directed (πͺ Y) T holds T-is-directed = monotone-image-on-directed-family-is-directed (πͺ X) (πͺ Y) S Ξ΄ (f βΒ·_) ΞΌ where ΞΌ : is-monotonic (poset-of (πͺ X)) (poset-of (πͺ Y)) (f βΒ·_) holds ΞΌ = prβ (right-adjoint-of f) Ξ³ : (Ζ k κ index S , ((f ββ U) β€[ poset-of (πͺ X) ] (S [ k ])) holds) holds Ξ³ = β₯β₯-rec β-is-prop Ο΅ (Ο T T-is-directed ΞΆβ) where Ο΅ : _ Ο΅ (k , q) = β£ k , β β£ where β : ((f ββ U) β€[ poset-of (πͺ X) ] (S [ k ])) holds β = adjunction-inequality-backward f (S [ k ]) U q \end{code} \begin{code} compact-codomain-of-perfect-map-implies-compact-domain : (π» : X βcβ Y) β is-perfect-map π» holds β is-compact Y holds β is-compact X holds compact-codomain-of-perfect-map-implies-compact-domain π»@(f , Ο , _) p ΞΊ = Ξ³ where Ξ² : (f π[ πͺ Y ] βͺ[ πͺ X ] f π[ πͺ Y ]) holds Ξ² = perfect-preserves-way-below π» p π[ πͺ Y ] π[ πͺ Y ] ΞΊ Ξ³ : (π[ πͺ X ] βͺ[ πͺ X ] π[ πͺ X ]) holds Ξ³ = transport (Ξ» - β (- βͺ[ πͺ X ] -) holds) Ο Ξ² \end{code} \begin{code} open SpectralMaps X Y perfect-maps-are-spectral : (f : X βcβ Y) β (is-perfect-map f β is-spectral-map f) holds perfect-maps-are-spectral π»@(f , _) Ο U ΞΊ = perfect-preserves-way-below π» Ο U U ΞΊ \end{code} \begin{code} open Joins (Ξ» x y β x β€[ poset-of (πͺ Y) ] y) scott-continuous-join-eqβ» : (h : β¨ πͺ X β© β β¨ πͺ Y β©) β ((S : Fam π₯ β¨ πͺ X β©) β is-directed (πͺ X) S holds β h (β[ πͺ X ] S) οΌ β[ πͺ Y ] β h V β£ V Ξ΅ S β) β is-scott-continuous (πͺ X) (πͺ Y) h holds scott-continuous-join-eqβ» h Ο S Ξ΄ = transport (Ξ» - β (- is-lub-of β h V β£ V Ξ΅ S β) holds) (Ο S Ξ΄ β»ΒΉ) (β[ πͺ Y ]-upper β h V β£ V Ξ΅ S β , β[ πͺ Y ]-least β h V β£ V Ξ΅ S β) open GaloisConnectionBetween (poset-of (πͺ Y)) (poset-of (πͺ X)) spectral-maps-are-perfect : is-spectral Y holds β (f : X βcβ Y) β (is-spectral-map f β is-perfect-map f) holds spectral-maps-are-perfect π€ f Ο S Ξ΄ = scott-continuous-join-eqβ» fβ β S Ξ΄ where open PosetNotation (poset-of (πͺ X)) open PosetNotation (poset-of (πͺ Y)) renaming (_β€_ to _β€y_) infix -2 _β€β_ _β€β_ = _β€y_ fββ : poset-of (πͺ X) βmβ poset-of (πͺ Y) fββ = right-adjoint-of f fβΊ : β¨ πͺ Y β© β β¨ πͺ X β© fβΊ = f ββ_ fβΊβ : poset-of (πͺ Y) βmβ poset-of (πͺ X) fβΊβ = fβΊ , frame-morphisms-are-monotonic (πͺ Y) (πͺ X) fβΊ (prβ f) fβ : β¨ πͺ X β© β β¨ πͺ Y β© fβ = f βΒ·_ π : (fβΊβ β£ fββ) holds π = fβ-is-right-adjoint-of-fβΊ f β : (S : Fam π₯ β¨ πͺ X β©) β is-directed (πͺ X) S holds β f βΒ· (β[ πͺ X ] S) οΌ β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β β S Ξ΄ = β€-is-antisymmetric (poset-of (πͺ Y)) β β β β where open PosetReasoning (poset-of (πͺ X)) open PosetReasoning (poset-of (πͺ Y)) using () renaming (_β€β¨_β©_ to _β€β¨_β©β_; _β to _πππ) Ο : ((f βΒ· (β[ πͺ X ] S)) β€β[ Y ] (β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β)) holds Ο (K , ΞΊ) p = β₯β₯Ξ©-rec β» (ΞΊβ² S Ξ΄ q) where ΞΊβ² : is-compact-open X (fβΊ K) holds ΞΊβ² = Ο K ΞΊ q : (fβΊ K β€ (β[ πͺ X ] S)) holds q = adjunction-inequality-backward f (β[ πͺ X ] S) K p β» : Ξ£ k κ index S , (fβΊ K β€ S [ k ]) holds β (K β€β β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β) holds β» (k , p) = K β€β¨ β β©β f βΒ· (S [ k ]) β€β¨ β ‘ β©β β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β πππ where β = adjunction-inequality-forward f (S [ k ]) K p β ‘ = β[ πͺ Y ]-upper β f βΒ· V β£ V Ξ΅ S β k β β : (f βΒ· (β[ πͺ X ] S) β€β β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β) holds β β = spectral-yoneda Y π€ (f βΒ· (β[ πͺ X ] S)) (β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β) Ο β‘β : (f ββ (β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β) β€ (β[ πͺ X ] S)) holds β‘β = f ββ (β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β) οΌβ¨ β β©β β[ πͺ X ] β f ββ (f βΒ· V) β£ V Ξ΅ S β β€β¨ β ‘ β© β[ πͺ X ] β V β£ V Ξ΅ S β β where β» : cofinal-in (πͺ X) β f ββ (f βΒ· V) β£ V Ξ΅ S β S holds β» i = β£ i , counit fβΊβ fββ π (S [ i ]) β£ β = continuity-of X Y f β f βΒ· V β£ V Ξ΅ S β β ‘ = cofinal-implies-join-covered (πͺ X) β f ββ (f βΒ· V) β£ V Ξ΅ S β S β» β β : (β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β β€β f βΒ· (β[ πͺ X ] S)) holds β β = adjunction-inequality-forward f (β[ πͺ X ] S) (β[ πͺ Y ] β f βΒ· V β£ V Ξ΅ S β) β‘β \end{code}