eyeprolog 1.6.8 → 1.6.10
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/README.md +1 -0
- 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 +2 -1
- package/src/ARCHITECTURE.md +17 -2
- package/src/charsio-host.js +0 -8
- package/src/cli.js +108 -71
- package/src/datalog-common.js +37 -0
- package/src/datalog.js +4 -27
- package/src/http-host.js +11 -54
- 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-documentation-sync.mjs +1 -1
- package/test/run-examples.mjs +6 -0
- package/test/run-proof-checking.mjs +11 -10
- package/the-art-of-eyeprolog.md +1 -1
package/README.md
CHANGED
|
@@ -96,6 +96,7 @@ npm test
|
|
|
96
96
|
The npm command list is deliberately small:
|
|
97
97
|
|
|
98
98
|
- `npm test` (or `npm run test`): run the release gate, including live upstream conformity checks (WG17 syntax among them).
|
|
99
|
+
- `npm run neumerkel`: re-fetch the upstream Neumerkel conformity sources and fail if the tracked report no longer matches them. The release gate reports that drift as a warning; this command makes it an error, so it answers "are we still current?" on its own.
|
|
99
100
|
|
|
100
101
|
Use `npm test -- --offline` for a network-free local pass (this also skips the live-discovered WG17 syntax check, since it has no offline snapshot). Focused checks remain available directly, for example `node test/run-regression.mjs docs`; see [test runners](test/README.md). The automatic version hooks rebuild generated library and book files, run the release gate, refresh and stage conformance reports, and push the release. Detailed upstream report maintenance is documented in the [conformance guide](test/conformance/README.md).
|
|
101
102
|
|
|
@@ -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, [], []).
|