## § HoTTesT: Identity types

• We already have judgemental equality. (computational equality: beta eta alpha equality).
• We will next introduce propositional equality.
• Proving an equality => constructing a term of the type of equalities.
• We can prove many judgemental equalities (eg. add x 0 =judgement= x), but not all the ones we want (eg. add 0 x =judgement= x).
• We can't because we need to do induction on x.
• When we use natural number elimination / induction, we must produce a term of a type.
• What type?!
• Type constructors internalize structure. Eg. at a meta level, we can talk about contexts x:A, y:B(x), z:C(x,y).
• But internally, we will need to be able to talk about contents, we can use sigma types! Σ(x:A) Σ(y: Bx) Σ z:C(x, y)lets us internalize contexts!
• Similarly, we can think about dependent terms as meta functions. Example, x:A,y:B(x) |- c(x,y): C(x, y). We can think of this as a function that takes an x and a y and produce a c(x,y). See that pi types internalize this notion! c: (x:A) -> (y: B(x)) -> C(x,y).
• Bool, Nat, etc. are internalizing the usual booleans, naturals, etc.
• The universe type internalizes the judement A is a type via A: Type.
• The identity type internalizes the meta notion of judgemental equality (how? Doesn't it prove strictly more?)

#### § Identity Type

• $=$-formation: A type a: A, b: B, then we have a type a =A b type.
• =-intro: a:A| r_a: a =A a. ( r = reflexivity).
• =-elim: x: A, y: A, z: x =A y |- D(x, y, z) type, and given x:A |- d: D(x, x, r_x), then we have ind=(d, x, y, z): D(x, y, z)