Conversation

I’m not sure how you mean this. With inductives types, i can implement several notions of identity type, but if I’m forced to have primitives, then im limited by the language implementer’s foresight.
3
4
You should not be able to implement any of the usual identity types inductively. They *force* the identity type to coincide with the disappointing accident that is definitional equality. Designers should factor equality out, so that equality can be *chosen*, not *imposed*.
2
7
I'm not thinking "it is expressible instead of something better", but "it is expressible because the system is expressive". Why not a better identity but also a notion of inductive type expressive enough to express a worse one?
2
I don't really want it to be (my concern is not really with the identity type). I'm more curious how you limit expressivity enough to rule out encoding an identity type, without harming expressivity.
3
2
If you have an identity type already, you don't "lose" anything in your inductive types thanks to "Fording" (a technique I've seen a lot but never heard called that until two days ago)
3
2
The thing you ban that rules out an inductive identity type is using definitional equality between indices. If you can demand identity evidence (fording) you can recover something just as good that isn't overly intensional.
2
4
Aside from Conor's thesis (linked elsewhere)? The technique itself is tweetable. Get rid of ambient definitional equalities and use identity instead: data isZero : Nat -> Set where isZ : isZero 0 becomes: data isZero (n : Nat) : Set where isZ : n ≡ 0 -> isZero n
1
2