Une MAJ de sécurité est nécessaire sur notre version actuelle. Elle sera effectuée lundi 02/08 entre 12h30 et 13h. L'interruption de service devrait durer quelques minutes (probablement moins de 5 minutes).

Commit a99cc75e authored by Raphael Rieu-Helft's avatar Raphael Rieu-Helft
Browse files

Remove almost all by/so proofs in addition

parent 082d207d
...@@ -830,7 +830,6 @@ let rinv (a:t) ...@@ -830,7 +830,6 @@ let rinv (a:t)
end end
end end
module LinearDecisionRational module LinearDecisionRational
use import RationalCoeffs use import RationalCoeffs
...@@ -1074,18 +1073,21 @@ let mmul (a b:t) ...@@ -1074,18 +1073,21 @@ let mmul (a b:t)
= match a, b with = match a, b with
| (q1,e1), (q2,e2) -> | (q1,e1), (q2,e2) ->
let q = Q.rmul q1 q2 in let q = Q.rmul q1 q2 in
let e = add_exp e1 e2 in if Q.req q Q.rzero then mzero
assert { forall y. minterp (q,e) y = minterp a y *. minterp b y else begin
by let p1 = pow rradix (from_int (interp_exp e1 y)) in let e = add_exp e1 e2 in
let p2 = pow rradix (from_int (interp_exp e2 y)) in assert { forall y. minterp (q,e) y = minterp a y *. minterp b y
let p = pow rradix (from_int (interp_exp e y)) in by let p1 = pow rradix (from_int (interp_exp e1 y)) in
interp_exp e y = interp_exp e1 y + interp_exp e2 y let p2 = pow rradix (from_int (interp_exp e2 y)) in
so p = p1 *. p2 let p = pow rradix (from_int (interp_exp e y)) in
so minterp (q,e) y = qinterp q *. p interp_exp e y = interp_exp e1 y + interp_exp e2 y
= (qinterp q1 *. qinterp q2) *. p so p = p1 *. p2
= (qinterp q1 *. qinterp q2) *. p1 *. p2 so minterp (q,e) y = qinterp q *. p
= minterp a y *. minterp b y }; = (qinterp q1 *. qinterp q2) *. p
(q,e) = (qinterp q1 *. qinterp q2) *. p1 *. p2
= minterp a y *. minterp b y };
(q,e)
end
end end
let mopp (a:t) let mopp (a:t)
...@@ -1282,6 +1284,16 @@ goal g': forall a b i j: int. ...@@ -1282,6 +1284,16 @@ goal g': forall a b i j: int.
i+1 = j -> i+1 = j ->
(power radix j) * a = radix*b (power radix j) * a = radix*b
goal g'': forall r r' i c x x' y l: int.
c = 0 ->
r + power radix i * c = x + y ->
r' = r + power radix i * l ->
x' = x + power radix i * l ->
r' + power radix (i+1) * c = x' + y
(*tries to add power radix i and power radix (i+1), fails
-> cst propagation ? *)
end end
module TI module TI
......
...@@ -1895,7 +1895,7 @@ ...@@ -1895,7 +1895,7 @@
</transf> </transf>
</goal> </goal>
</theory> </theory>
<theory name="MP64Coeffs" proved="true" sum="59e49ba42437c8635bc3d6235c8d7438"> <theory name="MP64Coeffs" proved="true" sum="3a8c8b51b01ad073535e1a8f5b36fc15">
<goal name="VC mzero" expl="VC for mzero" proved="true"> <goal name="VC mzero" expl="VC for mzero" proved="true">
<proof prover="2"><result status="valid" time="0.02"/></proof> <proof prover="2"><result status="valid" time="0.02"/></proof>
</goal> </goal>
...@@ -2144,38 +2144,41 @@ ...@@ -2144,38 +2144,41 @@
</goal> </goal>
<goal name="VC mmul" expl="VC for mmul" proved="true"> <goal name="VC mmul" expl="VC for mmul" proved="true">
<transf name="split_goal_wp" proved="true" > <transf name="split_goal_wp" proved="true" >
<goal name="VC mmul.0" expl="assertion" proved="true"> <goal name="VC mmul.0" expl="postcondition" proved="true">
<proof prover="3"><result status="valid" time="0.07"/></proof>
</goal>
<goal name="VC mmul.1" expl="assertion" proved="true">
<transf name="split_goal_wp" proved="true" > <transf name="split_goal_wp" proved="true" >
<goal name="VC mmul.0.0" expl="assertion" proved="true"> <goal name="VC mmul.1.0" expl="assertion" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof> <proof prover="2"><result status="valid" time="0.01"/></proof>
</goal> </goal>
<goal name="VC mmul.0.1" expl="VC for mmul" proved="true"> <goal name="VC mmul.1.1" expl="VC for mmul" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="10"/></proof> <proof prover="0"><result status="valid" time="0.03" steps="13"/></proof>
</goal> </goal>
<goal name="VC mmul.0.2" expl="VC for mmul" proved="true"> <goal name="VC mmul.1.2" expl="VC for mmul" proved="true">
<proof prover="2"><result status="valid" time="0.04"/></proof> <proof prover="0"><result status="valid" time="0.02" steps="12"/></proof>
</goal> </goal>
<goal name="VC mmul.0.3" expl="VC for mmul" proved="true"> <goal name="VC mmul.1.3" expl="VC for mmul" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof> <proof prover="3"><result status="valid" time="0.02"/></proof>
</goal> </goal>
<goal name="VC mmul.0.4" expl="VC for mmul" proved="true"> <goal name="VC mmul.1.4" expl="VC for mmul" proved="true">
<proof prover="0"><result status="valid" time="0.03" steps="8"/></proof> <proof prover="0"><result status="valid" time="0.03" steps="9"/></proof>
</goal> </goal>
<goal name="VC mmul.0.5" expl="VC for mmul" proved="true"> <goal name="VC mmul.1.5" expl="VC for mmul" proved="true">
<proof prover="0"><result status="valid" time="0.04" steps="9"/></proof> <proof prover="0"><result status="valid" time="0.04" steps="12"/></proof>
</goal> </goal>
<goal name="VC mmul.0.6" expl="VC for mmul" proved="true"> <goal name="VC mmul.1.6" expl="VC for mmul" proved="true">
<proof prover="0"><result status="valid" time="0.02" steps="12"/></proof> <proof prover="0"><result status="valid" time="0.03" steps="13"/></proof>
</goal> </goal>
</transf> </transf>
</goal> </goal>
<goal name="VC mmul.1" expl="postcondition" proved="true"> <goal name="VC mmul.2" expl="postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof> <proof prover="2"><result status="valid" time="0.01"/></proof>
</goal> </goal>
<goal name="VC mmul.2" expl="exceptional postcondition" proved="true"> <goal name="VC mmul.3" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof> <proof prover="2"><result status="valid" time="0.01"/></proof>
</goal> </goal>
<goal name="VC mmul.3" expl="exceptional postcondition" proved="true"> <goal name="VC mmul.4" expl="exceptional postcondition" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof> <proof prover="2"><result status="valid" time="0.01"/></proof>
</goal> </goal>
</transf> </transf>
...@@ -2438,7 +2441,7 @@ ...@@ -2438,7 +2441,7 @@
<proof prover="2"><result status="valid" time="0.10"/></proof> <proof prover="2"><result status="valid" time="0.10"/></proof>
</goal> </goal>
</theory> </theory>
<theory name="TestMP" proved="true" sum="affc07b7daa8e76697c500d698debc64"> <theory name="TestMP" sum="e261877e08f5a8ba4f1586cc3e8e3b4f">
<goal name="g" proved="true"> <goal name="g" proved="true">
<transf name="reflection_f" proved="true" arg1="mp_decision"> <transf name="reflection_f" proved="true" arg1="mp_decision">
<goal name="g.0" expl="reification check" proved="true"> <goal name="g.0" expl="reification check" proved="true">
...@@ -2514,6 +2517,22 @@ ...@@ -2514,6 +2517,22 @@
</goal> </goal>
</transf> </transf>
</goal> </goal>
<goal name="g&#39;&#39;">
<transf name="replace" arg1="c" arg2="0">
<goal name="g&#39;&#39;.0">
<transf name="replace" arg1="c" arg2="0" arg3="in" arg4="H2">
<goal name="g&#39;&#39;.0.0">
</goal>
<goal name="g&#39;&#39;.0.1" proved="true">
<proof prover="2"><result status="valid" time="0.01"/></proof>
</goal>
</transf>
</goal>
<goal name="g&#39;&#39;.1" proved="true">
<proof prover="2"><result status="valid" time="0.02"/></proof>
</goal>
</transf>
</goal>
</theory> </theory>
<theory name="TI" sum="f65ffb4d889019a8435ba0d47668c91d"> <theory name="TI" sum="f65ffb4d889019a8435ba0d47668c91d">
<goal name="g"> <goal name="g">
......
...@@ -509,14 +509,12 @@ module N ...@@ -509,14 +509,12 @@ module N
value x !i + value y !i value x !i + value y !i
by value r !i = (value r !i at StartLoop) }; by value r !i = (value r !i at StartLoop) };
c := carry; c := carry;
let ghost k = p2i !i in value_tail r !i;
i := Int32.(+) !i (Int32.of_int 1); value_tail x !i;
value_sub_tail (pelts r) r.offset (r.offset + k); value_tail y !i;
value_sub_tail (pelts x) x.offset (x.offset + k); assert { value r (!i+1) + (power radix (!i+1)) * !c =
value_sub_tail (pelts y) y.offset (y.offset + k); value x (!i+1) + value y (!i+1)
assert { value r !i + (power radix !i) * !c = (*by
value x !i + value y !i
by
value r !i + (power radix !i) * !c value r !i + (power radix !i) * !c
= value r k + (power radix k) * res = value r k + (power radix k) * res
+ (power radix !i) * !c + (power radix !i) * !c
...@@ -535,7 +533,8 @@ module N ...@@ -535,7 +533,8 @@ module N
+ value y k + (power radix k) * !ly + value y k + (power radix k) * !ly
= value x !i = value x !i
+ (value y k + (power radix k) * !ly) + (value y k + (power radix k) * !ly)
= value x !i + value y !i } = value x !i + value y !i*) };
i := Int32.(+) !i (Int32.of_int 1);
done; done;
!c !c
...@@ -571,14 +570,12 @@ module N ...@@ -571,14 +570,12 @@ module N
assert { value r !i + (power radix !i) * !c = assert { value r !i + (power radix !i) * !c =
value x !i + value y !i }; value x !i + value y !i };
c := carry; c := carry;
let ghost k = p2i !i in value_tail r !i;
i := Int32.(+) !i (Int32.of_int 1); value_tail x !i;
value_sub_tail (pelts r) r.offset (r.offset + k); value_tail y !i;
value_sub_tail (pelts x) x.offset (x.offset + k); assert { value r (!i+1) + (power radix (!i+1)) * !c =
value_sub_tail (pelts y) y.offset (y.offset + k); value x (!i+1) + value y (!i+1)
assert { value r !i + (power radix !i) * !c = (*by
value x !i + value y !i
by
value r !i + (power radix !i) * !c value r !i + (power radix !i) * !c
= value r k + (power radix k) * res = value r k + (power radix k) * res
+ (power radix !i) * !c + (power radix !i) * !c
...@@ -597,7 +594,8 @@ module N ...@@ -597,7 +594,8 @@ module N
+ value y k + (power radix k) * !ly + value y k + (power radix k) * !ly
= value x !i = value x !i
+ (value y k + (power radix k) * !ly) + (value y k + (power radix k) * !ly)
= value x !i + value y !i }; = value x !i + value y !i*) };
i := Int32.(+) !i (Int32.of_int 1);
done; done;
try try
begin while Int32.(<) !i sx do begin while Int32.(<) !i sx do
...@@ -614,13 +612,11 @@ module N ...@@ -614,13 +612,11 @@ module N
assert { value r !i + (power radix !i) * !c = assert { value r !i + (power radix !i) * !c =
value x !i + value y sy }; value x !i + value y sy };
c := carry; c := carry;
let ghost k = p2i !i in value_tail r !i;
i := Int32.(+) !i (Int32.of_int 1); value_tail x !i;
value_sub_tail (pelts r) r.offset (r.offset + k); assert { value r (!i+1) + (power radix (!i+1)) * !c =
value_sub_tail (pelts x) x.offset (x.offset + k); value x (!i+1) + value y sy
assert { value r !i + (power radix !i) * !c = (*by
value x !i + value y sy
by
value r !i + (power radix !i) * !c value r !i + (power radix !i) * !c
= value r k + (power radix k) * res = value r k + (power radix k) * res
+ (power radix !i) * !c + (power radix !i) * !c
...@@ -634,7 +630,8 @@ module N ...@@ -634,7 +630,8 @@ module N
= value x k + value y sy = value x k + value y sy
+ (power radix k) * !lx + (power radix k) * !lx
= value x !i = value x !i
+ value y sy } + value y sy*) };
i := Int32.(+) !i (Int32.of_int 1);
done; done;
assert { !i = sx } assert { !i = sx }
end end
...@@ -649,12 +646,14 @@ module N ...@@ -649,12 +646,14 @@ module N
assert { !c = 0 by !i < sx }; assert { !c = 0 by !i < sx };
lx := get_ofs x !i; lx := get_ofs x !i;
set_ofs r !i !lx; set_ofs r !i !lx;
let ghost k = p2i !i in (*assert { value r !i + (power radix !i) * !c =
i := Int32.(+) !i (Int32.of_int 1); value x !i + value y sy };*) (* false without this, cannotreduce with this *)
value_sub_tail (pelts r) r.offset (r.offset + k); value_tail r !i;
value_sub_tail (pelts x) x.offset (x.offset + k); value_tail x !i;
assert { value r !i + power radix !i * !c assert { value r !i = value x !i + value y sy }; (* true with this, should not be needed *)
= value x !i + value y sy assert { value r (!i+1) + power radix (!i+1) * !c
= value x (!i+1) + value y sy
(*
by by
value r !i + power radix !i * !c value r !i + power radix !i * !c
= value r !i = value r !i
...@@ -663,8 +662,8 @@ module N ...@@ -663,8 +662,8 @@ module N
= value x k + power radix k * !lx = value x k + power radix k * !lx
so value r k so value r k
= value r k + power radix k * !c = value r k + power radix k * !c
= value x k + value y sy = value x k + value y sy*) };
} i := Int32.(+) !i (Int32.of_int 1);
done; done;
!c !c
...@@ -697,7 +696,7 @@ module N ...@@ -697,7 +696,7 @@ module N
(pelts x)[j] = (pelts (old x))[j] } (pelts x)[j] = (pelts (old x))[j] }
label StartLoop in label StartLoop in
lx := get_ofs x !i; lx := get_ofs x !i;
assert { !lx = (pelts ox)[x.offset + !i] }; assert { !lx = (pelts ox)[ox.offset + !i] };
ly := get_ofs y !i; ly := get_ofs y !i;
let res, carry = add_with_carry !lx !ly !c in let res, carry = add_with_carry !lx !ly !c in
set_ofs x !i res; set_ofs x !i res;
...@@ -709,14 +708,12 @@ module N ...@@ -709,14 +708,12 @@ module N
= (pelts ox)[x.offset + j]}; = (pelts ox)[x.offset + j]};
assert { value x !i + (power radix !i) * !c = value ox !i + value y !i }; assert { value x !i + (power radix !i) * !c = value ox !i + value y !i };
c := carry; c := carry;
let ghost k = p2i !i in value_tail x !i;
i := Int32.(+) !i (Int32.of_int 1); value_tail ox !i;
value_sub_tail (pelts x) x.offset (x.offset + k); value_tail y !i;
value_sub_tail (pelts ox) x.offset (x.offset + k); assert { value x (!i+1) + (power radix (!i+1)) * !c =
value_sub_tail (pelts y) y.offset (y.offset + k); value ox (!i+1) + value y (!i+1)
assert { value x !i + (power radix !i) * !c = (*by value ox k + (power radix k) * !lx
value ox !i + value y !i
by value ox k + (power radix k) * !lx
= value ox !i = value ox !i
so value x !i + (power radix !i) * !c so value x !i + (power radix !i) * !c
= value x k + (power radix k) * res = value x k + (power radix k) * res
...@@ -736,7 +733,8 @@ module N ...@@ -736,7 +733,8 @@ module N
+ (value y k + (power radix k) * !ly) + (value y k + (power radix k) * !ly)
= value ox !i = value ox !i
+ (value y k + (power radix k) * !ly) + (value y k + (power radix k) * !ly)
= value ox !i + value y !i }; = value ox !i + value y !i*) };
i := Int32.(+) !i (Int32.of_int 1);
done; done;
try try
while Int32.(<) !i sx do while Int32.(<) !i sx do
...@@ -752,7 +750,7 @@ module N ...@@ -752,7 +750,7 @@ module N
(if (Limb.(=) !c limb_zero) then raise ReturnLimb limb_zero); (if (Limb.(=) !c limb_zero) then raise ReturnLimb limb_zero);
label StartLoop2 in label StartLoop2 in
lx := get_ofs x !i; lx := get_ofs x !i;
assert { !lx = (pelts ox)[x.offset + !i] }; assert { !lx = (pelts ox)[ox.offset + !i] };
let res, carry = add_with_carry !lx limb_zero !c in let res, carry = add_with_carry !lx limb_zero !c in
value_sub_update_no_change (pelts x) (x.offset + p2i !i) value_sub_update_no_change (pelts x) (x.offset + p2i !i)
(x.offset + p2i !i + 1) (x.offset + p2i !i + 1)
...@@ -760,15 +758,13 @@ module N ...@@ -760,15 +758,13 @@ module N
set_ofs x !i res; set_ofs x !i res;
assert { value x !i + (power radix !i) * !c = value ox !i + value y sy }; assert { value x !i + (power radix !i) * !c = value ox !i + value y sy };
c := carry; c := carry;
let ghost k = p2i !i in assert { forall j. !i < j < sx ->
i := Int32.(+) !i (Int32.of_int 1);
assert { forall j. !i <= j < sx ->
(pelts x)[x.offset + j] = (pelts ox) [x.offset + j] }; (pelts x)[x.offset + j] = (pelts ox) [x.offset + j] };
value_sub_tail (pelts ox) x.offset (x.offset + k); value_tail ox !i;
value_sub_tail (pelts x) x.offset (x.offset + k); value_tail x !i;
assert { value x !i + (power radix !i) * !c = assert { value x (!i+1) + (power radix (!i+1)) * !c =
value ox !i + value y sy value ox (!i+1) + value y sy
by value ox k + (power radix k) * !lx (*by value ox k + (power radix k) * !lx
= value ox !i = value ox !i
so so
value x !i + (power radix !i) * !c value x !i + (power radix !i) * !c
...@@ -784,7 +780,8 @@ module N ...@@ -784,7 +780,8 @@ module N
= value ox k + value y sy = value ox k + value y sy
+ (power radix k) * !lx + (power radix k) * !lx
= value ox !i = value ox !i
+ value y sy } + value y sy*) };
i := Int32.(+) !i (Int32.of_int 1);
done; done;
assert { !i = sx }; assert { !i = sx };
!c !c
...@@ -798,17 +795,7 @@ module N ...@@ -798,17 +795,7 @@ module N
value_sub_frame (pelts x) (pelts ox) (x.offset + p2i !i) (x.offset + p2i sx); value_sub_frame (pelts x) (pelts ox) (x.offset + p2i !i) (x.offset + p2i sx);
value_sub_concat (pelts x) x.offset (x.offset + p2i !i) (x.offset + p2i sx); value_sub_concat (pelts x) x.offset (x.offset + p2i !i) (x.offset + p2i sx);
value_sub_concat (pelts ox) x.offset (x.offset + p2i !i) (x.offset + p2i sx); value_sub_concat (pelts ox) x.offset (x.offset + p2i !i) (x.offset + p2i sx);
assert { value x sx = value (old x) sx + value y sy assert { value x sx = value (old x) sx + value y sy };
by value x sx
= value x !i
+ (power radix !i)
* value_sub (pelts ox) (x.offset + !i) (x.offset + sx)
= value ox !i
+ (power radix !i)
* value_sub (pelts ox) (x.offset + !i) (x.offset + sx)
+ value y sy
= value_sub (pelts ox) x.offset (x.offset + sx) + value y sy
= value ox sx + value y sy };
n n
end end
end end
...@@ -843,13 +830,11 @@ module N ...@@ -843,13 +830,11 @@ module N
assert { value r !i - power radix !i * !b = assert { value r !i - power radix !i * !b =
value x !i - y }; value x !i - y };
b := borrow; b := borrow;
let ghost k = p2i !i in value_tail r !i;
i := Int32.(+) !i (Int32.of_int 1); value_tail x !i;
value_sub_tail (pelts r) r.offset (r.offset + k); assert { value r (!i+1) - power radix (!i+1) * !b
value_sub_tail (pelts x) x.offset (x.offset + k); = value x (!i+1) - y
assert { value r !i - power radix !i * !b (*by
= value x !i - y
by
value r !i - power radix !i * !b value r !i - power radix !i * !b
= value r k + power radix k * res = value r k + power radix k * res
- power radix !i * !b - power radix !i * !b
...@@ -861,8 +846,9 @@ module N ...@@ -861,8 +846,9 @@ module N
= value r k - power radix k * (!b at StartLoop) = value r k - power radix k * (!b at StartLoop)
+ power radix k * !lx + power radix k * !lx
= value x k - y + power radix k * !lx = value x k - y + power radix k * !lx
= value x !i - y = value x !i - y*)
}; };
i := Int32.(+) !i (Int32.of_int 1);
done; done;
if Int32.(=) !i sz then !b if Int32.(=) !i sz then !b
else begin else begin
......
...@@ -162,7 +162,7 @@ let rec reify_term renv t rt = ...@@ -162,7 +162,7 @@ let rec reify_term renv t rt =
| _ -> t (* FIXME some cases missing *) | _ -> t (* FIXME some cases missing *)
in in
t_label ?loc:t.t_loc Slab.empty t t_label ?loc:t.t_loc Slab.empty t
in in
let t = rm t in let t = rm t in
(* remove labels to identify terms that are equal modulo labels *) (* remove labels to identify terms that are equal modulo labels *)
if Mterm.mem t renv.store if Mterm.mem t renv.store
...@@ -486,7 +486,10 @@ open Expr ...@@ -486,7 +486,10 @@ open Expr
open Ity open Ity
exception CannotReduce exception CannotReduce
exception Raised of string * string
let append l = List.fold_left (fun acc s -> acc^":"^s) "" l
type value = type value =
| Vconstr of rsymbol * field list | Vconstr of rsymbol * field list
| Vint of BigInt.t | Vint of BigInt.t
...@@ -560,20 +563,17 @@ let get_decl env mm rs = ...@@ -560,20 +563,17 @@ let get_decl env mm rs =
if debug then Format.printf "pmodule %s@." if debug then Format.printf "pmodule %s@."
(pm.Pmodule.mod_theory.Theory.th_name.id_string); (pm.Pmodule.mod_theory.Theory.th_name.id_string);
let tm = translate_module pm in let tm = translate_module pm in
if Mid.mem id tm.mod_known let pd = Mid.find id tm.mod_from.from_km in
then Mid.find id tm.mod_known match pd.pd_node with
else | PDtype l ->
let pd = Mid.find id tm.mod_from.from_km in let rec aux = function
match pd.pd_node with | [] -> raise Not_found
| PDtype l -> | d::t -> if List.mem rs d.itd_constructors then raise Constructor
let rec aux = function else if List.mem rs d.itd_fields then raise Field
| [] -> raise Not_found else aux t
| d::t -> if List.mem rs d.itd_constructors then raise Constructor in
else if List.mem rs d.itd_fields then raise Field aux l
else aux t | _ -> Mid.find id tm.mod_known
in
aux l
| _ -> raise Not_found
let builtin_progs = Hrs.create 17 let builtin_progs = Hrs.create 17
...@@ -801,6 +801,7 @@ type info = { ...@@ -801,6 +801,7 @@ type info = {
vars: value Mid.t; vars: value Mid.t;
recs: rsymbol Mrs.t; recs: rsymbol Mrs.t;
funs: decl Mrs.t; funs: decl Mrs.t;
cs: string list; (* callstack for debugging *)
} }
let print_id fmt id = fprintf fmt "%s" id.id_string let print_id fmt id = fprintf fmt "%s" id.id_string
...@@ -854,7 +855,7 @@ let rec interp_expr info (e:Mltree.expr) : value = ...@@ -854,7 +855,7 @@ let rec interp_expr info (e:Mltree.expr) : value =
raise CannotReduce) raise CannotReduce)
| Eapp (rs, le) -> begin | Eapp (rs, le) -> begin
if debug then Format.printf "Eapp %a@." Expr.print_rs rs; if debug then Format.printf "Eapp %a@." Expr.print_rs rs;
let eval_call info vl e = let eval_call info vl e rs =
if debug then Format.printf "eval params@."; if debug then Format.printf "eval params@.";
let info' = let info' =
List.fold_left2 List.fold_left2
...@@ -865,7 +866,7 @@ let rec interp_expr info (e:Mltree.expr) : value = ...@@ -865,7 +866,7 @@ let rec interp_expr info (e:Mltree.expr) : value =
then Format.printf "arg %a : %a@." print_id id print_value v; then Format.printf "arg %a : %a@." print_id id print_value v;
add_id id v info)