You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
let op a b = if !y_ref.wpoint then widen a b else S.Dom.join a b
164
-
in
165
-
let old = !y_ref.value in
166
-
let tmp = op old d in
167
-
y_ref := { !y_ref with stable = true };
168
-
*)
164
+
OM.replace from sx (new_xy,delay,gas,narrow,set);
169
165
ifS.Dom.equal new_xy old_xy then()
170
166
else (
171
-
OM.replace from sx (new_xy,delay,gas,narrow);
172
167
let new_y = get_global_value init from in
173
168
ifS.Dom.equal new_y !y_ref.value then()
174
169
else (
175
170
y_ref := { !y_ref with value = new_y };
176
171
destabilize y
177
172
)
178
173
)
179
-
(*
180
-
if not (S.Dom.leq tmp old) then (
181
-
if tracing && not (S.Dom.is_bot old) then trace "update" "side to %a (wpx: %b) from %a: %a -> %a" S.Var.pretty_trace y (!y_ref.wpoint) S.Var.pretty_trace x S.Dom.pretty old S.Dom.pretty tmp;
182
-
y_ref := { !y_ref with value = tmp };
183
-
destabilize y;
184
-
(* make y a widening point. This will only matter for the next side _ y. *)
185
-
if tracing && not (!y_ref.wpoint) then trace "wpoint" "side adding wpoint %a" S.Var.pretty_trace y;
186
-
y_ref := { !y_ref with wpoint = true };
187
-
)
188
-
*)
189
174
190
-
anditeratex=(* ~(inner) solve in td3*)
175
+
andwrap_eqx=
176
+
matchS.system x with
177
+
|None -> S.Dom.bot ()
178
+
|Somef ->
179
+
let sigma =HM.create 10in
180
+
letadd_sigmayd=
181
+
let d =tryS.Dom.join d (HM.find sigma y) with_ -> d in
182
+
HM.replace sigma y d;
183
+
side x y d in
184
+
f (query x) add_sigma
185
+
186
+
187
+
anditeratex=(* ~(inner) solve in td3 *)
191
188
192
189
(* begining of iterate*)
193
190
let x_ref = init x in
@@ -196,7 +193,11 @@ alternatively, distinguish contribs by session number?
196
193
ifnot (!x_ref.stable) then (
197
194
x_ref := { !x_ref with stable =true };
198
195
let wp =!x_ref.wpoint in(* if x becomes a wpoint during eq, checking this will delay widening until next iterate *)
199
-
let eqd = eq x (query x) (side x) in(* d from equation/rhs *)
196
+
let eqd =
197
+
wrap_eq x in
198
+
(*
199
+
eq x (query x) (side x) in (* d from equation/rhs *)
200
+
*)
200
201
let old =!x_ref.value in(* d from older iterate *)
201
202
let wpd =(* d after widen/narrow (if wp) *)
202
203
ifnot wp then eqd
@@ -230,7 +231,7 @@ alternatively, distinguish contribs by session number?
230
231
letset_start (x,d) =
231
232
let x_ref = init x in
232
233
x_ref := { !x_ref with value = d; stable =true };
233
-
if is_global x thenHM.replace origin x { init = d; from =OM.create 10 }
234
+
if is_global x thenHM.replace origin x { init = d; from =OM.create 10; last =HM.create 10 }
0 commit comments