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}