2015-04-24 16:31:55 +00:00
|
|
|
/-
|
|
|
|
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.
|
|
|
|
|
2015-11-21 00:38:10 +00:00
|
|
|
noncomputable definition id' : D → D := λd, d
|
|
|
|
noncomputable definition v : D := introD id'
|
2015-04-24 16:31:55 +00:00
|
|
|
|
|
|
|
theorem inconsistent : false :=
|
|
|
|
recD (λ f ih, ih v) v
|