Skip to content

Commit db52886

Browse files
author
Jérôme FERET
committed
compress Boolean variable when allocating bdds
1 parent 3f34106 commit db52886

10 files changed

Lines changed: 450 additions & 200 deletions

File tree

core/KaSa_rep/abstract_domains/mvbdu/boolean_mvbdu.ml

Lines changed: 52 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,11 @@ let init_remanent parameters error =
442442
Memo_sig.print_mvbdu;
443443
} )
444444

445+
let hack_to_separate_sites_id_from_guard_id = 1000000
446+
let boolean_predicate i = i >= hack_to_separate_sites_id_from_guard_id
447+
let leave = false
448+
let boolean_setting = Some (leave, boolean_predicate)
449+
445450
let mvbdu_allocate parameters error b c d e
446451
(old_handler :
447452
( 'a,
@@ -521,7 +526,9 @@ let memo_not =
521526
{ h with Memo_sig.data = { h.Memo_sig.data with boolean_mvbdu_not = x } })
522527

523528
let boolean_mvbdu_not parameters =
524-
Mvbdu_algebra.generic_unary (mvbdu_allocate parameters) memo_not
529+
Mvbdu_algebra.generic_unary ~boolean_setting
530+
(mvbdu_allocate parameters)
531+
memo_not
525532

526533
let memo_constant_true =
527534
Mvbdu_algebra.not_recursive_not_memoize_unary
@@ -542,21 +549,25 @@ let memo_constant_false =
542549
mvbdu_allocate
543550

544551
let boolean_mvbdu_true parameters handler =
545-
Mvbdu_algebra.generic_zeroary (mvbdu_allocate parameters) handler
546-
(fun error -> error, Mvbdu_sig.Leaf true)
552+
Mvbdu_algebra.generic_zeroary ~boolean_setting (mvbdu_allocate parameters)
553+
handler (fun error -> error, Mvbdu_sig.Leaf true)
547554

548555
let boolean_mvbdu_false parameters handler =
549-
Mvbdu_algebra.generic_zeroary (mvbdu_allocate parameters) handler
550-
(fun error -> error, Mvbdu_sig.Leaf false)
556+
Mvbdu_algebra.generic_zeroary ~boolean_setting (mvbdu_allocate parameters)
557+
handler (fun error -> error, Mvbdu_sig.Leaf false)
551558

552559
let boolean_mvbdu_constant_true parameters =
553-
Mvbdu_algebra.generic_unary (mvbdu_allocate parameters) memo_constant_true
560+
Mvbdu_algebra.generic_unary ~boolean_setting
561+
(mvbdu_allocate parameters)
562+
memo_constant_true
554563

555564
let boolean_mvbdu_constant_false parameters =
556-
Mvbdu_algebra.generic_unary (mvbdu_allocate parameters) memo_constant_false
565+
Mvbdu_algebra.generic_unary ~boolean_setting
566+
(mvbdu_allocate parameters)
567+
memo_constant_false
557568

558569
let boolean_mvbdu_and parameters =
559-
Mvbdu_algebra.generic_binary
570+
Mvbdu_algebra.generic_binary ~boolean_setting
560571
(mvbdu_allocate parameters)
561572
(build_memoize_binary
562573
(fun _parameters error ->
@@ -591,10 +602,12 @@ let memo_or =
591602
{ h with Memo_sig.data = { h.Memo_sig.data with boolean_mvbdu_or = x } })
592603

593604
let boolean_mvbdu_or parameters =
594-
Mvbdu_algebra.generic_binary (mvbdu_allocate parameters) memo_or
605+
Mvbdu_algebra.generic_binary ~boolean_setting
606+
(mvbdu_allocate parameters)
607+
memo_or
595608

596609
let boolean_mvbdu_xor parameters =
597-
Mvbdu_algebra.generic_binary
610+
Mvbdu_algebra.generic_binary ~boolean_setting
598611
(mvbdu_allocate parameters)
599612
(build_memoize_binary
600613
(fun _parameters error ->
@@ -614,7 +627,7 @@ let boolean_mvbdu_xor parameters =
614627
}))
615628

616629
let boolean_mvbdu_nand parameters =
617-
Mvbdu_algebra.generic_binary
630+
Mvbdu_algebra.generic_binary ~boolean_setting
618631
(mvbdu_allocate parameters)
619632
(build_memoize_binary
620633
(fun _parameters error ->
@@ -634,7 +647,7 @@ let boolean_mvbdu_nand parameters =
634647
}))
635648

