Skip to content

Commit f2891d7

Browse files
committed
add closure for the mvbdu_equal operation
1 parent 5f654b4 commit f2891d7

9 files changed

Lines changed: 144 additions & 53 deletions

core/KaSa_rep/frontend/ckappa_sig.ml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,6 +1463,18 @@ let mvbdu_is_false_for_guards parameters handler_bdu error mvbdu bdu_restriction
14631463
in
14641464
error, handler_bdu, Views_bdu.equal inter_mvbdu mvbdu_false
14651465

1466+
let mvbdu_equal_for_guards parameters handler_bdu error mvbdu1 mvbdu2
1467+
bdu_restriction =
1468+
if Views_bdu.equal mvbdu1 mvbdu2 then
1469+
error, handler_bdu, true
1470+
else (
1471+
let error, handler_bdu, mvbdu_xor =
1472+
Views_bdu.mvbdu_xor parameters handler_bdu error mvbdu1 mvbdu2
1473+
in
1474+
mvbdu_is_false_for_guards parameters handler_bdu error mvbdu_xor
1475+
bdu_restriction
1476+
)
1477+
14661478
(**Returns the bdu representation of the guard, and a bdu that maps each guard parameter of the guard to 1 or 0.
14671479
This second bdu is used to restrict the bdus that are calculated by using "or" and "not"
14681480
to valid bdus where the values of the guards can only be 0 and 1. *)

core/KaSa_rep/frontend/ckappa_sig.mli

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,17 @@ val mvbdu_is_false_for_guards :
745745
* Views_bdu.handler
746746
* bool
747747

748+
val mvbdu_equal_for_guards :
749+
Remanent_parameters_sig.parameters ->
750+
Views_bdu.handler ->
751+
Exception_without_parameter.exceptions_caught_and_uncaught ->
752+
Views_bdu.mvbdu ->
753+
Views_bdu.mvbdu ->
754+
Views_bdu.mvbdu ->
755+
Exception_without_parameter.exceptions_caught_and_uncaught
756+
* Views_bdu.handler
757+
* bool
758+
748759
val guard_to_bdu :
749760
Remanent_parameters_sig.parameters ->
750761
Exception_without_parameter.exceptions_caught_and_uncaught ->

