--- /dev/null
+let max =
+let rec max =
+(function i -> (function f ->
+(match (f i) with
+ Matita_datatypes_bool.True -> i
+ | Matita_datatypes_bool.False ->
+(match i with
+ Matita_nat_nat.O -> Matita_nat_nat.O
+ | Matita_nat_nat.S(j) -> (max j f))
+)
+)) in max
+;;
+
+let min_aux =
+let rec min_aux =
+(function off -> (function n -> (function f ->
+(match (f n) with
+ Matita_datatypes_bool.True -> n
+ | Matita_datatypes_bool.False ->
+(match off with
+ Matita_nat_nat.O -> n
+ | Matita_nat_nat.S(p) -> (min_aux p (Matita_nat_nat.S(n)) f))
+)
+))) in min_aux
+;;
+
+let min =
+(function n -> (function f -> (min_aux n Matita_nat_nat.O f)))
+;;
+