636649
let boolean_mvbdu_equiv parameters =
637-
Mvbdu_algebra.generic_binary
650+
Mvbdu_algebra.generic_binary ~boolean_setting
638651
(mvbdu_allocate parameters)
639652
(build_memoize_binary
640653
(fun _parameters error ->
@@ -654,7 +667,7 @@ let boolean_mvbdu_equiv parameters =
654667
}))
655668

656669
let boolean_mvbdu_nor parameters =
657-
Mvbdu_algebra.generic_binary
670+
Mvbdu_algebra.generic_binary ~boolean_setting
658671
(mvbdu_allocate parameters)
659672
(build_memoize_binary
660673
(fun _parameters error ->
@@ -674,7 +687,7 @@ let boolean_mvbdu_nor parameters =
674687
}))
675688

676689
let boolean_mvbdu_imply parameters =
677-
Mvbdu_algebra.generic_binary
690+
Mvbdu_algebra.generic_binary ~boolean_setting
678691
(mvbdu_allocate parameters)
679692
(build_memoize_binary
680693
(fun _parameters error ->
@@ -701,7 +714,7 @@ let boolean_mvbdu_imply parameters =
701714
}))
702715

703716
let boolean_mvbdu_is_implied parameters =
704-
Mvbdu_algebra.generic_binary
717+
Mvbdu_algebra.generic_binary ~boolean_setting
705718
(mvbdu_allocate parameters)
706719
(build_memoize_binary
707720
(fun _parameters error ->
@@ -728,7 +741,7 @@ let boolean_mvbdu_is_implied parameters =
728741
}))
729742

730743
let boolean_mvbdu_nimply parameters =
731-
Mvbdu_algebra.generic_binary
744+
Mvbdu_algebra.generic_binary ~boolean_setting
732745
(mvbdu_allocate parameters)
733746
(build_memoize_binary
734747
(fun _parameters error ->
@@ -755,7 +768,7 @@ let boolean_mvbdu_nimply parameters =
755768
}))
756769

757770
let boolean_mvbdu_nis_implied parameters =
758-
Mvbdu_algebra.generic_binary
771+
Mvbdu_algebra.generic_binary ~boolean_setting
759772
(mvbdu_allocate parameters)
760773
(build_memoize_binary
761774
(fun _parameters error ->
@@ -783,7 +796,7 @@ let boolean_mvbdu_nis_implied parameters =
783796
}))
784797

785798
let boolean_constant_bi_true parameters =
786-
Mvbdu_algebra.generic_binary
799+
Mvbdu_algebra.generic_binary ~boolean_setting
787800
(mvbdu_allocate parameters)
788801
(Mvbdu_algebra.not_recursive_binary
789802
(fun error _ _ -> error, Mvbdu_sig.Leaf true, None)
@@ -795,7 +808,7 @@ let boolean_constant_bi_true parameters =
795808
(mvbdu_allocate parameters))
796809

797810
let boolean_constant_bi_false parameters =
798-
Mvbdu_algebra.generic_binary
811+
Mvbdu_algebra.generic_binary ~boolean_setting
799812
(mvbdu_allocate parameters)
800813
(Mvbdu_algebra.not_recursive_binary
801814
(fun error _ _ -> error, Mvbdu_sig.Leaf false, None)
@@ -807,7 +820,7 @@ let boolean_constant_bi_false parameters =
807820
(mvbdu_allocate parameters))
808821

