Prerequisites. Direct starred prerequisites: none. No later core chapter depends on this route.
Suppose a small predicate code may quantify over every code in an enclosing large universe. Its classifier must then contain a product of the form ∀01𝑋:𝑈1.𝑃(𝑋):𝑈0, not merely a product over one decoded small code. This mixed product is the point at which the familiar failed self-membership calculation becomes dangerous. Hurkens’s construction shows that four carefully separated product operations already suffice for collapse; literal self-membership is not required.
The axiom card
This chapter uses its own Tarski-style signature 𝖴−. It is not an extension of the predicative hierarchy of chapter 29.
The large universe consists of a type 𝑈1 and, for each 𝐴 :𝑈1, a type 𝖤𝗅1(𝐴). It has codes for products over a decoded large code and over all large codes: Π1(𝐴,𝐵):𝑈1(𝐴:𝑈1, 𝐵:𝖤𝗅1(𝐴)→𝑈1),Π2(𝐹):𝑈1(𝐹:𝑈1→𝑈1). For each product there are abstraction and application operations 𝜆1, ⋅1 and 𝜆2, ⋅2, with signatures 𝜆1:(∏𝑥:𝖤𝗅1(𝐴)𝖤𝗅1(𝐵𝑥))→𝖤𝗅1(Π1(𝐴,𝐵)),⋅1:𝖤𝗅1(Π1(𝐴,𝐵))→∏𝑥:𝖤𝗅1(𝐴)𝖤𝗅1(𝐵𝑥),𝜆2:(∏𝐴:𝑈1𝖤𝗅1(𝐹𝐴))→𝖤𝗅1(Π2(𝐹)),⋅2:𝖤𝗅1(Π2(𝐹))→∏𝐴:𝑈1𝖤𝗅1(𝐹𝐴). We take the two large beta laws as judgmental computation equations: (𝜆1𝑥.𝑡)⋅1𝑎≡𝑡[𝑎/𝑥],(𝜆2𝐴.𝑡)⋅2𝐵≡𝑡[𝐵/𝐴]. Spiwack presents corresponding equality axioms and rewrites along them. The judgmental presentation used here exposes the same conversion sites without printing the transports; it is therefore a strengthened presentation of the source interface, not a claim that its equalities were judgmental.
There is a code 𝑢0 :𝑈1. Put 𝑈0:=𝖤𝗅1(𝑢0) and assume a type 𝖤𝗅0(𝑎) for each 𝑎 :𝑈0. The small codes are closed under Π0(𝑎,𝑏):𝑈0(𝑎:𝑈0, 𝑏:𝖤𝗅0(𝑎)→𝑈0),Π01(𝐴,𝑏):𝑈0(𝐴:𝑈1, 𝑏:𝖤𝗅1(𝐴)→𝑈0), with abstraction and application 𝜆0, ⋅0 and 𝜆01, ⋅01, typed by 𝜆0:(∏𝑥:𝖤𝗅0(𝑎)𝖤𝗅0(𝑏𝑥))→𝖤𝗅0(Π0(𝑎,𝑏)),⋅0:𝖤𝗅0(Π0(𝑎,𝑏))→∏𝑥:𝖤𝗅0(𝑎)𝖤𝗅0(𝑏𝑥),𝜆01:(∏𝑥:𝖤𝗅1(𝐴)𝖤𝗅0(𝑏𝑥))→𝖤𝗅0(Π01(𝐴,𝑏)),⋅01:𝖤𝗅0(Π01(𝐴,𝑏))→∏𝑥:𝖤𝗅1(𝐴)𝖤𝗅0(𝑏𝑥). No beta law for either small product is assumed. Finally fix an arbitrary code 𝐹 :𝑈0.
Referenced from 6 locations
We use the following local notation, always at the code level: ∀1𝑥:𝐴.𝐵:=Π1(𝐴,𝜆𝑥.𝐵),𝐴→1𝐵:=∀1_:𝐴.𝐵,∀2𝐴.𝐵:=Π2(𝜆𝐴.𝐵),∀0𝑥:𝑎.𝑏:=Π0(𝑎,𝜆𝑥.𝑏),𝑎→0𝑏:=∀0_:𝑎.𝑏,∀01𝑥:𝐴.𝑏:=Π01(𝐴,𝜆𝑥.𝑏). Thus 𝖤𝗅1(𝐴 →1𝑢0) carries application into 𝖤𝗅1(𝐴) →𝑈0 and abstraction back, with the displayed one-sided beta equation. We do not identify it with that function type. The code 𝑎 →0𝑏 :𝑈0 has the corresponding small introduction and elimination operations but no assumed beta equation. The subscripts distinguish a code in 𝑈1 from one in 𝑈0.
The diagonal terms
The following definitions are Spiwack’s axiomatisation with names expanded and types kept beside the terms [Spi15].
Define the large codes 𝑉:=∀2𝐴.((𝐴→1𝑢0)→1𝐴→1𝑢0)→1𝐴→1𝑢0:𝑈1,𝑈:=𝑉→1𝑢0:𝑈1. Here 𝑈 is a code in the universe 𝑈1, not a third universe; 𝑈0 is the small universe decoded from 𝑢0. For 𝑧 :𝖤𝗅1(𝑉) define 𝗌𝖻(𝑧):=𝜆2𝐴.𝜆1𝑟.𝜆1𝑎.𝑟⋅1(𝑧⋅2𝐴⋅1𝑟)⋅1𝑎:𝖤𝗅1(𝑉). For 𝑖 :𝖤𝗅1(𝑈 →1𝑢0) and 𝑥 :𝖤𝗅1(𝑈) put 𝗅𝖾(𝑖,𝑥):=𝑥⋅1(𝜆2𝐴.𝜆1𝑟.𝜆1𝑎.𝑖⋅1(𝜆1𝑣.𝗌𝖻(𝑣)⋅2𝐴⋅1𝑟⋅1𝑎)):𝑈0. Its curried large representative is 𝗅𝖾′:=𝜆1𝑖.𝜆1𝑥.𝗅𝖾(𝑖,𝑥):𝖤𝗅1((𝑈→1𝑢0)→1𝑈→1𝑢0). Now define the small code 𝖨𝗇𝖽(𝑖):=∀01𝑥:𝑈.𝗅𝖾(𝑖,𝑥)→0(𝑖⋅1𝑥):𝑈0, the large term 𝖶𝖥:=𝜆1𝑧.𝖨𝗇𝖽(𝑧⋅2𝑈⋅1𝗅𝖾′):𝖤𝗅1(𝑈), and, for 𝑥 :𝖤𝗅1(𝑈), the large term 𝖣(𝑥):=𝜆1𝑣.𝗌𝖻(𝑣)⋅2𝑈⋅1𝗅𝖾′⋅1𝑥:𝖤𝗅1(𝑈). For 𝑖 :𝖤𝗅1(𝑈 →1𝑢0) put 𝖩(𝑖):=𝜆1𝑦.𝑖⋅1𝖣(𝑦):𝖤𝗅1(𝑈→1𝑢0). Finally, for 𝑥 :𝖤𝗅1(𝑈) define the small code 𝐼(𝑥):=(∀01𝑖:(𝑈→1𝑢0).𝗅𝖾(𝑖,𝑥)→0(𝑖⋅1𝖣(𝑥)))→0𝐹:𝑈0.
Referenced from 3 locations
Every displayed application is now checkable from the adjacent type. The critical one is 𝑧 ⋅2𝑈 ⋅1𝗅𝖾′ :𝖤𝗅1(𝑈 →1𝑢0): since 𝑧 :𝖤𝗅1(𝑉), instantiating its outer ∀2 at 𝑈 expects exactly the large representative 𝗅𝖾′. The result is precisely the domain of 𝖨𝗇𝖽, so 𝖶𝖥 is well formed.
The diagonal proof uses four conversions, all generated by the two large beta equations: 𝖩(𝑖)⋅1𝑥≡𝑖⋅1𝖣(𝑥),𝗅𝖾(𝖩(𝑖),𝑥)≡𝗅𝖾(𝑖,𝖣(𝑥)),𝗅𝖾(𝑖,𝖶𝖥)≡𝖨𝗇𝖽(𝖩(𝑖)),(𝜆1𝑢.𝐼(𝑢))⋅1𝑥≡𝐼(𝑥).(𝛽1)(𝛽1,𝛽2)(𝛽1,𝛽2)(𝛽1) For the second equation, unfold 𝗅𝖾 and contract the outer 𝜆1 in 𝖩(𝑖) and the 𝜆2 and 𝜆1 redexes in 𝗌𝖻. The third unfolds 𝖶𝖥 and 𝖨𝗇𝖽 before the same contractions. No small beta equation is used.
Under definition 76.1, definition 76.2, there are terms Ω:𝖤𝗅0(∀01𝑖:(𝑈→1𝑢0).𝖨𝗇𝖽(𝑖)→0(𝑖⋅1𝖶𝖥)),𝐿1:𝖤𝗅0(𝖨𝗇𝖽(𝜆1𝑢.𝐼(𝑢))),𝐿2:𝖤𝗅0((∀01𝑖:(𝑈→1𝑢0).𝖨𝗇𝖽(𝑖)→0(𝑖⋅1𝖶𝖥))→0𝐹). Their construction uses only the two large beta laws.
Referenced from 6 locations
Proof of Lemma 76.3 — The three inhabitants
Proof. Write 𝑄:=∀01𝑖:(𝑈→1𝑢0).𝖨𝗇𝖽(𝑖)→0(𝑖⋅1𝖶𝖥)and𝑘:=𝜆1𝑢.𝐼(𝑢). The three inhabitants are the following terms: Ω:=𝜆01𝑖.𝜆0𝑦.𝑦⋅01𝖶𝖥⋅0(𝜆01𝑥.𝜆0ℎ.𝑦⋅01𝖣(𝑥)⋅0ℎ),𝐿1:=𝜆01𝑥.𝜆0𝑝.𝜆0𝑞.(𝑞⋅01𝑘⋅0𝑝)⋅0(𝜆01𝑖.𝜆0ℎ.𝑞⋅01𝖩(𝑖)⋅0ℎ),𝐿2:=𝜆0𝑞.(𝑞⋅01𝑘⋅0𝐿1)⋅0(𝜆01𝑖.𝜆0ℎ.𝑞⋅01𝖩(𝑖)⋅0ℎ).
We check the terms from the outside inward. For Ω, let 𝑖 :𝖤𝗅1(𝑈 →1𝑢0) and 𝑦 :𝖤𝗅0(𝖨𝗇𝖽(𝑖)). Application at 𝖶𝖥 asks for 𝖤𝗅0(𝗅𝖾(𝑖,𝖶𝖥)). By (β _1,β _2), this is 𝖤𝗅0(𝖨𝗇𝖽(𝖩(𝑖))). Its displayed inhabitant sends 𝑥 and ℎ :𝖤𝗅0(𝗅𝖾(𝖩(𝑖),𝑥)) to 𝑦 ⋅01𝖣(𝑥) ⋅0ℎ: equation (β _1,β _2) converts the premise, and (β _1) converts the result. Thus Ω :𝑄.
For 𝐿1, the outer two abstractions construct 𝖨𝗇𝖽(𝑘). By (β _1), their result must inhabit 𝐼(𝑥). After introducing 𝑝:𝖤𝗅0(𝗅𝖾(𝑘,𝑥))and𝑞:𝖤𝗅0(∀01𝑖.𝗅𝖾(𝑖,𝑥)→0𝑖⋅1𝖣(𝑥)), the term 𝑞 ⋅01𝑘 ⋅0𝑝 inhabits 𝐼(𝖣(𝑥)) by (β _1). Its remaining argument is constructed by sending 𝑖,ℎ to 𝑞 ⋅01𝖩(𝑖) ⋅0ℎ; equations (β _1,β _2) and (β _1) give exactly the required premise and conclusion. This establishes 𝐿1.
Finally let 𝑞 :𝖤𝗅0(𝑄). The term 𝑞 ⋅01𝑘 ⋅0𝐿1 inhabits 𝐼(𝖶𝖥) by (β _1). Its displayed final argument sends 𝑖 and ℎ :𝖤𝗅0(𝗅𝖾(𝑖,𝖶𝖥)) to 𝑞 ⋅01𝖩(𝑖) ⋅0ℎ; equation (β _1,β _2) converts ℎ to the required induction premise, and (β _1) converts the result. Hence 𝐿2 :𝑄 →0𝐹.
These terms are the transport-free, judgmental-beta presentation of Spiwack’s Omega, lemma1, and lemma2 [Spi15]. The four code formers correspond to the source’s Forall1, ForallU1, Forall0, and ForallU0, respectively. Every conversion above is one of the four displayed 𝛽1/𝛽2 equations; no small beta law occurs. ◻
For every 𝐹 :𝑈0, the interface of definition 76.1 yields a term of 𝖤𝗅0(𝐹).
Referenced from 8 locations
Proof of Theorem 76.4 — Hurkens collapse
Proof. By lemma 76.3, application 𝐿2 ⋅0Ω has type 𝖤𝗅0(𝐹). Application is an operation supplied by the interface; no small beta equation is used. ◻
If some 𝐹 :𝑈0 decodes to an empty type, the interface is inconsistent. Removing either large product closure, either small product closure, the embedding 𝑢0, or the relevant introduction/elimination operation blocks the displayed derivation. The derivation does not require beta for either small product.
Referenced from 3 locations
Proof of Corollary 76.5 — The exact inconsistency boundary
Proof. If 𝖤𝗅0(𝐹) is empty, theorem 76.4 supplies an inhabitant of an empty type. The dependency boundary is read from the written terms:
- Π1.
-
It first forms 𝑈 =𝑉 →1𝑢0 and is then used by 𝗌𝖻, 𝗅𝖾, 𝗅𝖾′, 𝖣, and 𝖩.
- Π2.
-
It forms the head of 𝑉 and permits each 𝑧 ⋅2𝐴 and 𝗌𝖻(𝑣) ⋅2𝑈 application.
- Π0.
-
It forms the small implications in 𝖨𝗇𝖽 and 𝐼, including the final implication to 𝐹.
- Π01.
-
It forms the quantifiers over 𝑥 :𝑈 and over 𝑖 :𝑈 →1𝑢0 in 𝖨𝗇𝖽, 𝐼, 𝑄, and the three proof terms.
- 𝑢0.
-
It supplies the small-universe code used in every 𝐴 →1𝑢0 classifier and in the definition of 𝑈0.
The displayed proof terms also use the corresponding abstraction and application operations. Their only reductions are the four large-beta conversions in (β _1), (β _1,β _2), (β _1,β _2), and (β _1); neither small beta law is present. Removing one listed operation makes the first named construction that uses it ill formed. This proves a dependency claim about this derivation, not consistency of any weakened interface. ◻
It does not follow that every weakening of one assumption is consistent. In particular, ordinary predicative hierarchies avoid the interface because a small impredicative product may not quantify over the enclosing large universe.
A Reynolds–Hurkens variation
Coquand’s variation is a separate higher-order-logic calculation, not a renaming of theorem 76.4. Its 𝜆𝖧𝖮𝖫 card has sorts ∗,◻,△, axioms ∗ :◻, ◻ :△, and product rules ( ∗, ∗), (◻,◻), and (◻, ∗). Fix 𝐴 :◻, put ⊥:=∀𝑝 : ∗. 𝑝 and ¬𝑝:=𝑝 →⊥, and let 𝖯𝗈𝗐(𝑋) =𝑋 → ∗ and 𝑇(𝑋) =𝖯𝗈𝗐(𝖯𝗈𝗐(𝑋)). The rule (◻, ∗) is spent when a proposition quantifies over 𝑝 :𝖯𝗈𝗐(𝐴). For 𝑓 :𝑋 →𝑌, 𝑄 :𝑇(𝑋), and 𝑝 :𝖯𝗈𝗐(𝑌), functorial action is 𝑇(𝑓)(𝑄):=𝜆𝑝.𝑄(𝜆𝑥.𝑝(𝑓𝑥)).
In minimal higher-order logic, suppose 𝐴 is a type with maps 𝗂𝗇𝗍𝗋𝗈:𝑇(𝐴)→𝐴,𝗆𝖺𝗍𝖼𝗁:𝐴→𝑇(𝐴), and the judgmental equality 𝗆𝖺𝗍𝖼𝗁∘𝗂𝗇𝗍𝗋𝗈≡𝑇(𝗂𝗇𝗍𝗋𝗈∘𝗆𝖺𝗍𝖼𝗁).(𝑅𝐻) Then falsity is inhabited.
Referenced from 2 locations
Proof of Theorem 76.6 — Reynolds–Hurkens retraction boundary
Proof. Put 𝛿 =𝗂𝗇𝗍𝗋𝗈 ∘𝗆𝖺𝗍𝖼𝗁 and define 𝑝0(𝑥):=∀𝑝:𝖯𝗈𝗐(𝐴). 𝑝(𝛿𝑥)→¬𝗆𝖺𝗍𝖼𝗁(𝑥)(𝑝),𝑋0(𝑝):=∀𝑥:𝐴. 𝑝(𝑥)→¬𝗆𝖺𝗍𝖼𝗁(𝑥)(𝑝),𝑥0:=𝗂𝗇𝗍𝗋𝗈(𝑋0). Equation (RH) gives 𝗆𝖺𝗍𝖼𝗁(𝛿𝑥)(𝑝) ≡𝗆𝖺𝗍𝖼𝗁(𝑥)(𝑝 ∘𝛿). Let 𝑥 :𝐴, 𝑝 :𝖯𝗈𝗐(𝐴), ℎ1 :𝑝0(𝑥), and ℎ0 :𝑋0(𝑝). The auxiliary terms are 𝑠1(𝑥,ℎ1):=𝜆𝑝.ℎ1(𝑝∘𝛿):𝑝0(𝛿𝑥),𝑠2(𝑝,ℎ0):=𝜆𝑥.ℎ0(𝛿𝑥):𝑋0(𝑝∘𝛿),𝑙0:=𝜆𝑝.𝜆ℎ.𝜆ℎ0.ℎ0(𝑥0)(ℎ)(𝑠2(𝑝,ℎ0)),𝑙1:=𝜆𝑥.𝜆ℎ1.ℎ1(𝑝0)(𝑠1(𝑥,ℎ1)):𝑋0(𝑝0). Here 𝑙0:∏𝑝:𝖯𝗈𝗐(𝐴)𝑝(𝑥0)→¬𝑋0(𝑝). Its typing uses (RH) to convert 𝗆𝖺𝗍𝖼𝗁(𝑥0)(𝑝) to 𝑋0(𝑝 ∘𝛿). For arbitrary 𝑝 :𝖯𝗈𝗐(𝐴) and ℎ :𝑝(𝛿𝑥0), put 𝑙2(𝑝,ℎ):=𝑙0(𝑝∘𝛿,ℎ):¬𝗆𝖺𝗍𝖼𝗁(𝑥0)(𝑝). The classifier is converted using (RH), since 𝗆𝖺𝗍𝖼𝗁(𝑥0)(𝑝) ≡𝑋0(𝑝 ∘𝛿). Thus 𝑙2 :𝑝0(𝑥0). The final term 𝑙0(𝑝0,𝑙2,𝑙1) has type ⊥. This is the calculation of Coquand’s Theorem 1.2 [Coq23]; its only conversion beyond beta is (RH), used in the typings of 𝑠1, 𝑠2, 𝑙0, and 𝑙2. The source prints 𝑙0(𝑥0,𝑙2,𝑙1) at the final step; its declared type requires the first argument 𝑝0, as displayed here. ◻
The weak impredicative encoding 𝐴:=Π𝑋:◻(𝑇𝑋 →𝑋) →𝑋 supplies such maps and equation in 𝜆𝑈−, which extends the displayed 𝜆𝖧𝖮𝖫 card by the product rule (△,◻) [Coq23]. That observation is scoped to the stated sort and product rules. It neither adds those rules to the book’s predicative hierarchy nor turns Reynolds’s semantic non-definability theorem into this syntactic contradiction.
★★☆ Starting from 𝑧 :𝖤𝗅1(𝑉), type every application in 𝗌𝖻(𝑧). Record which occurrence uses Π2 rather than Π1.
Referenced from 3 locations
★☆☆ Work in the inductive theory of chapter 28 extended by the 𝖴− interface, and assume 𝐹 :𝑈0 with 𝖤𝗅0(𝐹) ≡𝟎 type. Use theorem 76.4 and empty elimination to inhabit any given closed type.
Referenced from 3 locations
Suggested first pass.
Begin with exercise 76.3, exercise 76.4; then run exercise 76.5 and compare each rejected certificate with the mathematical dependency ledger in corollary 76.5.
★★★ For each conversion in (β _1), (β _1,β _2), (β _1,β _2), and (β _1), mark the contracted 𝛽1 and 𝛽2 redexes. Then check each use of those equations in the proof of lemma 76.3. Verify that no line appeals to 𝛽0 or 𝛽01.
Referenced from 4 locations
★★☆ Derive 𝗆𝖺𝗍𝖼𝗁(𝛿𝑥)(𝑝) ≡𝗆𝖺𝗍𝖼𝗁(𝑥)(𝑝 ∘𝛿) from (RH) by expanding 𝑇. Identify the exact type of 𝑠2(𝑝,ℎ) and the four points at which the proof uses (RH).
Referenced from 4 locations
★★★ Practical project.hurkens-assumption-ledger Run this chapter’s Kappa assumption ledger. Remove Π1, Π2, Π0, Π01, and 𝑢0 in turn and require the corresponding named rejection. Then enable the two small-beta flags: the accepted certificate must remain accepted. Explain why this finite Boolean dependency check is not a term checker and does not mechanize theorem 76.4.
Referenced from 5 locations
Bibliographic notes
Hurkens gave the compact paradox in 1995 [Hur95]. Spiwack’s axiomatisation records exactly which beta laws the proof uses [Spi15]; those pages were the primary rule and proof source for definition 76.1, lemma 76.3. Coquand’s Reynolds–Hurkens variation states the separate retraction equation and its 𝜆𝑈− encoding [Coq23]. The Rocq library and an Agda file compiled with --type-in-type are useful replays of stronger inconsistent settings. Neither is evidence that the predicative hierarchy of chapter 29 admits the displayed interface.