Module Type LocalNat.
Inductive nat : Set :=
| O : nat
| S : nat->nat.
Check nat.
Check O.
Check S.
End LocalNat.
Print nat.
Print le.
Print zero_leq_three.
repeat constructor.
Qed.
Print list.
Check list.
Check (nil (A:=nat)).
Check (nil (A:= nat -> nat)).
Check (fun A: Set => (cons (A:=A))).
Check (cons 3 (cons 2 nil)).
Print Vector.t.
Check (Vector.nil nat).
Check (fun (A:Set)(a:A)=> Vector.cons _ a _ (Vector.nil _)).
Check (Vector.cons _ 5 _ (Vector.cons _ 3 _ (Vector.nil _))).
Print eq_3_3.
Print eq_proof_proof.
Check (2 + 1 = 3).
Check (Type = Type).
Goal Type = Type.
reflexivity.
Qed.
Print or.
Print and.
Print sumbool.
Print ex.
Check le_lt_dec.
Definition max (n p :nat) := match le_lt_dec n p with
| left _ => p
| right _ => n
end.
Require Coq.extraction.Extraction.
Extraction max.
Inductive tree(A:Set)   : Set :=
node : A -> forest A -> tree A
with
forest (A: Set)    : Set :=
nochild  : forest A |
addchild : tree A -> forest A -> forest A.
Inductive
even    : nat->Prop :=
evenO : even  O |
evenS : forall n, odd n -> even (S n)
with
odd    : nat->Prop :=
oddS : forall n, even n -> odd (S n).

Lemma odd_49 : odd (7 * 7).