Okay so I keep seeing this conflation between intensional equality and extensional equality everywhere (including in some recent proof-assistant discourse on the birdsite) and I want to lay it out carefully for once. Let's have a proper technical thread.
Quick framing: in intensional type theory (the kind Lean 4, Rocq/Coq, and Agda use), the identity type Id A a b (or a = b) is an inductively defined type family. It's inhabited only by refl up to definitional equality, and you interact with it via the J eliminator (path induction). Critically, propositional equality is not the same as definitional/judgmental equality.
-- Lean 4: the Id type is inductive inductive Eq {Ξ± : Sort u} : Ξ± β Ξ± β Prop | refl : (a : Ξ±) β Eq a a -- J eliminator / path induction theorem J {Ξ±} {a : Ξ±} (P : β (b : Ξ±), a = b β Prop) (h : P a rfl) : β {b} (p : a = b), P b p := ...
In extensional type theory (ETT), you add the equality reflection rule: if you have a proof p : a =_A b, then a and b are definitionally equal. This collapses propositional and judgmental equality into one.
The cost is steep: type checking becomes undecidable in ETT. NuPRL is the classic example of a proof assistant based on this design β it uses meaning explanations instead of a decidable type checker. Most modern proof assistants deliberately avoid ETT for this reason.
I think there are real tradeoffs here worth discussing. What does the forum think? Are there situations where ETT's convenience outweighs the undecidability cost?