809822
let boolean_mvbdu_fst parameters =
810-
Mvbdu_algebra.generic_binary
823+
Mvbdu_algebra.generic_binary ~boolean_setting
811824
(mvbdu_allocate parameters)
812825
(Mvbdu_algebra.not_recursive_binary
813826
(fun error x _ -> error, x.Mvbdu_sig.value, Some x)
@@ -819,7 +832,7 @@ let boolean_mvbdu_fst parameters =
819832
(mvbdu_allocate parameters))
820833

821834
let boolean_mvbdu_snd parameters =
822-
Mvbdu_algebra.generic_binary
835+
Mvbdu_algebra.generic_binary ~boolean_setting
823836
(mvbdu_allocate parameters)
824837
(Mvbdu_algebra.not_recursive_binary
825838
(fun error x y -> error, x.Mvbdu_sig.value, Some y)
@@ -831,7 +844,7 @@ let boolean_mvbdu_snd parameters =
831844
(mvbdu_allocate parameters))
832845

833846
let boolean_mvbdu_nfst parameters =
834-
Mvbdu_algebra.generic_binary
847+
Mvbdu_algebra.generic_binary ~boolean_setting
835848
(mvbdu_allocate parameters)
836849
(build_memoize_binary
837850
(fun _parameters error ->
@@ -852,7 +865,7 @@ let boolean_mvbdu_nfst parameters =
852865
}))
853866

