eyeprolog 1.6.7 → 1.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/examples/proof/clpb-boolean-circuit.pl +3 -1
- package/examples/proof/clpb-cardinality.pl +39 -3
- package/examples/proof/clpb-feature-model.pl +8 -1
- package/examples/proof/clpb-weighted-planning.pl +3 -0
- package/examples/proof/clpz-factorial.pl +107 -0
- package/examples/proof/clpz-global-constraints.pl +139 -0
- package/examples/proof/clpz-n-queens.pl +746 -0
- package/examples/proof/clpz-resource-allocation.pl +75 -0
- package/examples/proof/clpz-sudoku-9x9.pl +1452 -0
- package/package.json +1 -1
- package/src/ARCHITECTURE.md +17 -2
- package/src/charsio-host.js +0 -8
- package/src/cli.js +125 -88
- package/src/datalog-common.js +37 -0
- package/src/datalog.js +4 -27
- package/src/explain.js +24 -3
- package/src/http-host.js +11 -54
- package/src/index.js +4 -4
- package/src/iso.js +14 -14
- package/src/parser.js +9 -6
- package/src/program-indexing.js +42 -16
- package/src/program.js +10 -30
- package/src/result-format.js +46 -9
- package/src/sockets-host.js +12 -54
- package/src/solver.js +25 -30
- package/src/term.js +25 -10
- package/src/wfs.js +4 -26
- package/src/worker-bridge.js +81 -0
- package/src/write.js +2 -0
- package/test/conformance/NEUMERKEL-LATEST.md +3 -3
- package/test/regression/cases-regression.mjs +4 -4
- package/test/run-examples.mjs +6 -0
- package/test/run-proof-checking.mjs +14 -7
- package/the-art-of-eyeprolog.md +5 -5
|
@@ -10,6 +10,7 @@ clause(1,
|
|
|
10
10
|
clause(2,
|
|
11
11
|
xor_row(row(var('X'), var('Y'), var('Z'))),
|
|
12
12
|
(xor_circuit(var('X'), var('Y'), var('Z')), labeling([var('X'), var('Y'), var('Z')]))).
|
|
13
|
+
clause(3, xor_circuit_verified(var('T')), taut(x # y =:= x * ~ y + ~ x * y, var('T'))).
|
|
13
14
|
|
|
14
15
|
step(xor_row(row(0, 0, 0)),
|
|
15
16
|
rule(2),
|
|
@@ -39,4 +40,5 @@ step(xor_row(row(1, 0, 1)),
|
|
|
39
40
|
step(xor_circuit(1, 0, 1), rule(1), ['X' = 1, 'Y' = 0, 'Z' = 1], [sat(1 =:= 1 * ~ 0 + ~ 1 * 0)]).
|
|
40
41
|
step(sat(1 =:= 1 * ~ 0 + ~ 1 * 0), builtin, [], []).
|
|
41
42
|
step(labeling([1, 0, 1]), builtin, [], []).
|
|
42
|
-
step(xor_circuit_verified(1),
|
|
43
|
+
step(xor_circuit_verified(1), rule(3), ['T' = 1], [taut(x # y =:= x * ~ y + ~ x * y, 1)]).
|
|
44
|
+
step(taut(x # y =:= x * ~ y + ~ x * y, 1), builtin, [], []).
|
|
@@ -2,6 +2,42 @@ review_quorum(selection(alice(0), bob(0), carol(1), dan(1))).
|
|
|
2
2
|
review_quorum(selection(alice(0), bob(1), carol(1), dan(0))).
|
|
3
3
|
review_quorum_count(2).
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
clause(1,
|
|
6
|
+
review_constraints(var('Alice'), var('Bob'), var('Carol'), var('Dan')),
|
|
7
|
+
sat(card([2], [var('Alice'), var('Bob'), var('Carol'), var('Dan')]) * (var('Alice') =< var('Carol')) * (var('Bob') # var('Dan')))).
|
|
8
|
+
clause(2,
|
|
9
|
+
review_quorum(selection(alice(var('Alice')), bob(var('Bob')), carol(var('Carol')), dan(var('Dan')))),
|
|
10
|
+
(review_constraints(var('Alice'), var('Bob'), var('Carol'), var('Dan')),
|
|
11
|
+
labeling([var('Alice'), var('Bob'), var('Carol'), var('Dan')]))).
|
|
12
|
+
clause(3,
|
|
13
|
+
review_quorum_count(var('Count')),
|
|
14
|
+
sat_count(card([2], [var('Alice'), var('Bob'), var('Carol'), var('Dan')]) * (var('Alice') =< var('Carol')) * (var('Bob') # var('Dan')), var('Count'))).
|
|
15
|
+
|
|
16
|
+
step(review_quorum(selection(alice(0), bob(0), carol(1), dan(1))),
|
|
17
|
+
rule(2),
|
|
18
|
+
['Alice' = 0, 'Bob' = 0, 'Carol' = 1, 'Dan' = 1],
|
|
19
|
+
[review_constraints(0, 0, 1, 1), labeling([0, 0, 1, 1])]).
|
|
20
|
+
step(review_constraints(0, 0, 1, 1),
|
|
21
|
+
rule(1),
|
|
22
|
+
['Alice' = 0, 'Bob' = 0, 'Carol' = 1, 'Dan' = 1],
|
|
23
|
+
[sat(card([2], [0, 0, 1, 1]) * (0 =< 1) * (0 # 1))]).
|
|
24
|
+
step(sat(card([2], [0, 0, 1, 1]) * (0 =< 1) * (0 # 1)), builtin, [], []).
|
|
25
|
+
step(labeling([0, 0, 1, 1]), builtin, [], []).
|
|
26
|
+
step(review_quorum(selection(alice(0), bob(1), carol(1), dan(0))),
|
|
27
|
+
rule(2),
|
|
28
|
+
['Alice' = 0, 'Bob' = 1, 'Carol' = 1, 'Dan' = 0],
|
|
29
|
+
[review_constraints(0, 1, 1, 0), labeling([0, 1, 1, 0])]).
|
|
30
|
+
step(review_constraints(0, 1, 1, 0),
|
|
31
|
+
rule(1),
|
|
32
|
+
['Alice' = 0, 'Bob' = 1, 'Carol' = 1, 'Dan' = 0],
|
|
33
|
+
[sat(card([2], [0, 1, 1, 0]) * (0 =< 1) * (1 # 0))]).
|
|
34
|
+
step(sat(card([2], [0, 1, 1, 0]) * (0 =< 1) * (1 # 0)), builtin, [], []).
|
|
35
|
+
step(labeling([0, 1, 1, 0]), builtin, [], []).
|
|
36
|
+
step(review_quorum_count(2),
|
|
37
|
+
rule(3),
|
|
38
|
+
['Count' = 2],
|
|
39
|
+
[sat_count(card([2], [Alice, Bob, Carol, Dan]) * (Alice =< Carol) * (Bob # Dan), 2)]).
|
|
40
|
+
step(sat_count(card([2], [Alice, Bob, Carol, Dan]) * (Alice =< Carol) * (Bob # Dan), 2),
|
|
41
|
+
builtin,
|
|
42
|
+
[],
|
|
43
|
+
[]).
|
|
@@ -11,6 +11,9 @@ clause(2,
|
|
|
11
11
|
feature_plan(features(cloud(var('Cloud')), edge(var('Edge')), audit(var('Audit')), encryption(var('Encryption')))),
|
|
12
12
|
(feature_constraints(var('Cloud'), var('Edge'), var('Audit'), var('Encryption')),
|
|
13
13
|
labeling([var('Cloud'), var('Edge'), var('Audit'), var('Encryption')]))).
|
|
14
|
+
clause(3,
|
|
15
|
+
feature_plan_count(var('Count')),
|
|
16
|
+
sat_count((anonymous(1) # var('Edge')) * (var('Audit') =< anonymous(2)) * (var('Edge') =< var('Audit')), var('Count'))).
|
|
14
17
|
|
|
15
18
|
step(feature_plan(features(cloud(0), edge(1), audit(1), encryption(1))),
|
|
16
19
|
rule(2),
|
|
@@ -52,4 +55,8 @@ step(feature_constraints(1, 0, 1, 1),
|
|
|
52
55
|
[sat((1 # 0) * (1 =< 1) * (0 =< 1))]).
|
|
53
56
|
step(sat((1 # 0) * (1 =< 1) * (0 =< 1)), builtin, [], []).
|
|
54
57
|
step(labeling([1, 0, 1, 1]), builtin, [], []).
|
|
55
|
-
step(feature_plan_count(4),
|
|
58
|
+
step(feature_plan_count(4),
|
|
59
|
+
rule(3),
|
|
60
|
+
['Count' = 4],
|
|
61
|
+
[sat_count((_Cloud # Edge) * (Audit =< _Encryption) * (Edge =< Audit), 4)]).
|
|
62
|
+
step(sat_count((_Cloud # Edge) * (Audit =< _Encryption) * (Edge =< Audit), 4), builtin, [], []).
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
factorial(6, 720).
|
|
2
|
+
|
|
3
|
+
clause(1, factorial(0, 1), true).
|
|
4
|
+
clause(2,
|
|
5
|
+
factorial(var('N'), var('F')),
|
|
6
|
+
((integer(var('N')) -> var('N') >= 0 + 1 ; var('Var#1') = 1, clpz:clpz_geq(var('N'), var('Var#1'))),
|
|
7
|
+
(integer(var('Previous')) -> (integer(var('N')) -> var('Previous') =:= var('N') - 1 ; var('T#2') is var('Previous'), clpz:clpz_equal(var('T#2'), var('N') - 1)) ; integer(var('N')) -> (true, var(var('Previous')) -> var('Previous') is var('N') - 1 ; var('T#2') is var('N') - 1, clpz:clpz_equal(var('Previous'), var('T#2'))) ; clpz:clpz_equal(var('Previous'), var('N') - 1)),
|
|
8
|
+
factorial(var('Previous'), var('PreviousFactorial')),
|
|
9
|
+
(integer(var('F')) -> (integer(var('N')), integer(var('PreviousFactorial')) -> var('F') =:= var('N') * var('PreviousFactorial') ; var('T#3') is var('F'), clpz:clpz_equal(var('T#3'), var('N') * var('PreviousFactorial'))) ; integer(var('N')), integer(var('PreviousFactorial')) -> (true, var(var('F')) -> var('F') is var('N') * var('PreviousFactorial') ; var('T#3') is var('N') * var('PreviousFactorial'), clpz:clpz_equal(var('F'), var('T#3'))) ; clpz:clpz_equal(var('F'), var('N') * var('PreviousFactorial'))))).
|
|
10
|
+
|
|
11
|
+
step(factorial(6, 720),
|
|
12
|
+
rule(2),
|
|
13
|
+
['N' = 6, 'F' = 720, 'Previous' = 5, 'PreviousFactorial' = 120],
|
|
14
|
+
[(integer(6) -> 6 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(6, Var_1)),
|
|
15
|
+
(integer(5) -> (integer(6) -> 5 =:= 6 - 1 ; T_2 is 5, clpz:clpz_equal(T_2, 6 - 1)) ; integer(6) -> (true, var(5) -> 5 is 6 - 1 ; T_2 is 6 - 1, clpz:clpz_equal(5, T_2)) ; clpz:clpz_equal(5, 6 - 1)),
|
|
16
|
+
factorial(5, 120),
|
|
17
|
+
(integer(720) -> (integer(6), integer(120) -> 720 =:= 6 * 120 ; T_3 is 720, clpz:clpz_equal(T_3, 6 * 120)) ; integer(6), integer(120) -> (true, var(720) -> 720 is 6 * 120 ; T_3 is 6 * 120, clpz:clpz_equal(720, T_3)) ; clpz:clpz_equal(720, 6 * 120))]).
|
|
18
|
+
step((integer(6) -> 6 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(6, Var_1)), builtin, [], []).
|
|
19
|
+
step((integer(5) -> (integer(6) -> 5 =:= 6 - 1 ; T_2 is 5, clpz:clpz_equal(T_2, 6 - 1)) ; integer(6) -> (true, var(5) -> 5 is 6 - 1 ; T_2 is 6 - 1, clpz:clpz_equal(5, T_2)) ; clpz:clpz_equal(5, 6 - 1)),
|
|
20
|
+
builtin,
|
|
21
|
+
[],
|
|
22
|
+
[]).
|
|
23
|
+
step(factorial(5, 120),
|
|
24
|
+
rule(2),
|
|
25
|
+
['N' = 5, 'F' = 120, 'Previous' = 4, 'PreviousFactorial' = 24],
|
|
26
|
+
[(integer(5) -> 5 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(5, Var_1)),
|
|
27
|
+
(integer(4) -> (integer(5) -> 4 =:= 5 - 1 ; T_2 is 4, clpz:clpz_equal(T_2, 5 - 1)) ; integer(5) -> (true, var(4) -> 4 is 5 - 1 ; T_2 is 5 - 1, clpz:clpz_equal(4, T_2)) ; clpz:clpz_equal(4, 5 - 1)),
|
|
28
|
+
factorial(4, 24),
|
|
29
|
+
(integer(120) -> (integer(5), integer(24) -> 120 =:= 5 * 24 ; T_3 is 120, clpz:clpz_equal(T_3, 5 * 24)) ; integer(5), integer(24) -> (true, var(120) -> 120 is 5 * 24 ; T_3 is 5 * 24, clpz:clpz_equal(120, T_3)) ; clpz:clpz_equal(120, 5 * 24))]).
|
|
30
|
+
step((integer(5) -> 5 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(5, Var_1)), builtin, [], []).
|
|
31
|
+
step((integer(4) -> (integer(5) -> 4 =:= 5 - 1 ; T_2 is 4, clpz:clpz_equal(T_2, 5 - 1)) ; integer(5) -> (true, var(4) -> 4 is 5 - 1 ; T_2 is 5 - 1, clpz:clpz_equal(4, T_2)) ; clpz:clpz_equal(4, 5 - 1)),
|
|
32
|
+
builtin,
|
|
33
|
+
[],
|
|
34
|
+
[]).
|
|
35
|
+
step(factorial(4, 24),
|
|
36
|
+
rule(2),
|
|
37
|
+
['N' = 4, 'F' = 24, 'Previous' = 3, 'PreviousFactorial' = 6],
|
|
38
|
+
[(integer(4) -> 4 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(4, Var_1)),
|
|
39
|
+
(integer(3) -> (integer(4) -> 3 =:= 4 - 1 ; T_2 is 3, clpz:clpz_equal(T_2, 4 - 1)) ; integer(4) -> (true, var(3) -> 3 is 4 - 1 ; T_2 is 4 - 1, clpz:clpz_equal(3, T_2)) ; clpz:clpz_equal(3, 4 - 1)),
|
|
40
|
+
factorial(3, 6),
|
|
41
|
+
(integer(24) -> (integer(4), integer(6) -> 24 =:= 4 * 6 ; T_3 is 24, clpz:clpz_equal(T_3, 4 * 6)) ; integer(4), integer(6) -> (true, var(24) -> 24 is 4 * 6 ; T_3 is 4 * 6, clpz:clpz_equal(24, T_3)) ; clpz:clpz_equal(24, 4 * 6))]).
|
|
42
|
+
step((integer(4) -> 4 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(4, Var_1)), builtin, [], []).
|
|
43
|
+
step((integer(3) -> (integer(4) -> 3 =:= 4 - 1 ; T_2 is 3, clpz:clpz_equal(T_2, 4 - 1)) ; integer(4) -> (true, var(3) -> 3 is 4 - 1 ; T_2 is 4 - 1, clpz:clpz_equal(3, T_2)) ; clpz:clpz_equal(3, 4 - 1)),
|
|
44
|
+
builtin,
|
|
45
|
+
[],
|
|
46
|
+
[]).
|
|
47
|
+
step(factorial(3, 6),
|
|
48
|
+
rule(2),
|
|
49
|
+
['N' = 3, 'F' = 6, 'Previous' = 2, 'PreviousFactorial' = 2],
|
|
50
|
+
[(integer(3) -> 3 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(3, Var_1)),
|
|
51
|
+
(integer(2) -> (integer(3) -> 2 =:= 3 - 1 ; T_2 is 2, clpz:clpz_equal(T_2, 3 - 1)) ; integer(3) -> (true, var(2) -> 2 is 3 - 1 ; T_2 is 3 - 1, clpz:clpz_equal(2, T_2)) ; clpz:clpz_equal(2, 3 - 1)),
|
|
52
|
+
factorial(2, 2),
|
|
53
|
+
(integer(6) -> (integer(3), integer(2) -> 6 =:= 3 * 2 ; T_3 is 6, clpz:clpz_equal(T_3, 3 * 2)) ; integer(3), integer(2) -> (true, var(6) -> 6 is 3 * 2 ; T_3 is 3 * 2, clpz:clpz_equal(6, T_3)) ; clpz:clpz_equal(6, 3 * 2))]).
|
|
54
|
+
step((integer(3) -> 3 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(3, Var_1)), builtin, [], []).
|
|
55
|
+
step((integer(2) -> (integer(3) -> 2 =:= 3 - 1 ; T_2 is 2, clpz:clpz_equal(T_2, 3 - 1)) ; integer(3) -> (true, var(2) -> 2 is 3 - 1 ; T_2 is 3 - 1, clpz:clpz_equal(2, T_2)) ; clpz:clpz_equal(2, 3 - 1)),
|
|
56
|
+
builtin,
|
|
57
|
+
[],
|
|
58
|
+
[]).
|
|
59
|
+
step(factorial(2, 2),
|
|
60
|
+
rule(2),
|
|
61
|
+
['N' = 2, 'F' = 2, 'Previous' = 1, 'PreviousFactorial' = 1],
|
|
62
|
+
[(integer(2) -> 2 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(2, Var_1)),
|
|
63
|
+
(integer(1) -> (integer(2) -> 1 =:= 2 - 1 ; T_2 is 1, clpz:clpz_equal(T_2, 2 - 1)) ; integer(2) -> (true, var(1) -> 1 is 2 - 1 ; T_2 is 2 - 1, clpz:clpz_equal(1, T_2)) ; clpz:clpz_equal(1, 2 - 1)),
|
|
64
|
+
factorial(1, 1),
|
|
65
|
+
(integer(2) -> (integer(2), integer(1) -> 2 =:= 2 * 1 ; T_3 is 2, clpz:clpz_equal(T_3, 2 * 1)) ; integer(2), integer(1) -> (true, var(2) -> 2 is 2 * 1 ; T_3 is 2 * 1, clpz:clpz_equal(2, T_3)) ; clpz:clpz_equal(2, 2 * 1))]).
|
|
66
|
+
step((integer(2) -> 2 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(2, Var_1)), builtin, [], []).
|
|
67
|
+
step((integer(1) -> (integer(2) -> 1 =:= 2 - 1 ; T_2 is 1, clpz:clpz_equal(T_2, 2 - 1)) ; integer(2) -> (true, var(1) -> 1 is 2 - 1 ; T_2 is 2 - 1, clpz:clpz_equal(1, T_2)) ; clpz:clpz_equal(1, 2 - 1)),
|
|
68
|
+
builtin,
|
|
69
|
+
[],
|
|
70
|
+
[]).
|
|
71
|
+
step(factorial(1, 1),
|
|
72
|
+
rule(2),
|
|
73
|
+
['N' = 1, 'F' = 1, 'Previous' = 0, 'PreviousFactorial' = 1],
|
|
74
|
+
[(integer(1) -> 1 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(1, Var_1)),
|
|
75
|
+
(integer(0) -> (integer(1) -> 0 =:= 1 - 1 ; T_2 is 0, clpz:clpz_equal(T_2, 1 - 1)) ; integer(1) -> (true, var(0) -> 0 is 1 - 1 ; T_2 is 1 - 1, clpz:clpz_equal(0, T_2)) ; clpz:clpz_equal(0, 1 - 1)),
|
|
76
|
+
factorial(0, 1),
|
|
77
|
+
(integer(1) -> (integer(1), integer(1) -> 1 =:= 1 * 1 ; T_3 is 1, clpz:clpz_equal(T_3, 1 * 1)) ; integer(1), integer(1) -> (true, var(1) -> 1 is 1 * 1 ; T_3 is 1 * 1, clpz:clpz_equal(1, T_3)) ; clpz:clpz_equal(1, 1 * 1))]).
|
|
78
|
+
step((integer(1) -> 1 >= 0 + 1 ; Var_1 = 1, clpz:clpz_geq(1, Var_1)), builtin, [], []).
|
|
79
|
+
step((integer(0) -> (integer(1) -> 0 =:= 1 - 1 ; T_2 is 0, clpz:clpz_equal(T_2, 1 - 1)) ; integer(1) -> (true, var(0) -> 0 is 1 - 1 ; T_2 is 1 - 1, clpz:clpz_equal(0, T_2)) ; clpz:clpz_equal(0, 1 - 1)),
|
|
80
|
+
builtin,
|
|
81
|
+
[],
|
|
82
|
+
[]).
|
|
83
|
+
step(factorial(0, 1), fact(1), [], []).
|
|
84
|
+
step((integer(1) -> (integer(1), integer(1) -> 1 =:= 1 * 1 ; T_3 is 1, clpz:clpz_equal(T_3, 1 * 1)) ; integer(1), integer(1) -> (true, var(1) -> 1 is 1 * 1 ; T_3 is 1 * 1, clpz:clpz_equal(1, T_3)) ; clpz:clpz_equal(1, 1 * 1)),
|
|
85
|
+
builtin,
|
|
86
|
+
[],
|
|
87
|
+
[]).
|
|
88
|
+
step((integer(2) -> (integer(2), integer(1) -> 2 =:= 2 * 1 ; T_3 is 2, clpz:clpz_equal(T_3, 2 * 1)) ; integer(2), integer(1) -> (true, var(2) -> 2 is 2 * 1 ; T_3 is 2 * 1, clpz:clpz_equal(2, T_3)) ; clpz:clpz_equal(2, 2 * 1)),
|
|
89
|
+
builtin,
|
|
90
|
+
[],
|
|
91
|
+
[]).
|
|
92
|
+
step((integer(6) -> (integer(3), integer(2) -> 6 =:= 3 * 2 ; T_3 is 6, clpz:clpz_equal(T_3, 3 * 2)) ; integer(3), integer(2) -> (true, var(6) -> 6 is 3 * 2 ; T_3 is 3 * 2, clpz:clpz_equal(6, T_3)) ; clpz:clpz_equal(6, 3 * 2)),
|
|
93
|
+
builtin,
|
|
94
|
+
[],
|
|
95
|
+
[]).
|
|
96
|
+
step((integer(24) -> (integer(4), integer(6) -> 24 =:= 4 * 6 ; T_3 is 24, clpz:clpz_equal(T_3, 4 * 6)) ; integer(4), integer(6) -> (true, var(24) -> 24 is 4 * 6 ; T_3 is 4 * 6, clpz:clpz_equal(24, T_3)) ; clpz:clpz_equal(24, 4 * 6)),
|
|
97
|
+
builtin,
|
|
98
|
+
[],
|
|
99
|
+
[]).
|
|
100
|
+
step((integer(120) -> (integer(5), integer(24) -> 120 =:= 5 * 24 ; T_3 is 120, clpz:clpz_equal(T_3, 5 * 24)) ; integer(5), integer(24) -> (true, var(120) -> 120 is 5 * 24 ; T_3 is 5 * 24, clpz:clpz_equal(120, T_3)) ; clpz:clpz_equal(120, 5 * 24)),
|
|
101
|
+
builtin,
|
|
102
|
+
[],
|
|
103
|
+
[]).
|
|
104
|
+
step((integer(720) -> (integer(6), integer(120) -> 720 =:= 6 * 120 ; T_3 is 720, clpz:clpz_equal(T_3, 6 * 120)) ; integer(6), integer(120) -> (true, var(720) -> 720 is 6 * 120 ; T_3 is 6 * 120, clpz:clpz_equal(720, T_3)) ; clpz:clpz_equal(720, 6 * 120)),
|
|
105
|
+
builtin,
|
|
106
|
+
[],
|
|
107
|
+
[]).
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
advanced_clpz(table, compatible(4, 0, 2)).
|
|
2
|
+
advanced_clpz(table, compatible(4, 3, 2)).
|
|
3
|
+
advanced_clpz(schedule, starts([0, 1, 3])).
|
|
4
|
+
advanced_clpz(cardinality, assignment([1, 1, 3], 13, >)).
|
|
5
|
+
advanced_clpz(cardinality, assignment([1, 3, 1], 12, >)).
|
|
6
|
+
advanced_clpz(cardinality, assignment([3, 1, 1], 6, <)).
|
|
7
|
+
advanced_clpz(circuit, successors([2, 3, 4, 1])).
|
|
8
|
+
|
|
9
|
+
clause(1,
|
|
10
|
+
advanced_clpz(table, compatible(4, var('Y'), var('Distinct'))),
|
|
11
|
+
(tuples_in([[var('X'), var('Y')]], [[1, 2], [1, 5], [4, 0], [4, 3]]),
|
|
12
|
+
var('X') = 4,
|
|
13
|
+
nvalue(var('Distinct'), [var('X'), var('Y')]),
|
|
14
|
+
labeling([], [var('Y')]))).
|
|
15
|
+
clause(2,
|
|
16
|
+
advanced_clpz(schedule, starts([var('A'), var('B'), var('C')])),
|
|
17
|
+
([var('A'), var('B'), var('C')] ins 0..3,
|
|
18
|
+
lex_chain([[var('A'), var('B')], [var('B'), var('C')]]),
|
|
19
|
+
serialized([var('A'), var('B'), var('C')], [1, 2, 1]),
|
|
20
|
+
(integer(var('B')) -> (integer(var('A')) -> var('B') >= var('A') + 1 ; var('T#1') is var('B'), clpz:clpz_geq(var('T#1'), var('A') + 1)) ; integer(var('A')) -> var('T#1') is var('A') + 1, clpz:clpz_geq(var('B'), var('T#1')) ; clpz:clpz_geq(var('B'), var('A') + 1)),
|
|
21
|
+
(integer(var('C')) -> (integer(var('B')) -> var('C') >= var('B') + 1 ; var('T#2') is var('C'), clpz:clpz_geq(var('T#2'), var('B') + 1)) ; integer(var('B')) -> var('T#2') is var('B') + 1, clpz:clpz_geq(var('C'), var('T#2')) ; clpz:clpz_geq(var('C'), var('B') + 1)),
|
|
22
|
+
labeling([ff], [var('A'), var('B'), var('C')]))).
|
|
23
|
+
clause(3,
|
|
24
|
+
advanced_clpz(cardinality, assignment(var('Values'), var('Cost'), var('Order'))),
|
|
25
|
+
(var('Values') = [anonymous(1), anonymous(2), anonymous(3)],
|
|
26
|
+
global_cardinality(var('Values'), [1 - 2, 3 - 1], [cost(var('Cost'), [[5, 1], [2, 4], [3, 6]])]),
|
|
27
|
+
labeling([ff], var('Values')),
|
|
28
|
+
zcompare(var('Order'), var('Cost'), 10))).
|
|
29
|
+
clause(4,
|
|
30
|
+
advanced_clpz(circuit, successors(var('Values'))),
|
|
31
|
+
(var('Values') = [var('A'), var('B'), anonymous(1), anonymous(2)],
|
|
32
|
+
circuit(var('Values')),
|
|
33
|
+
(integer(var('A')) -> var('A') =:= 2 ; true, var(var('A')) -> var('A') = 2 ; var('Var#3') = 2, clpz:clpz_equal(var('A'), var('Var#3'))),
|
|
34
|
+
(integer(var('B')) -> var('B') =:= 3 ; true, var(var('B')) -> var('B') = 3 ; var('Var#4') = 3, clpz:clpz_equal(var('B'), var('Var#4'))),
|
|
35
|
+
labeling([ff], var('Values')))).
|
|
36
|
+
|
|
37
|
+
step(advanced_clpz(table, compatible(4, 0, 2)),
|
|
38
|
+
rule(1),
|
|
39
|
+
['Y' = 0, 'Distinct' = 2, 'X' = 4],
|
|
40
|
+
[tuples_in([[4, 0]], [[1, 2], [1, 5], [4, 0], [4, 3]]),
|
|
41
|
+
4 = 4,
|
|
42
|
+
nvalue(2, [4, 0]),
|
|
43
|
+
labeling([], [0])]).
|
|
44
|
+
step(tuples_in([[4, 0]], [[1, 2], [1, 5], [4, 0], [4, 3]]), builtin, [], []).
|
|
45
|
+
step(4 = 4, builtin, [], []).
|
|
46
|
+
step(nvalue(2, [4, 0]), builtin, [], []).
|
|
47
|
+
step(labeling([], [0]), builtin, [], []).
|
|
48
|
+
step(advanced_clpz(table, compatible(4, 3, 2)),
|
|
49
|
+
rule(1),
|
|
50
|
+
['Y' = 3, 'Distinct' = 2, 'X' = 4],
|
|
51
|
+
[tuples_in([[4, 3]], [[1, 2], [1, 5], [4, 0], [4, 3]]),
|
|
52
|
+
4 = 4,
|
|
53
|
+
nvalue(2, [4, 3]),
|
|
54
|
+
labeling([], [3])]).
|
|
55
|
+
step(tuples_in([[4, 3]], [[1, 2], [1, 5], [4, 0], [4, 3]]), builtin, [], []).
|
|
56
|
+
step(nvalue(2, [4, 3]), builtin, [], []).
|
|
57
|
+
step(labeling([], [3]), builtin, [], []).
|
|
58
|
+
step(advanced_clpz(schedule, starts([0, 1, 3])),
|
|
59
|
+
rule(2),
|
|
60
|
+
['A' = 0, 'B' = 1, 'C' = 3],
|
|
61
|
+
[[0, 1, 3] ins 0..3,
|
|
62
|
+
lex_chain([[0, 1], [1, 3]]),
|
|
63
|
+
serialized([0, 1, 3], [1, 2, 1]),
|
|
64
|
+
(integer(1) -> (integer(0) -> 1 >= 0 + 1 ; T_1 is 1, clpz:clpz_geq(T_1, 0 + 1)) ; integer(0) -> T_1 is 0 + 1, clpz:clpz_geq(1, T_1) ; clpz:clpz_geq(1, 0 + 1)),
|
|
65
|
+
(integer(3) -> (integer(1) -> 3 >= 1 + 1 ; T_2 is 3, clpz:clpz_geq(T_2, 1 + 1)) ; integer(1) -> T_2 is 1 + 1, clpz:clpz_geq(3, T_2) ; clpz:clpz_geq(3, 1 + 1)),
|
|
66
|
+
labeling([ff], [0, 1, 3])]).
|
|
67
|
+
step([0, 1, 3] ins 0..3, builtin, [], []).
|
|
68
|
+
step(lex_chain([[0, 1], [1, 3]]), builtin, [], []).
|
|
69
|
+
step(serialized([0, 1, 3], [1, 2, 1]), builtin, [], []).
|
|
70
|
+
step((integer(1) -> (integer(0) -> 1 >= 0 + 1 ; T_1 is 1, clpz:clpz_geq(T_1, 0 + 1)) ; integer(0) -> T_1 is 0 + 1, clpz:clpz_geq(1, T_1) ; clpz:clpz_geq(1, 0 + 1)),
|
|
71
|
+
builtin,
|
|
72
|
+
[],
|
|
73
|
+
[]).
|
|
74
|
+
step((integer(3) -> (integer(1) -> 3 >= 1 + 1 ; T_2 is 3, clpz:clpz_geq(T_2, 1 + 1)) ; integer(1) -> T_2 is 1 + 1, clpz:clpz_geq(3, T_2) ; clpz:clpz_geq(3, 1 + 1)),
|
|
75
|
+
builtin,
|
|
76
|
+
[],
|
|
77
|
+
[]).
|
|
78
|
+
step(labeling([ff], [0, 1, 3]), builtin, [], []).
|
|
79
|
+
step(advanced_clpz(cardinality, assignment([1, 1, 3], 13, >)),
|
|
80
|
+
rule(3),
|
|
81
|
+
['Values' = [1, 1, 3], 'Cost' = 13, 'Order' = (>)],
|
|
82
|
+
[[1, 1, 3] = [1, 1, 3],
|
|
83
|
+
global_cardinality([1, 1, 3], [1 - 2, 3 - 1], [cost(13, [[5, 1], [2, 4], [3, 6]])]),
|
|
84
|
+
labeling([ff], [1, 1, 3]),
|
|
85
|
+
zcompare(>, 13, 10)]).
|
|
86
|
+
step([1, 1, 3] = [1, 1, 3], builtin, [], []).
|
|
87
|
+
step(global_cardinality([1, 1, 3], [1 - 2, 3 - 1], [cost(13, [[5, 1], [2, 4], [3, 6]])]),
|
|
88
|
+
builtin,
|
|
89
|
+
[],
|
|
90
|
+
[]).
|
|
91
|
+
step(labeling([ff], [1, 1, 3]), builtin, [], []).
|
|
92
|
+
step(zcompare(>, 13, 10), builtin, [], []).
|
|
93
|
+
step(advanced_clpz(cardinality, assignment([1, 3, 1], 12, >)),
|
|
94
|
+
rule(3),
|
|
95
|
+
['Values' = [1, 3, 1], 'Cost' = 12, 'Order' = (>)],
|
|
96
|
+
[[1, 3, 1] = [1, 3, 1],
|
|
97
|
+
global_cardinality([1, 3, 1], [1 - 2, 3 - 1], [cost(12, [[5, 1], [2, 4], [3, 6]])]),
|
|
98
|
+
labeling([ff], [1, 3, 1]),
|
|
99
|
+
zcompare(>, 12, 10)]).
|
|
100
|
+
step([1, 3, 1] = [1, 3, 1], builtin, [], []).
|
|
101
|
+
step(global_cardinality([1, 3, 1], [1 - 2, 3 - 1], [cost(12, [[5, 1], [2, 4], [3, 6]])]),
|
|
102
|
+
builtin,
|
|
103
|
+
[],
|
|
104
|
+
[]).
|
|
105
|
+
step(labeling([ff], [1, 3, 1]), builtin, [], []).
|
|
106
|
+
step(zcompare(>, 12, 10), builtin, [], []).
|
|
107
|
+
step(advanced_clpz(cardinality, assignment([3, 1, 1], 6, <)),
|
|
108
|
+
rule(3),
|
|
109
|
+
['Values' = [3, 1, 1], 'Cost' = 6, 'Order' = (<)],
|
|
110
|
+
[[3, 1, 1] = [3, 1, 1],
|
|
111
|
+
global_cardinality([3, 1, 1], [1 - 2, 3 - 1], [cost(6, [[5, 1], [2, 4], [3, 6]])]),
|
|
112
|
+
labeling([ff], [3, 1, 1]),
|
|
113
|
+
zcompare(<, 6, 10)]).
|
|
114
|
+
step([3, 1, 1] = [3, 1, 1], builtin, [], []).
|
|
115
|
+
step(global_cardinality([3, 1, 1], [1 - 2, 3 - 1], [cost(6, [[5, 1], [2, 4], [3, 6]])]),
|
|
116
|
+
builtin,
|
|
117
|
+
[],
|
|
118
|
+
[]).
|
|
119
|
+
step(labeling([ff], [3, 1, 1]), builtin, [], []).
|
|
120
|
+
step(zcompare(<, 6, 10), builtin, [], []).
|
|
121
|
+
step(advanced_clpz(circuit, successors([2, 3, 4, 1])),
|
|
122
|
+
rule(4),
|
|
123
|
+
['Values' = [2, 3, 4, 1], 'A' = 2, 'B' = 3],
|
|
124
|
+
[[2, 3, 4, 1] = [2, 3, 4, 1],
|
|
125
|
+
circuit([2, 3, 4, 1]),
|
|
126
|
+
(integer(2) -> 2 =:= 2 ; true, var(2) -> 2 = 2 ; Var_3 = 2, clpz:clpz_equal(2, Var_3)),
|
|
127
|
+
(integer(3) -> 3 =:= 3 ; true, var(3) -> 3 = 3 ; Var_4 = 3, clpz:clpz_equal(3, Var_4)),
|
|
128
|
+
labeling([ff], [2, 3, 4, 1])]).
|
|
129
|
+
step([2, 3, 4, 1] = [2, 3, 4, 1], builtin, [], []).
|
|
130
|
+
step(circuit([2, 3, 4, 1]), builtin, [], []).
|
|
131
|
+
step((integer(2) -> 2 =:= 2 ; true, var(2) -> 2 = 2 ; Var_3 = 2, clpz:clpz_equal(2, Var_3)),
|
|
132
|
+
builtin,
|
|
133
|
+
[],
|
|
134
|
+
[]).
|
|
135
|
+
step((integer(3) -> 3 =:= 3 ; true, var(3) -> 3 = 3 ; Var_4 = 3, clpz:clpz_equal(3, Var_4)),
|
|
136
|
+
builtin,
|
|
137
|
+
[],
|
|
138
|
+
[]).
|
|
139
|
+
step(labeling([ff], [2, 3, 4, 1]), builtin, [], []).
|