Martin Escardo 1st May 2020.
This is ported from the Midlands Graduate School 2019 lecture notes
https://www.cs.bham.ac.uk/~mhe/HoTT-UF.in-Agda-Lecture-Notes/HoTT-UF-Agda.html
https://github.com/martinescardo/HoTT-UF.Agda-Lecture-Notes
\begin{code}
{-# OPTIONS --safe --without-K #-}
module MGS.Function-Graphs where
open import MGS.Yoneda public
module function-graphs
(ua : Univalence)
{𝓤 𝓥 : Universe}
(X : 𝓤 ̇ )
(A : X → 𝓥 ̇ )
where
hfe : global-hfunext
hfe = univalence-gives-global-hfunext ua
fe : global-dfunext
fe = univalence-gives-global-dfunext ua
Function : 𝓤 ⊔ 𝓥 ̇
Function = (x : X) → A x
Relation : 𝓤 ⊔ (𝓥 ⁺) ̇
Relation = (x : X) → A x → 𝓥 ̇
is-functional : Relation → 𝓤 ⊔ 𝓥 ̇
is-functional R = (x : X) → ∃! a ꞉ A x , R x a
being-functional-is-subsingleton : (R : Relation)
→ is-subsingleton (is-functional R)
being-functional-is-subsingleton R = Π-is-subsingleton fe
(λ x → ∃!-is-subsingleton (R x) fe)
Functional-Relation : 𝓤 ⊔ (𝓥 ⁺) ̇
Functional-Relation = Σ R ꞉ Relation , is-functional R
ρ : Function → Relation
ρ f = λ x a → f x = a
ρ-is-embedding : is-embedding ρ
ρ-is-embedding = NatΠ-is-embedding hfe hfe
(λ x → 𝑌 (A x))
(λ x → 𝓨-is-embedding ua (A x))
where
τ : (x : X) → A x → (A x → 𝓥 ̇ )
τ x a b = a = b
remark₀ : τ = λ x → 𝑌 (A x)
remark₀ = refl _
remark₁ : ρ = NatΠ τ
remark₁ = refl _
ρ-is-functional : (f : Function) → is-functional (ρ f)
ρ-is-functional f = σ
where
σ : (x : X) → ∃! a ꞉ A x , f x = a
σ x = singleton-types'-are-singletons (A x) (f x)
Γ : Function → Functional-Relation
Γ f = ρ f , ρ-is-functional f
Φ : Functional-Relation → Function
Φ (R , σ) = λ x → pr₁ (center (Σ a ꞉ A x , R x a) (σ x))
Γ-is-equiv : is-equiv Γ
Γ-is-equiv = invertibles-are-equivs Γ (Φ , η , ε)
where
η : Φ ∘ Γ ∼ id
η = refl
ε : Γ ∘ Φ ∼ id
ε (R , σ) = a
where
f : Function
f = Φ (R , σ)
e : (x : X) → R x (f x)
e x = pr₂ (center (Σ a ꞉ A x , R x a) (σ x))
τ : (x : X) → Nat (𝓨 (f x)) (R x)
τ x = 𝓝 (R x) (f x) (e x)
τ-is-fiberwise-equiv : (x : X) → is-fiberwise-equiv (τ x)
τ-is-fiberwise-equiv x = universal-fiberwise-equiv (R x) (σ x) (f x) (τ x)
d : (x : X) (a : A x) → (f x = a) ≃ R x a
d x a = τ x a , τ-is-fiberwise-equiv x a
c : (x : X) (a : A x) → (f x = a) = R x a
c x a = Eq→Id (ua 𝓥) _ _ (d x a)
b : ρ f = R
b = fe (λ x → fe (c x))
a : (ρ f , ρ-is-functional f) = (R , σ)
a = to-subtype-= being-functional-is-subsingleton b
functions-amount-to-functional-relations : Function ≃ Functional-Relation
functions-amount-to-functional-relations = Γ , Γ-is-equiv
\end{code}