--------------------------------------------------------------------------------
title: Universal property of the Sierpiński locale
author: Ayberk Tosun
date-started: 2024-03-06
date-completed: 2024-03-09
--------------------------------------------------------------------------------
In this module, we
1. define the universal property of Sierpiński which amounts to the fact that
it is the free frame on one generator; and
2. we prove that the Scott locale of the Sierpiński dcpo satisfies this
universal property.
This the implementation of a proof sketch communicated to me by Martín Escardó.
\begin{code}
{-# 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
module Locales.Sierpinski.UniversalProperty
(𝓤 : Universe)
(fe : Fun-Ext)
(pe : Prop-Ext)
(pt : propositional-truncations-exist)
(sr : Set-Replacement pt)
where
open import DomainTheory.Topology.ScottTopology pt fe 𝓤
open import DomainTheory.Topology.ScottTopologyProperties pt fe
open import Locales.ContinuousMap.Definition pt fe
open import Locales.ContinuousMap.FrameHomomorphism-Definition pt fe
open import Locales.ContinuousMap.FrameHomomorphism-Properties pt fe
open import Locales.Frame pt fe hiding (is-directed)
open import Locales.ScottLocale.Definition pt fe 𝓤
open import Locales.ScottLocale.Properties pt fe 𝓤
open import Locales.ScottLocale.ScottLocalesOfAlgebraicDcpos pt fe 𝓤
open import Locales.Sierpinski.Definition 𝓤 pe pt fe sr
open import Locales.Sierpinski.Properties 𝓤 pe pt fe sr
open import Locales.SmallBasis pt fe sr
open import Slice.Family
open import UF.Logic
open import UF.SubtypeClassifier
open AllCombinators pt fe renaming (_∧_ to _∧ₚ_; _∨_ to _∨ₚ_)
open ContinuousMaps
open DefnOfScottLocale 𝕊𝓓 𝓤 pe hiding (⊤ₛ)
open DefnOfScottTopology 𝕊𝓓 𝓤
open FrameHomomorphismProperties
open FrameHomomorphisms
open Locale
open PropertiesAlgebraic 𝓤 𝕊𝓓 𝕊𝓓-is-structurally-algebraic
open PropositionalTruncation pt hiding (_∨_)
open ScottLocaleConstruction 𝕊𝓓 hscb pe
\end{code}
\section{The definition of the universal property}
Given a locale S with a chosen open truth : 𝒪(S), S satisfies the universal
property of the Sierpiński locale if
for any locale X, any open U : 𝒪(X), there exists a continuous map f : X → S
unique with the property that f(truth) = U.
In other words, this says that the Sierpiński locale is the locale whose
defining frame is the free frame on one generator.
\begin{code}
has-the-universal-property-of-sierpinski : (S : Locale (𝓤 ⁺) 𝓤 𝓤)
→ ⟨ 𝒪 S ⟩
→ 𝓤 ⁺ ⁺ ̇
has-the-universal-property-of-sierpinski S truth =
(X : Locale (𝓤 ⁺) 𝓤 𝓤) →
(U : ⟨ 𝒪 X ⟩) →
∃! (f , _) ꞉ (X ─c→ S) , U = f truth
\end{code}
\section{The Scott locale of the Sierpiński dcpo has this universal property}
We denote by `𝒽` the defining frame homomorphism of the continuous map required
for the universal property.
\begin{code}
universal-property-of-sierpinski : has-the-universal-property-of-sierpinski 𝕊 truth
universal-property-of-sierpinski X U = (𝒽 , †) , ‡
where
open PosetNotation (poset-of (𝒪 X))
open PosetReasoning (poset-of (𝒪 X))
open Joins _≤_
\end{code}
We adopt the convention of using 𝔣𝔯𝔞𝔨𝔱𝔲𝔯 letters for Scott opens.
The frame homomorphism `h : 𝒪(𝕊) → 𝒪(X)` is defined as `h(𝔙) :≡ ⋁ (ℱₓ 𝔙)` where
`ℱₓ 𝔙` denotes the following family.
\begin{code}
I : ⟨ 𝒪 𝕊 ⟩ → 𝓤 ̇
I 𝔘 = (⊤ₛ ∈ₛ 𝔘) holds + (⊥ₛ ∈ₛ 𝔘) holds
α : (𝔙 : ⟨ 𝒪 𝕊 ⟩) → (⊤ₛ ∈ₛ 𝔙) holds + (⊥ₛ ∈ₛ 𝔙) holds → ⟨ 𝒪 X ⟩
α V (inl _) = U
α V (inr _) = 𝟏[ 𝒪 X ]
ℱₓ : ⟨ 𝒪 𝕊 ⟩ → Fam 𝓤 ⟨ 𝒪 X ⟩
ℱₓ 𝔙 = (I 𝔙 , α 𝔙)
h : ⟨ 𝒪 𝕊 ⟩ → ⟨ 𝒪 X ⟩
h 𝔙 = ⋁[ 𝒪 X ] ℱₓ 𝔙
\end{code}
It is easy to see that this map is monotone.
\begin{code}
𝓂 : is-monotonic (poset-of (𝒪 𝕊)) (poset-of (𝒪 X)) h holds
𝓂 (V₁ , V₂) p = ⋁[ 𝒪 X ]-least (I V₁ , α V₁) (h V₂ , †)
where
p′ : (V₁ ⊆ₛ V₂) holds
p′ = ⊆ₖ-implies-⊆ₛ V₁ V₂ p
† : (h V₂ is-an-upper-bound-of (I V₁ , α V₁)) holds
† (inl μ) = U ≤⟨ ⋁[ 𝒪 X ]-upper _ (inl (p′ ⊤ₛ μ)) ⟩ h V₂ ■
† (inr μ) = 𝟏[ 𝒪 X ] ≤⟨ ⋁[ 𝒪 X ]-upper _ (inr (p′ ⊥ₛ μ)) ⟩ h V₂ ■
\end{code}
We now prove that it preserves the top element and the binary meets.
\begin{code}
φ : h 𝟏[ 𝒪 𝕊 ] = 𝟏[ 𝒪 X ]
φ = only-𝟏-is-above-𝟏 (𝒪 X) (h 𝟏[ 𝒪 𝕊 ]) γ
where
γ : (𝟏[ 𝒪 X ] ≤ h 𝟏[ 𝒪 𝕊 ]) holds
γ = ⋁[ 𝒪 X ]-upper ((I 𝟏[ 𝒪 𝕊 ]) , (α 𝟏[ 𝒪 𝕊 ])) (inr ⋆)
ψ : preserves-binary-meets (𝒪 𝕊) (𝒪 X) h holds
ψ 𝔙 𝔚 = ≤-is-antisymmetric (poset-of (𝒪 X)) ψ₁ ψ₂
where
ψ₁ : (h (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ≤ (h 𝔙 ∧[ 𝒪 X ] h 𝔚)) holds
ψ₁ = ∧[ 𝒪 X ]-greatest
(h 𝔙)
(h 𝔚)
(h (𝔙 ∧[ 𝒪 𝕊 ] 𝔚))
(𝓂 ((𝔙 ∧[ 𝒪 𝕊 ] 𝔚) , _) (∧[ 𝒪 𝕊 ]-lower₁ 𝔙 𝔚))
((𝓂 ((𝔙 ∧[ 𝒪 𝕊 ] 𝔚) , 𝔚) (∧[ 𝒪 𝕊 ]-lower₂ 𝔙 𝔚)))
υ : (h (𝔙 ∧[ 𝒪 𝕊 ] 𝔚)
is-an-upper-bound-of
⁅ α 𝔙 i₁ ∧[ 𝒪 X ] α 𝔚 i₂ ∣ (i₁ , i₂) ∶ I 𝔙 × I 𝔚 ⁆) holds
υ (inl p₁ , inl p₂) =
α 𝔙 (inl p₁) ∧[ 𝒪 X ] α 𝔚 (inl p₂) =⟨ refl ⟩ₚ
U ∧[ 𝒪 X ] U =⟨ Ⅰ ⟩ₚ
U ≤⟨ Ⅱ ⟩
⋁[ 𝒪 X ] ⁅ α (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) i ∣ i ∶ I (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ⁆ ■
where
p : (⊤ₛ ∈ₛ (𝔙 ∧[ 𝒪 𝕊 ] 𝔚)) holds
p = p₁ , p₂
Ⅰ = ∧[ 𝒪 X ]-is-idempotent U ⁻¹
Ⅱ = ⋁[ 𝒪 X ]-upper ⁅ α (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) i ∣ i ∶ I (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ⁆ (inl p)
υ (inl q₁ , inr p₂) =
α 𝔙 (inl q₁) ∧[ 𝒪 X ] α 𝔚 (inr p₂) =⟨ refl ⟩ₚ
U ∧[ 𝒪 X ] 𝟏[ 𝒪 X ] =⟨ Ⅰ ⟩ₚ
U ≤⟨ Ⅱ ⟩
⋁[ 𝒪 X ] ⁅ α (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) i ∣ i ∶ I (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ⁆ ■
where
p : (⊤ₛ ∈ₛ (𝔙 ∧[ 𝒪 𝕊 ] 𝔚)) holds
p = q₁ , contains-⊥ₛ-implies-contains-⊤ₛ 𝔚 p₂
Ⅰ = 𝟏-right-unit-of-∧ (𝒪 X) U
Ⅱ = ⋁[ 𝒪 X ]-upper ⁅ α (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) i ∣ i ∶ I (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ⁆ (inl p)
υ (inr q₁ , inl p₂) =
α 𝔙 (inr q₁) ∧[ 𝒪 X ] α 𝔚 (inl p₂) =⟨ refl ⟩ₚ
𝟏[ 𝒪 X ] ∧[ 𝒪 X ] U =⟨ Ⅰ ⟩ₚ
U ≤⟨ Ⅱ ⟩
⋁[ 𝒪 X ] ⁅ α (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) i ∣ i ∶ I (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ⁆ ■
where
p : (⊤ₛ ∈ₛ (𝔙 ∧[ 𝒪 𝕊 ] 𝔚)) holds
p = contains-⊥ₛ-implies-contains-⊤ₛ 𝔙 q₁ , p₂
Ⅰ = 𝟏-left-unit-of-∧ (𝒪 X) U
Ⅱ = ⋁[ 𝒪 X ]-upper ⁅ α (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) i ∣ i ∶ I (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ⁆ (inl p)
υ (inr q₁ , inr q₂) =
α 𝔙 (inr q₁) ∧[ 𝒪 X ] α 𝔚 (inr q₂) =⟨ refl ⟩ₚ
𝟏[ 𝒪 X ] ∧[ 𝒪 X ] 𝟏[ 𝒪 X ] =⟨ Ⅰ ⟩ₚ
𝟏[ 𝒪 X ] ≤⟨ Ⅱ ⟩
⋁[ 𝒪 X ] ⁅ α (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) i ∣ i ∶ I (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ⁆ ■
where
q : (⊥ₛ ∈ₛ (𝔙 ∧[ 𝒪 𝕊 ] 𝔚)) holds
q = q₁ , q₂
Ⅰ = ∧[ 𝒪 X ]-is-idempotent 𝟏[ 𝒪 X ] ⁻¹
Ⅱ = ⋁[ 𝒪 X ]-upper ⁅ α (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) i ∣ i ∶ I (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ⁆ (inr q)
ψ₂ : ((h 𝔙 ∧[ 𝒪 X ] h 𝔚) ≤ h (𝔙 ∧[ 𝒪 𝕊 ] 𝔚)) holds
ψ₂ =
h 𝔙 ∧[ 𝒪 X ] h 𝔚 =⟨ refl ⟩ₚ
h 𝔙 ∧[ 𝒪 X ] (⋁[ 𝒪 X ] ℱₓ 𝔚) =⟨ Ⅱ ⟩ₚ
⋁[ 𝒪 X ] ⁅ α 𝔙 i₁ ∧[ 𝒪 X ] α 𝔚 i₂ ∣ (i₁ , i₂) ∶ I 𝔙 × I 𝔚 ⁆ ≤⟨ Ⅲ ⟩
⋁[ 𝒪 X ] ⁅ α (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) i ∣ i ∶ I (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ⁆ =⟨ refl ⟩ₚ
h (𝔙 ∧[ 𝒪 𝕊 ] 𝔚) ■
where
Ⅱ = distributivity+ (𝒪 X) (I 𝔙 , α 𝔙) (I 𝔚 , α 𝔚)
Ⅲ = ⋁[ 𝒪 X ]-least _ (_ , υ)
\end{code}
The fact that it satisfies the property `h truth = U` is quite easy to see.
\begin{code}
†₁ : (U ≤ h truth) holds
†₁ = U ≤⟨ ⋁[ 𝒪 X ]-upper _ (inl ⋆) ⟩ h truth ■
†₂ : (h truth ≤ U) holds
†₂ = ⋁[ 𝒪 X ]-least (ℱₓ truth) (U , γ)
where
γ : (U is-an-upper-bound-of (ℱₓ truth)) holds
γ (inl ⋆) = ≤-is-reflexive (poset-of (𝒪 X)) U
† : U = h truth
† = ≤-is-antisymmetric (poset-of (𝒪 X)) †₁ †₂
\end{code}
We now proceed to prove that it preserves the joins.
\begin{code}
open ScottLocaleProperties 𝕊𝓓 𝕊𝓓-has-least hscb pe
ϑ : (𝔖 : Fam 𝓤 ⟨ 𝒪 𝕊 ⟩) → (h (⋁[ 𝒪 𝕊 ] 𝔖) is-lub-of ⁅ h 𝔘 ∣ 𝔘 ε 𝔖 ⁆) holds
ϑ 𝔖 = ϑ₁ , λ { (V , υ) → ϑ₂ V υ}
where
ϑ₁ : (h (⋁[ 𝒪 𝕊 ] 𝔖) is-an-upper-bound-of ⁅ h 𝔘 ∣ 𝔘 ε 𝔖 ⁆) holds
ϑ₁ i = 𝓂 (𝔖 [ i ] , ⋁[ 𝒪 𝕊 ] 𝔖) (⋁[ 𝒪 𝕊 ]-upper 𝔖 i)
ϑ₂ : (W : ⟨ 𝒪 X ⟩)
→ (W is-an-upper-bound-of ⁅ h 𝔘 ∣ 𝔘 ε 𝔖 ⁆) holds
→ (h (⋁[ 𝒪 𝕊 ] 𝔖) ≤ W) holds
ϑ₂ W υ = ⋁[ 𝒪 X ]-least (ℱₓ (⋁[ 𝒪 𝕊 ] 𝔖)) (W , γ)
where
γ : (W is-an-upper-bound-of (ℱₓ (⋁[ 𝒪 𝕊 ] 𝔖))) holds
γ (inl μ) = ∥∥-rec (holds-is-prop (_ ≤ _)) ♣ μ
where
♣ : (Σ k ꞉ index 𝔖 , (⊤ₛ ∈ₛ (𝔖 [ k ])) holds) → (U ≤ W) holds
♣ (k , μₖ) = U =⟨ Ⅰ ⟩ₚ
h truth ≤⟨ Ⅱ ⟩
h (𝔖 [ k ]) ≤⟨ Ⅲ ⟩
W ■
where
Ⅰ = †
Ⅱ = 𝓂 _ (contains-⊤ₛ-implies-above-truth (𝔖 [ k ]) μₖ)
Ⅲ = υ k
γ (inr μ) = ∥∥-rec (holds-is-prop (_ ≤ _)) ♥ μ
where
♥ : (Σ k ꞉ index 𝔖 , (⊥ₛ ∈ₛ (𝔖 [ k ])) holds) → (𝟏[ 𝒪 X ] ≤ W) holds
♥ (k , μₖ) =
𝟏[ 𝒪 X ] =⟨ Ⅰ ⟩ₚ
h 𝟏[ 𝒪 𝕊 ] =⟨ Ⅱ ⟩ₚ
h (𝔖 [ k ]) ≤⟨ Ⅲ ⟩
W ■
where
Ⅰ = φ ⁻¹
Ⅱ = ap h (contains-bottom-implies-is-𝟏 (𝔖 [ k ]) μₖ) ⁻¹
Ⅲ = υ k
\end{code}
We package these up into a continuous map of locales (recal that `X ─c→ Y`
denotes the type of continuous maps from locale `X` to locale `Y`).
\begin{code}
𝒽 : X ─c→ 𝕊
𝒽 = h , φ , ψ , ϑ
\end{code}
Finally, we show that `𝒽` is determined uniquely by this property.
\begin{code}
‡ : is-central (Σ (f , _) ꞉ (𝒪 𝕊 ─f→ 𝒪 X) , U = f truth) (𝒽 , †)
‡ (ℊ@(g , φ₀ , ψ₀ , ϑ₀) , †₀) =
to-subtype-=
(λ h → carrier-of-[ poset-of (𝒪 X) ]-is-set)
(to-frame-homomorphism-= (𝒪 𝕊) (𝒪 X) 𝒽 ℊ γ)
where
𝓂′ : is-monotonic (poset-of (𝒪 𝕊)) (poset-of (𝒪 X)) g holds
𝓂′ = frame-morphisms-are-monotonic (𝒪 𝕊) (𝒪 X) g (φ₀ , ψ₀ , ϑ₀)
γ₁ : (𝔙 : ⟨ 𝒪 𝕊 ⟩) → (h 𝔙 ≤ g 𝔙) holds
γ₁ 𝔙 = ⋁[ 𝒪 X ]-least (ℱₓ 𝔙) (g 𝔙 , β₁)
where
β₁ : (g 𝔙 is-an-upper-bound-of ℱₓ 𝔙) holds
β₁ (inl p) = U =⟨ †₀ ⟩ₚ g truth ≤⟨ Ⅱ ⟩ g 𝔙 ■
where
Ⅱ = 𝓂′ (truth , 𝔙) (contains-⊤ₛ-implies-above-truth 𝔙 p)
β₁ (inr p) = 𝟏[ 𝒪 X ] =⟨ Ⅰ ⟩ₚ g 𝟏[ 𝒪 𝕊 ] =⟨ Ⅱ ⟩ₚ g 𝔙 ■
where
Ⅰ = φ₀ ⁻¹
Ⅱ = ap g (contains-bottom-implies-is-𝟏 𝔙 p ⁻¹)
γ₂ : (𝔙 : ⟨ 𝒪 𝕊 ⟩) → (g 𝔙 ≤ h 𝔙) holds
γ₂ 𝔙 = g 𝔙 =⟨ ap g cov ⟩ₚ
g (⋁[ 𝒪 𝕊 ] 𝔖) =⟨ ※ ⟩ₚ
⋁[ 𝒪 X ] ⁅ g 𝔅 ∣ 𝔅 ε 𝔖 ⁆ ≤⟨ ♢ ⟩
h 𝔙 ■
where
open Joins _⊆ₛ_
renaming (_is-an-upper-bound-of_ to _is-an-upper-bound-ofₛ_)
𝔖 = covering-familyₛ 𝕊 𝕊-is-spectralᴰ 𝔙
※ = ⋁[ 𝒪 X ]-unique ⁅ g 𝔅 ∣ 𝔅 ε 𝔖 ⁆ (g (⋁[ 𝒪 𝕊 ] 𝔖)) (ϑ₀ 𝔖)
cov : 𝔙 = ⋁[ 𝒪 𝕊 ] 𝔖
cov = ⋁[ 𝒪 𝕊 ]-unique 𝔖 𝔙 (basisₛ-covers-do-cover 𝕊 𝕊-is-spectralᴰ 𝔙)
cov₀ : (𝔙 is-an-upper-bound-ofₛ 𝔖) holds
cov₀ bs = ⊆ₖ-implies-⊆ₛ
(𝔖 [ bs ])
𝔙
(pr₁ (basisₛ-covers-do-cover 𝕊 𝕊-is-spectralᴰ 𝔙) bs)
final : (i : index 𝔖) → (g (𝔖 [ i ]) ≤ h 𝔙) holds
final (bs , b) = cases₃ case₁ case₂ case₃ (basis-trichotomy bs)
where
open PosetReasoning poset-of-scott-opensₛ
renaming (_≤⟨_⟩_ to _≤⟨_⟩ₛ_;
_■ to _■ₛ;
_=⟨_⟩ₚ_ to _=⟨_⟩ₛ_)
case₁ : ℬ𝕊 [ bs ] = 𝟏[ 𝒪 𝕊 ]
→ (g (𝔖 [ bs , b ]) ≤ h 𝔙) holds
case₁ q = transport (λ - → (g (𝔖 [ bs , b ]) ≤ h -) holds)
r
(g (ℬ𝕊 [ bs ]) ≤⟨ 𝟏-is-top (𝒪 X) (g (ℬ𝕊 [ bs ])) ⟩
𝟏[ 𝒪 X ] =⟨ φ ⁻¹ ⟩ₚ h 𝟏[ 𝒪 𝕊 ] ■)
where
χ : (𝟏[ 𝒪 𝕊 ] ⊆ₛ (ℬ𝕊 [ bs ])) holds
χ = reflexivity+ poset-of-scott-opensₛ (q ⁻¹)
r : 𝟏[ 𝒪 𝕊 ] = 𝔙
r = ⊆ₛ-is-antisymmetric
(λ x p → cov₀ (bs , b) x (χ x p))
(⊤ₛ-is-top 𝔙)
case₂ : ℬ𝕊 [ bs ] = truth
→ (g (𝔖 [ bs , b ]) ≤ h 𝔙) holds
case₂ p = g (𝔖 [ bs , b ]) =⟨ refl ⟩ₚ
g (ℬ𝕊 [ bs ]) =⟨ Ⅰ ⟩ₚ
g truth =⟨ Ⅱ ⟩ₚ
U ≤⟨ Ⅲ ⟩
h 𝔙 ■
where
p₀ : (truth ⊆ₛ (ℬ𝕊 [ bs ])) holds
p₀ = reflexivity+ poset-of-scott-opensₛ (p ⁻¹)
ζ : (truth ⊆ₛ 𝔙) holds
ζ P μ = cov₀ (bs , b) P (p₀ P μ)
χ : (⊤ₛ ∈ₛ 𝔙) holds
χ = above-truth-implies-contains-⊤ₛ 𝔙 (⊆ₛ-implies-⊆ₖ truth 𝔙 ζ)
Ⅰ = ap g p
Ⅱ = †₀ ⁻¹
Ⅲ = ⋁[ 𝒪 X ]-upper (ℱₓ 𝔙) (inl χ)
case₃ : ℬ𝕊 [ bs ] = 𝟎[ 𝒪 𝕊 ] → (g (𝔖 [ bs , b ]) ≤ h 𝔙) holds
case₃ q = g (𝔖 [ bs , b ]) =⟨ refl ⟩ₚ
g (ℬ𝕊 [ bs ]) =⟨ Ⅰ ⟩ₚ
g 𝟎[ 𝒪 𝕊 ] =⟨ Ⅱ ⟩ₚ
𝟎[ 𝒪 X ] ≤⟨ Ⅲ ⟩
h 𝔙 ■
where
Ⅰ = ap g q
Ⅱ = frame-homomorphisms-preserve-bottom (𝒪 𝕊) (𝒪 X) ℊ
Ⅲ = 𝟎-is-bottom (𝒪 X) (h 𝔙)
♢ : ((⋁[ 𝒪 X ] ⁅ g 𝔅 ∣ 𝔅 ε 𝔖 ⁆) ≤ h 𝔙) holds
♢ = ⋁[ 𝒪 X ]-least ⁅ g 𝔅 ∣ 𝔅 ε 𝔖 ⁆ (h 𝔙 , final)
γ : (𝔙 : ⟨ 𝒪 𝕊 ⟩) → h 𝔙 = g 𝔙
γ 𝔙 = ≤-is-antisymmetric (poset-of (𝒪 X)) (γ₁ 𝔙) (γ₂ 𝔙)
\end{code}