https://bartoszmilewski.com/2026/03/10/the-axiom-of-univalence/
@de_Jong_Tom
What am I missing?
It looks like my definition (which is Axiom 2.10.3 in the HoTT book) is Def 3.2 in the paper you're citing.
I used an alternative definition of equivalence: 2.4.10 in the HoTT book.
@BartoszMilewski You're postulating that there is *some* equivalence, not that the canonical map idtoeqv (that sends refl to the identity equivalence) is an equivalence. So what you have is Def 3.3 ("naive univalence") in that paper. The difference between the two is precisely Theorem 3.5.
Aside: Note that the "proper" univalence axiom is a property, i.e. the type that expresses it is a proposition, while the naive univalence axiom is not (I think — at least not obviously).
@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 ?