-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHurkens.lean
More file actions
79 lines (73 loc) · 2.69 KB
/
Hurkens.lean
File metadata and controls
79 lines (73 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
structure Paradoxical where
U : Sort u
σ : U → U → Prop
τ : (U → Prop) → U
paradoxical : σ (τ X) y ↔ ∃ x, X x ∧ y = τ (σ x)
set_option linter.unusedVariables false in
theorem Paradoxical.contradiction (self : Paradoxical) : False :=
let wf x := ∀ X : self.U → Prop, (∀ x, (∀ y, self.σ x y → X y) → X x) → X x
have : wf (self.τ wf) := fun X hX =>
hX _ fun y hy =>
let ⟨w, hw, h⟩ := self.paradoxical.mp hy
h ▸ hw _ fun x hx =>
hX _ fun y hy =>
let ⟨z, hz, h⟩ := self.paradoxical.mp hy
h ▸ hx z hz
this
(fun y => ¬self.σ y (self.τ (self.σ y)))
(fun x hx h => hx _ h (self.paradoxical.mpr ⟨_, h, rfl⟩))
(self.paradoxical.mpr ⟨_, this, rfl⟩)
theorem Paradoxical.no_impredicative
(Pi : (Type u → Type u) → Type u)
(lam : ∀ {F}, (∀ A, F A) → Pi F)
(app : ∀ {F}, Pi F → ∀ A, F A)
(app_lam : ∀ {F} f A, @app F (lam f) A = f A)
: False :=
let τ X := lam fun A c a => ∃ x, X x ∧ a = c (app x A c)
contradiction {
U := Pi fun A => ((A → Prop) → A) → A → Prop
τ
σ x := app x _ τ
paradoxical := by intros; rw [app_lam]
}
structure Powerful where
U : Sort u
σ : U → (U → Prop) → Prop
τ : ((U → Prop) → Prop) → U
powerful : σ (τ C) X ↔ C fun y => X (τ (σ y))
set_option linter.unusedVariables false in
theorem Powerful.contradiction (self : Powerful) : False :=
let ind X := ∀ x, self.σ x X → X x
have : ∀ X, ind X → X (self.τ ind) := fun X hX =>
hX _ <| self.powerful.mpr fun x hx =>
hX _ (self.powerful.mpr hx)
this
(fun y => ¬∀ X, self.σ y X → X (self.τ (self.σ y)))
(fun x hx h => h _ hx fun X hX => h _ (self.powerful.mp hX))
(fun X hX => this _ (self.powerful.mp hX))
theorem Powerful.no_impredicative
(Pi : (Type u → Type u) → Type u)
(lam : ∀ {F}, (∀ A, F A) → Pi F)
(app : ∀ {F}, Pi F → ∀ A, F A)
(app_lam : ∀ {F} f A, @app F (lam f) A = f A)
: False :=
let τ t := lam fun X f p => t fun x => p (f (app x X f))
contradiction {
U := Pi fun A => (((A → Prop) → Prop) → A) → (A → Prop) → Prop
τ
σ s := app s _ τ
powerful := by intros; rewrite [app_lam]; rfl
}
theorem Powerful.no_impredicative'
(Pi : (Type u → Type u) → Type u)
(lam : ∀ {F}, (∀ A, F A) → Pi F)
(app : ∀ {F}, Pi F → ∀ A, F A)
(app_lam : ∀ {F} f A, @app F (lam f) A = f A)
: False :=
let τ u := lam fun X f => f fun q => u fun x => q (app x X f)
contradiction {
U := Pi fun A => (((A → Prop) → Prop) → A) → A
τ
σ a := app a _ fun F q => F fun x => q (τ x)
powerful := by intros; rewrite [app_lam]; rfl
}