https://bartoszmilewski.com/2026/03/10/the-axiom-of-univalence/
@BartoszMilewski I'm used to Haskell GADTs enforcing, I quote, "The result type of each constructor must begin with the type constructor being defined".
Intuitively, I'd say this is required to keep pattern matching sound and/or manageable.
What is happening here with your definition of loop ? Do you have to give up pattern matching on ≡ ? And what is the significance of `loop` appearing in the definition of S1 ? Could we put it somewhere else ?
@BartoszMilewski I guess I was more wondering about the recursor for the equality type, if there is such a thing. Or alternatively, what would prevent me from writing something like:
```
data Bad : Type where
base0: Bad
base1: Bad
loop: base0 ≡ base1
bad_f : Bad -> Bool
bad_f base0 = True
bad_f base1 = False
bad_f loop = ???
```
and use congruence over bad_f to prove that True ≡ False. Wouldn't that be a problem ?