feat(library/logic/examples/negative): add example showing that allowing negative inductive datatypes would lead to inconsistency

This commit is contained in:
Leonardo de Moura 2015-04-24 09:31:55 -07:00
parent 15c331591e
commit a5306e70eb

View file

@ -0,0 +1,30 @@
/-
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