lean2/library/logic/examples/negative.lean

30 lines
785 B
Text

/-
This example demonstrates why allowing types such as
inductive D : Type :=
| intro : (D → D) → D
would make the system inconsistent
-/
/- If we were allowed to form the inductive type
inductive D : Type :=
| intro : (D → D) → D
we would get the following
-/
universe l
-- The new type A
axiom D : Type.{l}
-- The constructor
axiom introD : (D → D) → D
-- The eliminator
axiom recD : Π {C : D → Type}, (Π (f : D → D) (r : Π d, C (f d)), C (introD f)) → (Π (d : D), C d)
-- We would also get a computational rule for the eliminator, but we don't need it for deriving the inconsistency.
noncomputable definition id' : D → D := λd, d
noncomputable definition v : D := introD id'
theorem inconsistent : false :=
recD (λ f ih, ih v) v