Hurkens’ paradox

(File provided by Ulrik Buchholtz)

Hurkens’ simplification of Girard’s paradox. This derives a contradiction using only Π-types and “type in type”, a universe that contains itself. For a description of how it works, and the similarity to Burali-Forti’s paradox, see:

https://www.cs.cmu.edu/~kw/scans/hurkens95tlca.pdf

{-#  OPTIONS --without-K --type-in-type #-}
module Hurkens where

Type = Set

P : Type  Type
P X = X  Type

PP : Type  Type
PP X = P (P X)

 : Type
 = (X : Type)  X

¬ : Type  Type
¬ X = X  

U : Type
U = (X : Type)  (PP X  X)  PP X

τ : PP U  U
τ t X f p = t λ x  p (f (x X f))

σ : U  PP U
σ s = s U λ t  τ t

Δ : P U
Δ y = ¬ ((p : P U)  σ y p  p (τ (σ y)))

Ω : U
Ω = τ λ p  (x : U)  σ x p  p x

D : Type
D = (p : P U)  σ Ω p  p (τ (σ Ω))

lemma : (p : P U)  ((x : U)  σ x p  p x)  p Ω
lemma p H = H Ω λ x  H (τ (σ x))

nd : ¬ D
nd = lemma Δ λ x H K  K Δ H λ p  K λ y  p (τ (σ y))

d : D
d p = lemma λ y  p (τ (σ y))

boom : 
boom = nd d

With this encoding of false we can of course inhabit all types, inlucing the inductively defined empty type.

data  : Type where

boom' : 
boom' = boom