(* This file is just for reference , in order to show the real contents of functions to be defined in other files. In this the argument X is explicitly written everywhere. *) (* Lists of nat *) Inductive natlist : Type := | nil_nat : natlist | cons_nat : nat -> natlist -> natlist. (* Lists of something *) Inductive list (X: Type) : Type := | nil : list X | cons : X -> list X -> list X. Fixpoint app (X:Type) (u v: list X) : list X := match u with | nil => v | cons x u' => cons X x (app X u' v) end. Fixpoint length (X:Type) (u: list X) : nat := match u with | nil => O | cons x u' => S (length X u') end. (* Example of a statement *) Theorem length_morphism : forall X u v, length X (app X u v) = length X u + length X v.