let zero = []
let succ n = () :: n
let rec int_of_peano p =
match p with
| [] -> 0
| _::p' -> 1 + int_of_peano p'
let rec peano_of_int n =
if n < 0 then failwith "n doit etre positif ou nul.";
if n = 0 then zero
else succ (peano_of_int (n-1))
let int_of_peano p =
let rec aux p n =
match p with
| [] -> n
| _::p' -> aux p' (n+1)
in
aux p 0
let peano_of_int n =
if n < 0 then failwith "n doit etre positif ou nul.";
let rec aux n p =
if n = 0 then p
else aux (n-1) (succ p)
in
aux n zero
(*
succ (peano_of_int max_int) est different de peano_of_int (max_int +1) car
max_int + 1 = min_int
*)
let rec add p1 p2 =
match p1 with
| [] -> p2
| ()::p1' -> add p1' (succ p2)
let rec mult p1 p2 =
match p1 with
| [] -> []
| ()::p1' -> add p2 (mult p1' p2)
let rec inf_eq p1 p2 =
match p1, p2 with
| [], _ -> true
| _, [] -> false
| ()::p1', ()::p2' -> inf_eq p1' p2'