lean2/library/logic/examples/negative.lean

31 lines
755 B
Text
Raw Normal View History

/-
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.
definition id : D → D := λd, d
definition v : D := introD id
theorem inconsistent : false :=
recD (λ f ih, ih v) v