]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_disambiguation/arit_notation.ml
snapshot, almost working
[helm.git] / helm / ocaml / cic_disambiguation / arit_notation.ml
index 998688cbebc61a9ca5c28a9907a96c76a200ac50..b4aaf339877cb5dcaf273ec04dc4fbc4e297e9d4 100644 (file)
 open Ast
 open Parser
 
+(*
+let i = ref max_int
+let get_i () = decr i; !i
+*)
+
 EXTEND
   term: LEVEL "add"
     [
       [ t1 = term; SYMBOL "+"; t2 = term ->
-          return_term loc (Appl_symbol ("plus", [t1; t2]))
+          return_term loc (Appl_symbol ("plus", 0, [t1; t2]))
       | t1 = term; SYMBOL "-"; t2 = term ->
-          return_term loc (Appl_symbol ("minus", [t1; t2]))
+          return_term loc (Appl_symbol ("minus", 0, [t1; t2]))
       ]
     ];
   term: LEVEL "mult"
     [
       [ t1 = term; SYMBOL "*"; t2 = term ->
-          return_term loc (Appl_symbol ("times", [t1; t2]))
+          return_term loc (Appl_symbol ("times", 0, [t1; t2]))
       | t1 = term; SYMBOL "/"; t2 = term ->
-          return_term loc (Appl_symbol ("div", [t1; t2]))
+          return_term loc (Appl_symbol ("div", 0, [t1; t2]))
       ]
     ];
   term: LEVEL "inv"
     [
-      [ SYMBOL "-"; t = term -> return_term loc (Appl_symbol ("uminus", [t])) ]
+      [ SYMBOL "-"; t = term ->
+        return_term loc (Appl_symbol ("uminus", 0, [t]))
+      ]
     ];
 END
+
+let _ =
+  Disambiguate.add_num_choice
+    ("natural number",
+      (fun _ num _ -> HelmLibraryObjects.build_nat (int_of_string num)));
+  Disambiguate.add_num_choice
+    ("real number",
+      (fun _ num _ -> HelmLibraryObjects.build_real (int_of_string num)));
+  Disambiguate.add_symbol_choice "plus"
+    ("natural plus",
+     (fun env _ args ->
+       let t1, t2 =
+         match args with
+         | [t1; t2] -> t1, t2
+         | _ -> raise Disambiguate.Invalid_choice
+       in
+       Cic.Appl [ HelmLibraryObjects.Peano.plus; t1; t2 ]));
+  Disambiguate.add_symbol_choice "plus"
+    ("real plus",
+     (fun env _ args ->
+       let t1, t2 =
+         match args with
+         | [t1; t2] -> t1, t2
+         | _ -> raise Disambiguate.Invalid_choice
+       in
+       Cic.Appl [ HelmLibraryObjects.Reals.rplus; t1; t2 ]));
+