# Lecture 5: Higher Inductive Types

HIT: Inductive types where equality is also taken into account.

More precisely: it’s an inductive type where you can postulate equalities in the constructors.

• Interval
• Truncation
• Circle
• Suspension

# Hedberg theorem

Hedberg theorem: a type $A$ with a decidable equality is an $HSet$

(cf. Hedberg.v)

$\texttt{dec_eq} \; A ≝ ∀a, b: A. (a=b) + ¬(a=b)$ $Hedberg: \; ∀A:Type, \texttt{dec_eq} \; A ⟶ IsHSet \; A$

ex: Bool has decidable equality

Inductive Bool: Type
| true: Bool
| false: Bool

$∀b_1, b_2, (b_1 = b_2) + ¬(b_1 = b_2)$

Induction/pattern matching on $b_1, b_2$:

• $(true = true) + ¬(true = true)$

• $inl \; (refl \; true)$
• $(true = false) + ¬(true = false)$

• $inr$
• But you can’t prove $true = false ⟶ ⊥$ directly ⟹ generalize over the first argument:
  Q: forall b: Bool (e: b = false) match b
| true => False
| false => True
end


Then

  path_induction on e
* : PFalse ≡ True


Now to show $true = false ⟶ ⊥$:

$λe. Q \; true \; e: ⊥$

## Thomas Streicher’s property

