Lecture 2: Equivalences

Recall that

IsContr \, A ≝ \sum\limits_{ x:A } \prod_{y:A} x =_A y \\ IsHProp \, A ≃ \prod_{x, y: A} x =_A y \quad\text{(mere proposition)}

Equivalences

  • $A ≃ B$
  • $f: A ⟶ B$

$IsEquiv \, f$ is a mere proposition.

First attempt at defining an equivalence

Quasi-inverse:

Q_{inv}(f: A ⟶ B) ≝ \lbrace q_{inv}: B ⟶ A, \\ q_{sect} = \prod_x q_{inv}(f \, x) = x \\ q_{retr} = \prod_y f(q_{inv} \, y) = y \rbrace

But the definition, is not quite accurate, because

  • you can go from $x$ to $x$ by composing $f$ and its inverse
  • and there’s no way to tell this path from $x$ to $x$ is $refl_x$

so it’s not a proposition

Correct definition

ap \, f: x=y ⟶ fx = fy
IsEquiv \, f ≝ \lbrace \\ g ≝ einv: B ⟶ A, \\ η ≝ esect : ∀x. einv(f \, x)=x \\ ε ≝ eretr: ∀y. f(einv \, y)=y \\ τ ≝ eadj: ∀x:A, ap f (esect \, x) = eretr(g \, x) \rbrace

NB: By abuse of notation, we write f(η \, x) = ε(g \, x)

instead of $ap\, f(η \, x) = ε(g \, x)$

In category theoretical terms: we have a half-adjunction (half-adjoint equivalence): we ensure that one of the triangles commute

But that’s not a big deal, we can recover the other one:

eadj': ∀y:B, ap \, g (eretr \, y) = esect ( f \, y)

What’s funny is that if we add $eadj’$ to the definition, we no longer have a proposition. So we don’t add it, and show that we can obtain it:

Naturality of $H$:

  • $f, g: A ⟶ B$
  • $p: x =_A y$
  • $H: ∀x. f x = g x$
\begin{xy} \xymatrix{ f(x) \ar[r]^{f(p)} \ar[d]_{H(x)} & f(y) \ar[d]^{H(y)} \\ g(x) \ar[r]_{g(p)} & g(y) } \end{xy}
H(x) @ g p = f(p) @ H(y)
H(x) = H(x) @ g (refl_x) = f (refl_x) @ H(x) = H(x)

Corollary: with $p = H(x)$

  • $f: A ⟶ A$
  • $H: f \sim id ≡ ∀x. fx = x$
  • $f (H \, x) = H(f \, x): f(f \, x) = f \, x$
\begin{xy} \xymatrix{ f(fx) \ar[r]^{f(H x)} \ar[d]_{H(f\, x)} & f(x) \ar[d]^{H(x)} \\ id(f x) \ar[r]_{id(H x)} & x } \end{xy}

  • $p ≝ εy$
  • $H ≝ ε: f g \sim id$
  • $x = fgy$
\begin{xy} \xymatrix{ gfg(x) \ar[r]^{gfg(εy)} \ar[d]_{gε(fgy)} & gfg(y) \ar[d]^{gε(y)} \\ g(f g y) \ar[r]_{g(εy)} & g(y) } \end{xy}

and we have a similar square for the unit $η$.


  • HoTT quasi-inverses are similar to categorical equivalences
  • HoTT equivalences are similar to categorical adjoints
