{-# OPTIONS --without-K --exact-split #-}
open import TransportLemmas
open import EquivalenceType

open import HomotopyType
open import FunExtAxiom
open import QuasiinverseType
open import QuasiinverseLemmas

Voevodsky’s Univalence Axiom

Voevodsky’s Univalence axiom is postulated. It induces an equality between any two equivalent types. Some \(β\) and \(η\) rules are provided.

module UnivalenceAxiom {: Level} {A B : Type ℓ} where
idtoeqv
  : A == B
  --------
   A ≃ B

idtoeqv p =
  qinv-≃
    (coe p)
    ((!coe p) ,
      (coe-inv-l p , coe-inv-r p))

More syntax:

==-to-≃ = idtoeqv
≡-to-≃  = idtoeqv
ite     = idtoeqv
cast    = idtoeqv  -- Used in the Symmetry Book.

The Univalence axiom induces an equivalence between equalities and equivalences.

Univalence Axiom.

postulate
  axiomUnivalence
    : isEquivalence ≡-to-≃

In Slide 20 from an Escardo’s talk, base on what we saw, we give the following no standard definition of Univalence axiom (without transport).

open import HLevelTypes

UA
  :  {: Level}
   (Type (lsuc ℓ))

UA {=}  = (X : Type ℓ)  isContr ((Type ℓ) (λ Y  (X ≃ Y)))

About this Univalence axiom version:

  • ∑ (Type ℓ) (λ Y → X ≃ Y) is inhabited, but we don’t know if it’s contractible unless, we demand (assume) to be propositional. Then, in such a case, we use the theorem (isProp P ≃ (P → isContr P)). To be more precise, we know it’s contractible, in fact, the center of contractibility, is indeed (X, id-≃ X : X ≃ X).
  • Univalence is a generalized extensionality axiom for intensional MLTT theory.
  • The type UA is a proposition.
  • UA is consistent with MLTT.
  • Theorem of MLTT+UA: \(P(X)\) and \(X≃Y\) imply \(P(Y)\) for any \(P : \mathsf{Type} → \mathsf{Type}\).
  • Theorem of spartan MLTT with two universes. The univalence axiom formulated with crude isomorphism rather than equivalence is false!.
eqvUnivalence
  : (A == B)(A ≃ B)

eqvUnivalence = idtoeqv , axiomUnivalence

More syntax:

==-equiv-≃ = eqvUnivalence
==-≃-≃     = eqvUnivalence
≡-≃-≃      = eqvUnivalence

Introduction rule for equalities:

ua
  : A ≃ B
  -------
   A == B

ua = remap eqvUnivalence

More syntax:

≃-to-==   = ua
eqv-to-eq = ua

Computation rules

ua-β
  : (α : A ≃ B)
  ----------------------
   idtoeqv (ua α) == α

ua-β eqv = lrmap-inverse eqvUnivalence
ua-η
  : (p : A == B)
  ---------------------
   ua (idtoeqv p) == p

ua-η p = rlmap-inverse eqvUnivalence