/-
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
