-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathTest5_ForcedFailures.lean
More file actions
69 lines (55 loc) · 2.67 KB
/
Copy pathTest5_ForcedFailures.lean
File metadata and controls
69 lines (55 loc) · 2.67 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
/-
BST Lean Test 5: Forced Failures
Attempts to make Lean do things BST says are structurally impossible.
Each attempt should FAIL — and the failure mode is the evidence.
-/
-- ATTEMPT 1: Self-referential definition (Liar Paradox)
-- Uncomment to see Lean reject it:
-- def liar : Prop := ¬liar
-- ATTEMPT 2: Type containing itself (Girard's Paradox route)
-- Uncomment to see Lean reject it:
-- def selfType : Type := selfType
-- ATTEMPT 3: A proposition that asserts its own unprovability
-- We can't even EXPRESS this faithfully because Lean has no
-- internal provability predicate for itself.
-- The closest we can get:
-- def godelSentence : Prop := ¬∃ (proof : godelSentence), True
-- This would also be rejected by the positivity checker.
-- ATTEMPT 4: What Lean CAN do — and where it stops
-- Lean can prove things ABOUT other formal systems encoded within it.
-- For example, we can encode Peano Arithmetic in Lean and prove
-- that PA can't prove its own consistency. But that's Lean talking
-- ABOUT PA, not Lean talking about Lean.
-- Let's demonstrate the boundary concretely:
-- This works: Lean proving a fact about natural numbers
theorem simple_fact : ∀ n : Nat, n + 0 = n := by
intro n
rfl
-- This works: Lean proving a logical tautology
theorem excluded_middle_instance : ∀ P : Prop, P ∨ ¬P → (P → True) := by
intro P _
intro _
exact trivial
-- This works: Lean reasoning about a function's properties
def double (n : Nat) : Nat := n * 2
theorem double_even : ∀ n : Nat, ∃ k : Nat, double n = 2 * k := by
intro n
exact ⟨n, by unfold double; exact Nat.mul_comm n 2⟩
-- But THIS doesn't work: Lean reasoning about its own reasoning
-- "Every theorem Lean proves is true" — can't be stated within Lean
-- because "true" (in the meta-theoretic sense) is not a Lean concept.
-- Lean only has "provable" — and "every provable thing is provable" is empty.
-- The boundary is EXACTLY where BST predicts:
-- Lean operates freely WITHIN its constraints.
-- Lean cannot examine, justify, or verify those constraints FROM WITHIN.
-- The constraints (type theory rules, universe hierarchy, positivity checker)
-- were imposed by humans — external grounding — and Lean must accept them.
-- FINAL DEMONSTRATION: Lean accepts axioms it cannot justify
-- These are FOUNDATIONAL to Lean but UNPROVABLE within Lean:
#check @propext -- assumed, not proven
#check @Classical.choice -- assumed, not proven
-- These axioms are Lean's constraint set C_S.
-- They are externally grounded (chosen by designers).
-- Lean cannot derive them. Lean cannot justify them.
-- Lean cannot function without them.
-- This is BST Theorem 1, demonstrated in a formal system.