Inductive value : Type :=
| c_capply : constructor -> list value -> value.Inductive value : Type :=
| c_capply : constructor -> list value -> value.Inductive term : Type :=
| var : variable -> term
| capply : constructor -> list term -> term
| fapply : function -> list term -> term.Inductive term : Type :=
| var : variable -> term
| capply : constructor -> list term -> term
| fapply : function -> list term -> term.Inductive term : Type :=
| var : variable -> term
| capply : constructor -> list term -> term
| fapply : function -> list term -> term.Inductive term : Type :=
| var : variable -> term
| capply : constructor -> list term -> term
| fapply : function -> list term -> term.Inductive pattern : Type :=
| p_var : variable -> pattern
| p_capply : constructor -> list pattern -> pattern.Inductive pattern : Type :=
| p_var : variable -> pattern
| p_capply : constructor -> list pattern -> pattern.Inductive pattern : Type :=
| p_var : variable -> pattern
| p_capply : constructor -> list pattern -> pattern.Inductive rule : Type :=
| rule_intro : function -> list pattern -> term -> rule.Inductive rule : Type :=
| rule_intro : function -> list pattern -> term -> rule.

(* Specifications: *)
Lemma value_ind2_gen : forall (P : value -> Type)(Q : list value -> Type), Q nil -> (forall v l, P v -> Q l -> Q (v :: l)) -> (forall c l, Q l -> P (c_capply c l)) -> forall v, P v.
Lemma term_ind2_gen : forall (P : term -> Prop)(Q : list term -> Prop), Q nil -> (forall t l, P t -> Q l -> Q (t :: l)) -> (forall x, P (var x)) -> (forall c l, Q l -> P (capply c l)) -> (forall f l, Q l -> P (fapply f l)) -> forall t, P t.
Lemma term_ind2 : forall (P : term -> Prop), (forall x, P (var x)) -> (forall c l, (forall t, In t l -> P t) -> P (capply c l)) -> (forall f l, (forall t, In t l -> P t) -> P (fapply f l)) -> forall t, P t.
Lemma pattern_ind2_gen : forall (P : pattern -> Prop)(Q : list pattern -> Prop), Q nil -> (forall p l, P p -> Q l -> Q (p :: l)) -> (forall x, P (p_var x)) -> (forall c l, Q l -> P (p_capply c l)) -> forall p, P p.
Lemma pattern_ind2 : forall (P : pattern -> Prop), (forall x, P (p_var x)) -> (forall c l, (forall p, In p l -> P p) -> P (p_capply c l)) -> forall p, P p.