Streicher K:
$\underbrace{IsHSet \; A }_{∀(x, y: A), (e, e': x=y). \; e=e'} ≃ ∀x:A, (p: x=x). p = refl \; x$

Proof: straightforward.

Theorem: Equality is also $HProp$

$(R: A → A → Type) \, (HR: ∀x,y. IsHProp \, (R \, x \, y)) \\ (Rrefl: ∀x. R \, x \, x) \; (Req: ∀x, y:A. R \, x \, y → x=y). IsHSet \; A$ $∀x:A, (p: x=x). p=refl_x$ $\texttt{transport} \; (fun: X ⇒ X = x) \; p \; (Req \; x \; x \; (Rrefl \; x)) \overset{\text{naturality}}{ = } Req \; x \; x \; \underbrace{\texttt{transport} \; (fun: X ⇒ X = x) \; p \; (Rrefl \, x)}_{R \, x \, x} \\ p \, @ \, Req \; x \; x \; (Rrefl \; x) = Req \; x \; x (Rrefl \; x)$

Any decidable proposition is classical:

$\texttt{dec_to_classical}: ∀P: Type, (P + ¬ P) ⟶ (¬¬ P ⟶ P)$
λ P (x: P + ¬P) (f: ¬¬P)
match x with
| inl p => p
| inr n => match (f n): ⊥
| aburd (f n) (* ∀A. ⊥ ⟶ A *)
end.
end.


The following property uses functional extensionality:

$∀A. (B: A ⟶ Type) \, (∀x. IsHProp \; (B \, x)) ⟶ IsHProp \; (\prod_x B \, x)$ $∀A: Type, IsHProp (¬ A) \\ R ≝ λ x, y. ¬¬(x=y)\\ Req ≝ λx, y. \texttt{dec_to_classical} \; (x=y) \; (\texttt{dec_eq} \; A)\\ Rrefl ≝ λ x. η(refl_x)$

NB: This proof is a bit overkill: it uses extensionality. Look at Hedberg_alt in the Hedberg.v file for a more direct proof without functional extensionality.

## Not all types are $HSet$

We’re not in Topos Theory: not every type is a Set.

• $𝔹: Type$ (Bool)
• $p: 𝔹 = 𝔹$
• $¬(p = refl_{𝔹})$
flip: 𝔹 -> 𝔹.
λb. match b with
| true => false
| false => true
end.


Can we prove $p$?: By univalence, it suffices to provide an equivalence

$𝔹 ≃ 𝔹$

Then:

• $¬(p = refl_{𝔹})$
• $¬(∀b. flip \; b = id_𝔹 \; b)$
• $¬(flip \; false = false) ≡ ¬(true = false)$

# HITs

HIT
Interval Contractible 0-Type
(Propositional) Truncation hProp 1-Type
Circle   3-Type
Suspension

## The Interval HIT $𝕀$

Inductive 𝕀: Type :=
| 0𝕀 : 𝕀
| 1𝕀 : 𝕀
| seg: 0𝕀 = 1𝕀


### Recursor

$𝕀_{rec} \; (A: Type) \; (a, b: A) \; (s: a=b): 𝕀 ⟶ A$
• $𝕀_{rec} \; A \; a \; b \; s \; 0_𝕀 ≡ a$
• $𝕀_{rec} \; A \; a \; b \; s \; 1_𝕀 ≡ b$
• $ap \; (𝕀_{rec} \; A \; a \; b \; s) \; seg = s: 𝕀_{rec} \; A \; a \; b \; s \; 0_{𝕀} = 𝕀_{rec} \; A \; a \; b \; s \; 1_{𝕀} ≡ a=b$

### Eliminator (for induction)

$𝕀_{ind} \; (P: 𝕀 ⟶ Type) \; (a: P \, 0_{𝕀}) \; (b: P \, 1_{𝕀}) \; (s: \underbrace{seg \# a}_{≡ \texttt{transport} \; P \; seg \; a: P \, 1_{𝕀}} = b): ∀i: 𝕀. P \; i$
• $𝕀_{ind} \; A \; a \; b \; s \; 0_𝕀 ≡ a$
• $𝕀_{ind} \; A \; a \; b \; s \; 1_𝕀 ≡ b$
• $ap \; (𝕀_{ind} \; P \; a \; b \; s) \; seg = s: seg \# (\underbrace{𝕀_{ind} \; P \; a \; b \; s \; 0_{𝕀}}_{≡ a}) = \underbrace{𝕀_{ind} \; P \; a \; b \; s \; 1_{𝕀}}_{≡ b}$
$ap: ∀A, B. (f: A ⟶ B) \; (x, y: A): x=y ⟶ fx = fy$ $ap \; D: ∀A. (B: A ⟶ Type) \; (f: ∀x. B \, x) \; (x, y: A) \; (e: x=y): \underbrace{e \# (f \, x)}_{\texttt{transport} \; B \; e \; (f \, x)} = f \, y$

## $𝕀$ is contractible

$IsContr \; 𝕀 \\ center: 0_{𝕀}: 𝕀 \\ P: ∀x: 𝕀. 0_{𝕀} = x$

And

• $P \; 0𝕀: 0_𝕀 = 0_𝕀 ≝ refl{0_𝕀}$
• $P \; 1_𝕀: 0_𝕀 = 1_𝕀 ≝ seg$
$seg = seg \, @ \, refl_{0_𝕀} = seg \# refl_{0_𝕀} = seg$

## $𝕀$ implies Functional Equality

If $𝕀$ exists in the type theory, then functional equality holds.

$∀(A, B) \; (f, g: A ⟶ B), (e: ∀x, f \, x = g \, x) ⟶ f = g$

Let

$p ≝ λx:A. 𝕀_{rec} \; B \; (f \, x) \; (g \, x) \; (e \, x): A ⟶ (𝕀 ⟶ B)$

Let

$q ≝ λi, x. p \, x \, i: 𝕀 ⟶ (A ⟶ B)$

Then one concludes with

$ap \; q \; seg : q \; 0_𝕀 = q \; 1_𝕀$

## How to define HITs in Coq

Module Export Interval.
Private Inductive Int: Type :=
| zero: Int.
| one: Int.

Axiom seg : zero = one.


## Propositional Truncation

Inductive ∥A∥ : Type :=
| tr: A ⟶ ∥A∥
| tr_eq: ∀x, y: ∥A∥. x=y


### Recursor

$\texttt{Squash_rec} \; (B: Type) \; (f: A ⟶ B)\; (HB: IsHProp \; B): \Vert A \Vert ⟶ B$
• $\texttt{Squash_rec} \; B \; f \; HB \; (tr \, a) ≡ f \, a$

• $∀x, y:A. ap \; (\texttt{Squash_rec} \; B \; f \; HB) (\texttt{tr_eq} x \; y) = HB \; (\underbrace{\texttt{Squash_rec} \; B \; f \; HB \; x}_{ = \; \texttt{Squash_rec} \; B \; f \; HB \; y \,: \; B})$

NB: If $A$ is a mere proposition, then $\Vert A \Vert$ is equivalent to $A$:

$A: HProp ⟶ \Vert A \Vert ≃ A$

### Eliminator

$\texttt{Squash_ind} \; A \; (P: \Vert A \Vert ⟶ Type) \; (f: ∀x:A. P \; (tr \; x)) \; (HP: ∀x: A. IsHProp \; (P \, x)): ∀x: \Vert A \Vert. P \; x$

Let

$p ≝ \texttt{Squash_rec} \; (P \, x) \; f' \; (HP \, x) \; x$

where

$f' ≝ λy. \texttt{tr_eq} \; x \; (tr \, y)\#(f \, y): ∀y:A. P \, x$

## The Circle $S^1$

Inductive S^1 :=
| base: S^1
| loop: base=base


### Eliminator

$S^1\_ind \; (P: S^1 ⟶ Type) \; (b: P \; base) \; (l: loop \# b = b): ∀x: S^1. P \, x$
• $S^1_ind \; P \; b \; l \; base ≡ b$
• $ap \; D \; (S^1\_ind \; P \; b \; l) \; loop = l: loop\#b = b$

NB: Next, we’ll see that there are strong connections with homotopy theory. We’ll show in HoTT that:

$\Pi_1(S^1) = ℤ$

### $S^1$ is not contractible

$¬ ∀x: S^1, p: x = x. p = refl_x$

Why? Because we can show that

$¬(loop = refl_{base})$

Indeed: Assuming $A: Type, ¬(IsHSet \; A), e: loop = refl_{base}$, then you can show $∀x: A, p: x=x. p = refl_x$

Tags:

Updated: