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
Copy file name to clipboardExpand all lines: src/domain/disjointDomain.ml
+13-2Lines changed: 13 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -184,14 +184,25 @@ sig
184
184
valmay_be_equal: elt -> elt -> bool
185
185
end
186
186
187
-
moduleProjectiveSetPairwiseMeet (E:Printable.S) (B: MayEqualSetDomain with type elt = E.t) (R: Representative with type elt = E.t): SetDomain.Swithtype elt =E.t =struct
187
+
moduleProjectiveSetPairwiseMeet (E:Lattice.S) (B: MayEqualSetDomain with type elt = E.t) (R: Representative with type elt = E.t): SetDomain.Swithtype elt =E.t =struct
188
188
includeProjectiveSet (E) (B) (R)
189
189
190
190
letmeetm1m2=
191
191
letmeet_bucketsb1b2acc=
192
192
B.fold (fune1acc ->
193
+
let r1 =R.of_elt e1 in
193
194
B.fold (fune2acc ->
194
-
ifB.may_be_equal e1 e2 then
195
+
(* If they have the same representative, we use the normal meet within this bucket *)
196
+
ifR.equal r1 (R.of_elt e2) then
197
+
try
198
+
let m =E.meet e1 e2 in
199
+
ifnot (E.is_bot m) then
200
+
add m acc
201
+
else
202
+
acc
203
+
withLattice.Uncomparable ->
204
+
failwith (GobPretty.sprintf "Elements %a and %a are in same bucket, but meet throws!"E.pretty e1 E.pretty e2)
0 commit comments