core/KaSa_rep/reachability_analysis/agents_domain.ml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,12 @@ module Domain = struct
453453
let error, dynamic, new_mvbdu =
454454
or_mvbdu parameters error dynamic old_mvbdu bdu_guard restriction_bdu
455455
in
456-
let b = Ckappa_sig.Views_bdu.equal old_mvbdu new_mvbdu in
456+
let bdu_handler = get_mvbdu_handler dynamic in
457+
let error, bdu_handler, b =
458+
Ckappa_sig.mvbdu_equal_for_guards parameters bdu_handler error old_mvbdu
459+
new_mvbdu restriction_bdu
460+
in
461+
let dynamic = set_mvbdu_handler bdu_handler dynamic in
457462
if b then
458463
error, (dynamic, event_list)
459464
else (

core/KaSa_rep/reachability_analysis/parallel_bonds_type.ml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,11 @@ let add_value_and_event parameters error kappa_handler x value store_set
656656
Ckappa_sig.mvbdu_or_for_guards parameters bdu_handler error old_value
657657
value_mvbdu restriction_mvbdu
658658
in
659-
if Ckappa_sig.Views_bdu.equal new_value old_value then
659+
let error, bdu_handler, are_equal =
660+
Ckappa_sig.mvbdu_equal_for_guards parameters bdu_handler error new_value
661+
old_value restriction_mvbdu
662+
in
663+
if are_equal then
660664
error, (bdu_handler, store_set, store_result)
661665
else (
662666
(*check whether or not if this is a fresh value*)

core/KaSa_rep/reachability_analysis/site_across_bonds_domain.ml

Lines changed: 44 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,7 @@ module Domain = struct
934934
error, dynamic, new_mvbdu
935935

936936
let common_scan parameters error bdu_false dynamic store_value list guard_bdu
937-
=
937+
restriction_bdu =
938938
let rec scan list dynamic error precondition_bdu =
939939
match list with
940940
| [] -> error, true, dynamic, precondition_bdu
@@ -956,7 +956,13 @@ module Domain = struct
956956
build_mvbdu_range_list parameters error dynamic tuple
957957
mvbdu_value_with_guard
958958
in
959-
if Ckappa_sig.Views_bdu.equal new_mvbdu bdu_false then
959+
let bdu_handler = get_mvbdu_handler dynamic in
960+
let error, bdu_handler, are_equal =
961+
Ckappa_sig.mvbdu_equal_for_guards parameters bdu_handler error
962+
new_mvbdu bdu_false restriction_bdu
963+
in
964+
let dynamic = set_mvbdu_handler bdu_handler dynamic in
965+
if are_equal then
960966
error, false, dynamic, bdu_false
961967
else (
962968
let bdu_handler = get_mvbdu_handler dynamic in
@@ -975,7 +981,7 @@ module Domain = struct
975981
scan list dynamic error guard_bdu
976982

977983
let whether_or_not_it_has_precondition parameters error bdu_false tuple_set
978-
static dynamic precondition guard_bdu current_ws =
984+
static dynamic precondition guard_bdu current_ws restriction_bdu =
979985
let list =
980986
Site_across_bonds_domain_type.PairAgentSitesPStates_map_and_set.Set
981987
.elements tuple_set
@@ -989,6 +995,7 @@ module Domain = struct
989995
(*check if this pattern belong to the set of the patterns in the result*)
990996
let error, bool, dynamic, precondition_bdu =
991997
common_scan parameters error bdu_false dynamic store_value list guard_bdu
998+
restriction_bdu
992999
in
9931000
let error, dynamic, precondition =
9941001
update_state_of_guard_parameters parameters error dynamic precondition
@@ -1004,6 +1011,7 @@ module Domain = struct
10041011
let parameters = get_parameter static in
10051012
let error, dynamic, bdu_false = get_mvbdu_false static dynamic error in
10061013
let guard_bdus = get_guard_mvbdus static in
1014+
let restriction_bdu = get_restriction_mvbdu static in
10071015
let error, dynamic, guard_bdu =
10081016
get_bdu_guard parameters dynamic error guard_bdus rule_id
10091017
in
@@ -1016,7 +1024,7 @@ module Domain = struct
10161024
.empty store_potential_tuple_pair_lhs
10171025
in
10181026
whether_or_not_it_has_precondition parameters error bdu_false tuple_set
1019-
static dynamic precondition guard_bdu false
1027+
static dynamic precondition guard_bdu false restriction_bdu
10201028

10211029
(***************************************************************************)
10221030
(*MAY BE REACHABLE*)
@@ -1030,6 +1038,7 @@ module Domain = struct
10301038
let kappa_handler = get_kappa_handler static in
10311039
let error, dynamic, bdu_false = get_mvbdu_false static dynamic error in
10321040
let error, dynamic, bdu_true = get_mvbdu_true static dynamic error in
1041+
let restriction_bdu = get_restriction_mvbdu static in
10331042
let error, bonds_lhs =
10341043
Common_static.collect_bonds_pattern parameters error
10351044
pattern.Cckappa_sig.views pattern.Cckappa_sig.bonds
@@ -1053,7 +1062,7 @@ module Domain = struct
10531062
tuple_set
10541063
in
10551064
whether_or_not_it_has_precondition parameters error bdu_false tuple_set
1056-
static dynamic precondition bdu_true true
1065+
static dynamic precondition bdu_true true restriction_bdu
10571066

10581067
(****************************************************************)
10591068

@@ -1069,7 +1078,8 @@ module Domain = struct
10691078
(*APPLY RULE*)
10701079
(***************************************************************************)
10711080

1072-
let check_association_list parameters error bdu_false pair check dynamic =
1081+
let check_association_list parameters error bdu_false pair check dynamic
1082+
restriction_bdu =
10731083
let store_result = get_value dynamic in
10741084
let bdu_handler = get_mvbdu_handler dynamic in
10751085
let check, bdu_list =
@@ -1091,7 +1101,7 @@ module Domain = struct
10911101
in
10921102
let error, bdu_handler, bool =
10931103
Site_across_bonds_domain_type.check parameters error bdu_false bdu_handler
1094-
pair mvbdu store_result
1104+
pair mvbdu store_result restriction_bdu
10951105
in
10961106
let dynamic = set_mvbdu_handler bdu_handler dynamic in
10971107
error, dynamic, bool
@@ -1564,7 +1574,7 @@ module Domain = struct
15641574
in
15651575
let error, dynamic, unmodified_sites_ok =
15661576
check_association_list parameters error bdu_false pair check
1567-
dynamic
1577+
dynamic restriction_bdu
15681578
in
15691579
if unmodified_sites_ok then (
15701580
let error, bool, dynamic, modified_sites =
@@ -1855,7 +1865,7 @@ module Domain = struct
18551865
(*at the final result needs to check the non_relational
18561866
condition*)
18571867
Translation_in_natural_language.non_relational parameters
1858-
bdu_handler error mvbdu
1868+
bdu_handler error mvbdu restriction_bdu
18591869
else
18601870
(*other cases will by pass this test*)
18611871
error, bdu_handler, false
@@ -1999,26 +2009,30 @@ module Domain = struct
19992009
parameters error handler f store_value
20002010
in error, handler, store_value
20012011

2002-
let _map_store_value_opt parameters error handler f store_value =
2003-
match store_value with
2004-
| None -> error, handler, store_value
2005-
| Some store_value ->
2006-
let error, handler, store_value = map_store_value parameters error handler f store_value in
2007-
error, handler, Some store_value
2008-
2009-
let map_mvbdu f errors static dynamic =
2010-
let parameters = get_parameter static in
2011-
let handler = get_mvbdu_handler dynamic in
2012-
let local = get_local_dynamic_information dynamic in
2013-
let errors, handler, store_value =
2014-
map_store_value parameters errors handler f local.store_value in
2015-
(*let errors, handler, store_value_current_working_set =
2016-
map_store_value_opt parameters errors handler f local.store_value_current_working_set
2017-
in*) (* should not be impacted by Boolean parameters *)
2018-
let local = {local with store_value (*; store_value_current_working_set*)} in
2019-
let dynamic = set_local_dynamic_information local dynamic in
2020-
let dynamic= set_mvbdu_handler handler dynamic in
2021-
errors, (static, dynamic)
2022-
2012+
let _map_store_value_opt parameters error handler f store_value =
2013+
match store_value with
2014+
| None -> error, handler, store_value
2015+
| Some store_value ->
2016+
let error, handler, store_value =
2017+
map_store_value parameters error handler f store_value
2018+
in
2019+
error, handler, Some store_value
20232020

2021+
let map_mvbdu f errors static dynamic =
2022+
let parameters = get_parameter static in
2023+
let handler = get_mvbdu_handler dynamic in
2024+
let local = get_local_dynamic_information dynamic in
2025+
let errors, handler, store_value =
2026+
map_store_value parameters errors handler f local.store_value
2027+
in
2028+
(*let errors, handler, store_value_current_working_set =
2029+
map_store_value_opt parameters errors handler f local.store_value_current_working_set
2030+
in*)
2031+
(* should not be impacted by Boolean parameters *)
2032+
let local =
2033+
{ local with store_value (*; store_value_current_working_set*) }
2034+
in
2035+
let dynamic = set_local_dynamic_information local dynamic in
2036+
let dynamic = set_mvbdu_handler handler dynamic in
2037+
errors, (static, dynamic)
20242038
end

core/KaSa_rep/reachability_analysis/site_across_bonds_domain_type.ml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ let print_site_across_bonds_domain ?verbose:(_verbose = true) ?(sparse = false)
493493
if final_result then
494494
(*at the final result needs to check the non_relational condition*)
495495
Translation_in_natural_language.non_relational parameters bdu_handler
496-
error mvbdu
496+
error mvbdu restriction_bdu
497497
else
498498
(*other cases will by pass this test*)
499499
error, bdu_handler, false
@@ -595,14 +595,19 @@ let add_sites_from_tuples parameters error tuple modified_sites =
595595
(error, modified_sites)
596596
[ agent, site1; agent, site2; agent', site1'; agent', site2' ]
597597

598-
let check parameters error bdu_false bdu_handler pair mvbdu store_result =
598+
let check parameters error bdu_false bdu_handler pair mvbdu store_result
599+
restriction_bdu =
599600
let error, bdu_old =
600601
get_mvbdu_from_tuple_pair parameters error pair bdu_false store_result
601602
in
602603
let error, bdu_handler, new_bdu =
603604
Ckappa_sig.Views_bdu.mvbdu_and parameters bdu_handler error bdu_old mvbdu
604605
in
605-
if Ckappa_sig.Views_bdu.equal new_bdu bdu_false then
606+
let error, bdu_handler, is_false =
607+
Ckappa_sig.mvbdu_is_false_for_guards parameters bdu_handler error new_bdu
608+
restriction_bdu
609+
in
610+
if is_false then
606611
error, bdu_handler, false
607612
else
608613
error, bdu_handler, true
@@ -620,7 +625,11 @@ let add_link_and_check parameter error bdu_false bdu_handler kappa_handler bool
620625
(*-----------------------------------------------------------*)
621626
(*check the freshness of the pair*)
622627
(*compare mvbdu and old mvbdu*)
623-
if Ckappa_sig.Views_bdu.equal new_bdu bdu_old then
628+
let error, bdu_handler, are_equal =
629+
Ckappa_sig.mvbdu_equal_for_guards parameter bdu_handler error new_bdu
630+
bdu_old restriction_mvbdu
631+
in
632+
if are_equal then
624633
error, bool, bdu_handler, modified_sites, store_result
625634
else (
626635
(*-----------------------------------------------------------*)

0 commit comments

Comments
 (0)