]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/contribs/assembly/freescale/freescale_ocaml/matita_nat_div_and_mod.ml
branch for universe
[helm.git] / matita / contribs / assembly / freescale / freescale_ocaml / matita_nat_div_and_mod.ml
diff --git a/matita/contribs/assembly/freescale/freescale_ocaml/matita_nat_div_and_mod.ml b/matita/contribs/assembly/freescale/freescale_ocaml/matita_nat_div_and_mod.ml
new file mode 100644 (file)
index 0000000..87ee54a
--- /dev/null
@@ -0,0 +1,67 @@
+let mod_aux =
+let rec mod_aux = 
+(function p -> (function m -> (function n -> 
+(match (Matita_nat_compare.leb m n) with 
+   Matita_datatypes_bool.True -> m
+ | Matita_datatypes_bool.False -> 
+(match p with 
+   Matita_nat_nat.O -> m
+ | Matita_nat_nat.S(q) -> (mod_aux q (Matita_nat_minus.minus m (Matita_nat_nat.S(n))) n))
+)
+))) in mod_aux
+;;
+
+let mod_ =
+(function n -> (function m -> 
+(match m with 
+   Matita_nat_nat.O -> n
+ | Matita_nat_nat.S(p) -> (mod_aux n n p))
+))
+;;
+
+let div_aux =
+let rec div_aux = 
+(function p -> (function m -> (function n -> 
+(match (Matita_nat_compare.leb m n) with 
+   Matita_datatypes_bool.True -> Matita_nat_nat.O
+ | Matita_datatypes_bool.False -> 
+(match p with 
+   Matita_nat_nat.O -> Matita_nat_nat.O
+ | Matita_nat_nat.S(q) -> (Matita_nat_nat.S((div_aux q (Matita_nat_minus.minus m (Matita_nat_nat.S(n))) n))))
+)
+))) in div_aux
+;;
+
+let div =
+(function n -> (function m -> 
+(match m with 
+   Matita_nat_nat.O -> (Matita_nat_nat.S(n))
+ | Matita_nat_nat.S(p) -> (div_aux n n p))
+))
+;;
+
+let div_mod_spec_rec =
+(function n -> (function n1 -> (function n2 -> (function n3 -> (function f -> (f))))))
+;;
+
+let div_mod_spec_rect =
+(function n -> (function n1 -> (function n2 -> (function n3 -> (function f -> (f))))))
+;;
+
+let n_divides_aux =
+let rec n_divides_aux = 
+(function p -> (function n -> (function m -> (function acc -> 
+(match (mod_ n m) with 
+   Matita_nat_nat.O -> 
+(match p with 
+   Matita_nat_nat.O -> (Matita_datatypes_constructors.Pair(acc,n))
+ | Matita_nat_nat.S(p) -> (n_divides_aux p (div n m) m (Matita_nat_nat.S(acc))))
+
+ | Matita_nat_nat.S(a) -> (Matita_datatypes_constructors.Pair(acc,n)))
+)))) in n_divides_aux
+;;
+
+let n_divides =
+(function n -> (function m -> (n_divides_aux n n m Matita_nat_nat.O)))
+;;
+