]> matita.cs.unibo.it Git - fireball-separation.git/commitdiff
Fixed computation of arity for top-level inerts
authoracondolu <andrea.condoluci@unibo.it>
Sat, 22 Jul 2017 19:00:26 +0000 (21:00 +0200)
committeracondolu <andrea.condoluci@unibo.it>
Mon, 24 Jul 2017 11:37:34 +0000 (13:37 +0200)
ocaml/lambda4.ml
ocaml/parser.ml

index b15c3603cc7457139424e0ba9a56a48819ee11f9..2e96fc3dc0ef658c05b87cd55bdca9e196baf73d 100644 (file)
@@ -70,16 +70,18 @@ let all_terms p =
  @ p.ps
 ;;
 
-let sum_arities p =
+let measure_of_term, measure_of_terms =
  let rec aux = function
  | `N _ | `Bottom | `Pacman -> 0
  | `Var(_,ar) -> if ar = min_int then 0 else max 0 ar (*assert (ar >= 0); ar*)
  | `Lam(_,t) -> aux t
  | `I(v,args) -> aux (`Var v) + aux_many (Listx.to_list args :> nf list)
- | `Match(u,(_,ar),_,_,args) -> aux (u :> nf) + (if ar = min_int then 0 else ar - 1) + aux_many (args :> nf list)
+ | `Match(u,(_,ar),_,_,args) -> aux (u :> nf) + (if ar <= 0 then 0 else ar - 1) + aux_many (args :> nf list)
  and aux_many tms = List.fold_right ((+) ++ aux) tms 0 in
- aux_many (all_terms p :> nf list)
- ;;
+ (fun t -> aux (t :> nf)), (fun l -> aux_many (l :> nf list))
+;;
+
+let sum_arities p = measure_of_terms (all_terms p)
 
 let problem_measure p = sum_arities p;;
 let string_of_measure = string_of_int;;
@@ -96,10 +98,10 @@ let string_of_problem label ({freshno; div; conv; ps; deltas} as p) =
    ) else "# ";
   "#";
   "$" ^ p.label;
-  (match div with None -> "# no D" | Some div -> "D ^ print ~l (div :> nf));
+  (match div with None -> "# no D" | Some div -> "D ("^string_of_int (measure_of_term div)^")"^ print ~l (div :> nf));
   ]
-  @ List.map (fun t -> if t = convergent_dummy then "#C" else "C " ^ print ~l (t :> nf)) conv
-  @ List.mapi (fun i t -> string_of_int i ^ " " ^ print ~l (t :> nf)) ps
+  @ List.map (fun t -> if t = convergent_dummy then "#C" else "C ("^string_of_int (measure_of_term t)^") " ^ print ~l (t :> nf)) conv
+  @ List.mapi (fun i t -> string_of_int i ^ " ("^string_of_int (measure_of_term t)^") " ^ print ~l (t :> nf)) ps
   @ [""])
 ;;
 
index 4b02b121e93faf1da7d2c24bdcda32af5b844929..6bcb70d909fd0b6117292aa2cdcb3b9a7d88da0f 100644 (file)
@@ -189,7 +189,7 @@ let problem_of_string s =
  | #nf_nob as t -> t\r
  | `Bottom -> raise (ParsingError "Input term not in normal form") in\r
  let rec aux_nob lev : nf_nob -> nf = function\r
- | `I((n,_), args) -> `I((n,1 + Listx.length args), Listx.map (fun t -> exclude_bottom (aux_nob lev t)) args)\r
+ | `I((n,_), args) -> `I((n,(if lev = 0 then 0 else 1) + Listx.length args), Listx.map (fun t -> exclude_bottom (aux_nob lev t)) args)\r
  | `Var(n,_) -> fix lev n\r
  | `Lam(_,t) -> `Lam (true, aux (lev+1) t)\r
  | `Match _ | `N _ -> assert false\r