Martin Escardo and Tom de Jong, October 2021
Modified from Quotient.Large to add the parameter F.
We use F to control the universe where propositional truncations live.
For more comments and explanations, see the original files.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
open import UF.Base hiding (_≈_)
open import UF.FunExt
open import UF.Powerset
open import UF.Sets
open import UF.Sets-Properties
open import UF.SubtypeClassifier
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import UF.PropTrunc-Variation
open import UF.ImageAndSurjection-Variation
module Quotient.Large-Variation
(F : Universe → Universe)
(pt : propositional-truncations-exist F)
(fe : Fun-Ext)
(pe : Prop-Ext)
where
is-prop-valued is-equiv-relation : {X : 𝓤 ̇ } → (X → X → 𝓥 ̇ ) → 𝓤 ⊔ 𝓥 ̇
is-prop-valued _≈_ = ∀ x y → is-prop (x ≈ y)
is-equiv-relation _≈_ = is-prop-valued _≈_ × reflexive _≈_ × symmetric _≈_ × transitive _≈_
module quotient
{𝓤 𝓥 : Universe}
(X : 𝓤 ̇ )
(_≈_ : X → X → 𝓥 ̇ )
(≈p : is-prop-valued _≈_)
(≈r : reflexive _≈_)
(≈s : symmetric _≈_)
(≈t : transitive _≈_)
where
open PropositionalTruncation F pt
open ImageAndSurjection F pt
equiv-rel : X → (X → Ω 𝓥)
equiv-rel x y = x ≈ y , ≈p x y
X/≈ : F (𝓤 ⊔ (𝓥 ⁺)) ⊔ 𝓤 ⊔ (𝓥 ⁺) ̇
X/≈ = image equiv-rel
X/≈-is-set : is-set X/≈
X/≈-is-set = subsets-of-sets-are-sets (X → Ω 𝓥) _
(powersets-are-sets'' fe fe pe)
∥∥-is-prop
η : X → X/≈
η = corestriction equiv-rel
η-surjection : is-surjection η
η-surjection = corestriction-is-surjection equiv-rel
quotient-induction : ∀ {𝓦} (P : X/≈ → 𝓦 ̇ )
→ ((x' : X/≈) → is-prop (P x'))
→ ((x : X) → P (η x))
→ (x' : X/≈) → P x'
quotient-induction = surjection-induction η η-surjection
η-equiv-equal : {x y : X} → x ≈ y → η x = η y
η-equiv-equal {x} {y} e =
to-Σ-= (dfunext fe
(λ z → to-Σ-= (pe (≈p x z) (≈p y z) (≈t y x z (≈s x y e)) (≈t x y z e) ,
being-prop-is-prop fe _ _)) ,
∥∥-is-prop _ _)
η-equal-equiv : {x y : X} → η x = η y → x ≈ y
η-equal-equiv {x} {y} p = equiv-rel-reflect (ap pr₁ p)
where
equiv-rel-reflect : equiv-rel x = equiv-rel y → x ≈ y
equiv-rel-reflect q = b (≈r y)
where
a : (y ≈ y) = (x ≈ y)
a = ap (λ - → pr₁ (- y)) (q ⁻¹)
b : (y ≈ y) → (x ≈ y)
b = Idtofun a
universal-property : ∀ {𝓦} (A : 𝓦 ̇ )
→ is-set A
→ (f : X → A)
→ ({x x' : X} → x ≈ x' → f x = f x')
→ ∃! f' ꞉ ( X/≈ → A), f' ∘ η = f
universal-property {𝓦} A iss f pr = ic
where
B : (x' : X/≈) → F (F (𝓥 ⁺ ⊔ 𝓤) ⊔ 𝓥 ⁺ ⊔ 𝓤 ⊔ 𝓦) ⊔ 𝓦 ̇
B x' = (Σ a ꞉ A , ∃ x ꞉ X , (η x = x') × (f x = a))
φ : (x' : X/≈) → is-prop (B x')
φ = quotient-induction _ γ induction-step
where
induction-step : (y : X) → is-prop (Σ a ꞉ A , ∃ x ꞉ X , (η x = η y) × (f x = a))
induction-step x (a , d) (b , e) = to-Σ-= (p , ∥∥-is-prop _ _)
where
h : (Σ x' ꞉ X , (η x' = η x) × (f x' = a))
→ (Σ y' ꞉ X , (η y' = η x) × (f y' = b))
→ a = b
h (x' , r , s) (y' , t , u) = s ⁻¹ ∙ pr (η-equal-equiv (r ∙ t ⁻¹)) ∙ u
p : a = b
p = ∥∥-rec iss (λ σ → ∥∥-rec iss (h σ) e) d
γ : (x' : X/≈) → is-prop (is-prop (Σ a ꞉ A , ∃ x ꞉ X , (η x = x') × (f x = a)))
γ x' = being-prop-is-prop fe
k : (x' : X/≈) → B x'
k = quotient-induction _ φ induction-step
where
induction-step : (y : X) → Σ a ꞉ A , ∃ x ꞉ X , (η x = η y) × (f x = a)
induction-step x = f x , ∣ x , refl , refl ∣
f' : X/≈ → A
f' x' = pr₁ (k x')
r : f' ∘ η = f
r = dfunext fe h
where
g : (y : X) → ∃ x ꞉ X , (η x = η y) × (f x = f' (η y))
g y = pr₂ (k (η y))
j : (y : X) → (Σ x ꞉ X , (η x = η y) × (f x = f' (η y))) → f' (η y) = f y
j y (x , p , q) = q ⁻¹ ∙ pr (η-equal-equiv p)
h : (y : X) → f' (η y) = f y
h y = ∥∥-rec iss (j y) (g y)
c : (σ : Σ f'' ꞉ (X/≈ → A), f'' ∘ η = f) → (f' , r) = σ
c (f'' , s) = to-Σ-= (t , v)
where
w : ∀ x → f' (η x) = f'' (η x)
w = happly (r ∙ s ⁻¹)
t : f' = f''
t = dfunext fe (quotient-induction _ (λ _ → iss) w)
u : f'' ∘ η = f
u = transport (λ - → - ∘ η = f) t r
v : u = s
v = Π-is-set fe (λ _ → iss) u s
ic : ∃! f' ꞉ (X/≈ → A), f' ∘ η = f
ic = (f' , r) , c
\end{code}