854867
let boolean_mvbdu_nsnd parameters =
855-
Mvbdu_algebra.generic_binary
868+
Mvbdu_algebra.generic_binary ~boolean_setting
856869
(mvbdu_allocate parameters)
857870
(build_memoize_binary
858871
(fun _parameters error ->
@@ -1001,7 +1014,7 @@ let memo_keep_head_only =
10011014
Hash_1.set parameters error (Mvbdu_core.id_of_mvbdu mvbdu))
10021015

10031016
let keep_head_only parameters error handler =
1004-
Mvbdu_algebra.keep_head_only
1017+
Mvbdu_algebra.keep_head_only ~boolean_setting
10051018
(mvbdu_allocate parameters)
10061019
memo_keep_head_only boolean_mvbdu_true handler error parameters
10071020

@@ -1044,7 +1057,7 @@ let memo_keep_head_only_with_threshold =
10441057
Hash_2.set parameters error (int, Mvbdu_core.id_of_mvbdu mvbdu'))
10451058

10461059
let keep_head_only_with_threshold parameters error handler ~threshold mvbdu =
1047-
Mvbdu_algebra.keep_head_only_with_threshold
1060+
Mvbdu_algebra.keep_head_only_with_threshold ~boolean_setting
10481061
(mvbdu_allocate parameters)
10491062
memo_keep_head_only_with_threshold boolean_mvbdu_or handler error parameters
10501063
(threshold, mvbdu)
@@ -1266,7 +1279,8 @@ let gen_bin_mvbdu_list_with_threshold
12661279
~threshold mvbdu_input list_input
12671280

12681281
let redefine parameters error handler mvbdu_input list_input =
1269-
gen_bin_mvbdu_list Mvbdu_algebra.redefine
1282+
gen_bin_mvbdu_list
1283+
(Mvbdu_algebra.redefine ~boolean_setting)
12701284
(fun x -> x.Memo_sig.data.boolean_mvbdu_redefine)
12711285
(fun x h ->
12721286
{
@@ -1276,7 +1290,8 @@ let redefine parameters error handler mvbdu_input list_input =
12761290
parameters error handler mvbdu_input list_input
12771291

12781292
let redefine_range parameters error handler mvbdu_input list_input =
1279-
gen_bin_mvbdu_list Mvbdu_algebra.redefine_range
1293+
gen_bin_mvbdu_list
1294+
(Mvbdu_algebra.redefine_range ~boolean_setting)
12801295
(fun x -> x.Memo_sig.data.boolean_mvbdu_redefine_range)
12811296
(fun x h ->
12821297
{
@@ -1287,7 +1302,8 @@ let redefine_range parameters error handler mvbdu_input list_input =
12871302
parameters error handler mvbdu_input list_input
12881303

12891304
let monotonicaly_rename parameters error handler mvbdu_input list_input =
1290-
gen_bin_mvbdu_list Mvbdu_algebra.monotonicaly_rename
1305+
gen_bin_mvbdu_list
1306+
(Mvbdu_algebra.monotonicaly_rename ~boolean_setting)
12911307
(fun x -> x.Memo_sig.data.boolean_mvbdu_monotonicaly_rename)
12921308
(fun x h ->
12931309
{
@@ -1299,7 +1315,8 @@ let monotonicaly_rename parameters error handler mvbdu_input list_input =
12991315

13001316
let project_keep_only parameters error handler mvbdu_input list_input =
13011317
gen_bin_mvbdu_list
1302-
(fun a b -> Mvbdu_algebra.project_keep_only a b boolean_mvbdu_true)
1318+
(fun a b ->
1319+
Mvbdu_algebra.project_keep_only ~boolean_setting a b boolean_mvbdu_true)
13031320
(fun x -> x.Memo_sig.data.boolean_mvbdu_project_keep_only)
13041321
(fun x h ->
13051322
{
@@ -1359,7 +1376,8 @@ let project_keep_only_with_threshold parameters error handler ~threshold
13591376
'm,
13601377
'n )
13611378
Memo_sig.memoized_fun) ->
1362-
Mvbdu_algebra.project_keep_only_with_threshold a b boolean_mvbdu_true)
1379+
Mvbdu_algebra.project_keep_only_with_threshold ~boolean_setting a b
1380+
boolean_mvbdu_true)
13631381
(fun x -> x.Memo_sig.data.boolean_mvbdu_project_keep_only_with_threshold)
13641382
(fun x h ->
13651383
{
@@ -1373,7 +1391,8 @@ let project_keep_only_with_threshold parameters error handler ~threshold
13731391
parameters error handler ~threshold mvbdu_input list_input
13741392

13751393
let project_abstract_away parameters error handler mvbdu_input list_input =
1376-
gen_bin_mvbdu_list Mvbdu_algebra.project_abstract_away
1394+
gen_bin_mvbdu_list
1395+
(Mvbdu_algebra.project_abstract_away ~boolean_setting)
13771396
(fun x -> x.Memo_sig.data.boolean_mvbdu_project_abstract_away)
13781397
(fun x h ->
13791398
{
@@ -1384,7 +1403,8 @@ let project_abstract_away parameters error handler mvbdu_input list_input =
13841403
parameters error handler mvbdu_input list_input
13851404

13861405
let definitely_remove parameters error handler mvbdu_input list_input =
1387-
gen_bin_mvbdu_list Mvbdu_algebra.definitely_remove
1406+
gen_bin_mvbdu_list
1407+
(Mvbdu_algebra.definitely_remove ~boolean_setting)
13881408
(fun x -> x.Memo_sig.data.boolean_mvbdu_definitely_remove)
13891409
(fun x h ->
13901410
{

core/KaSa_rep/abstract_domains/mvbdu/boolean_mvbdu.mli

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ val test_workbench : bool
99
1010
module Mvbdu_Skeleton: Sig_Mvbdu_Skeleton*)
1111

12+
val boolean_setting : (bool * (int -> bool)) option
13+
1214
module D_mvbdu_skeleton :
1315
Dictionary.Dictionary
1416
with type key = int
@@ -748,3 +750,5 @@ val print_boolean_mvbdu :
748750
Exception_without_parameter.exceptions_caught_and_uncaught ->
749751
bool Mvbdu_sig.mvbdu ->
750752
Exception_without_parameter.exceptions_caught_and_uncaught
753+
754+
val hack_to_separate_sites_id_from_guard_id : int

0 commit comments

Comments
 (0)