(* Submitted by Dachuan Yu (BZ#220) *)
Fixpoint T (n : nat) : Type :=
match n with
| O => nat -> Prop
| S n' => T n'
end.
Inductive R : forall n : nat, T n -> nat -> Prop :=
| RO : forall (Psi : T 0) (l : nat), Psi l -> R 0 Psi l
| RS :
forall (n : nat) (Psi : T (S n)) (l : nat), R n Psi l -> R (S n) Psi l.
Definition Psi00 (n : nat) : Prop := False.
Definition Psi0 : T 0 := Psi00.
inversion 1.
Abort.
(* Submitted by Pierre Casteran (BZ#540) *)
Set Implicit Arguments.
Unset Strict Implicit.
Parameter rule : Set -> Type.
Inductive extension (I : Set) : Type :=
| NL : extension I
| add_rule : rule I -> extension I -> extension I.
Inductive in_extension (I : Set) (r : rule I) : extension I -> Type :=
| in_first : forall e, in_extension r (add_rule r e)
| in_rest : forall e r', in_extension r e -> in_extension r (add_rule r' e).
Arguments NL [I].
Inductive super_extension (I : Set) (e : extension I) :
extension I -> Type :=
| super_NL : super_extension e NL
| super_add :
forall r (e' : extension I),
in_extension r e ->
super_extension e e' -> super_extension e (add_rule r e').

Lemma super_def :
forall (I : Set) (e1 e2 : extension I),
super_extension e2 e1 -> forall ru, in_extension ru e1 -> in_extension ru e2.