X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=blobdiff_plain;f=matita%2Fcontribs%2Fassembly%2Ffreescale%2Ffreescale_ocaml%2Fmatita_nat_div_and_mod.ml;fp=matita%2Fcontribs%2Fassembly%2Ffreescale%2Ffreescale_ocaml%2Fmatita_nat_div_and_mod.ml;h=87ee54a740ee4b4f943469c45fc3c55a4839f27f;hp=0000000000000000000000000000000000000000;hb=f61af501fb4608cc4fb062a0864c774e677f0d76;hpb=58ae1809c352e71e7b5530dc41e2bfc834e1aef1 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 index 000000000..87ee54a74 --- /dev/null +++ b/matita/contribs/assembly/freescale/freescale_ocaml/matita_nat_div_and_mod.ml @@ -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))) +;; +