Definition iszero (n : nat) : bool :=
match n with
| O => true
| _ => false
end.
Functional Scheme iszero_ind := Induction for iszero Sort Prop.
intros x eg.
functional induction iszero x; simpl.
trivial.
inversion eg.
Qed.
Function ftest (n m : nat) : nat :=
match n with
| O => match m with
| O => 0
| _ => 1
end
| S p => 0
end.
(* MS: FIXME: apparently can't define R_ftest_complete. Rest of the file goes through. *)
intros n m.
functional induction ftest n m; auto.
Qed.
intros m.
functional induction ftest 0 m.
auto.
auto.
auto with *.
Qed.
Function lamfix (m n : nat) {struct n } : nat :=
match n with
| O => m
| S p => lamfix m p
end.
(* Parameter v1 v2 : nat. *)
intros v1 v2.
functional induction lamfix v1 v2.
trivial.
assumption.
Defined.
(* polymorphic function *)
Functional Scheme app_ind := Induction for app Sort Prop.
intros A l l'.
functional induction app A l l';  intuition.
rewrite <- H0; trivial.
Qed.
Require Export Arith.
Function trivfun (n : nat) : nat :=
match n with
| O => 0
| S m => trivfun m
end.
(* essaie de parametre variables non locaux:*)
Parameter varessai : nat.
functional induction trivfun varessai.
trivial.
assumption.
Defined.
Functional Scheme triv_ind := Induction for trivfun Sort Prop.

Lemma bisrepetita : forall n' : nat, trivfun n' = 0.