Documentation

Transfer.Base.UnivalenceStatus

Univalence in Lean 4 and the Trocq map4 cap #

The Univalence Axiom is inconsistent in Lean 4 (univalence_inconsistent). The map4 / universe-relation cap in this Trocq port — ParamForall's Map2a_forall requiring Param04, and LevelRefusal refusing equiv — is therefore a boundary of Lean's type theory, not a configurable limit.

The axiom landscape #

Lean 4's kernel and standard axioms:

Univalence contradicts this. It states (A = B) ≃ (A ≃ B) for A B : Type. Here A = B : Prop is a subsingleton, whereas A ≃ B need not be: Bool ≃ Bool contains the distinct elements id and not. Univalence forces Bool ≃ Bool to be a subsingleton, identifying id with not; evaluation at true then gives true = false.

The Prop-level form of univalence is consistent and coincides with propext. The inconsistency is specific to the Type-level statement: the proof irrelevance that makes propext safe makes Type-level univalence contradictory.

Consequences for the Param engine #

The negation equivalence on Bool (not is involutive). A second, distinct element of Bool ≃ Bool besides the identity.

Equations
Instances For

    not is not the identity equivalence: they disagree at true.

    The Univalence Axiom (Type-level): the canonical comparison map (A = B) → (A ≃ B) is an equivalence; equivalently, A = B and A ≃ B are equivalent types. Stated here as the existence of the equivalence.

    Equations
    Instances For

      Univalence is inconsistent in Lean 4. A = B is a subsingleton (Eq targets the definitionally proof-irrelevant Prop), so id and not in Bool ≃ Bool, having equal images under the injective e.symm, are equal — contradicting notEquiv_ne_refl. The map4 universe cap follows.

      theorem Transfer.UnivalenceStatus.prop_univalence {p q : Prop} (h : p ↔ q) :
      p = q

      The Prop-level analogue of univalence is propext: equivalent propositions are equal. It is consistent, and is the fragment the Prop-valued Param port operates in.