\begin{cases} Q_{inv} \, f &⟶ IsEquiv \, f \\ (g, η, ε) &\mapsto (g, η, ε', τ) \end{cases}
ε'(b) = ε(f g (b))^{-1} @ f η (g b) @ ε b
τ(b): \begin{align*} f(η x) & = ε(fgfx)^{-1} @ fg(gf x) @ ε(fx) \\ \end{align*}

NB: beware, $(g, η, ε’, τ)$ is a dependent tuple (each coordinate depends on the previous ones), to show an equality between two such tuples, one has to do it up to transport for second coordinates (and those coming after).

Recall that

Fixpoint IsTrunc n A := match n with
    | 0 => IsContr A
    | S n => forall x y:A, IsTrunc n (x=y)
end.

Now, we will relate the equivalence with contractibility.

Equivalence VS Contractibility

Homotopy fibers

  • $f: A ⟶ B$
  • $y: B$
Fiber of $f$ over $y$:
fib_f \, y ≝ \sum\limits_{ x:A } fx = y
  • $x:A$
  • Is contractible: $\sum\limits_{ y:A } x=y$
\sum\limits_{ y:B } fib_f \, y ≡ \sum\limits_{ y:B } \sum\limits_{ x:A } f x = y\\ ≃ \sum\limits_{ x:A } \sum\limits_{ y:B } f x = y\\ ≃ \sum\limits_{ x:A } A ≃ A
\begin{cases} IsEquiv \, f &⟶ IsContr(fib_f \, y) \\ (g, η, ε, τ) &\mapsto ((gy, εy); ⋯) \end{cases}

We want to show

(x, e) = (gy, εy)

for $x: A, \; e: fx=y$

That is:

  • $x = gy$

    • $y \overset{e^{-1}}{=} f x = f(gy) \overset{ε(y)}{=} y$
  • then the other equality up to transport

Then, conversely:

IsContr(fib_f \, y) ⟶ IsEquiv \, f

is inhabited (cf. Trunc.v Coq file)

In fact, we even have:

IsContr(fib_f \, y) ≃ IsEquiv \, f

To prove that, we resort to a trick consisting in rewriting what it means to be an equivalence:

Right invertible:
rinv \, f ≝ \sum\limits_{ g:B ⟶ A } ∀y. fg(y)=y

So that

IsEquiv \, f = \sum\limits_{ (g, ε): rinv \, f } rcoh_f(g, ε)

where

rcoh_f(g, ε) ≡ \sum\limits_{ η: \prod\limits_{ x } gfx=x } \prod\limits_{ x } f(η x) = ε(f x)

Indeed:

rinv \, f ≃ \sum\limits_{ g: B ⟶ A } fg = id ≡ fib_{f \circ \_} \, id

So

IsEquiv \, f ≃ IsEquiv (f \circ \_)

and

IsEquiv \, f ≃ IsContr \, (rinv \, f)

On top of that:

rcoh_f(g, ε) ≃ \prod\limits_{ x:A } (gfx, εfx) =_{fib_f \, fx} (x, refl_x)

But the fiber over an equivalence $fib_f \, (fx)$ is contractible (as we’ve seen before), and

IsContr \, A ⟶ ∀x, y:A. IsContr \, (x=_A y)

Therefore

rcoh_f(g, ε) ≃ \underbrace{\prod\limits_{ x:A } (gfx, εfx) =_{fib_f \, fx} (x, refl_x)}_{\text{ is contractible}}

and that’s it! We have

IsEquiv \, f

Functional extensionality as an Equivalence

apD10: f=g ⟶ ∀x, fx = gx

By path induction, with $λx. refl_{f(x)}: ∀x, fx=fx$

FunExt: IsEquiv \, (apD10 \, f \, g)

But by defining

BadFunExt: \prod\limits_{ x } fx = gx ⟶ f =g

then

BadFunExt \, (λx. refl_{f(x)}) ≠ refl_g

Whereas:

(e\_inv \; apD10)(apD10 \, e) = e \quad\text{(with the section of the equivalence)}

with

(e\_inv \; apD10)(apD10 \, refl_g) = refl_g

so that

(e\_inv \; apD10) \, (λx. refl_{f(x)}) ≠ refl_g

Moreover, the retraction of the equivalence gives us:

apD10 \; (e\_inv \; apD10 \, e) = e: ∀x. fx=gx

Univalence

Expressing it like

A ≃ B ⟶ A = B

is bad!

Instead, you have an equivalence:

A=B \overset{eq\_to\_equiv}{⟶} A≃B

If you don’t state it with an equivalence, you’re not sure that $refl$ is sent to the canonical $Equiv_id \, A$

Univalence:

for all $A, B: Type$:

IsEquiv \; (eq\_to\_equiv \, A \, B)

Leave a comment