diff --git a/LGPL/chr/Benchmarks/benches.pl b/LGPL/chr/Benchmarks/benches.pl deleted file mode 100644 index 6bc506539..000000000 --- a/LGPL/chr/Benchmarks/benches.pl +++ /dev/null @@ -1,25 +0,0 @@ -benches :- - bench(B), - atom_concat(B, '.chr', File), - style_check(-singleton), - abolish(main,0), - abolish(main,1), - load_files(File,[silent(true)]), -% (main;main;main;main), - main, - fail. -benches. - -bench(bool). -bench(fib). -bench(fibonacci). -bench(leq). -bench(primes). -bench(ta). -bench(wfs). -bench(zebra). - -prolog:cputime(Time) :- - statistics(runtime, [_,Time]). - -:- benches. diff --git a/LGPL/chr/Benchmarks/bool.chr b/LGPL/chr/Benchmarks/bool.chr deleted file mode 100644 index c9e61d7b0..000000000 --- a/LGPL/chr/Benchmarks/bool.chr +++ /dev/null @@ -1,323 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Thom Fruehwirth ECRC 1991-1993 -%% 910528 started boolean,and,or constraints -%% 910904 added xor,neg constraints -%% 911120 added imp constraint -%% 931110 ported to new release -%% 931111 added card constraint -%% 961107 Christian Holzbaur, SICStus mods -%% -%% ported to hProlog by Tom Schrijvers June 2003 - - -:- module(bool,[main/0,main/1]). - -:- use_module( library(chr)). - -:- use_module(library(lists)). - -:- chr_constraint boolean/1, and/3, or/3, xor/3, neg/2, imp/2, labeling/0, card/4. - - -boolean(0) <=> true. -boolean(1) <=> true. - -labeling, boolean(A)#Pc <=> -( A=0 ; A=1), -labeling -pragma passive(Pc). - - -%% and/3 specification -%%and(0,0,0). -%%and(0,1,0). -%%and(1,0,0). -%%and(1,1,1). - -and(0,X,Y) <=> Y=0. -and(X,0,Y) <=> Y=0. -and(1,X,Y) <=> Y=X. -and(X,1,Y) <=> Y=X. -and(X,Y,1) <=> X=1,Y=1. -and(X,X,Z) <=> X=Z. -%%and(X,Y,X) <=> imp(X,Y). -%%and(X,Y,Y) <=> imp(Y,X). -and(X,Y,A) \ and(X,Y,B) <=> A=B. -and(X,Y,A) \ and(Y,X,B) <=> A=B. - -labeling, and(A,B,C)#Pc <=> -label_and(A,B,C), -labeling -pragma passive(Pc). - -label_and(0,X,0). -label_and(1,X,X). - - -%% or/3 specification -%%or(0,0,0). -%%or(0,1,1). -%%or(1,0,1). -%%or(1,1,1). - -or(0,X,Y) <=> Y=X. -or(X,0,Y) <=> Y=X. -or(X,Y,0) <=> X=0,Y=0. -or(1,X,Y) <=> Y=1. -or(X,1,Y) <=> Y=1. -or(X,X,Z) <=> X=Z. -%%or(X,Y,X) <=> imp(Y,X). -%%or(X,Y,Y) <=> imp(X,Y). -or(X,Y,A) \ or(X,Y,B) <=> A=B. -or(X,Y,A) \ or(Y,X,B) <=> A=B. - -labeling, or(A,B,C)#Pc <=> -label_or(A,B,C), -labeling -pragma passive(Pc). - -label_or(0,X,X). -label_or(1,X,1). - - -%% xor/3 specification -%%xor(0,0,0). -%%xor(0,1,1). -%%xor(1,0,1). -%%xor(1,1,0). - -xor(0,X,Y) <=> X=Y. -xor(X,0,Y) <=> X=Y. -xor(X,Y,0) <=> X=Y. -xor(1,X,Y) <=> neg(X,Y). -xor(X,1,Y) <=> neg(X,Y). -xor(X,Y,1) <=> neg(X,Y). -xor(X,X,Y) <=> Y=0. -xor(X,Y,X) <=> Y=0. -xor(Y,X,X) <=> Y=0. -xor(X,Y,A) \ xor(X,Y,B) <=> A=B. -xor(X,Y,A) \ xor(Y,X,B) <=> A=B. - -labeling, xor(A,B,C)#Pc <=> -label_xor(A,B,C), -labeling -pragma passive(Pc). - -label_xor(0,X,X). -label_xor(1,X,Y):- neg(X,Y). - - -%% neg/2 specification -%%neg(0,1). -%%neg(1,0). - -neg(0,X) <=> X=1. -neg(X,0) <=> X=1. -neg(1,X) <=> X=0. -neg(X,1) <=> X=0. -neg(X,X) <=> fail. -neg(X,Y) \ neg(Y,Z) <=> X=Z. -neg(X,Y) \ neg(Z,Y) <=> X=Z. -neg(Y,X) \ neg(Y,Z) <=> X=Z. -%% Interaction with other boolean constraints -neg(X,Y) \ and(X,Y,Z) <=> Z=0. -neg(Y,X) \ and(X,Y,Z) <=> Z=0. -neg(X,Z) , and(X,Y,Z) <=> X=1,Y=0,Z=0. -neg(Z,X) , and(X,Y,Z) <=> X=1,Y=0,Z=0. -neg(Y,Z) , and(X,Y,Z) <=> X=0,Y=1,Z=0. -neg(Z,Y) , and(X,Y,Z) <=> X=0,Y=1,Z=0. -neg(X,Y) \ or(X,Y,Z) <=> Z=1. -neg(Y,X) \ or(X,Y,Z) <=> Z=1. -neg(X,Z) , or(X,Y,Z) <=> X=0,Y=1,Z=1. -neg(Z,X) , or(X,Y,Z) <=> X=0,Y=1,Z=1. -neg(Y,Z) , or(X,Y,Z) <=> X=1,Y=0,Z=1. -neg(Z,Y) , or(X,Y,Z) <=> X=1,Y=0,Z=1. -neg(X,Y) \ xor(X,Y,Z) <=> Z=1. -neg(Y,X) \ xor(X,Y,Z) <=> Z=1. -neg(X,Z) \ xor(X,Y,Z) <=> Y=1. -neg(Z,X) \ xor(X,Y,Z) <=> Y=1. -neg(Y,Z) \ xor(X,Y,Z) <=> X=1. -neg(Z,Y) \ xor(X,Y,Z) <=> X=1. -neg(X,Y) , imp(X,Y) <=> X=0,Y=1. -neg(Y,X) , imp(X,Y) <=> X=0,Y=1. - -labeling, neg(A,B)#Pc <=> -label_neg(A,B), -labeling -pragma passive(Pc). - -label_neg(0,1). -label_neg(1,0). - - -%% imp/2 specification (implication) -%%imp(0,0). -%%imp(0,1). -%%imp(1,1). - -imp(0,X) <=> true. -imp(X,0) <=> X=0. -imp(1,X) <=> X=1. -imp(X,1) <=> true. -imp(X,X) <=> true. -imp(X,Y),imp(Y,X) <=> X=Y. - -labeling, imp(A,B)#Pc <=> -label_imp(A,B), -labeling -pragma passive(Pc). - -label_imp(0,X). -label_imp(1,1). - - - -%% Boolean cardinality operator -%% card(A,B,L,N) constrains list L of length N to have between A and B 1s - - -card(A,B,L):- - length(L,N), - A= A=<0,N= set_to_ones(L). % positive satisfaction -neg_sat @ card(A,0,L,N) <=> set_to_zeros(L). % negative satisfaction -pos_red @ card(A,B,L,N) <=> b_delete(X,L,L1),X==1 | % positive reduction -A1 is A-1, B1 is B-1, N1 is N-1, -card(A1,B1,L1,N1). -neg_red @ card(A,B,L,N) <=> b_delete(X,L,L1),X==0 | % negative reduction -N1 is N-1, -card(A,B,L1,N1). -%% special cases with two variables -card2nand @ card(0,1,[X,Y],2) <=> and(X,Y,0). -card2neg @ card(1,1,[X,Y],2) <=> neg(X,Y). -card2or @ card(1,2,[X,Y],2) <=> or(X,Y,1). - -b_delete( X, [X|L], L). -b_delete( Y, [X|Xs], [X|Xt]) :- - b_delete( Y, Xs, Xt). - -labeling, card(A,B,L,N)#Pc <=> -label_card(A,B,L,N), -labeling -pragma passive(Pc). - -label_card(A,B,[],0):- A=<0,0= B), C) :- !, - solve_bool(A,A1), - solve_bool(B,B1), - imp(A1,B1),C=1. -solve_bool(A = B, C) :- !, - solve_bool(A,A1), - solve_bool(B,B1), - A1=B1,C=1. - -%% Labeling -label_bool([]). -label_bool([X|L]) :- - ( X=0;X=1), - label_bool(L). - -/* % no write macros in SICStus and hProlog - -bool_portray(and(A,B,C),Out):- !, Out = (A*B = C). -bool_portray(or(A,B,C),Out):- !, Out = (A+B = C). -bool_portray(xor(A,B,C),Out):- !, Out = (A#B = C). -bool_portray(neg(A,B),Out):- !, Out = (A= not(B)). -bool_portray(imp(A,B),Out):- !, Out = (A -> B). -bool_portray(card(A,B,L,N),Out):- !, Out = card(A,B,L). - -:- define_macro(type(compound),bool_portray/2,[write]). -*/ - -/* end of handler bool */ - -half_adder(X,Y,S,C) :- - xor(X,Y,S), - and(X,Y,C). - -full_adder(X,Y,Ci,S,Co) :- - half_adder(X,Y,S1,Co1), - half_adder(Ci,S1,S,Co2), - or(Co1,Co2,Co). - -main :- - main(60000). - -main(N) :- - cputime(X), - adder(N), - cputime(Now), - Time is Now - X, - write(bench(bool, N, Time, 0, hprolog)),write('.'),nl. - -adder(N) :- - length(Ys,N), - add(N,Ys). - -add(N,[Y|Ys]) :- - half_adder(1,Y,0,C), - add0(Ys,C). - -add0([],1). -add0([Y|Ys],C) :- - full_adder(0,Y,C,1,NC), - add1(Ys,NC). - -add1([],0). -add1([Y|Ys],C) :- - full_adder(1,Y,C,0,NC), - add0(Ys,NC). - -%cputime(Time) :- -% statistics(runtime, [_,Time]). diff --git a/LGPL/chr/Benchmarks/fib.chr b/LGPL/chr/Benchmarks/fib.chr deleted file mode 100644 index 071599a3c..000000000 --- a/LGPL/chr/Benchmarks/fib.chr +++ /dev/null @@ -1,34 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% 991202 Slim Abdennadher, LMU -%% -%% ported to hProlog by Tom Schrijvers - -:- module(fib,[main/0,main/1]). - -:- use_module(library(chr)). - -:- chr_constraint fib/2. - -%% fib(N,M) is true if M is the Nth Fibonacci number. - -%% Top-down Evaluation with Tabulation - -fib(N,M1), fib(N,M2) <=> M1 = M2, fib(N,M1). - -fib(0,M) ==> M = 1. - -fib(1,M) ==> M = 1. - -fib(N,M) ==> N > 1 | N1 is N-1, fib(N1,M1), N2 is N-2, fib(N2,M2), M is M1 + M2. - -main :- - main(22). - -main(N):- - cputime(X), - fib(N,_), - cputime( Now), - Time is Now-X, - write(bench(fib ,N,Time, 0, hprolog)),write('.'), nl. - diff --git a/LGPL/chr/Benchmarks/fibonacci.chr b/LGPL/chr/Benchmarks/fibonacci.chr deleted file mode 100644 index 837f78046..000000000 --- a/LGPL/chr/Benchmarks/fibonacci.chr +++ /dev/null @@ -1,42 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% 16 June 2003 Bart Demoen, Tom Schrijvers, K.U.Leuven -%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- module(fibonacci,[main/0,main/1]). - -:- use_module(library(chr)). - -:- chr_constraint fibonacci/2. - -%% fibonacci(N,M) is true iff M is the Nth Fibonacci number. - -%% Top-down Evaluation with effective Tabulation -%% Contrary to the version in the SICStus manual, this one does "true" -%% tabulation - -fibonacci(N,M1) # ID \ fibonacci(N,M2) <=> var(M2) | M1 = M2 pragma passive(ID). - -fibonacci(0,M) ==> M = 1. - -fibonacci(1,M) ==> M = 1. - -fibonacci(N,M) ==> - N > 1 | - N1 is N-1, - fibonacci(N1,M1), - N2 is N-2, - fibonacci(N2,M2), - M is M1 + M2. - -main :- - main(2000). - -main(N):- - cputime(X), - fibonacci(N,_), - cputime( Now), - Time is Now-X, - write(bench(fibonacci ,N,Time, 0, hprolog)),write('.'), nl. - diff --git a/LGPL/chr/Benchmarks/fulladder.chr b/LGPL/chr/Benchmarks/fulladder.chr deleted file mode 100644 index 65ba65c42..000000000 --- a/LGPL/chr/Benchmarks/fulladder.chr +++ /dev/null @@ -1,138 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Thom Fruehwirth ECRC 1991-1993 -%% 910528 started boolean,and,or constraints -%% 910904 added xor,neg constraints -%% 911120 added imp constraint -%% 931110 ported to new release -%% 931111 added card constraint -%% 961107 Christian Holzbaur, SICStus mods -%% -%% ported to hProlog by Tom Schrijvers June 2003 - - -:- module(fulladder,[main/0,main/1]). - -:- chr_constraint and/3, or/3, xor/3, neg/2. - -:- use_module(library(lists)). - -%% and/3 specification -%%and(0,0,0). -%%and(0,1,0). -%%and(1,0,0). -%%and(1,1,1). - -and(0,X,Y) <=> Y=0. -and(X,0,Y) <=> Y=0. -and(1,X,Y) <=> Y=X. -and(X,1,Y) <=> Y=X. -and(X,Y,1) <=> X=1,Y=1. -and(X,X,Z) <=> X=Z. -and(X,Y,A) \ and(X,Y,B) <=> A=B, chr_dummy. -and(X,Y,A) \ and(Y,X,B) <=> A=B, chr_dummy. - -%% or/3 specification -%%or(0,0,0). -%%or(0,1,1). -%%or(1,0,1). -%%or(1,1,1). - -or(0,X,Y) <=> Y=X. -or(X,0,Y) <=> Y=X. -or(X,Y,0) <=> X=0,Y=0. -or(1,X,Y) <=> Y=1. -or(X,1,Y) <=> Y=1. -or(X,X,Z) <=> X=Z. -or(X,Y,A) \ or(X,Y,B) <=> A=B, chr_dummy. -or(X,Y,A) \ or(Y,X,B) <=> A=B, chr_dummy. - -%% xor/3 specification -%%xor(0,0,0). -%%xor(0,1,1). -%%xor(1,0,1). -%%xor(1,1,0). - -xor(0,X,Y) <=> X=Y. -xor(X,0,Y) <=> X=Y. -xor(X,Y,0) <=> X=Y. -xor(1,X,Y) <=> neg(X,Y). -xor(X,1,Y) <=> neg(X,Y). -xor(X,Y,1) <=> neg(X,Y). -xor(X,X,Y) <=> Y=0. -xor(X,Y,X) <=> Y=0. -xor(Y,X,X) <=> Y=0. -xor(X,Y,A) \ xor(X,Y,B) <=> A=B, chr_dummy. -xor(X,Y,A) \ xor(Y,X,B) <=> A=B, chr_dummy. - -%% neg/2 specification -%%neg(0,1). -%%neg(1,0). - -neg(0,X) <=> X=1. -neg(X,0) <=> X=1. -neg(1,X) <=> X=0. -neg(X,1) <=> X=0. -neg(X,X) <=> fail. -neg(X,Y) \ neg(Y,Z) <=> X=Z, chr_dummy. -neg(X,Y) \ neg(Z,Y) <=> X=Z, chr_dummy. -neg(Y,X) \ neg(Y,Z) <=> X=Z, chr_dummy. -%% Interaction with other boolean constraints -neg(X,Y) \ and(X,Y,Z) <=> Z=0, chr_dummy. -neg(Y,X) \ and(X,Y,Z) <=> Z=0, chr_dummy. -neg(X,Z) , and(X,Y,Z) <=> X=1,Y=0,Z=0. -neg(Z,X) , and(X,Y,Z) <=> X=1,Y=0,Z=0. -neg(Y,Z) , and(X,Y,Z) <=> X=0,Y=1,Z=0. -neg(Z,Y) , and(X,Y,Z) <=> X=0,Y=1,Z=0. -neg(X,Y) \ or(X,Y,Z) <=> Z=1, chr_dummy. -neg(Y,X) \ or(X,Y,Z) <=> Z=1, chr_dummy. -neg(X,Z) , or(X,Y,Z) <=> X=0,Y=1,Z=1. -neg(Z,X) , or(X,Y,Z) <=> X=0,Y=1,Z=1. -neg(Y,Z) , or(X,Y,Z) <=> X=1,Y=0,Z=1. -neg(Z,Y) , or(X,Y,Z) <=> X=1,Y=0,Z=1. -neg(X,Y) \ xor(X,Y,Z) <=> Z=1, chr_dummy. -neg(Y,X) \ xor(X,Y,Z) <=> Z=1, chr_dummy. -neg(X,Z) \ xor(X,Y,Z) <=> Y=1, chr_dummy. -neg(Z,X) \ xor(X,Y,Z) <=> Y=1, chr_dummy. -neg(Y,Z) \ xor(X,Y,Z) <=> X=1, chr_dummy. -neg(Z,Y) \ xor(X,Y,Z) <=> X=1, chr_dummy. - -/* end of handler bool */ - -half_adder(X,Y,S,C) :- - xor(X,Y,S), - and(X,Y,C). - -full_adder(X,Y,Ci,S,Co) :- - half_adder(X,Y,S1,Co1), - half_adder(Ci,S1,S,Co2), - or(Co1,Co2,Co). - -main :- - main(6000). - -main(N) :- - cputime(X), - adder(N), - cputime(Now), - Time is Now - X, - write(bench(bool ,N,Time,0,hprolog)),write('.'),nl. - -adder(N) :- - length(Ys,N), - add(N,Ys). - -add(N,[Y|Ys]) :- - half_adder(1,Y,0,C), - add0(Ys,C). - -add0([],1). -add0([Y|Ys],C) :- - full_adder(0,Y,C,1,NC), - add1(Ys,NC). - -add1([],0). -add1([Y|Ys],C) :- - full_adder(1,Y,C,0,NC), - add0(Ys,NC). - diff --git a/LGPL/chr/Benchmarks/leq.chr b/LGPL/chr/Benchmarks/leq.chr deleted file mode 100644 index c69fddcb3..000000000 --- a/LGPL/chr/Benchmarks/leq.chr +++ /dev/null @@ -1,34 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% simple constraint solver for inequalities between variables -%% thom fruehwirth ECRC 950519, LMU 980207, 980311 -%% -%% ported to hProlog by Tom Schrijvers - -:- module(leq,[main/0,main/1]). - -:- use_module(library(chr)). - -:- chr_constraint leq/2. -reflexivity @ leq(X,X) <=> true. -antisymmetry @ leq(X,Y), leq(Y,X) <=> X = Y. -idempotence @ leq(X,Y) \ leq(X,Y) <=> true. -transitivity @ leq(X,Y), leq(Y,Z) ==> leq(X,Z). - -main :- - main(60). - -main(N):- - cputime(X), - length(L,N), - genleq(L,Last), - L=[First|_], - leq(Last,First), - cputime( Now), - Time is Now-X, - write(bench(leq ,N,Time,0,hprolog)), write('.'),nl. - -genleq([Last],Last) :- ! . -genleq([X,Y|Xs],Last):- - leq(X,Y), - genleq([Y|Xs],Last). diff --git a/LGPL/chr/Benchmarks/primes.chr b/LGPL/chr/Benchmarks/primes.chr deleted file mode 100644 index b1660c6b7..000000000 --- a/LGPL/chr/Benchmarks/primes.chr +++ /dev/null @@ -1,30 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Sieve of eratosthenes to compute primes -%% thom fruehwirth 920218-20, 980311 -%% christian holzbaur 980207 for Sicstus CHR -%% -%% ported to hProlog by Tom Schrijvers - -:- module(primes,[main/0,main/1]). - -:- use_module(library(chr)). - -:- chr_constraint candidate/1. -:- chr_constraint prime/1. - -candidate(1) <=> true. -candidate(N) <=> primes:prime(N), N1 is N - 1, primes:candidate(N1). - -absorb @ prime(Y) \ prime(X) <=> 0 =:= X mod Y | true. - -main :- - main(2500). - -main(N):- - cputime(X), - candidate(N), - cputime( Now), - Time is Now-X, - write(bench(primes ,N,Time,0,hprolog)), write('.'),nl. - diff --git a/LGPL/chr/Benchmarks/ta.chr b/LGPL/chr/Benchmarks/ta.chr deleted file mode 100644 index e90fa8721..000000000 --- a/LGPL/chr/Benchmarks/ta.chr +++ /dev/null @@ -1,386 +0,0 @@ -:- module(ta,[main/0,main/1]). - -:- use_module(library(chr)). -:- use_module(library(lists)). - -/* - - Timed automaton => Constraints - - => - - X := N geq(X,N) - --------> - - X =< N leq(X,N) - --------> - - X >= N geq(X,N) - --------> - - -n > 1, 1 ------> v fincl(Xv,X1), - ... / ... - n ----/ fincl(Xv,Xn), - fub_init(Xv,[]) - -n >= 1, v ------> 1 bincl(Xv,X1), - \ ... ... - \----> n bincl(Xv,X1), - bub_init(Xv,[]) -*/ - -%% handler ta. - -:- chr_constraint - - fincl/2, % expresses that clock 1 includes clock 2 (union) - % in the sense that clock 2 is forward of clock 1 - - bincl/2, % expresses that clock 1 includes clock 2 (union) - % in the sense that clock 1 is forward of clock 2 - - leq/2, % expresses that clock 1 =< number 2 - - geq/2, % expresses that clock 1 >= number 2 - - fub_init/2, % collects the inital upper bounds - % from incoming arrows for clock 1 in list 2 - - fub/2, % collects the upper bounds for clock 1 - % from incoming arrows in list 2 - - flb_init/2, % collects the inital lower bounds - % from incoming arrows for clock 1 in list 2 - - flb/2, % collects the lower bounds for clock 1 - % from incoming arrows in list 2 - - bub_init/2, % collects the inital upper bounds - % from backward arrows for clock 1 in list 2 - - bub/2, % collects the upper bounds for clock 1 - % from outgoing arrows in list 2 - % values of clock 1 cannot exceed all - % values of the clocks in list 2 - - blb_init/2, % collects the inital lower bounds - % from backward arrows for clock 1 in list 2 - - blb/2, % collects the lower bounds for clock 1 - % from outgoing arrows in list 2 - % not all values of clock 1 can exceed any - % values of the clocks in list 2 - - compl/1, % indicate that all incoming arrows for clock 1 - % have been registerd - - dist/3, % indicates that clock 1 - clock 2 =< number 3 - - fdist_init/3, % records initial distances for clock 1 and clock 2 from - % incoming arrows in list 3 - - fdist/3, % records distances for clock 1 and clock 2 from - % incoming arrows in list 3 - - setdist/3. % sets distance between clock 1 and clock 2, where - % clock 1 is reset to value 3 - -/* More Constraints: - -*/ - -leq(X,N1) \ leq(X,N2) <=> N1 =< N2 | true. - -geq(X,N1) \ geq(X,N2) <=> N2 =< N1 | true. - -dist(X,Y,D1) \ dist(X,Y,D2) <=> D1 =< D2 | true. - -dist(X,Y,D), leq(Y,MY) \ leq(X,MX1) <=> - MX2 is MY + D, MX2 < MX1 | leq(X,MX2). - -dist(X,Y,D), geq(X,MX) \ geq(Y,MY1) <=> - MY2 is MX - D, MY2 > MY1 | geq(Y,MY2). - -fincl(X,Y), leq(Y,N) \ fub_init(X,L) - <=> \+ memberchk_eq(N-Y,L) | - insert_ub(L,Y,N,NL), - fub_init(X,NL). - -fincl(X,Y), geq(Y,N) \ flb_init(X,L) - <=> \+ memberchk_eq(N-Y,L) | - insert_lb(L,Y,N,NL), - flb_init(X,NL). - -dist(X1,Y1,D), fincl(X2,X1), fincl(Y2,Y1) \ fdist_init(X2,Y2,L) - <=> - \+ memberchk_eq(D-X1,L) | - insert_ub(L,X1,D,NL), - fdist_init(X2,Y2,NL). - -bincl(X,Y), leq(Y,N) \ bub_init(X,L) - <=> - \+ memberchk_eq(N-Y,L) | - insert_ub(L,Y,N,NL), - bub_init(X,NL). - -compl(X) \ fub_init(X,L) # ID - <=> - fub(X,L), - val(L,M), - leq(X,M) - pragma passive(ID). - -compl(X) \ flb_init(X,L) # ID - <=> - flb(X,L), - val(L,M), - geq(X,M) - pragma passive(ID). - -compl(X), compl(Y) \ fdist_init(X,Y,L) # ID - <=> - fdist(X,Y,L), - val(L,D), - dist(X,Y,D) - pragma passive(ID). - -compl(X) \ bub_init(X,L) # ID - <=> - bub(X,L), - val(L,M), - leq(X,M) - pragma passive(ID). - -fincl(X,Y), leq(Y,N) \ fub(X,L) - <=> - \+ memberchk_eq(N-Y,L) | - insert_ub(L,Y,N,NL), - fub(X,NL), - val(NL,M), - leq(X,M). - -fincl(X,Y), geq(Y,N) \ flb(X,L) - <=> - \+ memberchk_eq(N-Y,L) | - insert_lb(L,Y,N,NL), - flb(X,NL), - val(NL,M), - geq(X,M). - -bincl(X,Y), leq(Y,N) \ bub(X,L) - <=> - \+ memberchk_eq(N-Y,L) | - insert_ub(L,Y,N,NL), - bub(X,NL), - val(NL,M), - leq(X,M). - -fincl(X2,X1), fincl(Y2,Y1), dist(X1,Y1,D) \ fdist(X2,Y2,L) - <=> - \+ memberchk_eq(D-X1,L) | - insert_ub(L,X1,D,NL), - fdist(X2,Y2,NL), - val(NL,MD), - dist(X2,Y2,MD). - -fincl(X,Y), leq(X,N) ==> leq(Y,N). - -fincl(X,Y), geq(X,N) ==> geq(Y,N). - -bincl(X,Y), geq(X,N) ==> geq(Y,N). - -bincl(X1,X2), bincl(Y1,Y2), dist(X1,Y1,D1) \ dist(X2,Y2,D2) <=> D1 < D2 | dist(X2,Y2,D1). - -setdist(X,Y,N), leq(Y,D1) ==> D2 is D1 - N, dist(Y,X,D2). -setdist(X,Y,N), geq(Y,D1) ==> D2 is N - D1, dist(X,Y,D2). - -val([N-_|_],N). - -insert_ub([],X,N,[N-X]). -insert_ub([M-Y|R],X,N,NL) :- - ( Y == X -> - insert_ub(R,X,N,NL) - ; M > N -> - NL = [M-Y|NR], - insert_ub(R,X,N,NR) - ; - NL = [N-X,M-Y|R] - ). - -insert_lb([],X,N,[N-X]). -insert_lb([M-Y|R],X,N,NL) :- - ( Y == X -> - insert_lb(R,X,N,NL) - ; M < N -> - NL = [M-Y|NR], - insert_lb(R,X,N,NR) - ; - NL = [N-X,M-Y|R] - ). - -couple(X,Y) :- - dist(X,Y,10000), - dist(Y,X,10000). - -giri :- - giri([x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8,x9,y9,x10,y10]). - -giri(L) :- - L = [X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5,X6,Y6,X7,Y7,X8,Y8,X9,Y9,X10,Y10], - clocks(L), - - % 1. - couple(X1,Y1), - geq(X1,0), - geq(X2,0), - dist(X1,Y1,0), - dist(Y1,X1,0), - - % 2. - couple(X2,Y2), - - fincl(X2,X1), - fincl(X2,X8), - fincl(X2,X10), - fub_init(X2,[]), - flb_init(X2,[]), - - fincl(Y2,Y1), - fincl(Y2,Y8), - fincl(Y2,Y10), - fub_init(Y2,[]), - flb_init(Y2,[]), - - bincl(X2,X3), - bincl(X2,X4), - bub_init(X2,[]), - blb_init(X2,[]), - - bincl(Y2,Y3), - bincl(Y2,Y4), - bub_init(Y2,[]), - blb_init(Y2,[]), - - fdist_init(X2,Y2,[]), - fdist_init(Y2,X2,[]), - - % 3. - couple(X3,Y3), - leq(X3,3), - - bincl(X3,X9), - bincl(X3,X5), - bub_init(X3,[]), - blb_init(X3,[]), - - bincl(Y3,Y9), - bincl(Y3,Y5), - bub_init(Y3,[]), - blb_init(Y3,[]), - - %fdist_init(X3,Y3,[]), - %fdist_init(Y3,X3,[]), - - % 4. - couple(X4,Y4), - geq(Y4,2), - leq(Y4,5), - - % 5. - couple(X5,Y5), - geq(Y5,5), - leq(Y5,10), - - % 6. - couple(X6,Y6), - - fincl(X6,X4), - fincl(X6,X5), - fub_init(X6,[]), - flb_init(X6,[]), - - fincl(Y6,Y4), - fincl(Y6,Y5), - fub_init(Y6,[]), - flb_init(Y6,[]), - - bincl(X6,X7), - bub_init(X6,[]), - - bincl(Y6,Y7), - bub_init(Y6,[]), - - fdist_init(X6,Y6,[]), - fdist_init(Y6,X6,[]), - - % 7. - couple(X7,Y7), - geq(Y7,15), - leq(Y7,15), - - % 8. - couple(X8,Y8), - geq(X8,2), - geq(Y8,2), - dist(X8,Y8,0), - dist(Y8,X8,0), - - % 9. - couple(X9,Y9), - geq(Y9,5), - leq(Y9,5), - - - % 10. - couple(X10,Y10), - geq(X10,0), - geq(Y10,0), - dist(X10,Y10,0), - dist(Y10,X10,0), - - % finish - compl(X2), - compl(Y2), - - compl(X3), - compl(Y3), - - compl(X6), - compl(Y6). - - - -clocks([]). -clocks([C|Cs]) :- - clock(C), - clocks(Cs). - -clock(X) :- - geq(X,0), - leq(X,10000). - -main :- - main(100). - -main(N) :- - cputime(T1), - loop(N), - cputime(T2), - T is T2 - T1, - write(bench(ta ,N , T,0,hprolog)),write('.'),nl. - - -loop(N) :- - ( N =< 0 -> - true - ; - ( giri, fail ; true), - M is N - 1, - loop(M) - ). - -memberchk_eq(A,[A1|_]) :- A == A1, !. -memberchk_eq(A,[_|L]) :- - memberchk_eq(A,L). - diff --git a/LGPL/chr/Benchmarks/wfs.chr b/LGPL/chr/Benchmarks/wfs.chr deleted file mode 100644 index 0f6bc2cad..000000000 --- a/LGPL/chr/Benchmarks/wfs.chr +++ /dev/null @@ -1,263 +0,0 @@ -:- module(wfs,[main/0, main/1]). - -:- use_module(library(chr)). - -:- use_module(library(lists)). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Schrijf het programma waarvan je de wellfounded semantics wil bepalen -% hieronder onder de vorm van prog/1 feiten. Let erop dat je een conjunctie -% in de body tussen haakjes zet zodat prog/1 geparsed wordt, ipv prog/n. - -/* - -prog((p :- p)). - -prog((p :- \+ p)). - - -prog((p :- (q, \+ r))). -prog((q :- (r, \+ p))). -prog((r :- (p, \+ q))). - -prog((p :- r)). -prog((r :- q)). -prog((q :- \+ q)). - -prog((p :- r)). -prog(r). - -prog((p :- p)). -prog((s :- \+ p)). -prog((y :- (s, \+ x))). -prog((x :- y)). -*/ -prog((a :- a)). -prog((b :- b)). -prog((b :- \+ a)). -prog((c :- \+ b)). -prog((c :- c)). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -:- chr_constraint true/1, false/1, undefined/1, aclause/2, pos/2, neg/2, nbulit/2, nbplit/2, nbucl/2, phase2/0, true2/1, undefined2/1, aclause2/2, pos2/2, nbplit2/2, phase1/0, witness1/0, witness2/0. - -true(At), aclause(Cl,At) \ pos(_,Cl) <=> true. - -true(At), aclause(Cl,At) \ neg(_,Cl) <=> true. - -false(At), aclause(Cl,At) \ pos(_,Cl) <=> true. - -false(At), aclause(Cl,At) \ neg(_,Cl) <=> true. - -true(At) \ nbucl(At,_) <=> true. - -true(At) \ aclause(Cl,At), nbulit(Cl,_), nbplit(Cl,_) <=> true. - -false(At) \ nbucl(At,_) <=> true. - -nbucl(At,0) <=> false(At). - -aclause(Cl,At), nbulit(Cl,0), nbplit(Cl,0) <=> true(At). - -true(At) \ pos(At,Cl), nbulit(Cl,NU), nbplit(Cl,NP) - <=> - NU1 is NU - 1, nbulit(Cl,NU1), - NP1 is NP - 1, nbplit(Cl,NP1). - -false(At) \ neg(At,Cl), nbulit(Cl,NU) - <=> - NU1 is NU - 1, nbulit(Cl,NU1). - -true(At) \ neg(At,Cl), aclause(Cl,OAt), nbulit(Cl,_), nbplit(Cl,_), nbucl(OAt,N) - <=> - N1 is N - 1, nbucl(OAt,N1). - -false(At) \ pos(At,Cl), aclause(Cl,OAt), nbulit(Cl,_), nbplit(Cl,_), nbucl(OAt,N) - <=> - N1 is N - 1, nbucl(OAt,N1). - -witness2 \ witness2 <=> true. -phase2, nbucl(At,_) ==> witness2, undefined2(At). -phase2, pos(At,Cl) ==> pos2(At,Cl). -phase2, aclause(Cl,At) ==> aclause2(Cl,At). -phase2, nbplit(Cl,N) ==> nbplit2(Cl,N). -phase2, witness2 # ID <=> phase1 pragma passive(ID). -phase2 \ nbplit2(_,_) # ID <=> true pragma passive(ID). -phase2 \ aclause2(_,_) # ID <=> true pragma passive(ID). -phase2 <=> true. - - -true2(At), aclause2(Cl,At) \ pos2(_,Cl) <=> true. -true2(At) \ undefined2(At) <=> true. -aclause2(Cl,At), nbplit2(Cl,0) <=> true2(At). -true2(At) \ pos2(At,Cl), nbplit2(Cl,NP) - <=> - NP1 is NP - 1, nbplit2(Cl,NP1). - -witness1 \ witness1 <=> true. -phase1, undefined2(At) # ID1 , aclause(Cl,At) # ID2 \ pos(_,Cl) # ID3 <=> true pragma passive(ID1), passive(ID2), passive(ID3). -phase1, undefined2(At) # ID1 , aclause(Cl,At) # ID2 \ neg(_,Cl) # ID3 <=> true pragma passive(ID1), passive(ID2), passive(ID3). -phase1, undefined2(At) # ID1 \ aclause(Cl,At) # ID2 , nbulit(Cl,_) # ID3, nbplit(Cl,_) # ID4 <=> true pragma passive(ID1), passive(ID2), passive(ID3), passive(ID4). -phase1 \ undefined2(At) # ID <=> witness1, false(At) pragma passive(ID). -phase1 \ true2(_) # ID <=> true pragma passive(ID). -phase1 \ aclause2(_,_) <=> true. -phase1 \ pos2(_,_) # ID <=> true pragma passive(ID). -phase1 \ nbplit2(_,_) # ID <=> true pragma passive(ID). -phase1, witness1 # ID <=> phase2 pragma passive(ID). -phase1 \ nbucl(At,_) # ID <=> undefined(At) pragma passive(ID). -phase1 \ pos(_,_) # ID <=> true. -phase1 \ neg(_,_) # ID <=> true pragma passive(ID). -phase1 \ aclause(_,_) # ID <=> true pragma passive(ID). -phase1 \ nbulit(_,_) # ID <=> true pragma passive(ID). -phase1 \ nbplit(_,_) # ID <=> true pragma passive(ID). -phase1 <=> true. - -/* - p :- r. - r. -*/ -program1 :- - nbucl(p,1), % aantal undefined clauses voor p - pos(r,cl1), % positief voorkomen van r in clause cl1 - aclause(cl1,p), % clause cl1 defineert p - nbulit(cl1,1), % aantal undefined literals in cl1 - nbplit(cl1,1), % aantal positieve undefined literals in cl1 - nbucl(r,1), - aclause(cl2,r), - nbulit(cl2,0), - nbplit(cl2,0). - -/* - p :- not r. - r. -*/ -program2 :- - nbucl(p,1), - neg(r,cl1), - aclause(cl1,p), - nbulit(cl1,1), - nbplit(cl1,1), - nbucl(r,1), - aclause(cl2,r), - nbulit(cl2,0), - nbplit(cl2,0). - -/* - p :- p. -*/ -program3 :- - nbucl(p,1), - pos(p,cl1), - aclause(cl1,p), - nbulit(cl1,1), - nbplit(cl1,1). - -/* - p :- not p. -*/ -program4 :- - nbucl(p,1), - neg(p,cl1), - aclause(cl1,p), - nbulit(cl1,1), - nbplit(cl1,0). - -/* - p :- q, not r. - q :- r, not p. - r :- p, not q. -*/ - -program5 :- - nbucl(p,1), - pos(p,cl3), - neg(p,cl2), - aclause(cl1,p), - nbulit(cl1,2), - nbplit(cl1,1), - nbucl(q,1), - pos(q,cl1), - neg(q,cl3), - aclause(cl2,q), - nbulit(cl2,2), - nbplit(cl2,1), - nbucl(r,1), - pos(r,cl2), - neg(r,cl1), - aclause(cl3,r), - nbulit(cl3,2), - nbplit(cl3,1). - - -main :- - main(1000). - -main(N) :- - cputime(T1), - loop(N), - cputime(T2), - T is T2 - T1, - write(bench(wfs ,N , T,0,hprolog)),write('.'),nl. - -loop(N) :- - ( N =< 0 -> - true - ; - ( prog, fail ; true), - M is N - 1, - loop(M) - ). - -prog :- - findall(Clause,wfs:prog(Clause),Clauses), - process(Clauses,1), - setof(At,B^(wfs:prog((At :- B)) ; wfs:prog(At), atom(At)),Ats), - process_atoms(Ats), - phase2. - -process([],_). -process([C|Cs],N) :- - ( C = (HAt :- B) -> - aclause(N,HAt), - conj2list(B,Literals,[]), - process_literals(Literals,N,NbULit,NbPLit), - nbulit(N,NbULit), - nbplit(N,NbPLit) - ; - C = HAt, - aclause(N,HAt), - nbulit(N,0), - nbplit(N,0) - ), - N1 is N + 1, - process(Cs,N1). - -conj2list(G,L,T) :- - ( G = (G1,G2) -> - conj2list(G1,L,T1), - conj2list(G2,T1,T) - ; - L = [G|T] - ). - -process_literals([],_,0,0). -process_literals([L|R],Cl,U,P) :- - process_literals(R,Cl,U1,P1), - ( L = (\+ At) -> - neg(At,Cl), - P = P1, - U is U1 + 1 - ; - pos(L,Cl), - P is P1 + 1, - U is U1 + 1 - ). - -process_atoms([]). -process_atoms([A|As]) :- - findall(A,wfs:prog((A :- _)),L), - length(L,N), - nbucl(A,N), - process_atoms(As). diff --git a/LGPL/chr/Benchmarks/zebra.chr b/LGPL/chr/Benchmarks/zebra.chr deleted file mode 100644 index 18e234a2e..000000000 --- a/LGPL/chr/Benchmarks/zebra.chr +++ /dev/null @@ -1,129 +0,0 @@ - -:- module(zebra,[main/0, main/1]). - -:- use_module(library(chr)). - -:- use_module(library(lists)). - -/* -1. The Englishman lives in the red house. -2. The Spaniard owns the dog. -3. Coffee is drunk in the green house. -4. The Ukrainian drinks tea. -5. The green house is immediately to the right of the ivory house. -6. The Porsche driver owns snails. -7. The Masserati is driven by the man who lives in the yellow house. -8. Milk is drunk in the middle house. -9. The Norwegian lives in the first house on the left. -10. The man who drives a Saab lives in the house next to the man - with the fox. -11. The Masserati is driven by the man in the house next to the - house where the horse is kept. -12. The Honda driver drinks orange juice. -13. The Japanese drives a Jaguar. -14. The Norwegian lives next to the blue house. -*/ - -:- chr_constraint domain/2, diff/2. - -domain(X,[]) <=> fail. -domain(X,[V]) <=> X = V. -domain(X,L1), domain(X,L2) <=> intersection(L1,L2,L3), domain(X,L3). - -diff(X,Y), domain(X,L) <=> nonvar(Y) | delete(L,Y,NL), domain(X,NL). -diff(X,Y) <=> nonvar(X), nonvar(Y) | X \== Y. - -all_different([]). -all_different([H|T]) :- - all_different(T,H), - all_different(T). - -all_different([],_). -all_different([H|T],E) :- - diff(H,E), - diff(E,H), - all_different(T,E). - -main :- - main(10). - -main(N):- - cputime(X), - test(N), - cputime( Now), - Time is Now-X, - write(bench(zebra, N,Time,0,hprolog)), write('.'),nl. - -test(N) :- - ( N > 0 -> - solve,!, - M is N - 1, - test(M) - ; - true - ). - -solve :- - [ [ ACo, AN, ACa, AD, AP ], - [ BCo, BN, BCa, BD, BP ], - [ CCo, CN, CCa, CD, CP ], - [ DCo, DN, DCa, DD, DP ], - [ ECo, EN, ECa, ED, EP ] ] = S, - domain(ACo,[red,green,ivory,yellow,blue]), - domain(BCo,[red,green,ivory,yellow,blue]), - domain(CCo,[red,green,ivory,yellow,blue]), - domain(DCo,[red,green,ivory,yellow,blue]), - domain(ECo,[red,green,ivory,yellow,blue]), - domain(AN ,[english,spanish,ukranian,norwegian,japanese]), - domain(BN ,[english,spanish,ukranian,norwegian,japanese]), - domain(CN ,[english,spanish,ukranian,norwegian,japanese]), - domain(DN ,[english,spanish,ukranian,norwegian,japanese]), - domain(EN ,[english,spanish,ukranian,norwegian,japanese]), - domain(ACa,[porsche,masserati,saab,honda,jaguar]), - domain(BCa,[porsche,masserati,saab,honda,jaguar]), - domain(CCa,[porsche,masserati,saab,honda,jaguar]), - domain(DCa,[porsche,masserati,saab,honda,jaguar]), - domain(ECa,[porsche,masserati,saab,honda,jaguar]), - domain(AD ,[coffee,tea,milk,orange,water]), - domain(BD ,[coffee,tea,milk,orange,water]), - domain(CD ,[coffee,tea,milk,orange,water]), - domain(DD ,[coffee,tea,milk,orange,water]), - domain(ED ,[coffee,tea,milk,orange,water]), - domain(AP ,[dog,snails,fox,horse,zebra]), - domain(BP ,[dog,snails,fox,horse,zebra]), - domain(CP ,[dog,snails,fox,horse,zebra]), - domain(DP ,[dog,snails,fox,horse,zebra]), - domain(EP ,[dog,snails,fox,horse,zebra]), - all_different([ACo,BCo,CCo,DCo,ECo]), - all_different([AN ,BN ,CN ,DN ,EN ]), - all_different([ACa,BCa,CCa,DCa,ECa]), - all_different([AD ,BD ,CD ,DD ,ED ]), - all_different([AP ,BP ,CP ,DP ,EP ]), - [_,_,[_,_,_,milk,_],_,_] = S, % clue 8 - [[_,norwegian,_,_,_],_,_,_,_] = S , % clue 9 - member( [green,_,_,coffee,_], S), % clue 3 - member( [red,english,_,_,_], S), % clue 1 - member( [_,ukranian,_,tea,_], S), % clue 4 - member( [yellow,_,masserati,_,_], S), % clue 7 - member( [_,_,honda,orange,_], S), % clue 12 - member( [_,japanese,jaguar,_,_], S), % clue 13 - member( [_,spanish,_,_,dog], S), % clue 2 - member( [_,_,porsche,_,snails], S), % clue 6 - left_right( [ivory,_,_,_,_], [green,_,_,_,_], S), % clue 5 - next_to( [_,norwegian,_,_,_],[blue,_,_,_,_], S), % clue 14 - next_to( [_,_,masserati,_,_],[_,_,_,_,horse], S), % clue 11 - next_to( [_,_,saab,_,_], [_,_,_,_,fox], S), % clue 10 - true. - -% left_right(L, R, X) is true when L is to the immediate left of R in list X - -left_right(L, R, [L, R | _]). - -left_right(L, R, [_ | X]) :- left_right(L, R, X). - - -% next_to(X, Y, L) is true when X and Y are next to each other in list L - -next_to(X, Y, L) :- left_right(X, Y, L). - -next_to(X, Y, L) :- left_right(Y, X, L). diff --git a/LGPL/chr/Changelog b/LGPL/chr/Changelog deleted file mode 100644 index 53bbdcae9..000000000 --- a/LGPL/chr/Changelog +++ /dev/null @@ -1,208 +0,0 @@ -Sep 2, 2005 - - * TS: Synchronized with hProlog. - -Aug 31, 2005 - - * TS: Added missing operator declarations for prefix (?). - -Aug 9, 2005 - - * JW: import lists into chr_compiler_utility.pl - - * JW: make message hook for query(yes) detect CHR global variables. - - * JW: Exported pairlist_delete_eq/3 from pairlist and use this in - chr_hashtable_store.pl - -Aug 4, 2005 - - * TS: Renamed pairlist:delete/3 to pairlist:pairlist_delete/3. - Mike Elston. -Aug 1, 2005 - - * TS: Extended more efficient ground matching code to - removed simpagation occurrence code. - -Jul 28, 2005 - - * TS: New input verification: duplicate constraint declaration - now reported as an error. Requested by Mike Elston. - * TS: More efficient matching code for ground constraints - when matching an argument of a partner constraint with - a ground term - * JS: Bug fix in guard simplification. - -Jul 3, 2005 - - * TS: Factored out option functionality into separate module. - * TS: Factored out utility code into separate module. - -Jun 29, 2005 - - * TS: Changed chr_show_store/1 to use print/1 instead of write/1. - -Jun 28, 2005 - - * TS: Removed spurious and conflicting operator definitions - for +, - and ? as mode declarations. - -Jun 27, 2005 - - * TS: Added find_chr_constraint/1 functionality. - -Jun 8, 2005 - - * TS: Improved compiler scalability: use nb_setval/2 to - remember compiled code through backtracking over - compilation process instead of assert/1. - * TS: Removed spurious comma from file. - -Jun 1, 2005 - - * TS: Added option to disable toplevel constraint store printing. - * TS: Slightly improved hash table constraint store implementation. - -Apr 16, 2005 - - * JW: Added patch from Jon Sneyers. - -Mar 11, 2005 - - * TS: Improved head reordering heuristic. - * TS: Added support primitive for alternate built-in solver dependency. - -Mar 4, 2005 - - * TS: Fixed bug that causes wrong output in chr_show_store. - -Feb 25, 2005 - - * TS: Fixed several bugs in generation of debugable code. - -Feb 19, 2005 - - * JW: Cleanup integration in SWI-Prolog environment: - - Extended SWI-Prolog library ordsets. Renamed ord_delete/3 to - ord_del_element/3 and ord_difference/3 to ord_subtract/3 for - better compatibility. - - Renamed module find to chr_find to avoid name conflict and declared - preds as meta-predicate. - - Re-inserted and exported strip_attributes/2 and - restore_attributes/2 in hprolog.pl. Deleted hprolog: from - chr_translate.chr. - - Added dummy option declarations to bootstrap compiler. - - Fixed path problems in makefile (-p chr=.) and install new - components. - - Fixed typo 'chr show_store' --> chr_show_store. - -Feb 17, 2005 - - * JS: Added guard entailment optimizations and - new syntax for type and mode declarations. - -Dec 15, 2004 - - * TS: Use prolog:message/3 hook to automatically print - contents of CHR constraint stores with query bindings - on toplevel. - -Dec 3, 2004 - - * TS: Bugfix in code generation. Reported by Lyosha Ilyukhin. - -Jul 28, 2004 - - * TS: Updated hashtable stores. They now start small and expand. - -Jul 19, 2004 - - * JW: Removed chr_pp: module prefixes - * JW: Updated Windows makefile.mak (more similar organisation, added check) - -Jul 17, 2004 - - * TS: Added chr_hashtable_store library. - * TS: Added find library. - * TS: Added builtins library. - * TS: Added clean_code library. - * TS: Added binomial_heap library. - * TS: Added a_star library. - * TS: Added new intermediate bootstrapping step - * TS: Synchronized CHR compiler with most recent development version - - Summary of changes: - - "The new version of the compiler contains several new optimizations, both - fully automatic, such as the antimonotny-based delay avoidance (see - http://www.cs.kuleuven.ac.be/publicaties/rapporten/cw/CW385.abs.html for - the technical report), and enabled by mode declarations (see CHR - documentation), such as hashtable-based constraint indexes." - -Apr 9, 2004 - - * JW: Added chr_messages.pl. Make all debug messages use the print_message/2 - interface to enable future embedding. - -Apr 7, 2004 - - * JW: Added chr:debug_interact/3 hook. Defined in chr_swi.pl to void - showing constraints first as goal and then as CHR call. - * JW: Added chr:debug_event/2 hook. Defined in chr_swi.pl to make the - CHR debugger honour a skip command from the Prolog tracer. - -Apr 6, 2004 - - * JW: Added b (break) to the CHR debugger. - * TS: added chr_expandable/2 clause for pragma/2 - -Apr 5, 2004 - - * JW: fixed reference to format_rule/2. - * JW: Use select/3 rather than delete/3 in diff/2 in Tests/zebra.pl - * TS: CHR translation now leaves CHR store empty - -Apr 4, 2004 - - * JW: added :- use_module(library(chr)) to all examples. - * JW: mapped -O --> option(optimize, full). - * JW: introduced file-search-path `chr' for clarity and to enable running - make check from the local environment instead of the public installation. - * JW: mapped prolog flag generate_debug_info --> option(debug, on) - * JW: Replaced the chr -> pl step with term_expansion/2. - * JW: Moved insert_declarations/2 to chr_swi.pl - -Apr 2, 2004 - - * JW: fixed Undefined procedure: chr_runtime:run_suspensions_loop_d/1 - * TS: Added for creep and shortened debug line prefix to CHR: - -Mar 29, 2004 - - * JW: Use \+ \+ in chr_compile/3 to undo changes to the constraint - pool. Regression test suite using "make check" works again. - -Mar 25, 2004 - - * TS: Added skip and ancestor debug commands - -Mar 24, 2004 - - * TS: Added bootstrapping process for CHR compiler using CHR. - * TS: CHR compiler now uses CHR. - * TS: Fixed bug in compilation of multi-headed simpagation rules. - * TS: Cleaned up compiler. - * TS: Added analysis + optimization for never attached constraints. - * TS: Exploit uniqueness (functional dependency) results to detect - set semantics type simpagation rules where one rule can be passive - * TS: Compiler generates 'chr debug_event'/1 calls - * TS: Rudimentary support for debugging. - option(debug,on) causes a trace of CHR events to be printed - -Mar 15, 2004 - - * JW: Fix operator handling. - -Mar 3, 2004 - - * JW: Integrated new version from Tom Schrijvers. diff --git a/LGPL/chr/Makefile.in b/LGPL/chr/Makefile.in deleted file mode 100644 index 806d9a504..000000000 --- a/LGPL/chr/Makefile.in +++ /dev/null @@ -1,157 +0,0 @@ -# -# default base directory for YAP installation -# (EROOT for architecture-dependent files) -# -prefix = @prefix@ -ROOTDIR = $(prefix) -EROOTDIR = @exec_prefix@ - -srcdir=@srcdir@ - -BINDIR = $(EROOTDIR)/bin -LIBDIR=$(EROOTDIR)/lib -YAPLIBDIR=$(EROOTDIR)/lib/Yap -SHAREDIR=$(ROOTDIR)/share - -SHELL=@SHELL@ -PL=@EXTEND_DYNLOADER_PATH@ $(DESTDIR)$(BINDIR)/yap $(DESTDIR)$(YAPLIBDIR)/startup -CHRDIR=$(SHAREDIR)/chr -EXDIR=$(CHRDIR)/examples/chr -LN_S=@LN_S@ - -DOCTOTEX=$(PCEHOME)/bin/doc2tex -PLTOTEX=$(PCEHOME)/bin/pl2tex -LATEX=latex -DOC=chr -TEX=$(DOC).tex -DVI=$(DOC).dvi -PDF=$(DOC).pdf -HTML=$(DOC).html - -INSTALL=@INSTALL@ -INSTALL_PROGRAM=@INSTALL_PROGRAM@ -INSTALL_DATA=@INSTALL_DATA@ - - -LIBPL= $(srcdir)/chr_runtime.pl $(srcdir)/chr_op.pl chr_translate.pl $(srcdir)/chr_debug.pl \ - $(srcdir)/chr_messages.pl $(srcdir)/hprolog.pl $(srcdir)/pairlist.pl $(srcdir)/clean_code.pl \ - $(srcdir)/find.pl $(srcdir)/a_star.pl $(srcdir)/binomialheap.pl $(srcdir)/builtins.pl \ - $(srcdir)/chr_hashtable_store.pl $(srcdir)/listmap.pl guard_entailment.pl \ - $(srcdir)/chr_compiler_errors.pl \ - $(srcdir)/chr_compiler_options.pl $(srcdir)/chr_compiler_utility.pl \ - $(srcdir)/chr_integertable_store.pl -CHRPL= $(srcdir)/chr_swi.pl -EXAMPLES= $(srcdir)/Benchmarks/chrfreeze.chr $(srcdir)/Benchmarks/fib.chr $(srcdir)/Benchmarks/gcd.chr $(srcdir)/Benchmarks/primes.chr \ - $(srcdir)/Benchmarks/bool.chr $(srcdir)/Benchmarks/family.chr $(srcdir)/Benchmarks/fibonacci.chr $(srcdir)/Benchmarks/leq.chr $(srcdir)/Benchmarks/listdom.chr \ - $(srcdir)/Benchmarks/chrdif.chr - -GPLDIR= $(srcdir)/../../GPL -LGPLDIR= $(srcdir)/../../LGPL -EXTRALIBDIR= $(srcdir)/../../library -GPLLIBPL= $(EXTRALIBDIR)/aggregate.pl $(EXTRALIBDIR)/error.pl $(EXTRALIBDIR)/occurs.yap $(EXTRALIBDIR)/pairs.pl -LGPLLIBPL= $(EXTRALIBDIR)/maplist.pl -EXTRALIBPL= $(GPLLIBPL) $(LGPLLIBPL) - -all: chr_translate.pl - -chr_translate_bootstrap1.pl: $(srcdir)/chr_translate_bootstrap1.chr $(EXTRALIBPL) - $(PL) -f -l chr_swi_bootstrap.yap \ - -g "chr_compile_step1('$<','$@'),halt." \ - -z 'halt(1).' - $(PL) -f -l chr_swi_bootstrap.yap \ - -g "chr_compile_step2('$<','$@'),halt." \ - -z 'halt(1).' - -chr_translate_bootstrap2.pl: $(srcdir)/chr_translate_bootstrap2.chr chr_translate_bootstrap1.pl - $(PL) -f -l chr_swi_bootstrap.yap \ - -g "chr_compile_step2('$<','$@'),halt." \ - -z 'halt(1).' - $(PL) -f -l chr_swi_bootstrap.yap \ - -g "chr_compile_step3('$<','$@'),halt." \ - -z 'halt(1).' - -guard_entailment.pl: $(srcdir)/guard_entailment.chr chr_translate_bootstrap2.pl - $(PL) -f -l chr_swi_bootstrap.yap \ - -g "chr_compile_step3('$<','$@'),halt." \ - -z 'halt(1).' - -chr_translate.pl: $(srcdir)/chr_translate.chr chr_translate_bootstrap2.pl guard_entailment.pl - $(PL) -f -l chr_swi_bootstrap.yap \ - -g "chr_compile_step3('$<','$@'),halt." \ - -z 'halt(1).' - $(PL) -f -p chr=. -l chr_swi_bootstrap.yap \ - -g "chr_compile_step4('guard_entailment.chr','guard_entailment.pl'),halt." \ - -z 'halt(1).' - $(PL) -f -p chr=. -l chr_swi_bootstrap.yap \ - -g "chr_compile_step4('$<','$@'),halt." \ - -z 'halt(1).' - -chr.pl: chr_swi.pl - cp $< $@ - -$(GPLLIBPL): $(EXTRALIBDIR)/%: $(GPLDIR)/% - cp $< $@ -$(LGPLLIBPL): $(EXTRALIBDIR)/%: $(LGPLDIR)/% - cp $< $@ - -install: chr_translate.pl guard_entailment.pl - mkdir -p $(DESTDIR)$(CHRDIR) - $(INSTALL) -m 644 $(LIBPL) $(DESTDIR)$(CHRDIR) - $(INSTALL) -m 644 $(CHRPL) $(DESTDIR)$(SHAREDIR)/chr.pl - $(INSTALL) -m 644 $(srcdir)/README $(DESTDIR)$(CHRDIR) -# $(PL) -f -g make -z halt - -rpm-install: install - -pdf-install: install-examples - -html-install: install-examples - -install-examples:: - mkdir -p $(DESTDIR)$(EXDIR) - (cd Examples && $(INSTALL_DATA) $(EXAMPLES) $(DESTDIR)$(EXDIR)) - -uninstall: - (cd $(PLBASE)/library && rm -f $(LIBPL)) - $(PL) -f none -g make -t halt - -check: chr.pl - $(PL) -f chr_test.pl -g test,halt -t 'halt(1)' - - -################################################################ -# Documentation -################################################################ - -doc: $(PDF) $(HTML) -pdf: $(PDF) -html: $(HTML) - -$(HTML): $(TEX) - latex2html $(DOC) - mv html/index.html $@ - -$(PDF): $(TEX) - runtex --pdf $(DOC) - -$(TEX): $(DOCTOTEX) - -.doc.tex: - $(DOCTOTEX) $*.doc > $*.tex -.pl.tex: - $(PLTOTEX) $*.pl > $*.tex - -################################################################ -# Clean -################################################################ - -clean: - rm -f *~ *% config.log - rm -f chr.pl chr_translate.pl - rm -f chr_translate_bootstrap1.pl chr_translate_bootstrap2.pl - rm -f guard_entailment.pl - -distclean: clean - rm -f $(TARGETS) config.h config.cache config.status Makefile - rm -f $(TEX) - runtex --clean $(DOC) diff --git a/LGPL/chr/Makefile.yap b/LGPL/chr/Makefile.yap deleted file mode 100644 index a4ce1956d..000000000 --- a/LGPL/chr/Makefile.yap +++ /dev/null @@ -1,141 +0,0 @@ -################################################################ -# SWI-Prolog CHR package -# Author: Jan Wielemaker. jan@swi.psy.uva.nl -# Copyright: LGPL (see COPYING or www.gnu.org -################################################################ - -.SUFFIXES: .tex .dvi .doc .pl - -SHELL=/bin/sh -PLBASE=/usr/lib/pl-5.5.31 -#PL=~/Yap/bins/devel/yap -PL=~/osx/yap -XPCEBASE=$(PLBASE)/xpce -PKGDOC=$(PLBASE)/doc/packages -PCEHOME=../../xpce -LIBDIR=$(PLBASE)/library -CHRDIR=$(LIBDIR)/chr -EXDIR=$(PKGDOC)/examples/chr -DESTDIR= - -DOCTOTEX=$(PCEHOME)/bin/doc2tex -PLTOTEX=$(PCEHOME)/bin/pl2tex -LATEX=latex -DOC=chr -TEX=$(DOC).tex -DVI=$(DOC).dvi -PDF=$(DOC).pdf -HTML=$(DOC).html - -INSTALL=/usr/bin/install -c -INSTALL_PROGRAM=${INSTALL} -INSTALL_DATA=/usr/bin/install -c -m 644 - -LIBPL= chr_runtime.pl chr_op.pl chr_translate.pl chr_debug.pl \ - chr_messages.pl hprolog.pl pairlist.pl clean_code.pl \ - find.pl a_star.pl binomialheap.pl builtins.pl \ - chr_hashtable_store.pl listmap.pl guard_entailment.pl \ - chr_compiler_options.pl chr_compiler_utility.pl -CHRPL= chr_swi.pl -EXAMPLES= chrfreeze.chr fib.chr gcd.chr primes.chr \ - bool.chr family.chr fibonacci.chr leq.chr listdom.chr \ - chrdif.chr - -all: chr_translate.pl - -chr_translate_bootstrap1.pl: chr_translate_bootstrap1.chr - $(PL) -l chr_swi_bootstrap.yap \ - -g "chr_compile_step1('$<','$@'),halt." \ - -z 'halt(1).' - $(PL) -l chr_swi_bootstrap.yap \ - -g "chr_compile_step2('$<','$@'),halt." \ - -z 'halt(1).' - -chr_translate_bootstrap2.pl: chr_translate_bootstrap2.chr chr_translate_bootstrap1.pl - $(PL) -l chr_swi_bootstrap.yap \ - -g "chr_compile_step2('$<','$@'),halt." \ - -z 'halt(1).' - $(PL) -l chr_swi_bootstrap.yap \ - -g "chr_compile_step3('$<','$@'),halt." \ - -z 'halt(1).' - -guard_entailment.pl: guard_entailment.chr chr_translate_bootstrap2.pl - $(PL) -l chr_swi_bootstrap.yap \ - -g "chr_compile_step3('$<','$@'),halt." \ - -z 'halt(1).' - -chr_translate.pl: chr_translate.chr chr_translate_bootstrap2.pl guard_entailment.pl - $(PL) -l chr_swi_bootstrap.yap \ - -g "chr_compile_step3('$<','$@'),halt." \ - -z 'halt(1)' - $(PL) -p chr=. -l chr_swi_bootstrap.yap \ - -g "chr_compile_step4('guard_entailment.chr','guard_entailment.pl'),halt." \ - -z 'halt(1).' - $(PL) -p chr=. -l chr_swi_bootstrap.yap \ - -g "chr_compile_step4('$<','$@'),halt." \ - -z 'halt(1).' - -chr.pl: chr_swi.pl - cp $< $@ - -install: $(LIBPL) - mkdir -p $(DESTDIR)$(CHRDIR) - $(INSTALL) -m 644 $(LIBPL) $(DESTDIR)$(CHRDIR) - $(INSTALL) -m 644 $(CHRPL) $(DESTDIR)$(LIBDIR)/chr.pl - $(INSTALL) -m 644 README $(DESTDIR)$(CHRDIR) - $(PL) -f none -g make -z halt - -rpm-install: install - -pdf-install: install-examples - -html-install: install-examples - -install-examples:: - mkdir -p $(DESTDIR)$(EXDIR) - (cd Examples && $(INSTALL_DATA) $(EXAMPLES) $(DESTDIR)$(EXDIR)) - -uninstall: - (cd $(PLBASE)/library && rm -f $(LIBPL)) - $(PL) -f none -g make -z halt - -check: chr.pl - $(PL) -f chr_test.pl -g "test,halt." -z 'halt(1).' - - -################################################################ -# Documentation -################################################################ - -doc: $(PDF) $(HTML) -pdf: $(PDF) -html: $(HTML) - -$(HTML): $(TEX) - latex2html $(DOC) - mv html/index.html $@ - -$(PDF): $(TEX) - runtex --pdf $(DOC) - -$(TEX): $(DOCTOTEX) - -.doc.tex: - $(DOCTOTEX) $*.doc > $*.tex -.pl.tex: - $(PLTOTEX) $*.pl > $*.tex - -################################################################ -# Clean -################################################################ - -clean: - rm -f *~ *% config.log - rm -f chr.pl chr_translate.pl - rm -f chr_translate_bootstrap1.pl chr_translate_bootstrap2.pl - rm -f guard_entailment.pl - -distclean: clean - rm -f $(TARGETS) config.h config.cache config.status Makefile - rm -f $(TEX) - runtex --clean $(DOC) diff --git a/LGPL/chr/README b/LGPL/chr/README deleted file mode 100644 index 9f4698d4f..000000000 --- a/LGPL/chr/README +++ /dev/null @@ -1,47 +0,0 @@ - CHR for SWI-Prolog - ================== - -Authors and license -==================== - -This package contains code from the following authors. All code is -distributed under the SWI-Prolog conditions with permission from the -authors. - - - * Tom Schrijvers, K.U.Leuven Tom.Schrijvers@cs.kuleuven.ac - * Christian Holzbaur christian@ai.univie.ac.at - * Jan Wielemaker jan@swi-prolog.org - - -Files and their roles: -====================== - - # library(chr) chr_swi.pl - Make user-predicates and hooks for loading CHR files available - to the user. - - # library(chr/chr_op) - Include file containing the operator declaractions - - # library(chr/chr_translate) - Core translation module. Defines chr_translate/2. - - # library(chr/chr_debug) - Debugging routines, made available to the user through - library(chr). Very incomplete. - - # library(chr/hprolog) - Compatibility to hProlog. Should be abstracted. - - # library(chr/pairlist) - Deal with lists of Name-Value. Used by chr_translate.pl - - -Status -====== - -Work in progress. The compiler source (chr_translate.pl) contains -various `todo' issues. The debugger is almost non existent. Future work -should improve on the compatibility with the reference CHR -documentation. Details on loading CHR files are subject to change. diff --git a/LGPL/chr/a_star.pl b/LGPL/chr/a_star.pl deleted file mode 100644 index 73f822e06..000000000 --- a/LGPL/chr/a_star.pl +++ /dev/null @@ -1,51 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Author: Tom Schrijvers -% Email: Tom.Schrijvers@cs.kuleuven.be -% Copyright: K.U.Leuven 2004 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -:- module(a_star, - [ - a_star/4 - ]). - -:- use_module(binomialheap). - -:- use_module(find). - -:- use_module(hprolog). - -a_star(DataIn,FinalData,ExpandData,DataOut) :- - a_star_node(DataIn,0,InitialNode), - empty_q(NewQueue), - insert_q(NewQueue,InitialNode,Queue), - a_star_aux(Queue,FinalData,ExpandData,EndNode), - a_star_node(DataOut,_,EndNode). - -a_star_aux(Queue,FinalData,ExpandData,EndNode) :- - delete_min_q(Queue,Queue1,Node), - ( final_node(FinalData,Node) -> - Node = EndNode - ; - expand_node(ExpandData,Node,Nodes), - insert_list_q(Nodes,Queue1,NQueue), - a_star_aux(NQueue,FinalData,ExpandData,EndNode) - ). - -final_node(D^Call,Node) :- - a_star_node(Data,_,Node), - term_variables(Call,Vars), - chr_delete(Vars,D,DVars), - copy_term(D^Call-DVars,Data^NCall-DVars), - call(NCall). - -expand_node(D^Ds^C^Call,Node,Nodes) :- - a_star_node(Data,Score,Node), - term_variables(Call,Vars), - chr_delete(Vars,D,DVars0), - chr_delete(DVars0,Ds,DVars1), - chr_delete(DVars1,C,DVars), - copy_term(D^Ds^C^Call-DVars,Data^EData^Cost^NCall-DVars), - term_variables(Node,NVars,DVars), - find_with_var_identity(ENode,NVars,(NCall,EScore is Cost + Score,a_star:a_star_node(EData,EScore,ENode)),Nodes). - -a_star_node(Data,Score,Data-Score). diff --git a/LGPL/chr/binomialheap.pl b/LGPL/chr/binomialheap.pl deleted file mode 100644 index 6f95c6b1e..000000000 --- a/LGPL/chr/binomialheap.pl +++ /dev/null @@ -1,113 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Binomial Heap imlementation based on -% -% Functional Binomial Queues -% James F. King -% University of Glasgow -% -% Author: Tom Schrijvers -% Email: Tom.Schrijvers@cs.kuleuven.be -% Copyright: K.U.Leuven 2004 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- module(binomialheap, - [ - empty_q/1, - insert_q/3, - insert_list_q/3, - delete_min_q/3, - find_min_q/2 - ]). - -:- use_module(library(lists),[reverse/2]). - -% data Tree a = Node a [Tree a] -% type BinQueue a = [Maybe (Tree a)] -% data Maybe a = Zero | One a -% type Item = (Entry,Key) - -entry(Entry-_,Entry). -key(_-Key,Key). - -empty_q([]). - -meld_q(P,Q,R) :- - meld_qc(P,Q,zero,R). - -meld_qc([],Q,zero,Q) :- !. -meld_qc([],Q,C,R) :- !, - meld_q(Q,[C],R). -meld_qc(P,[],C,R) :- !, - meld_qc([],P,C,R). -meld_qc([zero|Ps],[zero|Qs],C,R) :- !, - R = [C | Rs], - meld_q(Ps,Qs,Rs). -meld_qc([one(node(X,Xs))|Ps],[one(node(Y,Ys))|Qs],C,R) :- !, - key(X,KX), - key(Y,KY), - ( KX < KY -> - T = node(X,[node(Y,Ys)|Xs]) - ; - T = node(Y,[node(X,Xs)|Ys]) - ), - R = [C|Rs], - meld_qc(Ps,Qs,one(T),Rs). -meld_qc([P|Ps],[Q|Qs],C,Rs) :- - meld_qc([Q|Ps],[C|Qs],P,Rs). - -insert_q(Q,I,NQ) :- - meld_q([one(node(I,[]))],Q,NQ). - -insert_list_q([],Q,Q). -insert_list_q([I|Is],Q,NQ) :- - insert_q(Q,I,Q1), - insert_list_q(Is,Q1,NQ). - -min_tree([T|Ts],MT) :- - min_tree_acc(Ts,T,MT). - -min_tree_acc([],MT,MT). -min_tree_acc([T|Ts],Acc,MT) :- - least(T,Acc,NAcc), - min_tree_acc(Ts,NAcc,MT). - -least(zero,T,T) :- !. -least(T,zero,T) :- !. -least(one(node(X,Xs)),one(node(Y,Ys)),T) :- - key(X,KX), - key(Y,KY), - ( KX < KY -> - T = one(node(X,Xs)) - ; - T = one(node(Y,Ys)) - ). - -remove_tree([],_,[]). -remove_tree([T|Ts],I,[NT|NTs]) :- - ( T == zero -> - NT = T - ; - T = one(node(X,_)), - ( X == I -> - NT = zero - ; - NT = T - ) - ), - remove_tree(Ts,I,NTs). - -delete_min_q(Q,NQ,Min) :- - min_tree(Q,one(node(Min,Ts))), - remove_tree(Q,Min,Q1), - reverse(Ts,RTs), - make_ones(RTs,Q2), - meld_q(Q2,Q1,NQ). - -make_ones([],[]). -make_ones([N|Ns],[one(N)|RQ]) :- - make_ones(Ns,RQ). - -find_min_q(Q,I) :- - min_tree(Q,one(node(I,_))). - - diff --git a/LGPL/chr/builtins.pl b/LGPL/chr/builtins.pl deleted file mode 100644 index fea01c6dc..000000000 --- a/LGPL/chr/builtins.pl +++ /dev/null @@ -1,599 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Author: Tom Schrijvers -% Email: Tom.Schrijvers@cs.kuleuven.be -% Copyright: K.U.Leuven 2004 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -:- module(builtins, - [ - negate_b/2, - entails_b/2, - binds_b/2, - builtin_binds_b/2 - ]). - -:- use_module(hprolog). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -negate_b(A,B) :- once(negate(A,B)). -negate((A,B),NotB) :- A==true,negate(B,NotB). % added by jon -negate((A,B),NotA) :- B==true,negate(A,NotA). % added by jon -negate((A,B),(NotA;NotB)) :- negate(A,NotA),negate(B,NotB). % added by jon -negate((A;B),(NotA,NotB)) :- negate(A,NotA),negate(B,NotB). % added by jon -negate(true,fail). -negate(fail,true). -negate(X =< Y, Y < X). -negate(X > Y, Y >= X). -negate(X >= Y, Y > X). -negate(X < Y, Y =< X). -negate(X == Y, X \== Y). % added by jon -negate(X \== Y, X == Y). % added by jon -negate(X =:= Y, X =\= Y). % added by jon -negate(X is Y, X =\= Y). % added by jon -negate(X =\= Y, X =:= Y). % added by jon -negate(X = Y, X \= Y). % added by jon -negate(X \= Y, X = Y). % added by jon -negate(var(X),nonvar(X)). -negate(nonvar(X),var(X)). -negate(\+ X,X). % added by jon -negate(X,\+ X). % added by jon - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -entails_b(fail,_) :-!. -entails_b(A,B) :- - ( var(B) -> - entails(A,B,[A]) - ; - once(( - entails(A,C,[A]), - B == C - )) - ). - -entails(A,A,_). -entails(A,C,History) :- - entails_(A,B), - \+ hprolog:memberchk_eq(B,History), - entails(B,C,[B|History]). - -entails_(X > Y, X >= Y). -entails_(X > Y, Y < X). -entails_(X >= Y, Y =< X). -entails_(X =< Y, Y >= X). %added by jon -entails_(X < Y, Y > X). -entails_(X < Y, X =< Y). -entails_(X > Y, X \== Y). -entails_(X \== Y, Y \== X). -entails_(X == Y, Y == X). -entails_(X == Y, X =:= Y) :- ground(X). %added by jon -entails_(X == Y, X =:= Y) :- ground(Y). %added by jon -entails_(X \== Y, X =\= Y) :- ground(X). %added by jon -entails_(X \== Y, X =\= Y) :- ground(Y). %added by jon -entails_(X =:= Y, Y =:= X). %added by jon -entails_(X =\= Y, Y =\= X). %added by jon -entails_(X == Y, X >= Y). %added by jon -entails_(X == Y, X =< Y). %added by jon -entails_(ground(X),nonvar(X)). -entails_(compound(X),nonvar(X)). -entails_(atomic(X),nonvar(X)). -entails_(number(X),nonvar(X)). -entails_(atom(X),nonvar(X)). -entails_(fail,true). - -builtin_binds_b(G,Vars) :- - builtin_binds_(G,L,[]), - sort(L,Vars). - -builtin_binds_(var(_),L,L). -builtin_binds_(nonvar(_),L,L). -builtin_binds_(ground(_),L,L). -builtin_binds_(compound(_),L,L). -builtin_binds_(number(_),L,L). -builtin_binds_(atom(_),L,L). -builtin_binds_(atomic(_),L,L). -builtin_binds_(integer(_),L,L). -builtin_binds_(float(_),L,L). - -builtin_binds_(?=(_, _), L, L). -builtin_binds_(_<_, L, L). -builtin_binds_(_=:=_, L, L). -builtin_binds_(_=<_, L, L). -builtin_binds_(_==_, L, L). -builtin_binds_(_=@=_, L, L). -builtin_binds_(_=\=_, L, L). -builtin_binds_(_>=_, L, L). -builtin_binds_(_>_, L, L). -builtin_binds_(_@<_, L, L). -builtin_binds_(_@=<_, L, L). -builtin_binds_(_@>=_, L, L). -builtin_binds_(_@>_, L, L). -builtin_binds_(_\==_, L, L). -builtin_binds_(_\=@=_, L, L). -builtin_binds_(true,L,L). - -% TODO: check all these SWI-Prolog built-ins for binding behavior. -% -% builtin_binds_(format(_,_),L,L). -% builtin_binds_(portray(_), L, L). -% builtin_binds_(write(_), L, L). -% builtin_binds_(write(_),L,L). -% builtin_binds_(write(_, _), L, L). -% builtin_binds_(write_canonical(_), L, L). -% builtin_binds_(write_canonical(_, _), L, L). -% builtin_binds_(write_term(_, _), L, L). -% builtin_binds_(write_term(_, _, _), L, L). -% builtin_binds_(writef(_), L, L). -% builtin_binds_(writef(_, _), L, L). -% builtin_binds_(writeln(_), L, L). -% builtin_binds_(writeln(_),L,L). -% builtin_binds_(writeq(_), L, L). -% builtin_binds_(writeq(_, _), L, L). -% -% builtin_binds_(!(_), L, L). -% builtin_binds_(!, L, L). -% builtin_binds_((_'|'_), L, L). -% builtin_binds_((_*->_), L, L). -% builtin_binds_(abolish(_), L, L). -% builtin_binds_(abolish(_, _), L, L). -% builtin_binds_(abort, L, L). -% builtin_binds_(absolute_file_name(_, _), L, L). -% builtin_binds_(absolute_file_name(_, _, _), L, L). -% builtin_binds_(access_file(_, _), L, L). -% builtin_binds_(acyclic_term(_), L, L). -% builtin_binds_(add_import_module(_, _, _), L, L). -% builtin_binds_(append(_), L, L). -% builtin_binds_(apply(_, _), L, L). -% builtin_binds_(arg(_, _, _), L, L). -% builtin_binds_(arithmetic_function(_), L, L). -% builtin_binds_(assert(_), L, L). -% builtin_binds_(assert(_, _), L, L). -% builtin_binds_(asserta(_), L, L). -% builtin_binds_(asserta(_, _), L, L). -% builtin_binds_(assertz(_), L, L). -% builtin_binds_(assertz(_, _), L, L). -% builtin_binds_(at_end_of_stream(_), L, L). -% builtin_binds_(at_end_of_stream, L, L). -% builtin_binds_(at_halt(_), L, L). -% builtin_binds_(at_initialization(_), L, L). -% builtin_binds_(atom(_), L, L). -% builtin_binds_(atom_chars(_, _), L, L). -% builtin_binds_(atom_codes(_, _), L, L). -% builtin_binds_(atom_concat(_, _, _), L, L). -% builtin_binds_(atom_length(_, _), L, L). -% builtin_binds_(atom_number(_, _), L, L). -% builtin_binds_(atom_prefix(_, _), L, L). -% builtin_binds_(atom_to_term(_, _, _), L, L). -% builtin_binds_(atomic(_), L, L). -% builtin_binds_(attvar(_), L, L). -% builtin_binds_(autoload(_), L, L). -% builtin_binds_(autoload, L, L). -% builtin_binds_(b_getval(_, _), L, L). -% builtin_binds_(b_setval(_, _), L, L). -% builtin_binds_(bagof(_, _, _), L, L). -% builtin_binds_(between(_, _, _), L, L). -% builtin_binds_(block(_, _, _), L, L). -% builtin_binds_(break, L, L). -% builtin_binds_(byte_count(_, _), L, L). -% builtin_binds_(call(_), L, L). -% builtin_binds_(call(_, _), L, L). -% builtin_binds_(call(_, _, _), L, L). -% builtin_binds_(call(_, _, _, _), L, L). -% builtin_binds_(call(_, _, _, _, _), L, L). -% builtin_binds_(call(_, _, _, _, _, _), L, L). -% builtin_binds_(call(_, _, _, _, _, _, _), L, L). -% builtin_binds_(call(_, _, _, _, _, _, _, _), L, L). -% builtin_binds_(call(_, _, _, _, _, _, _, _, _), L, L). -% builtin_binds_(call(_, _, _, _, _, _, _, _, _, _), L, L). -% builtin_binds_(call(_, _, _, _, _, _, _, _, _, _, _), L, L). -% builtin_binds_(call_cleanup(_, _), L, L). -% builtin_binds_(call_cleanup(_, _, _), L, L). -% builtin_binds_(call_shared_object_function(_, _), L, L). -% builtin_binds_(call_with_depth_limit(_, _, _), L, L). -% builtin_binds_(callable(_), L, L). -% builtin_binds_(catch(_, _, _), L, L). -% builtin_binds_(char_code(_, _), L, L). -% builtin_binds_(char_conversion(_, _), L, L). -% builtin_binds_(char_type(_, _), L, L). -% builtin_binds_(character_count(_, _), L, L). -% builtin_binds_(clause(_, _), L, L). -% builtin_binds_(clause(_, _, _), L, L). -% builtin_binds_(clause_property(_, _), L, L). -% builtin_binds_(close(_), L, L). -% builtin_binds_(close(_, _), L, L). -% builtin_binds_(close_shared_object(_), L, L). -% builtin_binds_(code_type(_, _), L, L). -% builtin_binds_(collation_key(_, _), L, L). -% builtin_binds_(compare(_, _, _), L, L). -% builtin_binds_(compile_aux_clauses(_), L, L). -% builtin_binds_(compile_predicates(_), L, L). -% builtin_binds_(compiling, L, L). -% builtin_binds_(compound(_), L, L). -% builtin_binds_(concat_atom(_, _), L, L). -% builtin_binds_(concat_atom(_, _, _), L, L). -% builtin_binds_(consult(_), L, L). -% builtin_binds_(context_module(_), L, L). -% builtin_binds_(copy_stream_data(_, _), L, L). -% builtin_binds_(copy_stream_data(_, _, _), L, L). -% builtin_binds_(copy_term(_, _), L, L). -% builtin_binds_(copy_term_nat(_, _), L, L). -% builtin_binds_(current_arithmetic_function(_), L, L). -% builtin_binds_(current_atom(_), L, L). -% builtin_binds_(current_blob(_, _), L, L). -% builtin_binds_(current_char_conversion(_, _), L, L). -% builtin_binds_(current_flag(_), L, L). -% builtin_binds_(current_format_predicate(_, _), L, L). -% builtin_binds_(current_functor(_, _), L, L). -% builtin_binds_(current_input(_), L, L). -% builtin_binds_(current_key(_), L, L). -% builtin_binds_(current_module(_), L, L). -% builtin_binds_(current_module(_, _), L, L). -% builtin_binds_(current_op(_, _, _), L, L). -% builtin_binds_(current_output(_), L, L). -% builtin_binds_(current_predicate(_), L, L). -% builtin_binds_(current_predicate(_, _), L, L). -% builtin_binds_(current_prolog_flag(_, _), L, L). -% builtin_binds_(current_resource(_, _, _), L, L). -% builtin_binds_(current_signal(_, _, _), L, L). -% builtin_binds_(cyclic_term(_), L, L). -% builtin_binds_(date_time_stamp(_, _), L, L). -% builtin_binds_(debugging, L, L). -% builtin_binds_(default_module(_, _), L, L). -% builtin_binds_(del_attr(_, _), L, L). -% builtin_binds_(delete_directory(_), L, L). -% builtin_binds_(delete_file(_), L, L). -% builtin_binds_(delete_import_module(_, _), L, L). -% builtin_binds_(deterministic(_), L, L). -% builtin_binds_(downcase_atom(_, _), L, L). -% builtin_binds_(duplicate_term(_, _), L, L). -% builtin_binds_(dwim_match(_, _), L, L). -% builtin_binds_(dwim_match(_, _, _), L, L). -% builtin_binds_(dwim_predicate(_, _), L, L). -% builtin_binds_(ensure_loaded(_), L, L). -% builtin_binds_(erase(_), L, L). -% builtin_binds_(eval_license, L, L). -% builtin_binds_(exists_directory(_), L, L). -% builtin_binds_(exists_file(_), L, L). -% builtin_binds_(exit(_, _), L, L). -% builtin_binds_(expand_file_name(_, _), L, L). -% builtin_binds_(expand_file_search_path(_, _), L, L). -% builtin_binds_(expand_goal(_, _), L, L). -% builtin_binds_(expand_term(_, _), L, L). -% builtin_binds_(export(_), L, L). -% builtin_binds_(export_list(_, _), L, L). -% builtin_binds_(fail(_), L, L). -% builtin_binds_(fail, L, L). -% builtin_binds_(file_base_name(_, _), L, L). -% builtin_binds_(file_directory_name(_, _), L, L). -% builtin_binds_(file_name_extension(_, _, _), L, L). -% builtin_binds_(fileerrors(_, _), L, L). -% builtin_binds_(findall(_, _, _), L, L). -% builtin_binds_(findall(_, _, _, _), L, L). -% builtin_binds_(flag(_, _, _), L, L). -% builtin_binds_(float(_), L, L). -% builtin_binds_(flush_output(_), L, L). -% builtin_binds_(flush_output, L, L). -% builtin_binds_(forall(_, _), L, L). -% builtin_binds_(format(_), L, L). -% builtin_binds_(format(_, _), L, L). -% builtin_binds_(format(_, _, _), L, L). -% builtin_binds_(format_predicate(_, _), L, L). -% builtin_binds_(format_time(_, _, _), L, L). -% builtin_binds_(format_time(_, _, _, _), L, L). -% builtin_binds_(freeze(_, _), L, L). -% builtin_binds_(frozen(_, _), L, L). -% builtin_binds_(functor(_, _, _), L, L). -% builtin_binds_(garbage_collect, L, L). -% builtin_binds_(garbage_collect_atoms, L, L). -% builtin_binds_(garbage_collect_clauses, L, L). -% builtin_binds_(get(_), L, L). -% builtin_binds_(get(_, _), L, L). -% builtin_binds_(get0(_), L, L). -% builtin_binds_(get0(_, _), L, L). -% builtin_binds_(get_attr(_, _, _), L, L). -% builtin_binds_(get_attrs(_, _), L, L). -% builtin_binds_(get_byte(_), L, L). -% builtin_binds_(get_byte(_, _), L, L). -% builtin_binds_(get_char(_), L, L). -% builtin_binds_(get_char(_, _), L, L). -% builtin_binds_(get_code(_), L, L). -% builtin_binds_(get_code(_, _), L, L). -% builtin_binds_(get_single_char(_), L, L). -% builtin_binds_(get_time(_), L, L). -% builtin_binds_(getenv(_, _), L, L). -% builtin_binds_(ground(_), L, L). -% builtin_binds_(halt(_), L, L). -% builtin_binds_(halt, L, L). -% builtin_binds_(hash(_), L, L). -% builtin_binds_(hash_term(_, _), L, L). -% builtin_binds_(ignore(_), L, L). -% builtin_binds_(import(_), L, L). -% builtin_binds_(import_module(_, _), L, L). -% builtin_binds_(index(_), L, L). -% builtin_binds_(integer(_), L, L). -% builtin_binds_(is_absolute_file_name(_), L, L). -% builtin_binds_(is_list(_), L, L). -% builtin_binds_(is_stream(_), L, L). -% builtin_binds_(keysort(_, _), L, L). -% builtin_binds_(leash(_), L, L). -% builtin_binds_(length(_, _), L, L). -% builtin_binds_(license(_), L, L). -% builtin_binds_(license(_, _), L, L). -% builtin_binds_(line_count(_, _), L, L). -% builtin_binds_(line_position(_, _), L, L). -% builtin_binds_(load_files(_), L, L). -% builtin_binds_(load_files(_, _), L, L). -% builtin_binds_(make_directory(_), L, L). -% builtin_binds_(make_library_index(_), L, L). -% builtin_binds_(make_library_index(_, _), L, L). -% builtin_binds_(maplist(_, _), L, L). -% builtin_binds_(maplist(_, _, _), L, L). -% builtin_binds_(maplist(_, _, _, _), L, L). -% builtin_binds_(memberchk(_, _), L, L). -% builtin_binds_(message_queue_create(_), L, L). -% builtin_binds_(message_queue_create(_, _), L, L). -% builtin_binds_(message_queue_destroy(_), L, L). -% builtin_binds_(message_queue_property(_, _), L, L). -% builtin_binds_(message_to_string(_, _), L, L). -% builtin_binds_(module(_), L, L). -% builtin_binds_(msort(_, _), L, L). -% builtin_binds_(mutex_create(_), L, L). -% builtin_binds_(mutex_create(_, _), L, L). -% builtin_binds_(mutex_destroy(_), L, L). -% builtin_binds_(mutex_lock(_), L, L). -% builtin_binds_(mutex_property(_, _), L, L). -% builtin_binds_(mutex_statistics, L, L). -% builtin_binds_(mutex_trylock(_), L, L). -% builtin_binds_(mutex_unlock(_), L, L). -% builtin_binds_(mutex_unlock_all, L, L). -% builtin_binds_(name(_, _), L, L). -% builtin_binds_(nb_current(_, _), L, L). -% builtin_binds_(nb_delete(_), L, L). -% builtin_binds_(nb_getval(_, _), L, L). -% builtin_binds_(nb_linkarg(_, _, _), L, L). -% builtin_binds_(nb_linkval(_, _), L, L). -% builtin_binds_(nb_setarg(_, _, _), L, L). -% builtin_binds_(nb_setval(_, _), L, L). -% builtin_binds_(nl(_), L, L). -% builtin_binds_(nl, L, L). -% builtin_binds_(nonvar(_), L, L). -% builtin_binds_(noprofile(_), L, L). -% builtin_binds_(noprotocol, L, L). -% builtin_binds_(nospy(_), L, L). -% builtin_binds_(nospyall, L, L). -% builtin_binds_(not(_), L, L). -% builtin_binds_(notrace(_), L, L). -% builtin_binds_(notrace, L, L). -% builtin_binds_(nth_clause(_, _, _), L, L). -% builtin_binds_(number(_), L, L). -% builtin_binds_(number_chars(_, _), L, L). -% builtin_binds_(number_codes(_, _), L, L). -% builtin_binds_(numbervars(_, _, _), L, L). -% builtin_binds_(numbervars(_, _, _, _), L, L). -% builtin_binds_(on_signal(_, _, _), L, L). -% builtin_binds_(once(_), L, L). -% builtin_binds_(op(_, _, _), L, L). -% builtin_binds_(open(_, _, _), L, L). -% builtin_binds_(open(_, _, _, _), L, L). -% builtin_binds_(open_null_stream(_), L, L). -% builtin_binds_(open_resource(_, _, _), L, L). -% builtin_binds_(open_resource(_, _, _, _), L, L). -% builtin_binds_(open_shared_object(_, _), L, L). -% builtin_binds_(open_shared_object(_, _, _), L, L). -% builtin_binds_(open_xterm(_, _, _, _), L, L). -% builtin_binds_(peek_byte(_), L, L). -% builtin_binds_(peek_byte(_, _), L, L). -% builtin_binds_(peek_char(_), L, L). -% builtin_binds_(peek_char(_, _), L, L). -% builtin_binds_(peek_code(_), L, L). -% builtin_binds_(peek_code(_, _), L, L). -% builtin_binds_(phrase(_, _), L, L). -% builtin_binds_(phrase(_, _, _), L, L). -% builtin_binds_(plus(_, _, _), L, L). -% builtin_binds_(predicate_property(_, _), L, L). -% builtin_binds_(preprocessor(_, _), L, L). -% builtin_binds_(print(_), L, L). -% builtin_binds_(print(_, _), L, L). -% builtin_binds_(print_message(_, _), L, L). -% builtin_binds_(print_message_lines(_, _, _), L, L). -% builtin_binds_(profiler(_, _), L, L). -% builtin_binds_(prolog, L, L). -% builtin_binds_(prolog_choice_attribute(_, _, _), L, L). -% builtin_binds_(prolog_current_frame(_), L, L). -% builtin_binds_(prolog_frame_attribute(_, _, _), L, L). -% builtin_binds_(prolog_load_context(_, _), L, L). -% builtin_binds_(prolog_skip_level(_, _), L, L). -% builtin_binds_(prolog_to_os_filename(_, _), L, L). -% builtin_binds_(prompt(_, _), L, L). -% builtin_binds_(prompt1(_), L, L). -% builtin_binds_(protocol(_), L, L). -% builtin_binds_(protocola(_), L, L). -% builtin_binds_(protocolling(_), L, L). -% builtin_binds_(put(_), L, L). -% builtin_binds_(put(_, _), L, L). -% builtin_binds_(put_attr(_, _, _), L, L). -% builtin_binds_(put_attrs(_, _), L, L). -% builtin_binds_(put_byte(_), L, L). -% builtin_binds_(put_byte(_, _), L, L). -% builtin_binds_(put_char(_), L, L). -% builtin_binds_(put_char(_, _), L, L). -% builtin_binds_(put_code(_), L, L). -% builtin_binds_(put_code(_, _), L, L). -% builtin_binds_(qcompile(_), L, L). -% builtin_binds_(rational(_), L, L). -% builtin_binds_(rational(_, _, _), L, L). -% builtin_binds_(read(_), L, L). -% builtin_binds_(read(_, _), L, L). -% builtin_binds_(read_clause(_), L, L). -% builtin_binds_(read_clause(_, _), L, L). -% builtin_binds_(read_history(_, _, _, _, _, _), L, L). -% builtin_binds_(read_link(_, _, _), L, L). -% builtin_binds_(read_pending_input(_, _, _), L, L). -% builtin_binds_(read_term(_, _), L, L). -% builtin_binds_(read_term(_, _, _), L, L). -% builtin_binds_(recorda(_, _), L, L). -% builtin_binds_(recorda(_, _, _), L, L). -% builtin_binds_(recorded(_, _), L, L). -% builtin_binds_(recorded(_, _, _), L, L). -% builtin_binds_(recordz(_, _), L, L). -% builtin_binds_(recordz(_, _, _), L, L). -% builtin_binds_(redefine_system_predicate(_), L, L). -% builtin_binds_(reload_library_index, L, L). -% builtin_binds_(rename_file(_, _), L, L). -% builtin_binds_(repeat, L, L). -% builtin_binds_(require(_), L, L). -% builtin_binds_(reset_profiler, L, L). -% builtin_binds_(retract(_), L, L). -% builtin_binds_(retractall(_), L, L). -% builtin_binds_(same_file(_, _), L, L). -% builtin_binds_(same_term(_, _), L, L). -% builtin_binds_(see(_), L, L). -% builtin_binds_(seeing(_), L, L). -% builtin_binds_(seek(_, _, _, _), L, L). -% builtin_binds_(seen, L, L). -% builtin_binds_(set_input(_), L, L). -% builtin_binds_(set_output(_), L, L). -% builtin_binds_(set_prolog_IO(_, _, _), L, L). -% builtin_binds_(set_prolog_flag(_, _), L, L). -% builtin_binds_(set_stream(_, _), L, L). -% builtin_binds_(set_stream_position(_, _), L, L). -% builtin_binds_(setarg(_, _, _), L, L). -% builtin_binds_(setenv(_, _), L, L). -% builtin_binds_(setlocale(_, _, _), L, L). -% builtin_binds_(setof(_, _, _), L, L). -% builtin_binds_(setup_and_call_cleanup(_, _, _), L, L). -% builtin_binds_(setup_and_call_cleanup(_, _, _, _), L, L). -% builtin_binds_(shell(_), L, L). -% builtin_binds_(shell(_, _), L, L). -% builtin_binds_(shell, L, L). -% builtin_binds_(size_file(_, _), L, L). -% builtin_binds_(skip(_), L, L). -% builtin_binds_(skip(_, _), L, L). -% builtin_binds_(sleep(_), L, L). -% builtin_binds_(sort(_, _), L, L). -% builtin_binds_(source_file(_), L, L). -% builtin_binds_(source_file(_, _), L, L). -% builtin_binds_(source_location(_, _), L, L). -% builtin_binds_(spy(_), L, L). -% builtin_binds_(stamp_date_time(_, _, _), L, L). -% builtin_binds_(statistics(_, _), L, L). -% builtin_binds_(statistics, L, L). -% builtin_binds_(stream_position_data(_, _, _), L, L). -% builtin_binds_(stream_property(_, _), L, L). -% builtin_binds_(string(_), L, L). -% builtin_binds_(string_concat(_, _, _), L, L). -% builtin_binds_(string_length(_, _), L, L). -% builtin_binds_(string_to_atom(_, _), L, L). -% builtin_binds_(string_to_list(_, _), L, L). -% builtin_binds_(strip_module(_, _, _), L, L). -% builtin_binds_(style_check(_), L, L). -% builtin_binds_(sub_atom(_, _, _, _, _), L, L). -% builtin_binds_(sub_string(_, _, _, _, _), L, L). -% builtin_binds_(succ(_, _), L, L). -% builtin_binds_(swritef(_, _), L, L). -% builtin_binds_(swritef(_, _, _), L, L). -% builtin_binds_(tab(_), L, L). -% builtin_binds_(tab(_, _), L, L). -% builtin_binds_(tell(_), L, L). -% builtin_binds_(telling(_), L, L). -% builtin_binds_(term_to_atom(_, _), L, L). -% builtin_binds_(term_variables(_, _), L, L). -% builtin_binds_(term_variables(_, _, _), L, L). -% builtin_binds_(thread_at_exit(_), L, L). -% builtin_binds_(thread_create(_, _, _), L, L). -% builtin_binds_(thread_detach(_), L, L). -% builtin_binds_(thread_exit(_), L, L). -% builtin_binds_(thread_get_message(_), L, L). -% builtin_binds_(thread_get_message(_, _), L, L). -% builtin_binds_(thread_join(_, _), L, L). -% builtin_binds_(thread_kill(_, _), L, L). -% builtin_binds_(thread_peek_message(_), L, L). -% builtin_binds_(thread_peek_message(_, _), L, L). -% builtin_binds_(thread_property(_, _), L, L). -% builtin_binds_(thread_self(_), L, L). -% builtin_binds_(thread_send_message(_, _), L, L). -% builtin_binds_(thread_setconcurrency(_, _), L, L). -% builtin_binds_(thread_signal(_, _), L, L). -% builtin_binds_(thread_statistics(_, _, _), L, L). -% builtin_binds_(throw(_), L, L). -% builtin_binds_(time_file(_, _), L, L). -% builtin_binds_(tmp_file(_, _), L, L). -% builtin_binds_(told, L, L). -% builtin_binds_(trim_stacks, L, L). -% builtin_binds_(tty_get_capability(_, _, _), L, L). -% builtin_binds_(tty_goto(_, _), L, L). -% builtin_binds_(tty_put(_, _), L, L). -% builtin_binds_(tty_size(_, _), L, L). -% builtin_binds_(ttyflush, L, L). -% builtin_binds_(unifiable(_, _, _), L, L). -% builtin_binds_(unify_with_occurs_check(_, _), L, L). -% builtin_binds_(unsetenv(_), L, L). -% builtin_binds_(upcase_atom(_, _), L, L). -% builtin_binds_(wait_for_input(_, _, _), L, L). -% builtin_binds_(wildcard_match(_, _), L, L). -% builtin_binds_(with_mutex(_, _), L, L). -% builtin_binds_(with_output_to(_, _), L, L). -% builtin_binds_(working_directory(_, _), L, L). - - -% builtin_binds_(functor(Term, Functor, Arity), [Term,Functor,Arity|T], T). -% builtin_binds_(arg(Arg, Term, Pos), [Arg,Term,Pos|T], T). -% builtin_binds_(term_variables(_, _), L, L). -% builtin_binds_(X=Y, [X,Y|T], T). - - -builtin_binds_(X is _,[X|L],L). -builtin_binds_((G1,G2),L,T) :- - builtin_binds_(G1,L,R), - builtin_binds_(G2,R,T). -builtin_binds_((G1;G2),L,T) :- - builtin_binds_(G1,L,R), - builtin_binds_(G2,R,T). -builtin_binds_((G1->G2),L,T) :- - builtin_binds_(G1,L,R), - builtin_binds_(G2,R,T). - -builtin_binds_(\+ G,L,T) :- - builtin_binds_(G,L,T). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -binds_b(G,Vars) :- - binds_(G,L,[]), - sort(L,Vars). - -binds_(var(_),L,L). -binds_(nonvar(_),L,L). -binds_(ground(_),L,L). -binds_(compound(_),L,L). -binds_(number(_),L,L). -binds_(atom(_),L,L). -binds_(atomic(_),L,L). -binds_(integer(_),L,L). -binds_(float(_),L,L). - -binds_(_ > _ ,L,L). -binds_(_ < _ ,L,L). -binds_(_ =< _,L,L). -binds_(_ >= _,L,L). -binds_(_ =:= _,L,L). -binds_(_ =\= _,L,L). -binds_(_ == _,L,L). -binds_(_ \== _,L,L). -binds_(true,L,L). - -binds_(write(_),L,L). -binds_(writeln(_),L,L). -binds_(format(_,_),L,L). - -binds_(X is _,[X|L],L). -binds_((G1,G2),L,T) :- - binds_(G1,L,R), - binds_(G2,R,T). -binds_((G1;G2),L,T) :- - binds_(G1,L,R), - binds_(G2,R,T). -binds_((G1->G2),L,T) :- - binds_(G1,L,R), - binds_(G2,R,T). - -binds_(\+ G,L,T) :- - binds_(G,L,T). - -binds_(G,L,T) :- term_variables(G,GVars),append(GVars,T,L). %jon diff --git a/LGPL/chr/chr.yap b/LGPL/chr/chr.yap deleted file mode 100644 index 146caf0f2..000000000 --- a/LGPL/chr/chr.yap +++ /dev/null @@ -1,5 +0,0 @@ - -:- include('chr.pl'). - - - diff --git a/LGPL/chr/chr_compiler_errors.pl b/LGPL/chr/chr_compiler_errors.pl deleted file mode 100644 index d4fa1ec0d..000000000 --- a/LGPL/chr/chr_compiler_errors.pl +++ /dev/null @@ -1,173 +0,0 @@ -/* $Id: chr_compiler_errors.pl,v 1.3 2008-03-13 14:37:59 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2005, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ -:- module(chr_compiler_errors, - [ - chr_info/3, - chr_warning/3, - chr_error/3, - print_chr_error/1 - ]). - -:- use_module(chr_compiler_options). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% chr_info(+Type,+FormattedMessage,+MessageParameters) - -chr_info(_,Message,Params) :- - ( \+verbosity_on -> - true - ; - long_line_with_equality_signs, - format(user_error,'CHR compiler:\n',[]), - format(user_error,Message,Params), - long_line_with_equality_signs - ). - - -%% SWI begin -verbosity_on :- - current_prolog_flag(verbose,V), V \== silent, - current_prolog_flag(verbose_load,true). -%% SWI end - -%% SICStus begin -%% verbosity_on. % at the moment -%% SICStus end - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% chr_warning(+Type,+FormattedMessage,+MessageParameters) - -chr_warning(deprecated(Term),Message,Params) :- !, - long_line_with_equality_signs, - format(user_error,'CHR compiler WARNING: deprecated syntax ~w.\n',[Term]), - format(user_error,' `--> ',[]), - format(user_error,Message,Params), - format(user_error,' Support for deprecated syntax will be discontinued in the near future!\n',[]), - long_line_with_equality_signs. - -chr_warning(internal,Message,Params) :- !, - long_line_with_equality_signs, - format(user_error,'CHR compiler WARNING: something unexpected happened in the CHR compiler.\n',[]), - format(user_error,' `--> ',[]), - format(user_error,Message,Params), - format(user_error,' Your program may not have been compiled correctly!\n',[]), - format(user_error,' Please contact tom.schrijvers@cs.kuleuven.be.\n',[]), - long_line_with_equality_signs. - -chr_warning(unsupported_pragma(Pragma,Rule),Message,Params) :- !, - long_line_with_equality_signs, - format(user_error,'CHR compiler WARNING: unsupported pragma ~w in ~@.\n',[Pragma,format_rule(Rule)]), - format(user_error,' `--> ',[]), - format(user_error,Message,Params), - format(user_error,' Pragma is ignored!\n',[]), - long_line_with_equality_signs. -chr_warning(problem_pragma(Pragma,Rule),Message,Params) :- !, - long_line_with_equality_signs, - format(user_error,'CHR compiler WARNING: unsupported pragma ~w in ~@.\n',[Pragma,format_rule(Rule)]), - format(user_error,' `--> ',[]), - format(user_error,Message,Params), - long_line_with_equality_signs. - -chr_warning(_,Message,Params) :- - ( chr_pp_flag(verbosity,on) -> - long_line_with_equality_signs, - format(user_error,'CHR compiler WARNING:\n',[]), - format(user_error,' `--> ',[]), - format(user_error,Message,Params), - long_line_with_equality_signs - ; - true - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% chr_error(+Type,+FormattedMessage,+MessageParameters) - -chr_error(Type,Message,Params) :- - throw(chr_error(error(Type,Message,Params))). - -print_chr_error(error(Type,Message,Params)) :- - print_chr_error(Type,Message,Params). - -print_chr_error(syntax(Term),Message,Params) :- !, - long_line_with_equality_signs, - format(user_error,'CHR compiler ERROR: invalid syntax "~w".\n',[Term]), - format(user_error,' `--> ',[]), - format(user_error,Message,Params), - long_line_with_equality_signs. - -print_chr_error(type_error,Message,Params) :- !, - long_line_with_equality_signs, - format(user_error,'CHR compiler TYPE ERROR:\n',[]), - format(user_error,' `--> ',[]), - format(user_error,Message,Params), - long_line_with_equality_signs. - -print_chr_error(internal,Message,Params) :- !, - long_line_with_equality_signs, - format(user_error,'CHR compiler ERROR: something unexpected happened in the CHR compiler.\n',[]), - format(user_error,' `--> ',[]), - format(user_error,Message,Params), - format(user_error,' Please contact tom.schrijvers@cs.kuleuven.be.\n',[]), - long_line_with_equality_signs. - -print_chr_error(cyclic_alias(Alias),_Message,_Params) :- !, - long_line_with_equality_signs, - format(user_error,'CHR compiler ERROR: cyclic alias "~w".\n',[Alias]), - format(user_error,' `--> Aborting compilation.\n',[]), - long_line_with_equality_signs. - -print_chr_error(_,Message,Params) :- - long_line_with_equality_signs, - format(user_error,'CHR compiler ERROR:\n',[]), - format(user_error,' `--> ',[]), - format(user_error,Message,Params), - long_line_with_equality_signs. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -format_rule(PragmaRule) :- - PragmaRule = pragma(_,_,Pragmas,MaybeName,N), - ( MaybeName = yes(Name) -> - write('rule '), write(Name) - ; - write('rule number '), write(N) - ), - ( memberchk(line_number(LineNumber),Pragmas) -> - write(' (line '), - write(LineNumber), - write(')') - ; - true - ). - -long_line_with_equality_signs :- - format(user_error,'================================================================================\n',[]). diff --git a/LGPL/chr/chr_compiler_options.pl b/LGPL/chr/chr_compiler_options.pl deleted file mode 100644 index 811fade68..000000000 --- a/LGPL/chr/chr_compiler_options.pl +++ /dev/null @@ -1,372 +0,0 @@ -/* $Id: chr_compiler_options.pl,v 1.4 2008-03-13 22:37:07 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2005-2006, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ -:- module(chr_compiler_options, - [ handle_option/2 - , init_chr_pp_flags/0 - , chr_pp_flag/2 - ]). - -%% SICStus begin -%% :- use_module(hprolog, [nb_setval/2,nb_getval/2]). -%% local_current_prolog_flag(_,_) :- fail. -%% SICStus end - -%% SWI begin -local_current_prolog_flag(X,Y) :- current_prolog_flag(X,Y). -%% SWI end - - -:- use_module(chr_compiler_errors). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Global Options -% - -handle_option(Name,Value) :- - var(Name), !, - chr_error(syntax((:- chr_option(Name,Value))),'First argument should be an atom, not a variable.\n',[]). - -handle_option(Name,Value) :- - var(Value), !, - chr_error(syntax((:- chr_option(Name,Value))),'Second argument cannot be a variable.\n',[]). - -handle_option(Name,Value) :- - option_definition(Name,Value,Flags), - !, - set_chr_pp_flags(Flags). - -handle_option(Name,Value) :- - \+ option_definition(Name,_,_), !, - chr_error(syntax((:- chr_option(Name,Value))),'Invalid option name ~w: consult the manual for valid options.\n',[Name]). - -handle_option(Name,Value) :- - chr_error(syntax((:- chr_option(Name,Value))),'Invalid option value ~w: consult the manual for valid option values.\n',[Value]). - -option_definition(optimize,experimental,Flags) :- - Flags = [ functional_dependency_analysis - on, - check_unnecessary_active - full, - reorder_heads - on, - set_semantics_rule - on, - storage_analysis - on, - guard_via_reschedule - on, - guard_simplification - on, - check_impossible_rules - on, - occurrence_subsumption - on, - observation_analysis - on, - ai_observation_analysis - on, - late_allocation - on, - reduced_indexing - on, - term_indexing - on, - inline_insertremove - on, - mixed_stores - on - ]. -option_definition(optimize,full,Flags) :- - Flags = [ functional_dependency_analysis - on, - check_unnecessary_active - full, - reorder_heads - on, - set_semantics_rule - on, - storage_analysis - on, - guard_via_reschedule - on, - guard_simplification - on, - check_impossible_rules - on, - occurrence_subsumption - on, - observation_analysis - on, - ai_observation_analysis - on, - late_allocation - on, - reduced_indexing - on, - inline_insertremove - on, - mixed_stores - off - ]. - -option_definition(optimize,off,Flags) :- - Flags = [ functional_dependency_analysis - off, - check_unnecessary_active - off, - reorder_heads - off, - set_semantics_rule - off, - storage_analysis - off, - guard_via_reschedule - off, - guard_simplification - off, - check_impossible_rules - off, - occurrence_subsumption - off, - observation_analysis - off, - ai_observation_analysis - off, - late_allocation - off, - reduced_indexing - off - ]. - -option_definition(functional_dependency_analysis,on,Flags) :- - Flags = [ functional_dependency_analysis - on ]. -option_definition(functional_dependency_analysis,off,Flags) :- - Flags = [ functional_dependency_analysis - off ]. - -option_definition(set_semantics_rule,on,Flags) :- - Flags = [ set_semantics_rule - on ]. -option_definition(set_semantics_rule,off,Flags) :- - Flags = [ set_semantics_rule - off ]. - -option_definition(check_unnecessary_active,full,Flags) :- - Flags = [ check_unnecessary_active - full ]. -option_definition(check_unnecessary_active,simplification,Flags) :- - Flags = [ check_unnecessary_active - simplification ]. -option_definition(check_unnecessary_active,off,Flags) :- - Flags = [ check_unnecessary_active - off ]. - -option_definition(check_guard_bindings,on,Flags) :- - Flags = [ guard_locks - on ]. -option_definition(check_guard_bindings,off,Flags) :- - Flags = [ guard_locks - off ]. - -option_definition(reduced_indexing,on,Flags) :- - Flags = [ reduced_indexing - on ]. -option_definition(reduced_indexing,off,Flags) :- - Flags = [ reduced_indexing - off ]. - -option_definition(storage_analysis,on,Flags) :- - Flags = [ storage_analysis - on ]. -option_definition(storage_analysis,off,Flags) :- - Flags = [ storage_analysis - off ]. - -option_definition(guard_simplification,on,Flags) :- - Flags = [ guard_simplification - on ]. -option_definition(guard_simplification,off,Flags) :- - Flags = [ guard_simplification - off ]. - -option_definition(check_impossible_rules,on,Flags) :- - Flags = [ check_impossible_rules - on ]. -option_definition(check_impossible_rules,off,Flags) :- - Flags = [ check_impossible_rules - off ]. - -option_definition(occurrence_subsumption,on,Flags) :- - Flags = [ occurrence_subsumption - on ]. -option_definition(occurrence_subsumption,off,Flags) :- - Flags = [ occurrence_subsumption - off ]. - -option_definition(late_allocation,on,Flags) :- - Flags = [ late_allocation - on ]. -option_definition(late_allocation,off,Flags) :- - Flags = [ late_allocation - off ]. - -option_definition(inline_insertremove,on,Flags) :- - Flags = [ inline_insertremove - on ]. -option_definition(inline_insertremove,off,Flags) :- - Flags = [ inline_insertremove - off ]. - -option_definition(type_definition,TypeDef,[]) :- - ( nonvar(TypeDef) -> - TypeDef = type(T,D), - chr_translate:type_definition(T,D) - ; true). -option_definition(type_declaration,TypeDecl,[]) :- - ( nonvar(TypeDecl) -> - functor(TypeDecl,F,A), - TypeDecl =.. [_|ArgTypes], - chr_translate:constraint_type(F/A,ArgTypes) - ; true). - -option_definition(mode,ModeDecl,[]) :- - ( nonvar(ModeDecl) -> - functor(ModeDecl,F,A), - ModeDecl =.. [_|ArgModes], - chr_translate:constraint_mode(F/A,ArgModes) - ; true). -option_definition(store,FA-Store,[]) :- - chr_translate:store_type(FA,Store). - -%------------------------------------------------------------------------------% -option_definition(declare_stored_constraints,off,[declare_stored_constraints-off]). -option_definition(declare_stored_constraints,on ,[declare_stored_constraints-on]). - -option_definition(stored,F/A,[]) :- - chr_translate:stored_assertion(F/A). -%------------------------------------------------------------------------------% -option_definition(experiment,off,[experiment-off]). -option_definition(experiment,on,[experiment-on]). -option_definition(experimental,off,[experiment-off]). -option_definition(experimental,on,[experiment-on]). -%------------------------------------------------------------------------------% -option_definition(debug,off,Flags) :- - option_definition(optimize,full,Flags2), - Flags = [ debugable - off | Flags2]. -option_definition(debug,on,Flags) :- - ( local_current_prolog_flag(generate_debug_info,false) -> - % TODO: should not be allowed when nodebug flag is set in SWI-Prolog - chr_warning(any,':- chr_option(debug,on) inconsistent with current_prolog_flag(generate_debug_info,off\n\tCHR option is ignored!\n)',[]), - Flags = [] - ; - Flags = [ debugable - on ] - ). - -option_definition(store_counter,off,[]). -option_definition(store_counter,on,[store_counter-on]). - -option_definition(observation,off,Flags) :- - Flags = [ - observation_analysis - off, - ai_observation_analysis - off, - late_allocation - off, - storage_analysis - off - ]. -option_definition(observation,on,Flags) :- - Flags = [ - observation_analysis - on, - ai_observation_analysis - on - ]. -option_definition(observation,regular,Flags) :- - Flags = [ - observation_analysis - on, - ai_observation_analysis - off - ]. -option_definition(observation,ai,Flags) :- - Flags = [ - observation_analysis - off, - ai_observation_analysis - on - ]. - -option_definition(store_in_guards, on, [store_in_guards - on]). -option_definition(store_in_guards, off, [store_in_guards - off]). - -option_definition(solver_events,NMod,Flags) :- - Flags = [solver_events - NMod]. - -option_definition(toplevel_show_store,on,Flags) :- - Flags = [toplevel_show_store - on]. - -option_definition(toplevel_show_store,off,Flags) :- - Flags = [toplevel_show_store - off]. - -option_definition(term_indexing,on,Flags) :- - Flags = [term_indexing - on]. -option_definition(term_indexing,off,Flags) :- - Flags = [term_indexing - off]. - -option_definition(verbosity,on,Flags) :- - Flags = [verbosity - on]. -option_definition(verbosity,off,Flags) :- - Flags = [verbosity - off]. - -option_definition(ht_removal,on,Flags) :- - Flags = [ht_removal - on]. -option_definition(ht_removal,off,Flags) :- - Flags = [ht_removal - off]. - -option_definition(mixed_stores,on,Flags) :- - Flags = [mixed_stores - on]. -option_definition(mixed_stores,off,Flags) :- - Flags = [mixed_stores - off]. - -option_definition(line_numbers,on,Flags) :- - Flags = [line_numbers - on]. -option_definition(line_numbers,off,Flags) :- - Flags = [line_numbers - off]. - -option_definition(dynattr,on,Flags) :- - Flags = [dynattr - on]. -option_definition(dynattr,off,Flags) :- - Flags = [dynattr - off]. - -option_definition(verbose,off,[verbose-off]). -option_definition(verbose,on,[verbose-on]). - -option_definition(dump,off,[dump-off]). -option_definition(dump,on,[dump-on]). - -init_chr_pp_flags :- - chr_pp_flag_definition(Name,[DefaultValue|_]), - set_chr_pp_flag(Name,DefaultValue), - fail. -init_chr_pp_flags. - -set_chr_pp_flags([]). -set_chr_pp_flags([Name-Value|Flags]) :- - set_chr_pp_flag(Name,Value), - set_chr_pp_flags(Flags). - -set_chr_pp_flag(Name,Value) :- - atom_concat('$chr_pp_',Name,GlobalVar), - nb_setval(GlobalVar,Value). - -chr_pp_flag_definition(functional_dependency_analysis,[off,on]). -chr_pp_flag_definition(check_unnecessary_active,[off,full,simplification]). -chr_pp_flag_definition(reorder_heads,[off,on]). -chr_pp_flag_definition(set_semantics_rule,[off,on]). -chr_pp_flag_definition(guard_via_reschedule,[off,on]). -chr_pp_flag_definition(guard_locks,[on,off]). -chr_pp_flag_definition(storage_analysis,[off,on]). -chr_pp_flag_definition(debugable,[on,off]). -chr_pp_flag_definition(reduced_indexing,[off,on]). -chr_pp_flag_definition(observation_analysis,[off,on]). -chr_pp_flag_definition(ai_observation_analysis,[off,on]). -chr_pp_flag_definition(store_in_guards,[off,on]). -chr_pp_flag_definition(late_allocation,[off,on]). -chr_pp_flag_definition(store_counter,[off,on]). -chr_pp_flag_definition(guard_simplification,[off,on]). -chr_pp_flag_definition(check_impossible_rules,[off,on]). -chr_pp_flag_definition(occurrence_subsumption,[off,on]). -chr_pp_flag_definition(observation,[off,on]). -chr_pp_flag_definition(show,[off,on]). -chr_pp_flag_definition(inline_insertremove,[on,off]). -chr_pp_flag_definition(solver_events,[none,_]). -chr_pp_flag_definition(toplevel_show_store,[on,off]). -chr_pp_flag_definition(term_indexing,[off,on]). -chr_pp_flag_definition(verbosity,[on,off]). -chr_pp_flag_definition(ht_removal,[off,on]). -chr_pp_flag_definition(mixed_stores,[on,off]). -chr_pp_flag_definition(line_numbers,[off,on]). -chr_pp_flag_definition(dynattr,[off,on]). -chr_pp_flag_definition(experiment,[off,on]). - % emit compiler inferred code -chr_pp_flag_definition(verbose,[off,on]). - % emit input code and output code -chr_pp_flag_definition(dump,[off,on]). - -chr_pp_flag_definition(declare_stored_constraints,[off,on]). - -chr_pp_flag(Name,Value) :- - atom_concat('$chr_pp_',Name,GlobalVar), - nb_getval(GlobalVar,V), - ( V == [] -> - chr_pp_flag_definition(Name,[Value|_]) - ; - V = Value - ). - - -% TODO: add whatever goes wrong with (debug,on), (optimize,full) combo here! -% trivial example of what does go wrong: -% b <=> true. -% !!! -sanity_check :- - chr_pp_flag(store_in_guards, on), - chr_pp_flag(ai_observation_analysis, on), - chr_warning(any, 'ai_observation_analysis should be turned off when using store_in_guards\n', []), - fail. -sanity_check. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/LGPL/chr/chr_compiler_utility.pl b/LGPL/chr/chr_compiler_utility.pl deleted file mode 100644 index 977de4234..000000000 --- a/LGPL/chr/chr_compiler_utility.pl +++ /dev/null @@ -1,314 +0,0 @@ -/* $Id: chr_compiler_utility.pl,v 1.4 2008-03-13 17:43:13 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2005-2006, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ -:- module(chr_compiler_utility, - [ time/2 - , replicate/3 - , pair_all_with/3 - , conj2list/2 - , list2conj/2 - , disj2list/2 - , list2disj/2 - , variable_replacement/3 - , variable_replacement/4 - , identical_rules/2 - , identical_guarded_rules/2 - , copy_with_variable_replacement/3 - , my_term_copy/3 - , my_term_copy/4 - , atom_concat_list/2 - , atomic_concat/3 - , init/2 - , member2/3 - , select2/6 - , set_elems/2 - , instrument_goal/4 - , sort_by_key/3 - , arg1/3 - , wrap_in_functor/3 - , tree_set_empty/1 - , tree_set_memberchk/2 - , tree_set_add/3 - ]). - -:- use_module(pairlist). -:- use_module(library(lists), [permutation/2]). -:- use_module(library(assoc)). - -%% SICStus begin -%% use_module(library(terms),[term_variables/2]). -%% SICStus end - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% time(Phase,Goal) :- -% statistics(runtime,[T1|_]), -% call(Goal), -% statistics(runtime,[T2|_]), -% T is T2 - T1, -% format(' ~w ~46t ~D~80| ms\n',[Phase,T]), -% deterministic(Det), -% ( Det == true -> -% true -% ; -% format('\t\tNOT DETERMINISTIC!\n',[]) -% ). -time(_,Goal) :- call(Goal). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -replicate(N,E,L) :- - ( N =< 0 -> - L = [] - ; - L = [E|T], - M is N - 1, - replicate(M,E,T) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -pair_all_with([],_,[]). -pair_all_with([X|Xs],Y,[X-Y|Rest]) :- - pair_all_with(Xs,Y,Rest). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -conj2list(Conj,L) :- %% transform conjunctions to list - conj2list(Conj,L,[]). - -conj2list(Var,L,T) :- - var(Var), !, - L = [Var|T]. -conj2list(true,L,L) :- !. -conj2list(Conj,L,T) :- - Conj = (G1,G2), !, - conj2list(G1,L,T1), - conj2list(G2,T1,T). -conj2list(G,[G | T],T). - -disj2list(Conj,L) :- %% transform disjunctions to list - disj2list(Conj,L,[]). -disj2list(Conj,L,T) :- - Conj = (fail;G2), !, - disj2list(G2,L,T). -disj2list(Conj,L,T) :- - Conj = (G1;G2), !, - disj2list(G1,L,T1), - disj2list(G2,T1,T). -disj2list(G,[G | T],T). - -list2conj([],true). -list2conj([G],X) :- !, X = G. -list2conj([G|Gs],C) :- - ( G == true -> %% remove some redundant trues - list2conj(Gs,C) - ; - C = (G,R), - list2conj(Gs,R) - ). - -list2disj([],fail). -list2disj([G],X) :- !, X = G. -list2disj([G|Gs],C) :- - ( G == fail -> %% remove some redundant fails - list2disj(Gs,C) - ; - C = (G;R), - list2disj(Gs,R) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% check wether two rules are identical - -identical_guarded_rules(rule(H11,H21,G1,_),rule(H12,H22,G2,_)) :- - G1 == G2, - permutation(H11,P1), - P1 == H12, - permutation(H21,P2), - P2 == H22. - -identical_rules(rule(H11,H21,G1,B1),rule(H12,H22,G2,B2)) :- - G1 == G2, - identical_bodies(B1,B2), - permutation(H11,P1), - P1 == H12, - permutation(H21,P2), - P2 == H22. - -identical_bodies(B1,B2) :- - ( B1 = (X1 = Y1), - B2 = (X2 = Y2) -> - ( X1 == X2, - Y1 == Y2 - ; X1 == Y2, - X2 == Y1 - ), - ! - ; B1 == B2 - ). - -% replace variables in list - -copy_with_variable_replacement(X,Y,L) :- - ( var(X) -> - ( lookup_eq(L,X,Y) -> - true - ; X = Y - ) - ; functor(X,F,A), - functor(Y,F,A), - X =.. [_|XArgs], - Y =.. [_|YArgs], - copy_with_variable_replacement_l(XArgs,YArgs,L) - ). - -copy_with_variable_replacement_l([],[],_). -copy_with_variable_replacement_l([X|Xs],[Y|Ys],L) :- - copy_with_variable_replacement(X,Y,L), - copy_with_variable_replacement_l(Xs,Ys,L). - -% build variable replacement list - -variable_replacement(X,Y,L) :- - variable_replacement(X,Y,[],L). - -variable_replacement(X,Y,L1,L2) :- - ( var(X) -> - var(Y), - ( lookup_eq(L1,X,Z) -> - Z == Y, - L2 = L1 - ; ( X == Y -> L2=L1 ; L2 = [X-Y,Y-X|L1]) - ) - ; X =.. [F|XArgs], - nonvar(Y), - Y =.. [F|YArgs], - variable_replacement_l(XArgs,YArgs,L1,L2) - ). - -variable_replacement_l([],[],L,L). -variable_replacement_l([X|Xs],[Y|Ys],L1,L3) :- - variable_replacement(X,Y,L1,L2), - variable_replacement_l(Xs,Ys,L2,L3). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -my_term_copy(X,Dict,Y) :- - my_term_copy(X,Dict,_,Y). - -my_term_copy(X,Dict1,Dict2,Y) :- - ( var(X) -> - ( lookup_eq(Dict1,X,Y) -> - Dict2 = Dict1 - ; Dict2 = [X-Y|Dict1] - ) - ; functor(X,XF,XA), - functor(Y,XF,XA), - X =.. [_|XArgs], - Y =.. [_|YArgs], - my_term_copy_list(XArgs,Dict1,Dict2,YArgs) - ). - -my_term_copy_list([],Dict,Dict,[]). -my_term_copy_list([X|Xs],Dict1,Dict3,[Y|Ys]) :- - my_term_copy(X,Dict1,Dict2,Y), - my_term_copy_list(Xs,Dict2,Dict3,Ys). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -atom_concat_list([X],X) :- ! . -atom_concat_list([X|Xs],A) :- - atom_concat_list(Xs,B), - atomic_concat(X,B,A). - -atomic_concat(A,B,C) :- - make_atom(A,AA), - make_atom(B,BB), - atom_concat(AA,BB,C). - -make_atom(A,AA) :- - ( - atom(A) -> - AA = A - ; - number(A) -> - number_codes(A,AL), - atom_codes(AA,AL) - ). - - - -set_elems([],_). -set_elems([X|Xs],X) :- - set_elems(Xs,X). - -init([],[]). -init([_],[]) :- !. -init([X|Xs],[X|R]) :- - init(Xs,R). - -member2([X|_],[Y|_],X-Y). -member2([_|Xs],[_|Ys],P) :- - member2(Xs,Ys,P). - -select2(X, Y, [X|Xs], [Y|Ys], Xs, Ys). -select2(X, Y, [X1|Xs], [Y1|Ys], [X1|NXs], [Y1|NYs]) :- - select2(X, Y, Xs, Ys, NXs, NYs). - -instrument_goal(Goal,Pre,Post,(Pre,Goal,Post)). - -sort_by_key(List,Keys,SortedList) :- - pairup(Keys,List,Pairs), - sort(Pairs,SortedPairs), - once(pairup(_,SortedList,SortedPairs)). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -arg1(Term,Index,Arg) :- arg(Index,Term,Arg). - -wrap_in_functor(Functor,X,Term) :- - Term =.. [Functor,X]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -tree_set_empty(TreeSet) :- empty_assoc(TreeSet). -tree_set_memberchk(Element,TreeSet) :- get_assoc(Element,TreeSet,_). -tree_set_add(TreeSet,Element,NTreeSet) :- put_assoc(Element,TreeSet,x,NTreeSet). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -:- dynamic - user:goal_expansion/2. -:- multifile - user:goal_expansion/2. - -user:goal_expansion(arg1(Term,Index,Arg), arg(Index,Term,Arg)). -user:goal_expansion(wrap_in_functor(Functor,In,Out), Goal) :- - ( atom(Functor), var(Out) -> - Out =.. [Functor,In], - Goal = true - ; - Goal = (Out =.. [Functor,In]) - ). - diff --git a/LGPL/chr/chr_debug.pl b/LGPL/chr/chr_debug.pl deleted file mode 100644 index e87c47281..000000000 --- a/LGPL/chr/chr_debug.pl +++ /dev/null @@ -1,62 +0,0 @@ -/* $Id: chr_debug.pl,v 1.3 2008-03-13 14:37:59 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.ac.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -:- module(chr_debug, - [ chr_show_store/1, % +Module - find_chr_constraint/1 - ]). -:- use_module(chr(chr_runtime)). -:- use_module(library(lists)). -:- set_prolog_flag(generate_debug_info, false). - - -% chr_show_store(+Module) -% -% Prints all suspended constraints of module Mod to the standard -% output. - -chr_show_store(Mod) :- - ( - Mod:'$enumerate_suspensions'(Susp), -% arg(6,Susp,C), - Susp =.. [_,_,_,_,_,_,F|Arg], - functor(F,Fun,_), - C =.. [Fun|Arg], - print(C),nl, % allows use of portray to control printing - fail - ; - true - ). - -find_chr_constraint(C) :- - chr:'$chr_module'(Mod), - Mod:'$enumerate_suspensions'(Susp), - arg(6,Susp,C). diff --git a/LGPL/chr/chr_hashtable_store.pl b/LGPL/chr/chr_hashtable_store.pl deleted file mode 100644 index 35a82f5d8..000000000 --- a/LGPL/chr/chr_hashtable_store.pl +++ /dev/null @@ -1,423 +0,0 @@ -/* $Id: chr_hashtable_store.pl,v 1.4 2008-03-13 17:43:13 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ -% author: Tom Schrijvers -% email: Tom.Schrijvers@cs.kuleuven.be -% copyright: K.U.Leuven, 2004 - -:- module(chr_hashtable_store, - [ new_ht/1, - lookup_ht/3, - lookup_ht1/4, - lookup_ht2/4, - insert_ht/3, - insert_ht/4, - delete_ht/3, - delete_ht1/4, - delete_first_ht/3, - value_ht/2, - stats_ht/1, - stats_ht/1 - ]). - -:- use_module(pairlist). -:- use_module(hprolog). -:- use_module(library(lists)). - -:- multifile user:goal_expansion/2. -:- dynamic user:goal_expansion/2. - -user:goal_expansion(term_hash(Term,Hash),hash_term(Term,Hash)). - -% term_hash(Term,Hash) :- -% hash_term(Term,Hash). -initial_capacity(89). - -new_ht(HT) :- - initial_capacity(Capacity), - new_ht(Capacity,HT). - -new_ht(Capacity,HT) :- - functor(T1,t,Capacity), - HT = ht(Capacity,0,Table), - Table = T1. - -lookup_ht(HT,Key,Values) :- - term_hash(Key,Hash), - lookup_ht1(HT,Hash,Key,Values). -/* - HT = ht(Capacity,_,Table), - Index is (Hash mod Capacity) + 1, - arg(Index,Table,Bucket), - nonvar(Bucket), - ( Bucket = K-Vs -> - K == Key, - Values = Vs - ; - lookup(Bucket,Key,Values) - ). -*/ - -% :- load_foreign_library(chr_support). - -/* -lookup_ht1(HT,Hash,Key,Values) :- - ( lookup_ht1_(HT,Hash,Key,Values) -> - true - ; - ( lookup_ht1__(HT,Hash,Key,Values) -> - writeln(lookup_ht1(HT,Hash,Key,Values)), - throw(error) - ; - fail - ) - ). -*/ - -lookup_ht1(HT,Hash,Key,Values) :- - HT = ht(Capacity,_,Table), - Index is (Hash mod Capacity) + 1, - arg(Index,Table,Bucket), - nonvar(Bucket), - ( Bucket = K-Vs -> - K == Key, - Values = Vs - ; - lookup(Bucket,Key,Values) - ). - -lookup_ht2(HT,Key,Values,Index) :- - term_hash(Key,Hash), - HT = ht(Capacity,_,Table), - Index is (Hash mod Capacity) + 1, - arg(Index,Table,Bucket), - nonvar(Bucket), - ( Bucket = K-Vs -> - K == Key, - Values = Vs - ; - lookup(Bucket,Key,Values) - ). - -lookup_pair_eq([P | KVs],Key,Pair) :- - P = K-_, - ( K == Key -> - P = Pair - ; - lookup_pair_eq(KVs,Key,Pair) - ). - -insert_ht(HT,Key,Value) :- - term_hash(Key,Hash), - HT = ht(Capacity0,Load,Table0), - LookupIndex is (Hash mod Capacity0) + 1, - arg(LookupIndex,Table0,LookupBucket), - ( var(LookupBucket) -> - LookupBucket = Key - [Value] - ; LookupBucket = K-Values -> - ( K == Key -> - setarg(2,LookupBucket,[Value|Values]) - ; - setarg(LookupIndex,Table0,[Key-[Value],LookupBucket]) - ) - ; - ( lookup_pair_eq(LookupBucket,Key,Pair) -> - Pair = _-Values, - setarg(2,Pair,[Value|Values]) - ; - setarg(LookupIndex,Table0,[Key-[Value]|LookupBucket]) - ) - ), - NLoad is Load + 1, - setarg(2,HT,NLoad), - ( Load == Capacity0 -> - expand_ht(HT,_Capacity) - ; - true - ). - -insert_ht1(HT,Key,Hash,Value) :- - HT = ht(Capacity0,Load,Table0), - LookupIndex is (Hash mod Capacity0) + 1, - arg(LookupIndex,Table0,LookupBucket), - ( var(LookupBucket) -> - LookupBucket = Key - [Value] - ; LookupBucket = K-Values -> - ( K == Key -> - setarg(2,LookupBucket,[Value|Values]) - ; - setarg(LookupIndex,Table0,[Key-[Value],LookupBucket]) - ) - ; - ( lookup_pair_eq(LookupBucket,Key,Pair) -> - Pair = _-Values, - setarg(2,Pair,[Value|Values]) - ; - setarg(LookupIndex,Table0,[Key-[Value]|LookupBucket]) - ) - ), - NLoad is Load + 1, - setarg(2,HT,NLoad), - ( Load == Capacity0 -> - expand_ht(HT,_Capacity) - ; - true - ). - -% LDK: insert version with extra argument denoting result - -insert_ht(HT,Key,Value,Result) :- - HT = ht(Capacity,Load,Table), - term_hash(Key,Hash), - LookupIndex is (Hash mod Capacity) + 1, - arg(LookupIndex,Table,LookupBucket), - ( var(LookupBucket) - -> Result = [Value], - LookupBucket = Key - Result, - NewLoad is Load + 1 - ; LookupBucket = K - V - -> ( K = Key - -> Result = [Value|V], - setarg(2,LookupBucket,Result), - NewLoad = Load - ; Result = [Value], - setarg(LookupIndex,Table,[Key - Result,LookupBucket]), - NewLoad is Load + 1 - ) - ; ( lookup_pair_eq(LookupBucket,Key,Pair) - -> Pair = _-Values, - Result = [Value|Values], - setarg(2,Pair,Result), - NewLoad = Load - ; Result = [Value], - setarg(LookupIndex,Table,[Key - Result|LookupBucket]), - NewLoad is Load + 1 - ) - ), - setarg(2,HT,NewLoad), - ( NewLoad > Capacity - -> expand_ht(HT,_) - ; true - ). - -% LDK: deletion of the first element of a bucket -delete_first_ht(HT,Key,Values) :- - HT = ht(Capacity,Load,Table), - term_hash(Key,Hash), - Index is (Hash mod Capacity) + 1, - arg(Index,Table,Bucket), - ( Bucket = _-[_|Values] - -> ( Values = [] - -> setarg(Index,Table,_), - NewLoad is Load - 1 - ; setarg(2,Bucket,Values), - NewLoad = Load - ) - ; lookup_pair_eq(Bucket,Key,Pair) - -> Pair = _-[_|Values], - ( Values = [] - -> pairlist_delete_eq(Bucket,Key,NewBucket), - ( NewBucket = [] - -> setarg(Index,Table,_) - ; NewBucket = [OtherPair] - -> setarg(Index,Table,OtherPair) - ; setarg(Index,Table,NewBucket) - ), - NewLoad is Load - 1 - ; setarg(2,Pair,Values), - NewLoad = Load - ) - ). - -delete_ht(HT,Key,Value) :- - HT = ht(Capacity,Load,Table), - NLoad is Load - 1, - term_hash(Key,Hash), - Index is (Hash mod Capacity) + 1, - arg(Index,Table,Bucket), - ( /* var(Bucket) -> - true - ; */ Bucket = _K-Vs -> - ( /* _K == Key, */ - delete_first_fail(Vs,Value,NVs) -> - setarg(2,HT,NLoad), - ( NVs == [] -> - setarg(Index,Table,_) - ; - setarg(2,Bucket,NVs) - ) - ; - true - ) - ; - ( lookup_pair_eq(Bucket,Key,Pair), - Pair = _-Vs, - delete_first_fail(Vs,Value,NVs) -> - setarg(2,HT,NLoad), - ( NVs == [] -> - pairlist_delete_eq(Bucket,Key,NBucket), - ( NBucket = [Singleton] -> - setarg(Index,Table,Singleton) - ; - setarg(Index,Table,NBucket) - ) - ; - setarg(2,Pair,NVs) - ) - ; - true - ) - ). - -delete_first_fail([X | Xs], Y, Zs) :- - ( X == Y -> - Zs = Xs - ; - Zs = [X | Zs1], - delete_first_fail(Xs, Y, Zs1) - ). - -delete_ht1(HT,Key,Value,Index) :- - HT = ht(_Capacity,Load,Table), - NLoad is Load - 1, - % term_hash(Key,Hash), - % Index is (Hash mod _Capacity) + 1, - arg(Index,Table,Bucket), - ( /* var(Bucket) -> - true - ; */ Bucket = _K-Vs -> - ( /* _K == Key, */ - delete_first_fail(Vs,Value,NVs) -> - setarg(2,HT,NLoad), - ( NVs == [] -> - setarg(Index,Table,_) - ; - setarg(2,Bucket,NVs) - ) - ; - true - ) - ; - ( lookup_pair_eq(Bucket,Key,Pair), - Pair = _-Vs, - delete_first_fail(Vs,Value,NVs) -> - setarg(2,HT,NLoad), - ( NVs == [] -> - pairlist_delete_eq(Bucket,Key,NBucket), - ( NBucket = [Singleton] -> - setarg(Index,Table,Singleton) - ; - setarg(Index,Table,NBucket) - ) - ; - setarg(2,Pair,NVs) - ) - ; - true - ) - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -value_ht(HT,Value) :- - HT = ht(Capacity,_,Table), - value_ht(1,Capacity,Table,Value). - -value_ht(I,N,Table,Value) :- - I =< N, - arg(I,Table,Bucket), - ( - nonvar(Bucket), - ( Bucket = _-Vs -> - true - ; - member(_-Vs,Bucket) - ), - member(Value,Vs) - ; - J is I + 1, - value_ht(J,N,Table,Value) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -expand_ht(HT,NewCapacity) :- - HT = ht(Capacity,_,Table), - NewCapacity is Capacity * 2 + 1, - functor(NewTable,t,NewCapacity), - setarg(1,HT,NewCapacity), - setarg(3,HT,NewTable), - expand_copy(Table,1,Capacity,NewTable,NewCapacity). - -expand_copy(Table,I,N,NewTable,NewCapacity) :- - ( I > N -> - true - ; - arg(I,Table,Bucket), - ( var(Bucket) -> - true - ; Bucket = Key - Value -> - expand_insert(NewTable,NewCapacity,Key,Value) - ; - expand_inserts(Bucket,NewTable,NewCapacity) - ), - J is I + 1, - expand_copy(Table,J,N,NewTable,NewCapacity) - ). - -expand_inserts([],_,_). -expand_inserts([K-V|R],Table,Capacity) :- - expand_insert(Table,Capacity,K,V), - expand_inserts(R,Table,Capacity). - -expand_insert(Table,Capacity,K,V) :- - term_hash(K,Hash), - Index is (Hash mod Capacity) + 1, - arg(Index,Table,Bucket), - ( var(Bucket) -> - Bucket = K - V - ; Bucket = _-_ -> - setarg(Index,Table,[K-V,Bucket]) - ; - setarg(Index,Table,[K-V|Bucket]) - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -stats_ht(HT) :- - HT = ht(Capacity,Load,Table), - format('HT load = ~w / ~w\n',[Load,Capacity]), - ( between(1,Capacity,Index), - arg(Index,Table,Entry), - ( var(Entry) -> Size = 0 - ; Entry = _-_ -> Size = 1 - ; length(Entry,Size) - ), - format('~w : ~w\n',[Index,Size]), - fail - ; - true - ). diff --git a/LGPL/chr/chr_integertable_store.pl b/LGPL/chr/chr_integertable_store.pl deleted file mode 100644 index 82f783afe..000000000 --- a/LGPL/chr/chr_integertable_store.pl +++ /dev/null @@ -1,136 +0,0 @@ -/* $Id: chr_integertable_store.pl,v 1.3 2008-03-13 14:37:59 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - based on chr_hashtable_store (by Tom Schrijvers) - Author: Jon Sneyers - E-mail: Jon.Sneyers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2005, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -% is it safe to use nb_setarg here? - -:- module(chr_integertable_store, - [ new_iht/1, - lookup_iht/3, - insert_iht/3, - delete_iht/3, - value_iht/2 - ]). -:- use_module(library(lists)). -:- use_module(hprolog). - -%initial_capacity(65536). -%initial_capacity(1024). -initial_capacity(8). -%initial_capacity(2). -%initial_capacity(1). - - -new_iht(HT) :- - initial_capacity(Capacity), - new_iht(Capacity,HT). - -new_iht(Capacity,HT) :- - functor(T1,t,Capacity), - HT = ht(Capacity,Table), - Table = T1. - -lookup_iht(ht(_,Table),Int,Values) :- - Index is Int + 1, - arg(Index,Table,Values), - Values \= []. -% nonvar(Values). - -insert_iht(HT,Int,Value) :- - Index is Int + 1, - arg(2,HT,Table), - (arg(Index,Table,Bucket) -> - ( var(Bucket) -> - Bucket = [Value] - ; - setarg(Index,Table,[Value|Bucket]) - ) - ; % index > capacity - Capacity is 1< - setarg(Index,Table,[]) - ; - delete_first_fail(Bucket,Value,NBucket), - setarg(Index,Table,NBucket) - ). -%delete_first_fail([], Y, []). -%delete_first_fail([_], _, []) :- !. -delete_first_fail([X | Xs], Y, Xs) :- - X == Y, !. -delete_first_fail([X | Xs], Y, [X | Zs]) :- - delete_first_fail(Xs, Y, Zs). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -value_iht(HT,Value) :- - HT = ht(Capacity,Table), - value_iht(1,Capacity,Table,Value). - -value_iht(I,N,Table,Value) :- - I =< N, - arg(I,Table,Bucket), - ( - nonvar(Bucket), - member(Value,Bucket) - ; - J is I + 1, - value_iht(J,N,Table,Value) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -expand_iht(HT,NewCapacity) :- - HT = ht(Capacity,Table), - functor(NewTable,t,NewCapacity), - setarg(1,HT,NewCapacity), - setarg(2,HT,NewTable), - expand_copy(Table,1,Capacity,NewTable,NewCapacity). - -expand_copy(Table,I,N,NewTable,NewCapacity) :- - ( I > N -> - true - ; - arg(I,Table,Bucket), - ( var(Bucket) -> - true - ; - arg(I,NewTable,Bucket) - ), - J is I + 1, - expand_copy(Table,J,N,NewTable,NewCapacity) - ). diff --git a/LGPL/chr/chr_messages.pl b/LGPL/chr/chr_messages.pl deleted file mode 100644 index 30ae199df..000000000 --- a/LGPL/chr/chr_messages.pl +++ /dev/null @@ -1,173 +0,0 @@ -/* $Id: chr_messages.pl,v 1.3 2008-03-13 14:37:59 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Jan Wielemaker and Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -:- module(chr_messages, - [ chr_message/3 % +CHR Message, Out, Rest - ]). -:- use_module(chr(chr_runtime)). - -:- discontiguous - chr_message/3. - -% compiler messages - -chr_message(compilation_failed(From)) --> - [ 'CHR Failed to compile ~w'-[From] ]. - -% debug messages - -chr_message(prompt) --> - [ at_same_line, ' ? ', flush ]. -chr_message(command(Command)) --> - [ at_same_line, '[~w]'-[Command] ]. -chr_message(invalid_command) --> - [ nl, 'CHR: Not a valid debug option. Use ? for help.' ]. -chr_message(debug_options) --> - { bagof(Ls-Cmd, - bagof(L, 'chr debug command'(L, Cmd), Ls), - Lines) - }, - [ 'CHR Debugger commands:', nl, nl ], - debug_commands(Lines), - [ nl ]. - -debug_commands([]) --> - []. -debug_commands([Ls-Cmd|T]) --> - [ '\t' ], chars(Ls), [ '~t~28|~w'-[Cmd], nl ], - debug_commands(T). - -chars([C]) --> !, - char(C). -chars([C|T]) --> - char(C), [', '], - chars(T). - -char(' ') --> !, ['']. -char('\r') --> !, ['']. -char(end_of_file) --> !, ['EOF']. -char(C) --> [C]. - - -chr_message(ancestors(History, Depth)) --> - [ 'CHR Ancestors:', nl ], - ancestors(History, Depth). - -ancestors([], _) --> - []. -ancestors([Event|Events], Depth) --> - [ '\t' ], event(Event, Depth), [ nl ], - { NDepth is Depth - 1 - }, - ancestors(Events, NDepth). - - -% debugging ports - -chr_message(event(Port, Depth)) --> - [ 'CHR: ' ], - event(Port, Depth), - [ flush ]. % do not emit a newline - -event(Port, Depth) --> - depth(Depth), - port(Port). -event(apply(H1,H2,G,B), Depth) --> - depth(Depth), - [ 'Apply: ' ], - rule(H1,H2,G,B). -event(try(H1,H2,G,B), Depth) --> - depth(Depth), - [ 'Try: ' ], - rule(H1,H2,G,B). -event(insert(#(_,Susp)), Depth) --> - depth(Depth), - [ 'Insert: ' ], - head(Susp). - -port(call(Susp)) --> - [ 'Call: ' ], - head(Susp). -port(wake(Susp)) --> - [ 'Wake: ' ], - head(Susp). -port(exit(Susp)) --> - [ 'Exit: ' ], - head(Susp). -port(fail(Susp)) --> - [ 'Fail: ' ], - head(Susp). -port(redo(Susp)) --> - [ 'Redo: ' ], - head(Susp). -port(remove(Susp)) --> - [ 'Remove: ' ], - head(Susp). - - -depth(Depth) --> - [ '~t(~D)~10| '-[Depth] ]. - -head(Susp) --> - { Susp =.. [_,ID,_,_,_,_|GoalArgs], Goal =.. GoalArgs - }, - [ '~w # <~w>'-[Goal, ID] ]. - -heads([H]) --> !, - head(H). -heads([H|T]) --> - head(H), - [ ', ' ], - heads(T). - - -% rule(H1, H2, G, B) -% -% Produce text for the CHR rule "H1 \ H2 [<=]=> G | B" - -rule(H1, H2, G, B) --> - rule_head(H1, H2), - rule_body(G, B). - -rule_head([], H2) --> !, - heads(H2), - [ ' ==> ' ]. -rule_head(H1, []) --> !, - heads(H1), - [ ' <=> ' ]. -rule_head(H1, H2) --> - heads(H2), [ ' \\ ' ], heads(H1), [' <=> ']. - - -rule_body(true, B) --> !, - [ '~w.'-[B] ]. -rule_body(G, B) --> - [ '~w | ~w.'-[G, B] ]. diff --git a/LGPL/chr/chr_op.pl b/LGPL/chr/chr_op.pl deleted file mode 100644 index 0d9b850f0..000000000 --- a/LGPL/chr/chr_op.pl +++ /dev/null @@ -1,50 +0,0 @@ -/* $Id: chr_op.pl,v 1.3 2008-03-13 14:38:00 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Operator Priorities - -:- op(1180, xfx, ==>). -:- op(1180, xfx, <=>). -:- op(1150, fx, constraints). -:- op(1150, fx, chr_constraint). -:- op(1150, fx, handler). -:- op(1150, fx, rules). -:- op(1100, xfx, \). -:- op(1200, xfx, @). % values from hProlog -:- op(1190, xfx, pragma). % values from hProlog -:- op( 500, yfx, #). % values from hProlog -%:- op(1100, xfx, '|'). -:- op(1150, fx, chr_type). -:- op(1130, xfx, --->). -:- op(1150, fx, (?)). -:- op(1150, fx, chr_declaration). diff --git a/LGPL/chr/chr_op2.pl b/LGPL/chr/chr_op2.pl deleted file mode 100644 index 9f8b24dee..000000000 --- a/LGPL/chr/chr_op2.pl +++ /dev/null @@ -1,51 +0,0 @@ -/* $Id: chr_op2.pl,v 1.3 2008-03-13 14:38:00 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Operator Priorities - - -% old version, without the type/mode operators - -:- op(1180, xfx, ==>). -:- op(1180, xfx, <=>). -:- op(1150, fx, constraints). -:- op(1150, fx, chr_constraint). -:- op(1150, fx, handler). -:- op(1150, fx, rules). -:- op(1100, xfx, \). -:- op(1200, xfx, @). % values from hProlog -:- op(1190, xfx, pragma). % values from hProlog -:- op( 500, yfx, #). % values from hProlog -%:- op(1100, xfx, '|'). -%:- op(1150, fx, chr_type). -%:- op(1130, xfx, --->). diff --git a/LGPL/chr/chr_runtime.pl b/LGPL/chr/chr_runtime.pl deleted file mode 100644 index fec914094..000000000 --- a/LGPL/chr/chr_runtime.pl +++ /dev/null @@ -1,902 +0,0 @@ -/* $Id: chr_runtime.pl,v 1.3 2008-03-13 14:38:00 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Christian Holzbaur and Tom Schrijvers - E-mail: christian@ai.univie.ac.at - Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. - - Distributed with SWI-Prolog under the above conditions with - permission from the authors. -*/ - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% _ _ _ -%% ___| |__ _ __ _ __ _ _ _ __ | |_(_)_ __ ___ ___ -%% / __| '_ \| '__| | '__| | | | '_ \| __| | '_ ` _ \ / _ \ -%% | (__| | | | | | | | |_| | | | | |_| | | | | | | __/ -%% \___|_| |_|_| |_| \__,_|_| |_|\__|_|_| |_| |_|\___| -%% -%% hProlog CHR runtime: -%% -%% * based on the SICStus CHR runtime by Christian Holzbaur -%% -%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% % Constraint Handling Rules version 2.2 % -%% % % -%% % (c) Copyright 1996-98 % -%% % LMU, Muenchen % -%% % % -%% % File: chr.pl % -%% % Author: Christian Holzbaur christian@ai.univie.ac.at % -%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% -%% * modified by Tom Schrijvers, K.U.Leuven, Tom.Schrijvers@cs.kuleuven.be -%% - ported to hProlog -%% - modified for eager suspension removal -%% -%% * First working version: 6 June 2003 -%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% SWI-Prolog changes -%% -%% * Added initialization directives for saved-states -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- module(chr_runtime, - [ 'chr sbag_del_element'/3, - 'chr sbag_member'/2, - 'chr merge_attributes'/3, - - 'chr run_suspensions'/1, - 'chr run_suspensions_loop'/1, - - 'chr run_suspensions_d'/1, - 'chr run_suspensions_loop_d'/1, - - 'chr insert_constraint_internal'/5, - 'chr remove_constraint_internal'/2, - 'chr allocate_constraint'/4, - 'chr activate_constraint'/3, - - 'chr default_store'/1, - - 'chr via_1'/2, - 'chr via_2'/3, - 'chr via'/2, - 'chr newvia_1'/2, - 'chr newvia_2'/3, - 'chr newvia'/2, - - 'chr lock'/1, - 'chr unlock'/1, - 'chr not_locked'/1, - 'chr none_locked'/1, - - 'chr update_mutable'/2, - 'chr get_mutable'/2, - 'chr create_mutable'/2, - - 'chr novel_production'/2, - 'chr extend_history'/2, - 'chr empty_history'/1, - - 'chr gen_id'/1, - - 'chr debug_event'/1, - 'chr debug command'/2, % Char, Command - - 'chr chr_indexed_variables'/2, - - 'chr all_suspensions'/3, - 'chr new_merge_attributes'/3, - 'chr normalize_attr'/2, - - 'chr select'/3, - - chr_show_store/1, % +Module - find_chr_constraint/1, - - chr_trace/0, - chr_notrace/0, - chr_leash/1 - ]). - -%% SWI begin -:- set_prolog_flag(generate_debug_info, false). -%% SWI end - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- use_module(hprolog). -:- include(chr_op). - -%% SICStus begin -%% :- use_module(hpattvars). -%% :- use_module(b_globval). -%% SICStus end - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% I N I T I A L I S A T I O N - -%% SWI begin -:- dynamic user:exception/3. -:- multifile user:exception/3. - -user:exception(undefined_global_variable, Name, retry) :- - chr_runtime_global_variable(Name), - chr_init. - -chr_runtime_global_variable(chr_id). -chr_runtime_global_variable(chr_global). -chr_runtime_global_variable(chr_debug). -chr_runtime_global_variable(chr_debug_history). - -chr_init :- - nb_setval(chr_id,0), - nb_setval(chr_global,_), - nb_setval(chr_debug,mutable(off)), % XXX - nb_setval(chr_debug_history,mutable([],0)). % XXX -%% SWI end - -%% SICStus begin -%% chr_init :- -%% nb_setval(chr_id,0). -%% SICStus end - -:- initialization chr_init. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Contents of former chr_debug.pl -% -% chr_show_store(+Module) -% -% Prints all suspended constraints of module Mod to the standard -% output. - -chr_show_store(Mod) :- - ( - Mod:'$enumerate_constraints'(Constraint), - print(Constraint),nl, % allows use of portray to control printing - fail - ; - true - ). - -find_chr_constraint(Constraint) :- - chr:'$chr_module'(Mod), - Mod:'$enumerate_constraints'(Constraint). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Inlining of some goals is good for performance -% That's the reason for the next section -% There must be correspondence with the predicates as implemented in chr_mutable.pl -% so that user:goal_expansion(G,G). also works (but do not add such a rule) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% SWI begin -:- multifile user:goal_expansion/2. -:- dynamic user:goal_expansion/2. - -user:goal_expansion('chr get_mutable'(Val,Var), Var=mutable(Val)). -user:goal_expansion('chr update_mutable'(Val,Var), setarg(1,Var,Val)). -user:goal_expansion('chr create_mutable'(Val,Var), Var=mutable(Val)). -user:goal_expansion('chr default_store'(X), nb_getval(chr_global,X)). -%% SWI end - -% goal_expansion seems too different in SICStus 4 for me to cater for in a -% decent way at this moment - so I stick with the old way to do this -% so that it doesn't get lost, the code from Mats for SICStus 4 is included in comments - - -%% Mats begin -%% goal_expansion('chr get_mutable'(Val,Var), Lay, _M, get_mutable(Val,Var), Lay). -%% goal_expansion('chr update_mutable'(Val,Var), Lay, _M, update_mutable(Val,Var), Lay). -%% goal_expansion('chr create_mutable'(Val,Var), Lay, _M, create_mutable(Val,Var), Lay). -%% goal_expansion('chr default_store'(A), Lay, _M, global_term_ref_1(A), Lay). -%% Mats begin - - -%% SICStus begin -%% :- multifile user:goal_expansion/2. -%% :- dynamic user:goal_expansion/2. -%% -%% user:goal_expansion('chr get_mutable'(Val,Var), get_mutable(Val,Var)). -%% user:goal_expansion('chr update_mutable'(Val,Var), update_mutable(Val,Var)). -%% user:goal_expansion('chr create_mutable'(Val,Var), create_mutable(Val,Var)). -%% user:goal_expansion('chr default_store'(A), global_term_ref_1(A)). -%% SICStus end - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -'chr run_suspensions'( Slots) :- - run_suspensions( Slots). - -'chr run_suspensions_loop'([]). -'chr run_suspensions_loop'([L|Ls]) :- - run_suspensions(L), - 'chr run_suspensions_loop'(Ls). - -run_suspensions([]). -run_suspensions([S|Next] ) :- - arg( 2, S, Mref), % ARGXXX - 'chr get_mutable'( Status, Mref), - ( Status==active -> - 'chr update_mutable'( triggered, Mref), - arg( 4, S, Gref), % ARGXXX - 'chr get_mutable'( Gen, Gref), - Generation is Gen+1, - 'chr update_mutable'( Generation, Gref), - arg( 3, S, Goal), % ARGXXX - call( Goal), - 'chr get_mutable'( Post, Mref), - ( Post==triggered -> - 'chr update_mutable'( active, Mref) % catching constraints that did not do anything - ; - true - ) - ; - true - ), - run_suspensions( Next). - -'chr run_suspensions_d'( Slots) :- - run_suspensions_d( Slots). - -'chr run_suspensions_loop_d'([]). -'chr run_suspensions_loop_d'([L|Ls]) :- - run_suspensions_d(L), - 'chr run_suspensions_loop_d'(Ls). - -run_suspensions_d([]). -run_suspensions_d([S|Next] ) :- - arg( 2, S, Mref), % ARGXXX - 'chr get_mutable'( Status, Mref), - ( Status==active -> - 'chr update_mutable'( triggered, Mref), - arg( 4, S, Gref), % ARGXXX - 'chr get_mutable'( Gen, Gref), - Generation is Gen+1, - 'chr update_mutable'( Generation, Gref), - arg( 3, S, Goal), % ARGXXX - ( - 'chr debug_event'(wake(S)), - call( Goal) - ; - 'chr debug_event'(fail(S)), !, - fail - ), - ( - 'chr debug_event'(exit(S)) - ; - 'chr debug_event'(redo(S)), - fail - ), - 'chr get_mutable'( Post, Mref), - ( Post==triggered -> - 'chr update_mutable'( active, Mref) % catching constraints that did not do anything - ; - true - ) - ; - true - ), - run_suspensions_d( Next). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -locked:attr_unify_hook(_,_) :- fail. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -'chr lock'(T) :- - ( var(T) - -> put_attr(T, locked, x) - ; term_variables(T,L), - lockv(L) - ). - -lockv([]). -lockv([T|R]) :- put_attr( T, locked, x), lockv(R). - -'chr unlock'(T) :- - ( var(T) - -> del_attr(T, locked) - ; term_variables(T,L), - unlockv(L) - ). - -unlockv([]). -unlockv([T|R]) :- del_attr( T, locked), unlockv(R). - -'chr none_locked'( []). -'chr none_locked'( [V|Vs]) :- - ( get_attr(V, locked, _) -> - fail - ; - 'chr none_locked'(Vs) - ). - -'chr not_locked'(V) :- - ( var( V) -> - ( get_attr( V, locked, _) -> - fail - ; - true - ) - ; - true - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Eager removal from all chains. -% -'chr remove_constraint_internal'( Susp, Agenda) :- - arg( 2, Susp, Mref), % ARGXXX - 'chr get_mutable'( State, Mref), - 'chr update_mutable'( removed, Mref), % mark in any case - ( compound(State) -> % passive/1 - Agenda = [] - ; State==removed -> - Agenda = [] - %; State==triggered -> - % Agenda = [] - ; - Susp =.. [_,_,_,_,_,_,_|Args], - term_variables( Args, Vars), - 'chr default_store'( Global), - Agenda = [Global|Vars] - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -'chr newvia_1'(X,V) :- - ( var(X) -> - X = V - ; - nonground(X,V) - ). - -'chr newvia_2'(X,Y,V) :- - ( var(X) -> - X = V - ; var(Y) -> - Y = V - ; compound(X), nonground(X,V) -> - true - ; - compound(Y), nonground(Y,V) - ). - -% -% The second arg is a witness. -% The formulation with term_variables/2 is -% cycle safe, but it finds a list of all vars. -% We need only one, and no list in particular. -% -'chr newvia'(L,V) :- nonground(L,V). -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- - -'chr via_1'(X,V) :- - ( var(X) -> - X = V - ; atomic(X) -> - 'chr default_store'(V) - ; nonground(X,V) -> - true - ; - 'chr default_store'(V) - ). - -'chr via_2'(X,Y,V) :- - ( var(X) -> - X = V - ; var(Y) -> - Y = V - ; compound(X), nonground(X,V) -> - true - ; compound(Y), nonground(Y,V) -> - true - ; - 'chr default_store'(V) - ). - -% -% The second arg is a witness. -% The formulation with term_variables/2 is -% cycle safe, but it finds a list of all vars. -% We need only one, and no list in particular. -% -'chr via'(L,V) :- - ( nonground(L,V) -> - true - ; - 'chr default_store'(V) - ). - -nonground( Term, V) :- - term_variables( Term, Vs), - Vs = [V|_]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -'chr novel_production'( Self, Tuple) :- - arg( 5, Self, Ref), % ARGXXX - 'chr get_mutable'( History, Ref), - ( get_ds( Tuple, History, _) -> - fail - ; - true - ). - -% -% Not folded with novel_production/2 because guard checking -% goes in between the two calls. -% -'chr extend_history'( Self, Tuple) :- - arg( 5, Self, Ref), % ARGXXX - 'chr get_mutable'( History, Ref), - put_ds( Tuple, History, x, NewHistory), - 'chr update_mutable'( NewHistory, Ref). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -constraint_generation( Susp, State, Generation) :- - arg( 2, Susp, Mref), % ARGXXX - 'chr get_mutable'( State, Mref), - arg( 4, Susp, Gref), % ARGXXX - 'chr get_mutable'( Generation, Gref). % not incremented meanwhile - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -'chr allocate_constraint'( Closure, Self, F, Args) :- - Self =.. [suspension,Id,Mref,Closure,Gref,Href,F|Args], % SUSPXXX - 'chr create_mutable'(0, Gref), - 'chr empty_history'(History), - 'chr create_mutable'(History, Href), - 'chr create_mutable'(passive(Args), Mref), - 'chr gen_id'( Id). - -% -% 'chr activate_constraint'( -, +, -). -% -% The transition gc->active should be rare -% -'chr activate_constraint'( Vars, Susp, Generation) :- - arg( 2, Susp, Mref), % ARGXXX - 'chr get_mutable'( State, Mref), - 'chr update_mutable'( active, Mref), - ( nonvar(Generation) -> % aih - true - ; - arg( 4, Susp, Gref), % ARGXXX - 'chr get_mutable'( Gen, Gref), - Generation is Gen+1, - 'chr update_mutable'( Generation, Gref) - ), - ( compound(State) -> % passive/1 - term_variables( State, Vs), - 'chr none_locked'( Vs), - Vars = [Global|Vs], - 'chr default_store'(Global) - ; State == removed -> % the price for eager removal ... - Susp =.. [_,_,_,_,_,_,_|Args], - term_variables( Args, Vs), - Vars = [Global|Vs], - 'chr default_store'(Global) - ; - Vars = [] - ). - -'chr insert_constraint_internal'([Global|Vars], Self, Closure, F, Args) :- - 'chr default_store'(Global), - term_variables(Args,Vars), - 'chr none_locked'(Vars), - Self =.. [suspension,Id,Mref,Closure,Gref,Href,F|Args], % SUSPXXX - 'chr create_mutable'(active, Mref), - 'chr create_mutable'(0, Gref), - 'chr empty_history'(History), - 'chr create_mutable'(History, Href), - 'chr gen_id'(Id). - -insert_constraint_internal([Global|Vars], Self, Term, Closure, F, Args) :- - 'chr default_store'(Global), - term_variables( Term, Vars), - 'chr none_locked'( Vars), - 'chr empty_history'( History), - 'chr create_mutable'( active, Mref), - 'chr create_mutable'( 0, Gref), - 'chr create_mutable'( History, Href), - 'chr gen_id'( Id), - Self =.. [suspension,Id,Mref,Closure,Gref,Href,F|Args]. % SUSPXXX - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -'chr empty_history'( E) :- empty_ds( E). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -'chr gen_id'( Id) :- - nb_getval(chr_id,Id), - NextId is Id + 1, - nb_setval(chr_id,NextId). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% SWI begin -'chr create_mutable'(V,mutable(V)). -'chr get_mutable'(V,mutable(V)). -'chr update_mutable'(V,M) :- setarg(1,M,V). -%% SWI end - -%% SICStus begin -%% 'chr create_mutable'(Val, Mut) :- create_mutable(Val, Mut). -%% 'chr get_mutable'(Val, Mut) :- get_mutable(Val, Mut). -%% 'chr update_mutable'(Val, Mut) :- update_mutable(Val, Mut). -%% SICStus end - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% SWI begin -'chr default_store'(X) :- nb_getval(chr_global,X). -%% SWI end - -%% SICStus begin -%% 'chr default_store'(A) :- global_term_ref_1(A). -%% SICStus end - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -'chr sbag_member'( Element, [Head|Tail]) :- - sbag_member( Element, Tail, Head). - -% auxiliary to avoid choicepoint for last element - % does it really avoid the choicepoint? -jon - sbag_member( E, _, E). - sbag_member( E, [Head|Tail], _) :- - sbag_member( E, Tail, Head). - -'chr sbag_del_element'( [], _, []). -'chr sbag_del_element'( [X|Xs], Elem, Set2) :- - ( X==Elem -> - Set2 = Xs - ; - Set2 = [X|Xss], - 'chr sbag_del_element'( Xs, Elem, Xss) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -'chr merge_attributes'([],Ys,Ys). -'chr merge_attributes'([X | Xs],YL,R) :- - ( YL = [Y | Ys] -> - arg(1,X,XId), % ARGXXX - arg(1,Y,YId), % ARGXXX - ( XId < YId -> - R = [X | T], - 'chr merge_attributes'(Xs,YL,T) - ; XId > YId -> - R = [Y | T], - 'chr merge_attributes'([X|Xs],Ys,T) - ; - R = [X | T], - 'chr merge_attributes'(Xs,Ys,T) - ) - ; - R = [X | Xs] - ). - -'chr new_merge_attributes'([],A2,A) :- - A = A2. -'chr new_merge_attributes'([E1|AT1],A2,A) :- - ( A2 = [E2|AT2] -> - 'chr new_merge_attributes'(E1,E2,AT1,AT2,A) - ; - A = [E1|AT1] - ). - -'chr new_merge_attributes'(Pos1-L1,Pos2-L2,AT1,AT2,A) :- - ( Pos1 < Pos2 -> - A = [Pos1-L1|AT], - 'chr new_merge_attributes'(AT1,[Pos2-L2|AT2],AT) - ; Pos1 > Pos2 -> - A = [Pos2-L2|AT], - 'chr new_merge_attributes'([Pos1-L1|AT1],AT2,AT) - ; - 'chr merge_attributes'(L1,L2,L), - A = [Pos1-L|AT], - 'chr new_merge_attributes'(AT1,AT2,AT) - ). - -'chr all_suspensions'([],_,_). -'chr all_suspensions'([Susps|SuspsList],Pos,Attr) :- - all_suspensions(Attr,Susps,SuspsList,Pos). - -all_suspensions([],[],SuspsList,Pos) :- - all_suspensions([],[],SuspsList,Pos). % all empty lists -all_suspensions([APos-ASusps|RAttr],Susps,SuspsList,Pos) :- - NPos is Pos + 1, - ( Pos == APos -> - Susps = ASusps, - 'chr all_suspensions'(SuspsList,NPos,RAttr) - ; - Susps = [], - 'chr all_suspensions'(SuspsList,NPos,[APos-ASusps|RAttr]) - ). - -'chr normalize_attr'([],[]). -'chr normalize_attr'([Pos-L|R],[Pos-NL|NR]) :- - sort(L,NL), - 'chr normalize_attr'(R,NR). - -'chr select'([E|T],F,R) :- - ( E = F -> - R = T - ; - R = [E|NR], - 'chr select'(T,F,NR) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- multifile - chr:debug_event/2, % +State, +Event - chr:debug_interact/3. % +Event, +Depth, -Command - -'chr debug_event'(Event) :- - nb_getval(chr_debug,mutable(State)), % XXX - ( State == off -> - true - ; chr:debug_event(State, Event) -> - true - ; debug_event(State,Event) - ). - -chr_trace :- - nb_setval(chr_debug,mutable(trace)). -chr_notrace :- - nb_setval(chr_debug,mutable(off)). - -% chr_leash(+Spec) -% -% Define the set of ports at which we prompt for user interaction - -chr_leash(Spec) :- - leashed_ports(Spec, Ports), - nb_setval(chr_leash,mutable(Ports)). - -leashed_ports(none, []). -leashed_ports(off, []). -leashed_ports(all, [call, exit, redo, fail, wake, try, apply, insert, remove]). -leashed_ports(default, [call,exit,fail,wake,apply]). -leashed_ports(One, Ports) :- - atom(One), One \== [], !, - leashed_ports([One], Ports). -leashed_ports(Set, Ports) :- - sort(Set, Ports), % make unique - leashed_ports(all, All), - valid_ports(Ports, All). - -valid_ports([], _). -valid_ports([H|T], Valid) :- - ( memberchk(H, Valid) - -> true - ; throw(error(domain_error(chr_port, H), _)) - ), - valid_ports(T, Valid). - -user:exception(undefined_global_variable, Name, retry) :- - chr_runtime_debug_global_variable(Name), - chr_debug_init. - -chr_runtime_debug_global_variable(chr_leash). - -chr_debug_init :- - leashed_ports(default, Ports), - nb_setval(chr_leash, mutable(Ports)). - -:- initialization chr_debug_init. - -% debug_event(+State, +Event) - - -%debug_event(trace, Event) :- -% functor(Event, Name, Arity), -% writeln(Name/Arity), fail. -debug_event(trace,Event) :- - Event = call(_), !, - get_debug_history(History,Depth), - NDepth is Depth + 1, - chr_debug_interact(Event,NDepth), - set_debug_history([Event|History],NDepth). -debug_event(trace,Event) :- - Event = wake(_), !, - get_debug_history(History,Depth), - NDepth is Depth + 1, - chr_debug_interact(Event,NDepth), - set_debug_history([Event|History],NDepth). -debug_event(trace,Event) :- - Event = redo(_), !, - get_debug_history(_History, Depth), - chr_debug_interact(Event, Depth). -debug_event(trace,Event) :- - Event = exit(_),!, - get_debug_history([_|History],Depth), - chr_debug_interact(Event,Depth), - NDepth is Depth - 1, - set_debug_history(History,NDepth). -debug_event(trace,Event) :- - Event = fail(_),!, - get_debug_history(_,Depth), - chr_debug_interact(Event,Depth). -debug_event(trace, Event) :- - Event = remove(_), !, - get_debug_history(_,Depth), - chr_debug_interact(Event, Depth). -debug_event(trace, Event) :- - Event = insert(_), !, - get_debug_history(_,Depth), - chr_debug_interact(Event, Depth). -debug_event(trace, Event) :- - Event = try(_,_,_,_), !, - get_debug_history(_,Depth), - chr_debug_interact(Event, Depth). -debug_event(trace, Event) :- - Event = apply(_,_,_,_), !, - get_debug_history(_,Depth), - chr_debug_interact(Event,Depth). - -debug_event(skip(_,_),Event) :- - Event = call(_), !, - get_debug_history(History,Depth), - NDepth is Depth + 1, - set_debug_history([Event|History],NDepth). -debug_event(skip(_,_),Event) :- - Event = wake(_), !, - get_debug_history(History,Depth), - NDepth is Depth + 1, - set_debug_history([Event|History],NDepth). -debug_event(skip(SkipSusp,SkipDepth),Event) :- - Event = exit(Susp),!, - get_debug_history([_|History],Depth), - ( SkipDepth == Depth, - SkipSusp == Susp -> - set_chr_debug(trace), - chr_debug_interact(Event,Depth) - ; - true - ), - NDepth is Depth - 1, - set_debug_history(History,NDepth). -debug_event(skip(_,_),_) :- !, - true. - -% chr_debug_interact(+Event, +Depth) -% -% Interact with the user on Event that took place at Depth. First -% calls chr:debug_interact(+Event, +Depth, -Command) hook. If this -% fails the event is printed and the system prompts for a command. - -chr_debug_interact(Event, Depth) :- - chr:debug_interact(Event, Depth, Command), !, - handle_debug_command(Command,Event,Depth). -chr_debug_interact(Event, Depth) :- - print_event(Event, Depth), - ( leashed(Event) - -> ask_continue(Command) - ; Command = creep - ), - handle_debug_command(Command,Event,Depth). - -leashed(Event) :- - functor(Event, Port, _), - nb_getval(chr_leash, mutable(Ports)), - memberchk(Port, Ports). - -ask_continue(Command) :- - print_message(debug, chr(prompt)), - get_single_char(CharCode), - ( CharCode == -1 - -> Char = end_of_file - ; char_code(Char, CharCode) - ), - ( debug_command(Char, Command) - -> print_message(debug, chr(command(Command))) - ; print_message(help, chr(invalid_command)), - ask_continue(Command) - ). - - -'chr debug command'(Char, Command) :- - debug_command(Char, Command). - -debug_command(c, creep). -debug_command(' ', creep). -debug_command('\r', creep). -debug_command(s, skip). -debug_command(g, ancestors). -debug_command(n, nodebug). -debug_command(a, abort). -debug_command(f, fail). -debug_command(b, break). -debug_command(?, help). -debug_command(h, help). -debug_command(end_of_file, exit). - - -handle_debug_command(creep,_,_) :- !. -handle_debug_command(skip, Event, Depth) :- !, - Event =.. [Type|Rest], - ( Type \== call, - Type \== wake -> - handle_debug_command('c',Event,Depth) - ; - Rest = [Susp], - set_chr_debug(skip(Susp,Depth)) - ). - -handle_debug_command(ancestors,Event,Depth) :- !, - print_chr_debug_history, - chr_debug_interact(Event,Depth). -handle_debug_command(nodebug,_,_) :- !, - chr_notrace. -handle_debug_command(abort,_,_) :- !, - abort. -handle_debug_command(exit,_,_) :- !, - halt. -handle_debug_command(fail,_,_) :- !, - fail. -handle_debug_command(break,Event,Depth) :- !, - break, - chr_debug_interact(Event,Depth). -handle_debug_command(help,Event,Depth) :- !, - print_message(help, chr(debug_options)), - chr_debug_interact(Event,Depth). -handle_debug_command(Cmd, _, _) :- - throw(error(domain_error(chr_debug_command, Cmd), _)). - -print_chr_debug_history :- - get_debug_history(History,Depth), - print_message(debug, chr(ancestors(History, Depth))). - -print_event(Event, Depth) :- - print_message(debug, chr(event(Event, Depth))). - -% {set,get}_debug_history(Ancestors, Depth) -% -% Set/get the list of ancestors and the depth of the current goal. - -get_debug_history(History,Depth) :- - nb_getval(chr_debug_history,mutable(History,Depth)). - -set_debug_history(History,Depth) :- - nb_getval(chr_debug_history,Mutable), - setarg(1,Mutable,History), - setarg(2,Mutable,Depth). - -set_chr_debug(State) :- - nb_getval(chr_debug,Mutable), - setarg(1,Mutable,State). - -'chr chr_indexed_variables'(Susp,Vars) :- - Susp =.. [_,_,_,_,_,_,_|Args], - term_variables(Args,Vars). diff --git a/LGPL/chr/chr_swi.pl b/LGPL/chr/chr_swi.pl deleted file mode 100644 index db0343015..000000000 --- a/LGPL/chr/chr_swi.pl +++ /dev/null @@ -1,438 +0,0 @@ -/* $Id: chr_swi.pl,v 1.6 2008-03-31 22:56:21 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers and Jan Wielemaker - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -%% SWI begin -:- module(chr, - [ op(1180, xfx, ==>), - op(1180, xfx, <=>), - op(1150, fx, constraints), - op(1150, fx, chr_constraint), - op(1150, fx, chr_preprocessor), - op(1150, fx, handler), - op(1150, fx, rules), - op(1100, xfx, \), - op(1200, xfx, @), - op(1190, xfx, pragma), - op( 500, yfx, #), - op(1150, fx, chr_type), - op(1150, fx, chr_declaration), - op(1130, xfx, --->), - op(1150, fx, (?)), - chr_show_store/1, % +Module - find_chr_constraint/1, % +Pattern - chr_trace/0, - chr_notrace/0, - chr_leash/1 % +Ports - ]). - -:- expects_dialect(swi). - -:- if(current_prolog_flag(dialect, yap)). -:- hide(atomic_concat). -:- endif. - -:- set_prolog_flag(generate_debug_info, false). - -:- multifile user:file_search_path/2. -:- dynamic user:file_search_path/2. -:- dynamic chr_translated_program/1. - -user:file_search_path(chr, library(chr)). - -:- load_files([ chr(chr_translate), - chr(chr_runtime), - chr(chr_messages), - chr(chr_hashtable_store), - chr(chr_compiler_errors) - ], - [ if(not_loaded), - silent(true) - ]). - -:- use_module(library(lists),[member/2]). -%% SWI end - -%% SICStus begin -%% :- module(chr,[ -%% chr_trace/0, -%% chr_notrace/0, -%% chr_leash/0, -%% chr_flag/3, -%% chr_show_store/1 -%% ]). -%% -%% :- op(1180, xfx, ==>), -%% op(1180, xfx, <=>), -%% op(1150, fx, constraints), -%% op(1150, fx, handler), -%% op(1150, fx, rules), -%% op(1100, xfx, \), -%% op(1200, xfx, @), -%% op(1190, xfx, pragma), -%% op( 500, yfx, #), -%% op(1150, fx, chr_type), -%% op(1130, xfx, --->), -%% op(1150, fx, (?)). -%% -%% :- multifile user:file_search_path/2. -%% :- dynamic chr_translated_program/1. -%% -%% user:file_search_path(chr, library(chr)). -%% -%% -%% :- use_module('chr/chr_translate'). -%% :- use_module('chr/chr_runtime'). -%% :- use_module('chr/chr_hashtable_store'). -%% :- use_module('chr/hprolog'). -%% SICStus end - -:- multifile chr:'$chr_module'/1. - -:- dynamic chr_term/3. % File, Term - -:- dynamic chr_pp/2. % File, Term - -% chr_expandable(+Term) -% -% Succeeds if Term is a rule that must be handled by the CHR -% compiler. Ideally CHR definitions should be between -% -% :- constraints ... -% ... -% :- end_constraints. -% -% As they are not we have to use some heuristics. We assume any -% file is a CHR after we've seen :- constraints ... - -chr_expandable((:- constraints _)). -chr_expandable((constraints _)). -chr_expandable((:- chr_constraint _)). -chr_expandable((:- chr_type _)). -chr_expandable((chr_type _)). -chr_expandable((:- chr_declaration _)). -chr_expandable(option(_, _)). -chr_expandable((:- chr_option(_, _))). -chr_expandable((handler _)). -chr_expandable((rules _)). -chr_expandable((_ <=> _)). -chr_expandable((_ @ _)). -chr_expandable((_ ==> _)). -chr_expandable((_ pragma _)). - -% chr_expand(+Term, -Expansion) -% -% Extract CHR declarations and rules from the file and run the -% CHR compiler when reaching end-of-file. - -%% SWI begin -extra_declarations([(:- use_module(chr(chr_runtime))) - ,(:- style_check(-discontiguous)) % no need to restore; file ends - ,(:- set_prolog_flag(generate_debug_info, false)) - | Tail], Tail). -%% SWI end - -%% SICStus begin -%% extra_declarations([(:-use_module(chr(chr_runtime))) -%% , (:- use_module(chr(hprolog),[term_variables/2,term_variables/3])) -%% , (:-use_module(chr(hpattvars))) -%% | Tail], Tail). -%% SICStus end - -chr_expand(Term, []) :- - chr_expandable(Term), !, - prolog_load_context(file,File), - prolog_load_context(term_position,'$stream_position'(_, LineNumber, _, _, _)), - add_pragma_to_chr_rule(Term,line_number(LineNumber),NTerm), - assert(chr_term(File, LineNumber, NTerm)). -chr_expand(Term, []) :- - Term = ((:- chr_preprocessor Preprocessor)), !, - prolog_load_context(file,File), - assert(chr_pp(File, Preprocessor)). -chr_expand(end_of_file, FinalProgram) :- - extra_declarations(FinalProgram,Program), - prolog_load_context(file,File), - findall(T, retract(chr_term(File,_Line,T)), CHR0), - CHR0 \== [], - prolog_load_context(module, Module), - add_debug_decl(CHR0, CHR1), - add_optimise_decl(CHR1, CHR2), - CHR3 = [ (:- module(Module, [])) | CHR2 ], - findall(P, retract(chr_pp(File, P)), Preprocessors), - ( Preprocessors = [] -> - CHR3 = CHR - ; Preprocessors = [Preprocessor] -> - chr_compiler_errors:chr_info(preprocessor,'\tPreprocessing with ~w.\n',[Preprocessor]), - call_chr_preprocessor(Preprocessor,CHR3,CHR) - ; - chr_compiler_errors:print_chr_error(error(syntax(Preprocessors),'Too many preprocessors! Only one is allowed!\n',[])), - fail - ), - catch(call_chr_translate(File, - [ (:- module(Module, [])) - | CHR - ], - Program0), - chr_error(Error), - ( chr_compiler_errors:print_chr_error(Error), - fail - ) - ), - delete_header(Program0, Program). - - -delete_header([(:- module(_,_))|T0], T) :- !, - delete_header(T0, T). -delete_header(L, L). - -add_debug_decl(CHR, CHR) :- - member(option(Name, _), CHR), Name == debug, !. -add_debug_decl(CHR, CHR) :- - member((:- chr_option(Name, _)), CHR), Name == debug, !. -add_debug_decl(CHR, [(:- chr_option(debug, Debug))|CHR]) :- - ( chr_current_prolog_flag(generate_debug_info, true) - -> Debug = on - ; Debug = off - ). - -%% SWI begin -chr_current_prolog_flag(Flag,Val) :- current_prolog_flag(Flag,Val). -%% SWI end - -add_optimise_decl(CHR, CHR) :- - \+(\+(memberchk((:- chr_option(optimize, _)), CHR))), !. -add_optimise_decl(CHR, [(:- chr_option(optimize, full))|CHR]) :- - chr_current_prolog_flag(optimize, full), !. -add_optimise_decl(CHR, CHR). - - -% call_chr_translate(+File, +In, -Out) -% -% The entire chr_translate/2 translation may fail, in which case we'd -% better issue a warning rather than simply ignoring the CHR -% declarations. - -call_chr_translate(File, In, _Out) :- - ( chr_translate_line_info(In, File, Out0) -> - nb_setval(chr_translated_program,Out0), - fail - ). -call_chr_translate(_, _In, Out) :- - nb_current(chr_translated_program,Out), !, - nb_delete(chr_translated_program). - -call_chr_translate(File, _, []) :- - print_message(error, chr(compilation_failed(File))). - -call_chr_preprocessor(Preprocessor,CHR,_NCHR) :- - ( call(Preprocessor,CHR,CHR0) -> - nb_setval(chr_preprocessed_program,CHR0), - fail - ). -call_chr_preprocessor(_,_,NCHR) :- - nb_current(chr_preprocessed_program,NCHR), !, - nb_delete(chr_preprocessed_program). -call_chr_preprocessor(Preprocessor,_,_) :- - chr_compiler_errors:print_chr_error(error(preprocessor,'Preprocessor `~w\' failed!\n',[Preprocessor])). - -%% SWI begin - - /******************************* - * SYNCHRONISE TRACER * - *******************************/ - -:- multifile - user:message_hook/3, - chr:debug_event/2, - chr:debug_interact/3. -:- dynamic - user:message_hook/3. - -user:message_hook(trace_mode(OnOff), _, _) :- - ( OnOff == on - -> chr_trace - ; chr_notrace - ), - fail. % backtrack to other handlers - -% chr:debug_event(+State, +Event) -% -% Hook into the CHR debugger. At this moment we will discard CHR -% events if we are in a Prolog `skip' and we ignore the - -chr:debug_event(_State, _Event) :- - tracing, % are we tracing? - prolog_skip_level(Skip, Skip), - Skip \== very_deep, - prolog_current_frame(Me), - prolog_frame_attribute(Me, level, Level), - Level > Skip, !. - -% chr:debug_interact(+Event, +Depth, -Command) -% -% Hook into the CHR debugger to display Event and ask for the next -% command to execute. This definition causes the normal Prolog -% debugger to be used for the standard ports. - -chr:debug_interact(Event, _Depth, creep) :- - prolog_event(Event), - tracing, !. - -prolog_event(call(_)). -prolog_event(exit(_)). -prolog_event(fail(_)). - - - - - /******************************* - * MESSAGES * - *******************************/ - -:- multifile - prolog:message/3. - -prolog:message(chr(CHR)) --> - chr_message(CHR). - - /******************************* - * TOPLEVEL PRINTING * - *******************************/ - -:- set_prolog_flag(chr_toplevel_show_store,true). - -prolog:message(query(YesNo)) --> !, - ['~@'-[chr:print_all_stores]], - '$messages':prolog_message(query(YesNo)). - -prolog:message(query(YesNo,Bindings)) --> !, - ['~@'-[chr:print_all_stores]], - '$messages':prolog_message(query(YesNo,Bindings)). - -print_all_stores :- - ( chr_current_prolog_flag(chr_toplevel_show_store,true), - catch(nb_getval(chr_global, _), _, fail), - chr:'$chr_module'(Mod), - chr_show_store(Mod), - fail - ; - true - ). - - /******************************* - * MUST BE LAST! * - *******************************/ - -:- multifile user:term_expansion/2. -:- dynamic user:term_expansion/2. - -user:term_expansion(In, Out) :- - chr_expand(In, Out). -%% SWI end - -%% SICStus begin -% -% :- dynamic -% current_toplevel_show_store/1, -% current_generate_debug_info/1, -% current_optimize/1. -% -% current_toplevel_show_store(on). -% -% current_generate_debug_info(false). -% -% current_optimize(off). -% -% chr_current_prolog_flag(generate_debug_info, X) :- -% chr_flag(generate_debug_info, X, X). -% chr_current_prolog_flag(optimize, X) :- -% chr_flag(optimize, X, X). -% -% chr_flag(Flag, Old, New) :- -% Goal = chr_flag(Flag,Old,New), -% g must_be(Flag, oneof([toplevel_show_store,generate_debug_info,optimize]), Goal, 1), -% chr_flag(Flag, Old, New, Goal). -% -% chr_flag(toplevel_show_store, Old, New, Goal) :- -% clause(current_toplevel_show_store(Old), true, Ref), -% ( New==Old -> true -% ; must_be(New, oneof([on,off]), Goal, 3), -% erase(Ref), -% assertz(current_toplevel_show_store(New)) -% ). -% chr_flag(generate_debug_info, Old, New, Goal) :- -% clause(current_generate_debug_info(Old), true, Ref), -% ( New==Old -> true -% ; must_be(New, oneof([false,true]), Goal, 3), -% erase(Ref), -% assertz(current_generate_debug_info(New)) -% ). -% chr_flag(optimize, Old, New, Goal) :- -% clause(current_optimize(Old), true, Ref), -% ( New==Old -> true -% ; must_be(New, oneof([full,off]), Goal, 3), -% erase(Ref), -% assertz(current_optimize(New)) -% ). -% -% -% all_stores_goal(Goal, CVAs) :- -% chr_flag(toplevel_show_store, on, on), !, -% findall(C-CVAs, find_chr_constraint(C), Pairs), -% andify(Pairs, Goal, CVAs). -% all_stores_goal(true, _). -% -% andify([], true, _). -% andify([X-Vs|L], Conj, Vs) :- andify(L, X, Conj, Vs). -% -% andify([], X, X, _). -% andify([Y-Vs|L], X, (X,Conj), Vs) :- andify(L, Y, Conj, Vs). -% -% :- multifile user:term_expansion/6. -% -% user:term_expansion(In, _, Ids, Out, [], [chr|Ids]) :- -% nonvar(In), -% nonmember(chr, Ids), -% chr_expand(In, Out), !. -% -%% SICStus end - -%%% for SSS %%% - -add_pragma_to_chr_rule((Name @ Rule), Pragma, Result) :- !, - add_pragma_to_chr_rule(Rule,Pragma,NRule), - Result = (Name @ NRule). -add_pragma_to_chr_rule((Rule pragma Pragmas), Pragma, Result) :- !, - Result = (Rule pragma (Pragma,Pragmas)). -add_pragma_to_chr_rule((Head ==> Body), Pragma, Result) :- !, - Result = ((Head ==> Body) pragma Pragma). -add_pragma_to_chr_rule((Head <=> Body), Pragma, Result) :- !, - Result = ((Head <=> Body) pragma Pragma). -add_pragma_to_chr_rule(Term,_,Term). diff --git a/LGPL/chr/chr_swi_bootstrap.pl b/LGPL/chr/chr_swi_bootstrap.pl deleted file mode 100644 index ea5c1db4c..000000000 --- a/LGPL/chr/chr_swi_bootstrap.pl +++ /dev/null @@ -1,202 +0,0 @@ -/* $Id: chr_swi_bootstrap.pl,v 1.4 2008-03-13 17:43:13 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -:- module(chr, - [ chr_compile_step1/2 % +CHRFile, -PlFile - , chr_compile_step2/2 % +CHRFile, -PlFile - , chr_compile_step3/2 % +CHRFile, -PlFile - , chr_compile_step4/2 % +CHRFile, -PlFile - , chr_compile/3 - ]). -%% SWI begin -:- if(current_prolog_flag(dialect, yap)). -:- hide(atomic_concat). -:- endif. - -:- expects_dialect(swi). - -:- use_module(library(listing)). % portray_clause/2 -%% SWI end -:- include(chr_op). - - /******************************* - * FILE-TO-FILE COMPILER * - *******************************/ - -% chr_compile(+CHRFile, -PlFile) -% -% Compile a CHR specification into a Prolog file - -chr_compile_step1(From, To) :- - use_module('chr_translate_bootstrap.pl'), - chr_compile(From, To, informational). -chr_compile_step2(From, To) :- - use_module('chr_translate_bootstrap1.pl'), - chr_compile(From, To, informational). -chr_compile_step3(From, To) :- - use_module('chr_translate_bootstrap2.pl'), - chr_compile(From, To, informational). -chr_compile_step4(From, To) :- - use_module('chr_translate.pl'), - chr_compile(From, To, informational). - -chr_compile(From, To, MsgLevel) :- - print_message(MsgLevel, chr(start(From))), - read_chr_file_to_terms(From,Declarations), - % read_file_to_terms(From, Declarations, - % [ module(chr) % get operators from here - % ]), - print_message(silent, chr(translate(From))), - chr_translate(Declarations, Declarations1), - insert_declarations(Declarations1, NewDeclarations), - print_message(silent, chr(write(To))), - writefile(To, From, NewDeclarations), - print_message(MsgLevel, chr(end(From, To))). - - -%% SWI begin -specific_declarations([(:- use_module('chr_runtime')), - (:- style_check(-discontiguous))|Tail], Tail). -%% SWI end - -%% SICStus begin -%% specific_declarations([(:- use_module('chr_runtime')), -%% (:-use_module(chr_hashtable_store)), -%% (:- use_module('hpattvars')), -%% (:- use_module('b_globval')), -%% (:- use_module('hprolog')), % needed ? -%% (:- set_prolog_flag(discontiguous_warnings,off)), -%% (:- set_prolog_flag(single_var_warnings,off))|Tail], Tail). -%% SICStus end - - - -insert_declarations(Clauses0, Clauses) :- - specific_declarations(Decls,Tail), - (Clauses0 = [(:- module(M,E))|FileBody] -> - Clauses = [ (:- module(M,E))|Decls], - Tail = FileBody - ; - Clauses = Decls, - Tail = Clauses0 - ). - -% writefile(+File, +From, +Desclarations) -% -% Write translated CHR declarations to a File. - -writefile(File, From, Declarations) :- - open(File, write, Out), - writeheader(From, Out), - writecontent(Declarations, Out), - close(Out). - -writecontent([], _). -writecontent([D|Ds], Out) :- - portray_clause(Out, D), % SWI-Prolog - writecontent(Ds, Out). - - -writeheader(File, Out) :- - format(Out, '/* Generated by CHR bootstrap compiler~n', []), - format(Out, ' From: ~w~n', [File]), - format_date(Out), - format(Out, ' DO NOT EDIT. EDIT THE CHR FILE INSTEAD~n', []), - format(Out, '*/~n~n', []). - -%% SWI begin -format_date(Out) :- - get_time(Now), - convert_time(Now, Date), - % vsc: this is a string - format(Out, ' Date: ~s~n~n', [Date]). -%% SWI end - -%% SICStus begin -%% :- use_module(library(system), [datime/1]). -%% format_date(Out) :- -%% datime(datime(Year,Month,Day,Hour,Min,Sec)), -%% format(Out, ' Date: ~d-~d-~d ~d:~d:~d~n~n', [Day,Month,Year,Hour,Min,Sec]). -%% SICStus end - - - - /******************************* - * MESSAGES * - *******************************/ - - -:- multifile - prolog:message/3. - -prolog:message(chr(start(File))) --> - { file_base_name(File, Base) - }, - [ 'Translating CHR file ~w'-[Base] ]. -prolog:message(chr(end(_From, To))) --> - { file_base_name(To, Base) - }, - [ 'Written translation to ~w'-[Base] ]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -read_chr_file_to_terms(Spec, Terms) :- - chr_absolute_file_name(Spec, [ access(read) ], Path), - open(Path, read, Fd, []), - read_chr_stream_to_terms(Fd, Terms), - close(Fd). - -read_chr_stream_to_terms(Fd, Terms) :- - chr_local_only_read_term(Fd, C0, [ module(chr) ]), - read_chr_stream_to_terms(C0, Fd, Terms). - -read_chr_stream_to_terms(end_of_file, _, []) :- !. -read_chr_stream_to_terms(C, Fd, [C|T]) :- - ( ground(C), - C = (:- op(Priority,Type,Name)) -> - op(Priority,Type,Name) - ; - true - ), - chr_local_only_read_term(Fd, C2, [module(chr)]), - read_chr_stream_to_terms(C2, Fd, T). - - - - -%% SWI begin -chr_local_only_read_term(A,B,C) :- read_term(A,B,C). -chr_absolute_file_name(A,B,C) :- absolute_file_name(A,B,C). -%% SWI end - -%% SICStus begin -%% chr_local_only_read_term(A,B,_) :- read_term(A,B,[]). -%% chr_absolute_file_name(A,B,C) :- absolute_file_name(A,C,B). -%% SICStus end diff --git a/LGPL/chr/chr_swi_bootstrap.yap b/LGPL/chr/chr_swi_bootstrap.yap deleted file mode 100644 index 157ac3f71..000000000 --- a/LGPL/chr/chr_swi_bootstrap.yap +++ /dev/null @@ -1,13 +0,0 @@ - - -:- multifile user:file_search_path/2. - -:- add_to_path('.'). - -:- use_module(library(swi)). - -:- yap_flag(unknown,error). - -:- include('chr_swi_bootstrap.pl'). - - diff --git a/LGPL/chr/chr_swi_bootstrap.yap.in b/LGPL/chr/chr_swi_bootstrap.yap.in deleted file mode 100644 index bc02682d3..000000000 --- a/LGPL/chr/chr_swi_bootstrap.yap.in +++ /dev/null @@ -1,13 +0,0 @@ - - -:- multifile user:file_search_path/2. - -:- add_to_path('@srcdir@'). - -:- use_module(library(swi)). - -:- yap_flag(unknown,error). - -:- include('chr_swi_bootstrap.pl'). - - diff --git a/LGPL/chr/chr_test.pl b/LGPL/chr/chr_test.pl deleted file mode 100644 index 903066802..000000000 --- a/LGPL/chr/chr_test.pl +++ /dev/null @@ -1,170 +0,0 @@ -/* $Id: chr_test.pl,v 1.3 2008-03-13 14:38:00 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Jan Wielemaker - E-mail: wielemak@science.uva.nl - WWW: http://www.swi-prolog.org - Copyright (C): 2005,2006, University of Amsterdam - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -:- asserta(user:file_search_path(chr, '.')). -:- asserta(user:file_search_path(library, '.')). -:- use_module(library(chr)). -%% :- use_module(chr). % == library(chr) - -:- set_prolog_flag(optimise, true). -%:- set_prolog_flag(trace_gc, true). - -:- format('CHR test suite. To run all tests run ?- test.~n~n', []). - - /******************************* - * SCRIPTS * - *******************************/ - - -:- dynamic - script_dir/1. - -set_script_dir :- - script_dir(_), !. -set_script_dir :- - find_script_dir(Dir), - assert(script_dir(Dir)). - -find_script_dir(Dir) :- - prolog_load_context(file, File), - follow_links(File, RealFile), - file_directory_name(RealFile, Dir). - -follow_links(File, RealFile) :- - read_link(File, _, RealFile), !. -follow_links(File, File). - - -:- set_script_dir. - -run_test_script(Script) :- - file_base_name(Script, Base), - file_name_extension(Pred, _, Base), - format(' ~w~n',[Script]), - load_files(Script, []), %[silent(true)]), - Pred. - -run_test_scripts(Directory) :- - ( script_dir(ScriptDir), - concat_atom([ScriptDir, /, Directory], Dir), - exists_directory(Dir) - -> true - ; Dir = Directory - ), - atom_concat(Dir, '/*.chr', Pattern), - expand_file_name(Pattern, Files), - file_base_name(Dir, BaseDir), - format('Running scripts from ~w ', [BaseDir]), flush, - run_scripts(Files), - format(' done~n'). - -run_scripts([]). -run_scripts([H|T]) :- - ( catch(run_test_script(H), Except, true) - -> ( var(Except) - -> put(.), flush - ; Except = blocked(Reason) - -> assert(blocked(H, Reason)), - put(!), flush - ; script_failed(H, Except) - ) - ; script_failed(H, fail) - ), - run_scripts(T). - -script_failed(File, fail) :- - format('~NScript ~w failed~n', [File]), - assert(failed(script(File))). -script_failed(File, Except) :- - message_to_string(Except, Error), - format('~NScript ~w failed: ~w~n', [File, Error]), - assert(failed(script(File))). - - - /******************************* - * TEST MAIN-LOOP * - *******************************/ - -testdir('Tests'). - -:- dynamic - failed/1, - blocked/2. - -test :- - retractall(failed(_)), - retractall(blocked(_,_)), - scripts, - report_blocked, - report_failed. - -scripts :- - forall(testdir(Dir), run_test_scripts(Dir)). - - -report_blocked :- - findall(Head-Reason, blocked(Head, Reason), L), - ( L \== [] - -> format('~nThe following tests are blocked:~n', []), - ( member(Head-Reason, L), - format(' ~p~t~40|~w~n', [Head, Reason]), - fail - ; true - ) - ; true - ). -report_failed :- - findall(X, failed(X), L), - length(L, Len), - ( Len > 0 - -> format('~n*** ~w tests failed ***~n', [Len]), - fail - ; format('~nAll tests passed~n', []) - ). - -test_failed(R, Except) :- - clause(Head, _, R), - functor(Head, Name, 1), - arg(1, Head, TestName), - clause_property(R, line_count(Line)), - clause_property(R, file(File)), - ( Except == fail - -> format('~N~w:~d: Test ~w(~w) failed~n', - [File, Line, Name, TestName]) - ; message_to_string(Except, Error), - format('~N~w:~d: Test ~w(~w):~n~t~8|ERROR: ~w~n', - [File, Line, Name, TestName, Error]) - ), - assert(failed(Head)). - -blocked(Reason) :- - throw(blocked(Reason)). - diff --git a/LGPL/chr/chr_translate.chr b/LGPL/chr/chr_translate.chr deleted file mode 100644 index 063142734..000000000 --- a/LGPL/chr/chr_translate.chr +++ /dev/null @@ -1,10791 +0,0 @@ -/* $Id: chr_translate.chr,v 1.4 2008-03-13 17:43:13 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% ____ _ _ ____ ____ _ _ -%% / ___| | | | _ \ / ___|___ _ __ ___ _ __ (_) | ___ _ __ -%% | | | |_| | |_) | | | / _ \| '_ ` _ \| '_ \| | |/ _ \ '__| -%% | |___| _ | _ < | |__| (_) | | | | | | |_) | | | __/ | -%% \____|_| |_|_| \_\ \____\___/|_| |_| |_| .__/|_|_|\___|_| -%% |_| -%% -%% hProlog CHR compiler: -%% -%% * by Tom Schrijvers, K.U. Leuven, Tom.Schrijvers@cs.kuleuven.be -%% -%% * based on the SICStus CHR compilation by Christian Holzbaur -%% -%% First working version: 6 June 2003 -%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% TODO {{{ -%% -%% URGENTLY TODO -%% -%% * add mode checking to debug mode -%% * add groundness info to a.i.-based observation analysis -%% * proper fd/index analysis -%% * re-add generation checking -%% * untangle CHR-level and target source-level generation & optimization -%% -%% AGGRESSIVE OPTIMISATION IDEAS -%% -%% * analyze history usage to determine whether/when -%% cheaper suspension is possible: -%% don't use history when all partners are passive and self never triggers -%% * store constraint unconditionally for unconditional propagation rule, -%% if first, i.e. without checking history and set trigger cont to next occ -%% * get rid of suspension passing for never triggered constraints, -%% up to allocation occurrence -%% * get rid of call indirection for never triggered constraints -%% up to first allocation occurrence. -%% * get rid of unnecessary indirection if last active occurrence -%% before unconditional removal is head2, e.g. -%% a \ b <=> true. -%% a <=> true. -%% * Eliminate last clause of never stored constraint, if its body -%% is fail, e.g. -%% a ... -%% a <=> fail. -%% * Specialize lookup operations and indexes for functional dependencies. -%% -%% MORE TODO -%% -%% * map A \ B <=> true | true rules -%% onto efficient code that empties the constraint stores of B -%% in O(1) time for ground constraints where A and B do not share -%% any variables -%% * ground matching seems to be not optimized for compound terms -%% in case of simpagation_head2 and propagation occurrences -%% * analysis for storage delaying (see primes for case) -%% * internal constraints declaration + analyses? -%% * Do not store in global variable store if not necessary -%% NOTE: affects show_store/1 -%% * var_assoc multi-level store: variable - ground -%% * Do not maintain/check unnecessary propagation history -%% for reasons of anti-monotony -%% * Strengthen storage analysis for propagation rules -%% reason about bodies of rules only containing constraints -%% -> fixpoint with observation analysis -%% * instantiation declarations -%% COMPOUND (bound to nonvar) -%% avoid nonvar tests -%% -%% * make difference between cheap guards for reordering -%% and non-binding guards for lock removal -%% * fd -> once/[] transformation for propagation -%% * cheap guards interleaved with head retrieval + faster -%% via-retrieval + non-empty checking for propagation rules -%% redo for simpagation_head2 prelude -%% * intelligent backtracking for simplification/simpagation rule -%% generator_1(X),'_$savecp'(CP_1), -%% ... -%% if( ( -%% generator_n(Y), -%% test(X,Y) -%% ), -%% true, -%% ('_$cutto'(CP_1), fail) -%% ), -%% ... -%% -%% or recently developped cascading-supported approach -%% * intelligent backtracking for propagation rule -%% use additional boolean argument for each possible smart backtracking -%% when boolean at end of list true -> no smart backtracking -%% false -> smart backtracking -%% only works for rules with at least 3 constraints in the head -%% * (set semantics + functional dependency) declaration + resolution -%% }}} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -:- module(chr_translate, - [ chr_translate/2 % +Decls, -TranslatedDecls - , chr_translate_line_info/3 % +DeclsWithLines, -TranslatedDecls - ]). -%% SWI begin {{{ -:- use_module(library(lists),[member/2, append/3,reverse/2,permutation/2,last/2]). -:- use_module(library(ordsets)). -:- use_module(library(aggregate)). -:- use_module(library(apply_macros)). -:- use_module(library(occurs)). -:- use_module(library(assoc)). -%% SWI end }}} - -% imports and operators {{{ -:- use_module(hprolog). -:- use_module(pairlist). -:- use_module(a_star). -:- use_module(listmap). -:- use_module(clean_code). -:- use_module(builtins). -:- use_module(find). -:- use_module(binomialheap). -:- use_module(guard_entailment). -:- use_module(chr_compiler_options). -:- use_module(chr_compiler_utility). -:- use_module(chr_compiler_errors). -:- include(chr_op). -:- op(1150, fx, chr_type). -:- op(1150, fx, chr_declaration). -:- op(1130, xfx, --->). -:- op(980, fx, (+)). -:- op(980, fx, (-)). -:- op(980, fx, (?)). -:- op(1150, fx, constraints). -:- op(1150, fx, chr_constraint). -% }}} - -:- chr_option(debug,off). -:- chr_option(optimize,full). -:- chr_option(check_guard_bindings,off). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Type Declarations {{{ -:- chr_type list(T) ---> [] ; [T|list(T)]. - -:- chr_type list == list(any). - -:- chr_type mode ---> (+) ; (-) ; (?). - -:- chr_type maybe(T) ---> yes(T) ; no. - -:- chr_type constraint ---> any / any. - -:- chr_type module_name == any. - -:- chr_type pragma_rule ---> pragma(rule,idspair,list(pragma_type),maybe(rule_name),rule_nb). -:- chr_type rule ---> rule(list(any),list(any),goal,goal). -:- chr_type idspair ---> ids(list(id),list(id)). - -:- chr_type pragma_type ---> passive(id) - ; mpassive(list(id)) - ; already_in_heads - ; already_in_heads(id) - ; no_history - ; history(history_name,list(id)). -:- chr_type history_name== any. - -:- chr_type rule_name == any. -:- chr_type rule_nb == natural. -:- chr_type id == natural. -:- chr_type occurrence == int. - -:- chr_type goal == any. - -:- chr_type store_type ---> default - ; multi_store(list(store_type)) - ; multi_hash(list(list(int))) - ; multi_inthash(list(list(int))) - ; global_singleton - ; global_ground - % EXPERIMENTAL STORES - ; atomic_constants(list(int),list(any),coverage) - ; ground_constants(list(int),list(any),coverage) - ; var_assoc_store(int,list(int)) - ; identifier_store(int) - ; type_indexed_identifier_store(int,any). -:- chr_type coverage ---> complete ; incomplete. -% }}} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%------------------------------------------------------------------------------% -:- chr_constraint chr_source_file/1. -:- chr_option(mode,chr_source_file(+)). -:- chr_option(type_declaration,chr_source_file(module_name)). -%------------------------------------------------------------------------------% -chr_source_file(_) \ chr_source_file(_) <=> true. - -%------------------------------------------------------------------------------% -:- chr_constraint get_chr_source_file/1. -:- chr_option(mode,get_chr_source_file(-)). -:- chr_option(type_declaration,get_chr_source_file(module_name)). -%------------------------------------------------------------------------------% -chr_source_file(Mod) \ get_chr_source_file(Query) - <=> Query = Mod . -get_chr_source_file(Query) - <=> Query = user. - - -%------------------------------------------------------------------------------% -:- chr_constraint target_module/1. -:- chr_option(mode,target_module(+)). -:- chr_option(type_declaration,target_module(module_name)). -%------------------------------------------------------------------------------% -target_module(_) \ target_module(_) <=> true. - -%------------------------------------------------------------------------------% -:- chr_constraint get_target_module/1. -:- chr_option(mode,get_target_module(-)). -:- chr_option(type_declaration,get_target_module(module_name)). -%------------------------------------------------------------------------------% -target_module(Mod) \ get_target_module(Query) - <=> Query = Mod . -get_target_module(Query) - <=> Query = user. - -%------------------------------------------------------------------------------% -:- chr_constraint line_number/2. -:- chr_option(mode,line_number(+,+)). -:- chr_option(type_declaration,line_number(rule_nb,int)). -%------------------------------------------------------------------------------% -line_number(RuleNb,LineNb) \ line_number(RuleNb,LineNumber) <=> true. - -%------------------------------------------------------------------------------% -:- chr_constraint get_line_number/2. -:- chr_option(mode,get_line_number(+,-)). -:- chr_option(type_declaration,get_line_number(rule_nb,int)). -%------------------------------------------------------------------------------% -line_number(RuleNb,LineNb) \ get_line_number(RuleNb,Q) <=> Q = LineNb. -get_line_number(RuleNb,Q) <=> Q = 0. % no line number available - -:- chr_constraint indexed_argument/2. % argument instantiation may enable applicability of rule -:- chr_option(mode,indexed_argument(+,+)). -:- chr_option(type_declaration,indexed_argument(constraint,int)). - -:- chr_constraint is_indexed_argument/2. -:- chr_option(mode,is_indexed_argument(+,+)). -:- chr_option(type_declaration,is_indexed_argument(constraint,int)). - -:- chr_constraint constraint_mode/2. -:- chr_option(mode,constraint_mode(+,+)). -:- chr_option(type_declaration,constraint_mode(constraint,list(mode))). - -:- chr_constraint get_constraint_mode/2. -:- chr_option(mode,get_constraint_mode(+,-)). -:- chr_option(type_declaration,get_constraint_mode(constraint,list(mode))). - -:- chr_constraint may_trigger/1. -:- chr_option(mode,may_trigger(+)). -:- chr_option(type_declaration,may_trigger(constraint)). - -:- chr_constraint only_ground_indexed_arguments/1. -:- chr_option(mode,only_ground_indexed_arguments(+)). -:- chr_option(type_declaration,only_ground_indexed_arguments(constraint)). - -:- chr_constraint none_suspended_on_variables/0. - -:- chr_constraint are_none_suspended_on_variables/0. - -:- chr_constraint store_type/2. -:- chr_option(mode,store_type(+,+)). -:- chr_option(type_declaration,store_type(constraint,store_type)). - -:- chr_constraint get_store_type/2. -:- chr_option(mode,get_store_type(+,?)). -:- chr_option(type_declaration,get_store_type(constraint,store_type)). - -:- chr_constraint update_store_type/2. -:- chr_option(mode,update_store_type(+,+)). -:- chr_option(type_declaration,update_store_type(constraint,store_type)). - -:- chr_constraint actual_store_types/2. -:- chr_option(mode,actual_store_types(+,+)). -:- chr_option(type_declaration,actual_store_types(constraint,list(store_type))). - -:- chr_constraint assumed_store_type/2. -:- chr_option(mode,assumed_store_type(+,+)). -:- chr_option(type_declaration,assumed_store_type(constraint,store_type)). - -:- chr_constraint validate_store_type_assumption/1. -:- chr_option(mode,validate_store_type_assumption(+)). -:- chr_option(type_declaration,validate_store_type_assumption(constraint)). - -:- chr_constraint rule_count/1. -:- chr_option(mode,rule_count(+)). -:- chr_option(type_declaration,rule_count(natural)). - -:- chr_constraint inc_rule_count/1. -:- chr_option(mode,inc_rule_count(-)). -:- chr_option(type_declaration,inc_rule_count(natural)). - -rule_count(_) \ rule_count(_) - <=> true. -rule_count(C), inc_rule_count(NC) - <=> NC is C + 1, rule_count(NC). -inc_rule_count(NC) - <=> NC = 1, rule_count(NC). - -:- chr_constraint passive/2. -:- chr_option(mode,passive(+,+)). - -:- chr_constraint is_passive/2. -:- chr_option(mode,is_passive(+,+)). - -:- chr_constraint any_passive_head/1. -:- chr_option(mode,any_passive_head(+)). - -:- chr_constraint new_occurrence/4. -:- chr_option(mode,new_occurrence(+,+,+,+)). - -:- chr_constraint occurrence/5. -:- chr_option(mode,occurrence(+,+,+,+,+)). -:- chr_type occurrence_type ---> simplification ; propagation. -:- chr_option(type_declaration,occurrence(constraint,occurrence,rule_nb,id,occurrence_type)). - -:- chr_constraint get_occurrence/4. -:- chr_option(mode,get_occurrence(+,+,-,-)). - -:- chr_constraint get_occurrence_from_id/4. -:- chr_option(mode,get_occurrence_from_id(+,-,+,+)). - -:- chr_constraint max_occurrence/2. -:- chr_option(mode,max_occurrence(+,+)). - -:- chr_constraint get_max_occurrence/2. -:- chr_option(mode,get_max_occurrence(+,-)). - -:- chr_constraint allocation_occurrence/2. -:- chr_option(mode,allocation_occurrence(+,+)). - -:- chr_constraint get_allocation_occurrence/2. -:- chr_option(mode,get_allocation_occurrence(+,-)). - -:- chr_constraint rule/2. -:- chr_option(mode,rule(+,+)). -:- chr_option(type_declaration,rule(rule_nb,pragma_rule)). - -:- chr_constraint get_rule/2. -:- chr_option(mode,get_rule(+,-)). -:- chr_option(type_declaration,get_rule(int,pragma_rule)). - -:- chr_constraint least_occurrence/2. -:- chr_option(mode,least_occurrence(+,+)). -:- chr_option(type_declaration,least_occurrence(any,list)). - -:- chr_constraint is_least_occurrence/1. -:- chr_option(mode,is_least_occurrence(+)). - - -indexed_argument(FA,I) \ indexed_argument(FA,I) <=> true. -indexed_argument(FA,I) \ is_indexed_argument(FA,I) <=> true. -is_indexed_argument(_,_) <=> fail. - -%%% C O N S T R A I N T M O D E %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -constraint_mode(FA,_) \ constraint_mode(FA,_) <=> true. -constraint_mode(FA,Mode) \ get_constraint_mode(FA,Q) <=> - Q = Mode. -get_constraint_mode(FA,Q) <=> - FA = _ / N, - replicate(N,(?),Q). - -%%% M A Y T R I G G E R %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -may_trigger(FA) <=> \+ has_active_occurrence(FA) | fail. -constraint_mode(FA,Mode), indexed_argument(FA,I) \ may_trigger(FA) <=> - nth1(I,Mode,M), - M \== (+) | - is_stored(FA). -may_trigger(FA) <=> chr_pp_flag(debugable,on). % in debug mode, we assume everything can be triggered - -constraint_mode(FA,Mode), indexed_argument(FA,I) \ only_ground_indexed_arguments(FA) - <=> - nth1(I,Mode,M), - M \== (+) - | - fail. -only_ground_indexed_arguments(_) <=> - true. - -none_suspended_on_variables \ none_suspended_on_variables <=> true. -none_suspended_on_variables \ are_none_suspended_on_variables <=> true. -are_none_suspended_on_variables <=> fail. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% STORE TYPES -% -% The functionality for inspecting and deciding on the different types of constraint -% store / indexes for constraints. - -store_type(FA,StoreType) - ==> chr_pp_flag(verbose,on) - | - format('The indexes for ~w are:\n',[FA]), - format_storetype(StoreType). - % chr_info(verbose,'Storetype of ~w is ~w.\n',[FA,StoreType]). - -format_storetype(multi_store(StoreTypes)) :- !, - maplist(format_storetype,StoreTypes). -format_storetype(atomic_constants(Index,Constants,_)) :- - format('\t* a trie index on the argument(s) ~w for the ground terms ~w\n',[Index,Constants]). -format_storetype(ground_constants(Index,Constants,_)) :- - format('\t* a trie index on the argument(s) ~w for the ground terms ~w\n',[Index,Constants]). -format_storetype(StoreType) :- - format('\t* ~w\n',[StoreType]). - - -% 1. Inspection -% ~~~~~~~~~~~~~ -% -% - -get_store_type_normal @ -store_type(FA,Store) \ get_store_type(FA,Query) - <=> Query = Store. - -get_store_type_assumed @ -assumed_store_type(FA,Store) \ get_store_type(FA,Query) - <=> Query = Store. - -get_store_type_default @ -get_store_type(_,Query) - <=> Query = default. - -% 2. Store type registration -% ~~~~~~~~~~~~~~~~~~~~~~~~~~ - -actual_store_types(C,STs) \ update_store_type(C,ST) - <=> memberchk(ST,STs) | true. -update_store_type(C,ST), actual_store_types(C,STs) - <=> - actual_store_types(C,[ST|STs]). -update_store_type(C,ST) - <=> - actual_store_types(C,[ST]). - -% 3. Final decision on store types -% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -validate_store_type_assumption(C) \ actual_store_types(C,STs), actual_atomic_multi_hash_keys(C,Index,Keys) - <=> - true % chr_pp_flag(experiment,on) - | - delete(STs,multi_hash([Index]),STs0), - Index = [IndexPos], - ( get_constraint_arg_type(C,IndexPos,Type), - enumerated_atomic_type(Type,Atoms) -> - /* use the type constants rather than the collected keys */ - Constants = Atoms, - Completeness = complete - ; - Constants = Keys, - Completeness = incomplete - ), - actual_store_types(C,[atomic_constants(Index,Constants,Completeness)|STs0]). -validate_store_type_assumption(C) \ actual_store_types(C,STs), actual_ground_multi_hash_keys(C,Index,Constants0) - <=> - true % chr_pp_flag(experiment,on) - | - ( Index = [IndexPos], - get_constraint_arg_type(C,IndexPos,Type), - ( is_chr_constants_type(Type,Key,_) -> get_chr_constants(Key,Constants) - ; Type = chr_enum(Constants) -> true - ) - -> - Completeness = complete - ; - Constants = Constants0, - Completeness = incomplete - ), - delete(STs,multi_hash([Index]),STs0), - actual_store_types(C,[ground_constants(Index,Constants,Completeness)|STs0]). - -get_constraint_arg_type(C,Pos,Type) :- - get_constraint_type(C,Types), - nth1(Pos,Types,Type0), - unalias_type(Type0,Type). - -validate_store_type_assumption(C) \ actual_store_types(C,STs) - <=> - % chr_pp_flag(experiment,on), - memberchk(multi_hash([[Index]]),STs), - get_constraint_type(C,Types), - nth1(Index,Types,Type), - enumerated_atomic_type(Type,Atoms) - | - delete(STs,multi_hash([[Index]]),STs0), - actual_store_types(C,[atomic_constants([Index],Atoms,complete)|STs0]). -validate_store_type_assumption(C) \ actual_store_types(C,STs) - <=> - memberchk(multi_hash([[Index]]),STs), - get_constraint_arg_type(C,Index,Type), - ( Type = chr_enum(Constants) -> true - ; is_chr_constants_type(Type,Key,_) -> get_chr_constants(Key,Constants) - ) - | - delete(STs,multi_hash([[Index]]),STs0), - actual_store_types(C,[ground_constants([Index],Constants,complete)|STs0]). -validate_store_type_assumption(C), actual_store_types(C,STs), assumed_store_type(C,_) % automatic assumption - <=> - ( /* chr_pp_flag(experiment,on), */ maplist(partial_store,STs) -> - Stores = [global_ground|STs] - ; - Stores = STs - ), - store_type(C,multi_store(Stores)). -validate_store_type_assumption(C), actual_store_types(C,STs), store_type(C,_) % user assumption - <=> - store_type(C,multi_store(STs)). -validate_store_type_assumption(C), assumed_store_type(C,_) % no lookups on constraint in debug mode - <=> - chr_pp_flag(debugable,on) - | - store_type(C,default). -validate_store_type_assumption(C), assumed_store_type(C,_) % no lookups on constraint - <=> store_type(C,global_ground). -validate_store_type_assumption(C) - <=> true. - -partial_store(ground_constants(_,_,incomplete)). -partial_store(atomic_constants(_,_,incomplete)). - -%%% P A S S I V E %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -passive(R,ID) \ passive(R,ID) <=> true. - -passive(RuleNb,ID) \ is_passive(RuleNb,ID) <=> true. -is_passive(_,_) <=> fail. - -passive(RuleNb,_) \ any_passive_head(RuleNb) - <=> true. -any_passive_head(_) - <=> fail. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -max_occurrence(C,N) \ max_occurrence(C,M) - <=> N >= M | true. - -max_occurrence(C,MO), new_occurrence(C,RuleNb,ID,Type) <=> - NO is MO + 1, - occurrence(C,NO,RuleNb,ID,Type), - max_occurrence(C,NO). -new_occurrence(C,RuleNb,ID,_) <=> - chr_error(internal,'new_occurrence: missing max_occurrence for ~w in rule ~w\n',[C,RuleNb]). - -max_occurrence(C,MON) \ get_max_occurrence(C,Q) - <=> Q = MON. -get_max_occurrence(C,Q) - <=> chr_error(internal,'get_max_occurrence: missing max occurrence for ~w\n',[C]). - -occurrence(C,ON,Rule,ID,_) \ get_occurrence(C,ON,QRule,QID) - <=> Rule = QRule, ID = QID. -get_occurrence(C,O,_,_) - <=> chr_error(internal,'get_occurrence: missing occurrence ~w:~w\n',[C,O]). - -occurrence(C,ON,Rule,ID,_) \ get_occurrence_from_id(QC,QON,Rule,ID) - <=> QC = C, QON = ON. -get_occurrence_from_id(C,O,_,_) - <=> chr_error(internal,'get_occurrence_from_id: missing occurrence ~w:~w\n',[]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Late allocation - -late_allocation_analysis(Cs) :- - ( chr_pp_flag(late_allocation,on) -> - maplist(late_allocation, Cs) - ; - true - ). - -late_allocation(C) :- late_allocation(C,0). -late_allocation(C,O) :- allocation_occurrence(C,O), !. -late_allocation(C,O) :- NO is O + 1, late_allocation(C,NO). - -% A L L O C C A T I O N O C C U R R E N C E %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -allocation_occurrence(C,0) ==> stored_in_guard_before_next_kept_occurrence(C,0). - -rule(RuleNb,Rule), occurrence(C,O,RuleNb,Id,Type), allocation_occurrence(C,O) ==> - \+ is_passive(RuleNb,Id), - Type == propagation, - ( stored_in_guard_before_next_kept_occurrence(C,O) -> - true - ; Rule = pragma(rule([_|_],_,_,_),_,_,_,_) -> % simpagation rule - is_observed(C,O) - ; is_least_occurrence(RuleNb) -> % propagation rule - is_observed(C,O) - ; - true - ). - -stored_in_guard_before_next_kept_occurrence(C,O) :- - chr_pp_flag(store_in_guards, on), - NO is O + 1, - stored_in_guard_lookahead(C,NO). - -:- chr_constraint stored_in_guard_lookahead/2. -:- chr_option(mode, stored_in_guard_lookahead(+,+)). - -occurrence(C,O,RuleNb,Id,_), passive(RuleNb,Id) \ stored_in_guard_lookahead(C,O) <=> - NO is O + 1, stored_in_guard_lookahead(C,NO). -occurrence(C,O,RuleNb,Id,Type) \ stored_in_guard_lookahead(C,O) <=> - Type == simplification, - ( is_stored_in_guard(C,RuleNb) -> - true - ; - NO is O + 1, stored_in_guard_lookahead(C,NO) - ). -stored_in_guard_lookahead(_,_) <=> fail. - - -rule(RuleNb,Rule), occurrence(C,O,RuleNb,ID,_), allocation_occurrence(C,AO) - \ least_occurrence(RuleNb,[ID|IDs]) - <=> AO >= O, \+ may_trigger(C) | - least_occurrence(RuleNb,IDs). -rule(RuleNb,Rule), passive(RuleNb,ID) - \ least_occurrence(RuleNb,[ID|IDs]) - <=> least_occurrence(RuleNb,IDs). - -rule(RuleNb,Rule) - ==> Rule = pragma(rule([],_,_,_),ids([],IDs),_,_,_) | - least_occurrence(RuleNb,IDs). - -least_occurrence(RuleNb,[]) \ is_least_occurrence(RuleNb) - <=> true. -is_least_occurrence(_) - <=> fail. - -allocation_occurrence(C,O) \ get_allocation_occurrence(C,Q) - <=> Q = O. -get_allocation_occurrence(_,Q) - <=> chr_pp_flag(late_allocation,off), Q=0. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -rule(RuleNb,Rule) \ get_rule(RuleNb,Q) - <=> Q = Rule. -get_rule(_,_) - <=> fail. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%% C O N S T R A I N T I N D E X %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Default store constraint index assignment. - -:- chr_constraint constraint_index/2. % constraint_index(F/A,DefaultStoreAndAttachedIndex) -:- chr_option(mode,constraint_index(+,+)). -:- chr_option(type_declaration,constraint_index(constraint,int)). - -:- chr_constraint get_constraint_index/2. -:- chr_option(mode,get_constraint_index(+,-)). -:- chr_option(type_declaration,get_constraint_index(constraint,int)). - -:- chr_constraint get_indexed_constraint/2. -:- chr_option(mode,get_indexed_constraint(+,-)). -:- chr_option(type_declaration,get_indexed_constraint(int,constraint)). - -:- chr_constraint max_constraint_index/1. % max_constraint_index(MaxDefaultStoreAndAttachedIndex) -:- chr_option(mode,max_constraint_index(+)). -:- chr_option(type_declaration,max_constraint_index(int)). - -:- chr_constraint get_max_constraint_index/1. -:- chr_option(mode,get_max_constraint_index(-)). -:- chr_option(type_declaration,get_max_constraint_index(int)). - -constraint_index(C,Index) \ get_constraint_index(C,Query) - <=> Query = Index. -get_constraint_index(C,Query) - <=> fail. - -constraint_index(C,Index) \ get_indexed_constraint(Index,Q) - <=> Q = C. -get_indexed_constraint(Index,Q) - <=> fail. - -max_constraint_index(Index) \ get_max_constraint_index(Query) - <=> Query = Index. -get_max_constraint_index(Query) - <=> Query = 0. - -set_constraint_indices(Constraints) :- - set_constraint_indices(Constraints,1). -set_constraint_indices([],M) :- - N is M - 1, - max_constraint_index(N). -set_constraint_indices([C|Cs],N) :- - ( ( chr_pp_flag(debugable, on) ; \+ only_ground_indexed_arguments(C), is_stored(C) ; is_stored(C), get_store_type(C,default) - ; get_store_type(C,var_assoc_store(_,_))) -> - constraint_index(C,N), - M is N + 1, - set_constraint_indices(Cs,M) - ; - set_constraint_indices(Cs,N) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Identifier Indexes - -:- chr_constraint identifier_size/1. -:- chr_option(mode,identifier_size(+)). -:- chr_option(type_declaration,identifier_size(natural)). - -identifier_size(_) \ identifier_size(_) - <=> - true. - -:- chr_constraint get_identifier_size/1. -:- chr_option(mode,get_identifier_size(-)). -:- chr_option(type_declaration,get_identifier_size(natural)). - -identifier_size(Size) \ get_identifier_size(Q) - <=> - Q = Size. - -get_identifier_size(Q) - <=> - Q = 1. - -:- chr_constraint identifier_index/3. -:- chr_option(mode,identifier_index(+,+,+)). -:- chr_option(type_declaration,identifier_index(constraint,natural,natural)). - -identifier_index(C,I,_) \ identifier_index(C,I,_) - <=> - true. - -:- chr_constraint get_identifier_index/3. -:- chr_option(mode,get_identifier_index(+,+,-)). -:- chr_option(type_declaration,get_identifier_index(constraint,natural,natural)). - -identifier_index(C,I,II) \ get_identifier_index(C,I,Q) - <=> - Q = II. -identifier_size(Size), get_identifier_index(C,I,Q) - <=> - NSize is Size + 1, - identifier_index(C,I,NSize), - identifier_size(NSize), - Q = NSize. -get_identifier_index(C,I,Q) - <=> - identifier_index(C,I,2), - identifier_size(2), - Q = 2. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Type Indexed Identifier Indexes - -:- chr_constraint type_indexed_identifier_size/2. -:- chr_option(mode,type_indexed_identifier_size(+,+)). -:- chr_option(type_declaration,type_indexed_identifier_size(any,natural)). - -type_indexed_identifier_size(IndexType,_) \ type_indexed_identifier_size(IndexType,_) - <=> - true. - -:- chr_constraint get_type_indexed_identifier_size/2. -:- chr_option(mode,get_type_indexed_identifier_size(+,-)). -:- chr_option(type_declaration,get_type_indexed_identifier_size(any,natural)). - -type_indexed_identifier_size(IndexType,Size) \ get_type_indexed_identifier_size(IndexType,Q) - <=> - Q = Size. - -get_type_indexed_identifier_size(IndexType,Q) - <=> - Q = 1. - -:- chr_constraint type_indexed_identifier_index/4. -:- chr_option(mode,type_indexed_identifier_index(+,+,+,+)). -:- chr_option(type_declaration,type_indexed_identifier_index(any,constraint,natural,natural)). - -type_indexed_identifier_index(_,C,I,_) \ type_indexed_identifier_index(_,C,I,_) - <=> - true. - -:- chr_constraint get_type_indexed_identifier_index/4. -:- chr_option(mode,get_type_indexed_identifier_index(+,+,+,-)). -:- chr_option(type_declaration,get_type_indexed_identifier_index(any,constraint,natural,natural)). - -type_indexed_identifier_index(IndexType,C,I,II) \ get_type_indexed_identifier_index(IndexType,C,I,Q) - <=> - Q = II. -type_indexed_identifier_size(IndexType,Size), get_type_indexed_identifier_index(IndexType,C,I,Q) - <=> - NSize is Size + 1, - type_indexed_identifier_index(IndexType,C,I,NSize), - type_indexed_identifier_size(IndexType,NSize), - Q = NSize. -get_type_indexed_identifier_index(IndexType,C,I,Q) - <=> - type_indexed_identifier_index(IndexType,C,I,2), - type_indexed_identifier_size(IndexType,2), - Q = 2. - -type_indexed_identifier_structure(IndexType,Structure) :- - type_indexed_identifier_name(IndexType,type_indexed_identifier_struct,Functor), - get_type_indexed_identifier_size(IndexType,Arity), - functor(Structure,Functor,Arity). -type_indexed_identifier_name(IndexType,Prefix,Name) :- - ( atom(IndexType) -> - IndexTypeName = IndexType - ; - term_to_atom(IndexType,IndexTypeName) - ), - atom_concat_list([Prefix,'_',IndexTypeName],Name). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Translation - -chr_translate(Declarations,NewDeclarations) :- - chr_translate_line_info(Declarations,'bootstrap',NewDeclarations). - -chr_translate_line_info(Declarations0,File,NewDeclarations) :- - chr_banner, - restart_after_flattening(Declarations0,Declarations), - init_chr_pp_flags, - chr_source_file(File), - /* sort out the interesting stuff from the input */ - partition_clauses(Declarations,Constraints0,Rules0,OtherClauses), - chr_compiler_options:sanity_check, - - dump_code(Declarations), - - check_declared_constraints(Constraints0), - generate_show_constraint(Constraints0,Constraints,Rules0,Rules1), - add_constraints(Constraints), - add_rules(Rules1), - generate_never_stored_rules(Constraints,NewRules), - add_rules(NewRules), - append(Rules1,NewRules,Rules), - chr_analysis(Rules,Constraints,Declarations), - time('constraint code generation',chr_translate:constraints_code(Constraints,ConstraintClauses)), - time('validate store assumptions',chr_translate:validate_store_type_assumptions(Constraints)), - phase_end(validate_store_type_assumptions), - used_states_known, - time('store code generation',chr_translate:store_management_preds(Constraints,StoreClauses)), % depends on actual code used - insert_declarations(OtherClauses, Clauses0), - chr_module_declaration(CHRModuleDeclaration), - append([StoreClauses,ConstraintClauses,CHRModuleDeclaration,[end_of_file]],StuffyGeneratedClauses), - clean_clauses(StuffyGeneratedClauses,GeneratedClauses), - append([Clauses0,GeneratedClauses], NewDeclarations), - dump_code(NewDeclarations), - !. /* cut choicepoint of restart_after_flattening */ - -chr_analysis(Rules,Constraints,Declarations) :- - check_rules(Rules,Constraints), - time('type checking',chr_translate:static_type_check), - /* constants */ - collect_constants(Rules,Constraints,Declarations), - add_occurrences(Rules), - time('functional dependency',chr_translate:functional_dependency_analysis(Rules)), - time('set semantics',chr_translate:set_semantics_rules(Rules)), - time('symmetry analysis',chr_translate:symmetry_analysis(Rules)), - time('guard simplification',chr_translate:guard_simplification), - time('late storage',chr_translate:storage_analysis(Constraints)), - time('observation',chr_translate:observation_analysis(Constraints)), - time('ai observation',chr_translate:ai_observation_analysis(Constraints)), - time('late allocation',chr_translate:late_allocation_analysis(Constraints)), - partial_wake_analysis, - time('assume constraint stores',chr_translate:assume_constraint_stores(Constraints)), - time('default constraint indices',chr_translate:set_constraint_indices(Constraints)), - time('check storedness assertions',chr_translate:check_storedness_assertions(Constraints)), - time('continuation analysis',chr_translate:continuation_analysis(Constraints)). - -store_management_preds(Constraints,Clauses) :- - generate_attach_detach_a_constraint_all(Constraints,AttachAConstraintClauses), - generate_attr_unify_hook(AttrUnifyHookClauses), - generate_attach_increment(AttachIncrementClauses), - generate_extra_clauses(Constraints,ExtraClauses), - generate_insert_delete_constraints(Constraints,DeleteClauses), - generate_attach_code(Constraints,StoreClauses), - generate_counter_code(CounterClauses), - generate_dynamic_type_check_clauses(TypeCheckClauses), - append([AttachAConstraintClauses - ,AttachIncrementClauses - ,AttrUnifyHookClauses - ,ExtraClauses - ,DeleteClauses - ,StoreClauses - ,CounterClauses - ,TypeCheckClauses - ] - ,Clauses). - - -insert_declarations(Clauses0, Clauses) :- - findall((:- use_module(chr(Module))),(auxiliary_module(Module), is_used_auxiliary_module(Module)),Decls), - append(Clauses0, [(:- use_module(chr(chr_runtime)))|Decls], Clauses). - -auxiliary_module(chr_hashtable_store). -auxiliary_module(chr_integertable_store). -auxiliary_module(chr_assoc_store). - -generate_counter_code(Clauses) :- - ( chr_pp_flag(store_counter,on) -> - Clauses = [ - ('$counter_init'(N1) :- nb_setval(N1,0)) , - ('$counter'(N2,X1) :- nb_getval(N2,X1)), - ('$counter_inc'(N) :- nb_getval(N,X), Y is X + 1, nb_setval(N,Y)), - (:- '$counter_init'('$insert_counter')), - (:- '$counter_init'('$delete_counter')), - ('$insert_counter_inc' :- '$counter_inc'('$insert_counter')), - ('$delete_counter_inc' :- '$counter_inc'('$delete_counter')), - ( counter_stats(I,D) :- '$counter'('$insert_counter',I),'$counter'('$delete_counter',D)) - ] - ; - Clauses = [] - ). - -% for systems with multifile declaration -chr_module_declaration(CHRModuleDeclaration) :- - get_target_module(Mod), - ( Mod \== chr_translate, chr_pp_flag(toplevel_show_store,on) -> - CHRModuleDeclaration = [ - (:- multifile chr:'$chr_module'/1), - chr:'$chr_module'(Mod) - ] - ; - CHRModuleDeclaration = [] - ). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Partitioning of clauses into constraint declarations, chr rules and other -%% clauses - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% partition_clauses(+Clauses,-ConstraintDeclarations,-Rules,-OtherClauses) is det. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -partition_clauses([],[],[],[]). -partition_clauses([Clause|Clauses],ConstraintDeclarations,Rules,OtherClauses) :- - ( parse_rule(Clause,Rule) -> - ConstraintDeclarations = RestConstraintDeclarations, - Rules = [Rule|RestRules], - OtherClauses = RestOtherClauses - ; is_declaration(Clause,ConstraintDeclaration) -> - append(ConstraintDeclaration,RestConstraintDeclarations,ConstraintDeclarations), - Rules = RestRules, - OtherClauses = RestOtherClauses - ; is_module_declaration(Clause,Mod) -> - target_module(Mod), - ConstraintDeclarations = RestConstraintDeclarations, - Rules = RestRules, - OtherClauses = [Clause|RestOtherClauses] - ; is_type_definition(Clause) -> - ConstraintDeclarations = RestConstraintDeclarations, - Rules = RestRules, - OtherClauses = RestOtherClauses - ; is_chr_declaration(Clause) -> - ConstraintDeclarations = RestConstraintDeclarations, - Rules = RestRules, - OtherClauses = RestOtherClauses - ; Clause = (handler _) -> - chr_warning(deprecated(Clause),'Backward compatibility: ignoring handler/1 declaration.\n',[]), - ConstraintDeclarations = RestConstraintDeclarations, - Rules = RestRules, - OtherClauses = RestOtherClauses - ; Clause = (rules _) -> - chr_warning(deprecated(Clause),'Backward compatibility: ignoring rules/1 declaration.\n',[]), - ConstraintDeclarations = RestConstraintDeclarations, - Rules = RestRules, - OtherClauses = RestOtherClauses - ; Clause = option(OptionName,OptionValue) -> - chr_warning(deprecated(Clause),'Instead use `:-chr_option(~w,~w).\'\n',[OptionName,OptionValue]), - handle_option(OptionName,OptionValue), - ConstraintDeclarations = RestConstraintDeclarations, - Rules = RestRules, - OtherClauses = RestOtherClauses - ; Clause = (:-chr_option(OptionName,OptionValue)) -> - handle_option(OptionName,OptionValue), - ConstraintDeclarations = RestConstraintDeclarations, - Rules = RestRules, - OtherClauses = RestOtherClauses - ; Clause = ('$chr_compiled_with_version'(_)) -> - ConstraintDeclarations = RestConstraintDeclarations, - Rules = RestRules, - OtherClauses = ['$chr_compiled_with_version'(3)|RestOtherClauses] - ; ConstraintDeclarations = RestConstraintDeclarations, - Rules = RestRules, - OtherClauses = [Clause|RestOtherClauses] - ), - partition_clauses(Clauses,RestConstraintDeclarations,RestRules,RestOtherClauses). - -'$chr_compiled_with_version'(2). - -is_declaration(D, Constraints) :- %% constraint declaration - ( D = (:- Decl), Decl =.. [F,Cs], F == (chr_constraint) -> - conj2list(Cs,Constraints0) - ; - ( D = (:- Decl) -> - Decl =.. [constraints,Cs] - ; - D =.. [constraints,Cs] - ), - conj2list(Cs,Constraints0), - chr_warning(deprecated(D),'Instead use :- chr_constraint ~w.\n',[Cs]) - ), - extract_type_mode(Constraints0,Constraints). - -extract_type_mode([],[]). -extract_type_mode([F/A|R],[F/A|R2]) :- !,extract_type_mode(R,R2). -extract_type_mode([C0|R],[ConstraintSymbol|R2]) :- - ( C0 = C # Annotation -> - functor(C,F,A), - extract_annotation(Annotation,F/A) - ; - C0 = C, - functor(C,F,A) - ), - ConstraintSymbol = F/A, - C =.. [_|Args], - extract_types_and_modes(Args,ArgTypes,ArgModes), - assert_constraint_type(ConstraintSymbol,ArgTypes), - constraint_mode(ConstraintSymbol,ArgModes), - extract_type_mode(R,R2). - -extract_annotation(stored,Symbol) :- - stored_assertion(Symbol). -extract_annotation(default(Goal),Symbol) :- - never_stored_default(Symbol,Goal). - -extract_types_and_modes([],[],[]). -extract_types_and_modes([X|R],[T|R2],[M|R3]) :- - extract_type_and_mode(X,T,M), - extract_types_and_modes(R,R2,R3). - -extract_type_and_mode(+(T),T,(+)) :- !. -extract_type_and_mode(?(T),T,(?)) :- !. -extract_type_and_mode(-(T),T,(-)) :- !. -extract_type_and_mode((+),any,(+)) :- !. -extract_type_and_mode((?),any,(?)) :- !. -extract_type_and_mode((-),any,(-)) :- !. -extract_type_and_mode(Illegal,_,_) :- - chr_error(syntax(Illegal),'Illegal mode/type declaration.\n\tCorrect syntax is +type, -type or ?type\n\tor +, - or ?.\n',[]). - -is_chr_declaration(Declaration) :- - Declaration = (:- chr_declaration Decl), - ( Decl = (Pattern ---> Information) -> - background_info(Pattern,Information) - ; Decl = Information -> - background_info([Information]) - ). -is_type_definition(Declaration) :- - is_type_definition(Declaration,Result), - assert_type_definition(Result). - -assert_type_definition(typedef(Name,DefList)) :- type_definition(Name,DefList). -assert_type_definition(alias(Alias,Name)) :- type_alias(Alias,Name). - -is_type_definition(Declaration,Result) :- - ( Declaration = (:- TDef) -> - true - ; - Declaration = TDef - ), - TDef =.. [chr_type,TypeDef], - ( TypeDef = (Name ---> Def) -> - tdisj2list(Def,DefList), - Result = typedef(Name,DefList) - ; TypeDef = (Alias == Name) -> - Result = alias(Alias,Name) - ; - Result = typedef(TypeDef,[]), - chr_warning(syntax,'Empty type definition `~w\'.\nAre you sure you want to declare a phantom type?\n',[Declaration]) - ). - -%% tdisj2list(+Goal,-ListOfGoals) is det. -% -% no removal of fails, e.g. :- type bool ---> true ; fail. -tdisj2list(Conj,L) :- - tdisj2list(Conj,L,[]). - -tdisj2list(Conj,L,T) :- - Conj = (G1;G2), !, - tdisj2list(G1,L,T1), - tdisj2list(G2,T1,T). -tdisj2list(G,[G | T],T). - - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% parse_rule(+term,-pragma_rule) is semidet. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -parse_rule(RI,R) :- %% name @ rule - RI = (Name @ RI2), !, - rule(RI2,yes(Name),R). -parse_rule(RI,R) :- - rule(RI,no,R). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% parse_rule(+term,-pragma_rule) is semidet. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -rule(RI,Name,R) :- - RI = (RI2 pragma P), !, %% pragmas - ( var(P) -> - Ps = [_] % intercept variable - ; - conj2list(P,Ps) - ), - inc_rule_count(RuleCount), - R = pragma(R1,IDs,Ps,Name,RuleCount), - is_rule(RI2,R1,IDs,R). -rule(RI,Name,R) :- - inc_rule_count(RuleCount), - R = pragma(R1,IDs,[],Name,RuleCount), - is_rule(RI,R1,IDs,R). - -is_rule(RI,R,IDs,RC) :- %% propagation rule - RI = (H ==> B), !, - conj2list(H,Head2i), - get_ids(Head2i,IDs2,Head2,RC), - IDs = ids([],IDs2), - ( B = (G | RB) -> - R = rule([],Head2,G,RB) - ; - R = rule([],Head2,true,B) - ). -is_rule(RI,R,IDs,RC) :- %% simplification/simpagation rule - RI = (H <=> B), !, - ( B = (G | RB) -> - Guard = G, - Body = RB - ; Guard = true, - Body = B - ), - ( H = (H1 \ H2) -> - conj2list(H1,Head2i), - conj2list(H2,Head1i), - get_ids(Head2i,IDs2,Head2,0,N,RC), - get_ids(Head1i,IDs1,Head1,N,_,RC), - IDs = ids(IDs1,IDs2) - ; conj2list(H,Head1i), - Head2 = [], - get_ids(Head1i,IDs1,Head1,RC), - IDs = ids(IDs1,[]) - ), - R = rule(Head1,Head2,Guard,Body). - -get_ids(Cs,IDs,NCs,RC) :- - get_ids(Cs,IDs,NCs,0,_,RC). - -get_ids([],[],[],N,N,_). -get_ids([C|Cs],[N|IDs],[NC|NCs],N,NN,RC) :- - ( C = (NC # N1) -> - ( var(N1) -> - N1 = N - ; - check_direct_pragma(N1,N,RC) - ) - ; - NC = C - ), - M is N + 1, - get_ids(Cs,IDs,NCs, M,NN,RC). - -check_direct_pragma(passive,Id,PragmaRule) :- !, - PragmaRule = pragma(_,_,_,_,RuleNb), - passive(RuleNb,Id). -check_direct_pragma(Abbrev,Id,PragmaRule) :- - ( direct_pragma(FullPragma), - atom_concat(Abbrev,Remainder,FullPragma) -> - chr_warning(problem_pragma(Abbrev,PragmaRule),'completed `~w\' to `~w\'\n',[Abbrev,FullPragma]) - ; - chr_warning(unsupported_pragma(Abbrev,PragmaRule),'',[]) - ). - -direct_pragma(passive). - -is_module_declaration((:- module(Mod)),Mod). -is_module_declaration((:- module(Mod,_)),Mod). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Add constraints -add_constraints([]). -add_constraints([C|Cs]) :- - max_occurrence(C,0), - C = _/A, - length(Mode,A), - set_elems(Mode,?), - constraint_mode(C,Mode), - add_constraints(Cs). - -% Add rules -add_rules([]). -add_rules([Rule|Rules]) :- - Rule = pragma(_,_,_,_,RuleNb), - rule(RuleNb,Rule), - add_rules(Rules). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Some input verification: - -check_declared_constraints(Constraints) :- - tree_set_empty(Acc), - check_declared_constraints(Constraints,Acc). - -check_declared_constraints([],_). -check_declared_constraints([C|Cs],Acc) :- - ( tree_set_memberchk(C,Acc) -> - chr_error(syntax(C),'Constraint multiply defined: ~w.\n\tRemove redundant declaration!\n',[C]) - ; - true - ), - tree_set_add(Acc,C,NAcc), - check_declared_constraints(Cs,NAcc). - -%% - all constraints in heads are declared constraints -%% - all passive pragmas refer to actual head constraints - -check_rules([],_). -check_rules([PragmaRule|Rest],Decls) :- - check_rule(PragmaRule,Decls), - check_rules(Rest,Decls). - -check_rule(PragmaRule,Decls) :- - check_rule_indexing(PragmaRule), - check_trivial_propagation_rule(PragmaRule), - PragmaRule = pragma(Rule,_IDs,Pragmas,_Name,_N), - Rule = rule(H1,H2,_,_), - append(H1,H2,HeadConstraints), - check_head_constraints(HeadConstraints,Decls,PragmaRule), - check_pragmas(Pragmas,PragmaRule). - -% Make all heads passive in trivial propagation rule -% ... ==> ... | true. -check_trivial_propagation_rule(PragmaRule) :- - PragmaRule = pragma(Rule,IDs,Pragmas,Name,RuleNb), - ( Rule = rule([],_,_,true) -> - chr_warning(weird_program,'Ignoring propagation rule with empty body: ~@.\n\t\n',[format_rule(PragmaRule)]), - set_all_passive(RuleNb) - ; - true - ). - -check_head_constraints([],_,_). -check_head_constraints([Constr|Rest],Decls,PragmaRule) :- - functor(Constr,F,A), - ( memberchk(F/A,Decls) -> - check_head_constraints(Rest,Decls,PragmaRule) - ; - chr_error(syntax(Constr),'Undeclared constraint ~w in head of ~@.\n\tConstraint should be one of ~w.\n', [F/A,format_rule(PragmaRule),Decls]) - ). - -check_pragmas([],_). -check_pragmas([Pragma|Pragmas],PragmaRule) :- - check_pragma(Pragma,PragmaRule), - check_pragmas(Pragmas,PragmaRule). - -check_pragma(Pragma,PragmaRule) :- - var(Pragma), !, - chr_error(syntax(Pragma),'Invalid pragma ~w in ~@.\n\tPragma should not be a variable!\n',[Pragma,format_rule(PragmaRule)]). -check_pragma(passive(ID), PragmaRule) :- - !, - PragmaRule = pragma(_,ids(IDs1,IDs2),_,_,RuleNb), - ( memberchk_eq(ID,IDs1) -> - true - ; memberchk_eq(ID,IDs2) -> - true - ; - chr_error(syntax(ID),'Invalid identifier ~w in pragma passive in ~@.\n', [ID,format_rule(PragmaRule)]) - ), - passive(RuleNb,ID). - -check_pragma(mpassive(IDs), PragmaRule) :- - !, - PragmaRule = pragma(_,_,_,_,RuleNb), - chr_warning(experimental,'Experimental pragma ~w. Use with care!\n',[mpassive(IDs)]), - maplist(passive(RuleNb),IDs). - -check_pragma(Pragma, PragmaRule) :- - Pragma = already_in_heads, - !, - chr_warning(unsupported_pragma(Pragma,PragmaRule),'Termination and correctness may be affected.\n',[]). - -check_pragma(Pragma, PragmaRule) :- - Pragma = already_in_head(_), - !, - chr_warning(unsupported_pragma(Pragma,PragmaRule),'Termination and correctness may be affected.\n',[]). - -check_pragma(Pragma, PragmaRule) :- - Pragma = no_history, - !, - chr_warning(experimental,'Experimental pragma no_history. Use with care!\n',[]), - PragmaRule = pragma(_,_,_,_,N), - no_history(N). - -check_pragma(Pragma, PragmaRule) :- - Pragma = history(HistoryName,IDs), - !, - PragmaRule = pragma(_,ids(IDs1,IDs2),_,_,RuleNb), - chr_warning(experimental,'Experimental pragma ~w. Use with care!\n',[Pragma]), - ( IDs1 \== [] -> - chr_error(syntax(Pragma),'Pragma history only implemented for propagation rules.\n',[]) - ; \+ atom(HistoryName) -> - chr_error(syntax(Pragma),'Illegal argument for pragma history: ~w is not an atom (rule number ~w).\n',[HistoryName,RuleNb]) - ; \+ is_set(IDs) -> - chr_error(syntax(Pragma),'Illegal argument for pragma history: ~w is not a set (rule number ~w).\n',[IDs,RuleNb]) - ; check_history_pragma_ids(IDs,IDs1,IDs2) -> - history(RuleNb,HistoryName,IDs) - ; - chr_error(syntax(Pragma),'Invalid identifier(s) in pragma ~w of rule number ~w.\n',[Pragma,RuleNb]) - ). -check_pragma(Pragma,PragmaRule) :- - Pragma = line_number(LineNumber), - !, - PragmaRule = pragma(_,_,_,_,RuleNb), - line_number(RuleNb,LineNumber). - -check_history_pragma_ids([], _, _). -check_history_pragma_ids([ID|IDs],IDs1,IDs2) :- - ( memberchk_eq(ID,IDs2) ; memberchk_eq(ID,IDs1) ), - check_history_pragma_ids(IDs,IDs1,IDs2). - -check_pragma(Pragma,PragmaRule) :- - chr_error(syntax(Pragma),'Unknown pragma ~w in ~@.\n', [Pragma,format_rule(PragmaRule)]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% no_history(+RuleNb) is det. -:- chr_constraint no_history/1. -:- chr_option(mode,no_history(+)). -:- chr_option(type_declaration,no_history(int)). - -%% has_no_history(+RuleNb) is semidet. -:- chr_constraint has_no_history/1. -:- chr_option(mode,has_no_history(+)). -:- chr_option(type_declaration,has_no_history(int)). - -no_history(RuleNb) \ has_no_history(RuleNb) <=> true. -has_no_history(_) <=> fail. - -:- chr_constraint history/3. -:- chr_option(mode,history(+,+,+)). -:- chr_option(type_declaration,history(any,any,list)). - -:- chr_constraint named_history/3. - -history(RuleNb,_,_), history(RuleNb,_,_) ==> - chr_error(syntax,'Only one pragma history allowed per rule (rule number ~w)\n',[RuleNb]). %' - -history(RuleNb1,Name,IDs1), history(RuleNb2,Name,IDs2) ==> - length(IDs1,L1), length(IDs2,L2), - ( L1 \== L2 -> - chr_error(syntax,'The history named ~w does not always range over an equal amount of occurrences.\n',[Name]) - ; - test_named_history_id_pairs(RuleNb1,IDs1,RuleNb2,IDs2) - ). - -test_named_history_id_pairs(_, [], _, []). -test_named_history_id_pairs(RuleNb1, [ID1|IDs1], RuleNb2, [ID2|IDs2]) :- - test_named_history_id_pair(RuleNb1,ID1,RuleNb2,ID2), - test_named_history_id_pairs(RuleNb1,IDs1,RuleNb2,IDs2). - -:- chr_constraint test_named_history_id_pair/4. -:- chr_option(mode,test_named_history_id_pair(+,+,+,+)). - -occurrence(C,_,RuleNb1,ID1,_), occurrence(C,_,RuleNb2,ID2,_) - \ test_named_history_id_pair(RuleNb1,ID1,RuleNb2,ID2) <=> true. -test_named_history_id_pair(RuleNb1,ID1,RuleNb2,ID2) <=> - chr_error(syntax,'Occurrences of shared history in rules number ~w and ~w do not correspond\n', [RuleNb2,RuleNb1]). - -history(RuleNb,Name,IDs) \ named_history(RuleNb,QName,QIDs) <=> QName = Name, QIDs = IDs. -named_history(_,_,_) <=> fail. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -format_rule(PragmaRule) :- - PragmaRule = pragma(_,_,_,MaybeName,RuleNumber), - ( MaybeName = yes(Name) -> - write('rule '), write(Name) - ; - write('rule number '), write(RuleNumber) - ), - get_line_number(RuleNumber,LineNumber), - write(' (line '), - write(LineNumber), - write(')'). - -check_rule_indexing(PragmaRule) :- - PragmaRule = pragma(Rule,_,_,_,_), - Rule = rule(H1,H2,G,_), - term_variables(H1-H2,HeadVars), - remove_anti_monotonic_guards(G,HeadVars,NG), - check_indexing(H1,NG-H2), - check_indexing(H2,NG-H1), - % EXPERIMENT - ( chr_pp_flag(term_indexing,on) -> - term_variables(NG,GuardVariables), - append(H1,H2,Heads), - check_specs_indexing(Heads,GuardVariables,Specs) - ; - true - ). - -:- chr_constraint indexing_spec/2. -:- chr_option(mode,indexing_spec(+,+)). - -:- chr_constraint get_indexing_spec/2. -:- chr_option(mode,get_indexing_spec(+,-)). - - -indexing_spec(FA,Spec) \ get_indexing_spec(FA,R) <=> R = Spec. -get_indexing_spec(_,Spec) <=> Spec = []. - -indexing_spec(FA,Specs1), indexing_spec(FA,Specs2) - <=> - append(Specs1,Specs2,Specs), - indexing_spec(FA,Specs). - -remove_anti_monotonic_guards(G,Vars,NG) :- - conj2list(G,GL), - remove_anti_monotonic_guard_list(GL,Vars,NGL), - list2conj(NGL,NG). - -remove_anti_monotonic_guard_list([],_,[]). -remove_anti_monotonic_guard_list([G|Gs],Vars,NGs) :- - ( G = var(X), memberchk_eq(X,Vars) -> - NGs = RGs -% TODO: this is not correct -% ; G = functor(Term,Functor,Arity), % isotonic -% \+ memberchk_eq(Functor,Vars), \+ memberchk_eq(Arity,Vars) -> -% NGs = RGs - ; - NGs = [G|RGs] - ), - remove_anti_monotonic_guard_list(Gs,Vars,RGs). - -check_indexing([],_). -check_indexing([Head|Heads],Other) :- - functor(Head,F,A), - Head =.. [_|Args], - term_variables(Heads-Other,OtherVars), - check_indexing(Args,1,F/A,OtherVars), - check_indexing(Heads,[Head|Other]). - -check_indexing([],_,_,_). -check_indexing([Arg|Args],I,FA,OtherVars) :- - ( is_indexed_argument(FA,I) -> - true - ; nonvar(Arg) -> - indexed_argument(FA,I) - ; % var(Arg) -> - term_variables(Args,ArgsVars), - append(ArgsVars,OtherVars,RestVars), - ( memberchk_eq(Arg,RestVars) -> - indexed_argument(FA,I) - ; - true - ) - ), - J is I + 1, - term_variables(Arg,NVars), - append(NVars,OtherVars,NOtherVars), - check_indexing(Args,J,FA,NOtherVars). - -check_specs_indexing([],_,[]). -check_specs_indexing([Head|Heads],Variables,Specs) :- - Specs = [Spec|RSpecs], - term_variables(Heads,OtherVariables,Variables), - check_spec_indexing(Head,OtherVariables,Spec), - term_variables(Head,NVariables,Variables), - check_specs_indexing(Heads,NVariables,RSpecs). - -check_spec_indexing(Head,OtherVariables,Spec) :- - functor(Head,F,A), - Spec = spec(F,A,ArgSpecs), - Head =.. [_|Args], - check_args_spec_indexing(Args,1,OtherVariables,ArgSpecs), - indexing_spec(F/A,[ArgSpecs]). - -check_args_spec_indexing([],_,_,[]). -check_args_spec_indexing([Arg|Args],I,OtherVariables,ArgSpecs) :- - term_variables(Args,Variables,OtherVariables), - ( check_arg_spec_indexing(Arg,I,Variables,ArgSpec) -> - ArgSpecs = [ArgSpec|RArgSpecs] - ; - ArgSpecs = RArgSpecs - ), - J is I + 1, - term_variables(Arg,NOtherVariables,OtherVariables), - check_args_spec_indexing(Args,J,NOtherVariables,RArgSpecs). - -check_arg_spec_indexing(Arg,I,Variables,ArgSpec) :- - ( var(Arg) -> - memberchk_eq(Arg,Variables), - ArgSpec = specinfo(I,any,[]) - ; - functor(Arg,F,A), - ArgSpec = specinfo(I,F/A,[ArgSpecs]), - Arg =.. [_|Args], - check_args_spec_indexing(Args,1,Variables,ArgSpecs) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Occurrences - -add_occurrences([]). -add_occurrences([Rule|Rules]) :- - Rule = pragma(rule(H1,H2,_,_),ids(IDs1,IDs2),_,_,Nb), - add_occurrences(H1,IDs1,simplification,Nb), - add_occurrences(H2,IDs2,propagation,Nb), - add_occurrences(Rules). - -add_occurrences([],[],_,_). -add_occurrences([H|Hs],[ID|IDs],Type,RuleNb) :- - functor(H,F,A), - FA = F/A, - new_occurrence(FA,RuleNb,ID,Type), - add_occurrences(Hs,IDs,Type,RuleNb). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Observation Analysis -% -% CLASSIFICATION -% -% -% -% -% -% - -:- chr_constraint observation_analysis/1. -:- chr_option(mode, observation_analysis(+)). - -observation_analysis(Cs), rule(RuleNb,PragmaRule) # Id ==> - PragmaRule = pragma(rule(_,_,Guard,Body),_,_,_,_), - ( chr_pp_flag(store_in_guards, on) -> - observation_analysis(RuleNb, Guard, guard, Cs) - ; - true - ), - observation_analysis(RuleNb, Body, body, Cs) - - pragma passive(Id). -observation_analysis(_) <=> true. - -observation_analysis(RuleNb, Term, GB, Cs) :- - ( all_spawned(RuleNb,GB) -> - true - ; var(Term) -> - spawns_all(RuleNb,GB) - ; Term = true -> - true - ; Term = fail -> - true - ; Term = '!' -> - true - ; Term = (T1,T2) -> - observation_analysis(RuleNb,T1,GB,Cs), - observation_analysis(RuleNb,T2,GB,Cs) - ; Term = (T1;T2) -> - observation_analysis(RuleNb,T1,GB,Cs), - observation_analysis(RuleNb,T2,GB,Cs) - ; Term = (T1->T2) -> - observation_analysis(RuleNb,T1,GB,Cs), - observation_analysis(RuleNb,T2,GB,Cs) - ; Term = (\+ T) -> - observation_analysis(RuleNb,T,GB,Cs) - ; functor(Term,F,A), memberchk(F/A,Cs) -> - spawns(RuleNb,GB,F/A) - ; Term = (_ = _) -> - spawns_all_triggers(RuleNb,GB) - ; Term = (_ is _) -> - spawns_all_triggers(RuleNb,GB) - ; builtin_binds_b(Term,Vars) -> - ( Vars == [] -> - true - ; - spawns_all_triggers(RuleNb,GB) - ) - ; - spawns_all(RuleNb,GB) - ). - -:- chr_constraint spawns/3. -:- chr_option(mode, spawns(+,+,+)). -:- chr_type spawns_type ---> guard ; body. -:- chr_option(type_declaration,spawns(any,spawns_type,any)). - -:- chr_constraint spawns_all/2, spawns_all_triggers/2. -:- chr_option(mode, spawns_all(+,+)). -:- chr_option(type_declaration,spawns_all(any,spawns_type)). -:- chr_option(mode, spawns_all_triggers(+,+)). -:- chr_option(type_declaration,spawns_all_triggers(any,spawns_type)). - -spawns_all(RuleNb,GB) \ spawns_all(RuleNb,GB) <=> true. -spawns_all(RuleNb,guard) \ spawns_all(RuleNb,body) <=> true. -spawns_all_triggers(RuleNb,GB) \ spawns_all_triggers(RuleNb,GB) <=> true. -spawns_all_triggers(RuleNb,guard) \ spawns_all_triggers(RuleNb,body) <=> true. -spawns(RuleNb,GB,C) \ spawns(RuleNb,GB,C) <=> true. -spawns(RuleNb,guard,C) \ spawns(RuleNb,body,C) <=> true. - -spawns_all(RuleNb,GB) \ spawns(RuleNb,GB,_) <=> true. -spawns_all(RuleNb,guard) \ spawns(RuleNb,body,_) <=> true. -spawns_all(RuleNb,GB) \ spawns_all_triggers(RuleNb,GB) <=> true. -spawns_all(RuleNb,guard) \ spawns_all_triggers(RuleNb,body) <=> true. - -spawns_all_triggers(RuleNb,GB) \ spawns(RuleNb,GB,C) <=> may_trigger(C) | true. -spawns_all_triggers(RuleNb,guard) \ spawns(RuleNb,body,C) <=> may_trigger(C) | true. - -spawns_all(RuleNb2,_), occurrence(C1,_,RuleNb2,O,_)#Id - \ - spawns(RuleNb1,GB,C1) - <=> - \+ is_passive(RuleNb2,O) - | - spawns_all(RuleNb1,GB) - pragma - passive(Id). - -occurrence(C1,_,RuleNb2,O,_)#Id, spawns_all(RuleNb2,_) - ==> - \+(\+ spawns_all_triggers_implies_spawns_all), % in the hope it schedules this guard early... - \+ is_passive(RuleNb2,O), may_trigger(C1) - | - spawns_all_triggers_implies_spawns_all - pragma - passive(Id). - -:- chr_constraint spawns_all_triggers_implies_spawns_all/0. -spawns_all_triggers_implies_spawns_all, spawns_all_triggers_implies_spawns_all <=> fail. -spawns_all_triggers_implies_spawns_all \ - spawns_all_triggers(RuleNb,GB) <=> spawns_all(RuleNb,GB). - -spawns_all_triggers(RuleNb2,_), occurrence(C1,_,RuleNb2,O,_)#Id - \ - spawns(RuleNb1,GB,C1) - <=> - may_trigger(C1), - \+ is_passive(RuleNb2,O) - | - spawns_all_triggers(RuleNb1,GB) - pragma - passive(Id). - -spawns_all_triggers(RuleNb2,_), occurrence(C1,_,RuleNb2,O,_)#Id, - spawns(RuleNb1,GB,C1) - ==> - \+ may_trigger(C1), - \+ is_passive(RuleNb2,O) - | - spawns_all_triggers(RuleNb1,GB) - pragma - passive(Id). - -% a bit dangerous this rule: could start propagating too much too soon? -spawns(RuleNb2,_,C2), occurrence(C1,_,RuleNb2,O,_)#Id, - spawns(RuleNb1,GB,C1) - ==> - RuleNb1 \== RuleNb2, C1 \== C2, - \+ is_passive(RuleNb2,O) - | - spawns(RuleNb1,GB,C2) - pragma - passive(Id). - -spawns(RuleNb2,_,C2), occurrence(C1,_,RuleNb2,O,_)#Id, - spawns_all_triggers(RuleNb1,GB) - ==> - \+ is_passive(RuleNb2,O), may_trigger(C1), \+ may_trigger(C2) - | - spawns(RuleNb1,GB,C2) - pragma - passive(Id). - - -:- chr_constraint all_spawned/2. -:- chr_option(mode, all_spawned(+,+)). -spawns_all(RuleNb,guard) \ all_spawned(RuleNb,_) <=> true. -spawns_all(RuleNb,GB) \ all_spawned(RuleNb,GB) <=> true. -all_spawned(RuleNb,GB) <=> fail. - - -% Overview of the supported queries: -% is_observed(+functor/artiy, +occurrence_number, +(guard;body)) -% only succeeds if the occurrence is observed by the -% guard resp. body (depending on the last argument) of its rule -% is_observed(+functor/artiy, +occurrence_number, -) -% succeeds if the occurrence is observed by either the guard or -% the body of its rule -% NOTE: the last argument is NOT bound by this query -% -% do_is_observed(+functor/artiy,+rule_number,+(guard;body)) -% succeeds if the given constraint is observed by the given -% guard resp. body -% do_is_observed(+functor/artiy,+rule_number) -% succeeds if the given constraint is observed by the given -% rule (either its guard or its body) - - -is_observed(C,O) :- - is_observed(C,O,_), - ai_is_observed(C,O). - -is_stored_in_guard(C,RuleNb) :- - chr_pp_flag(store_in_guards, on), - do_is_observed(C,RuleNb,guard). - -:- chr_constraint is_observed/3. -:- chr_option(mode, is_observed(+,+,+)). -occurrence(C,O,RuleNb,_,_) \ is_observed(C,O,GB) <=> do_is_observed(C,RuleNb,GB). -is_observed(_,_,_) <=> fail. % this will not happen in practice - - -:- chr_constraint do_is_observed/3. -:- chr_option(mode, do_is_observed(+,+,?)). -:- chr_constraint do_is_observed/2. -:- chr_option(mode, do_is_observed(+,+)). - -do_is_observed(C,RuleNb,GB) <=> var(GB) | do_is_observed(C,RuleNb). - -% (1) spawns_all -% a constraint C is observed if the GB of the rule it occurs in spawns all, -% and some non-passive occurrence of some (possibly other) constraint -% exists in a rule (could be same rule) with at least one occurrence of C - -spawns_all(RuleNb,GB), - occurrence(_,_,RuleNb2,O,_), occurrence(C,_,RuleNb2,_,_) - \ - do_is_observed(C,RuleNb,GB) - <=> - \+ is_passive(RuleNb2,O) - | - true. - -spawns_all(RuleNb,_), - occurrence(_,_,RuleNb2,O,_), occurrence(C,_,RuleNb2,_,_) - \ - do_is_observed(C,RuleNb) - <=> - \+ is_passive(RuleNb2,O) - | - true. - -% (2) spawns -% a constraint C is observed if the GB of the rule it occurs in spawns a -% constraint C2 that occurs non-passively in a rule (possibly the same rule) -% as an occurrence of C - -spawns(RuleNb,GB,C2), - occurrence(C2,_,RuleNb2,O,_), occurrence(C,_,RuleNb2,_,_) - \ - do_is_observed(C,RuleNb,GB) - <=> - \+ is_passive(RuleNb2,O) - | - true. - -spawns(RuleNb,_,C2), - occurrence(C2,_,RuleNb2,O,_), occurrence(C,_,RuleNb2,_,_) - \ - do_is_observed(C,RuleNb) - <=> - \+ is_passive(RuleNb2,O) - | - true. - -% (3) spawns_all_triggers -% a constraint C is observed if the GB of the rule it occurs in spawns all triggers -% and some non-passive occurrence of some (possibly other) constraint that may trigger -% exists in a rule (could be same rule) with at least one occurrence of C - -spawns_all_triggers(RuleNb,GB), - occurrence(C2,_,RuleNb2,O,_), occurrence(C,_,RuleNb2,_,_) - \ - do_is_observed(C,RuleNb,GB) - <=> - \+ is_passive(RuleNb2,O), may_trigger(C2) - | - true. - -spawns_all_triggers(RuleNb,_), - occurrence(C2,_,RuleNb2,O,_), occurrence(C,_,RuleNb2,_,_) - \ - do_is_observed(C,RuleNb) - <=> - \+ is_passive(RuleNb2,O), may_trigger(C2) - | - true. - -% (4) conservativeness -do_is_observed(_,_,_) <=> chr_pp_flag(observation_analysis,off). -do_is_observed(_,_) <=> chr_pp_flag(observation_analysis,off). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% -%% Generated predicates -%% attach_$CONSTRAINT -%% attach_increment -%% detach_$CONSTRAINT -%% attr_unify_hook - -%% attach_$CONSTRAINT -generate_attach_detach_a_constraint_all([],[]). -generate_attach_detach_a_constraint_all([Constraint|Constraints],Clauses) :- - ( ( chr_pp_flag(debugable,on) ; is_stored(Constraint), \+ only_ground_indexed_arguments(Constraint), \+ get_store_type(Constraint,var_assoc_store(_,_)) ) -> - generate_attach_a_constraint(Constraint,Clauses1), - generate_detach_a_constraint(Constraint,Clauses2) - ; - Clauses1 = [], - Clauses2 = [] - ), - generate_attach_detach_a_constraint_all(Constraints,Clauses3), - append([Clauses1,Clauses2,Clauses3],Clauses). - -generate_attach_a_constraint(Constraint,[Clause1,Clause2]) :- - generate_attach_a_constraint_nil(Constraint,Clause1), - generate_attach_a_constraint_cons(Constraint,Clause2). - -attach_constraint_atom(FA,Vars,Susp,Atom) :- - make_name('attach_',FA,Name), - Atom =.. [Name,Vars,Susp]. - -generate_attach_a_constraint_nil(FA,Clause) :- - Clause = (Head :- true), - attach_constraint_atom(FA,[],_,Head). - -generate_attach_a_constraint_cons(FA,Clause) :- - Clause = (Head :- Body), - attach_constraint_atom(FA,[Var|Vars],Susp,Head), - attach_constraint_atom(FA,Vars,Susp,RecursiveCall), - Body = ( AttachBody, Subscribe, RecursiveCall ), - get_max_constraint_index(N), - ( N == 1 -> - generate_attach_body_1(FA,Var,Susp,AttachBody) - ; - generate_attach_body_n(FA,Var,Susp,AttachBody) - ), - % SWI-Prolog specific code - chr_pp_flag(solver_events,NMod), - ( NMod \== none -> - Args = [[Var|_],Susp], - get_target_module(Mod), - use_auxiliary_predicate(run_suspensions), - Subscribe = clp_events:subscribe(Var,NMod,Mod,Mod:'$run_suspensions'([Susp])) - ; - Subscribe = true - ). - -generate_attach_body_1(FA,Var,Susp,Body) :- - get_target_module(Mod), - Body = - ( get_attr(Var, Mod, Susps) -> - put_attr(Var, Mod, [Susp|Susps]) - ; - put_attr(Var, Mod, [Susp]) - ). - -generate_attach_body_n(F/A,Var,Susp,Body) :- - get_constraint_index(F/A,Position), - get_max_constraint_index(Total), - get_target_module(Mod), - add_attr(Total,Susp,Position,TAttr,AddGoal,NTAttr), - singleton_attr(Total,Susp,Position,NewAttr3), - Body = - ( get_attr(Var,Mod,TAttr) -> - AddGoal, - put_attr(Var,Mod,NTAttr) - ; - put_attr(Var,Mod,NewAttr3) - ), !. - -%% detach_$CONSTRAINT -generate_detach_a_constraint(Constraint,[Clause1,Clause2]) :- - generate_detach_a_constraint_nil(Constraint,Clause1), - generate_detach_a_constraint_cons(Constraint,Clause2). - -detach_constraint_atom(FA,Vars,Susp,Atom) :- - make_name('detach_',FA,Name), - Atom =.. [Name,Vars,Susp]. - -generate_detach_a_constraint_nil(FA,Clause) :- - Clause = ( Head :- true), - detach_constraint_atom(FA,[],_,Head). - -generate_detach_a_constraint_cons(FA,Clause) :- - Clause = (Head :- Body), - detach_constraint_atom(FA,[Var|Vars],Susp,Head), - detach_constraint_atom(FA,Vars,Susp,RecursiveCall), - Body = ( DetachBody, RecursiveCall ), - get_max_constraint_index(N), - ( N == 1 -> - generate_detach_body_1(FA,Var,Susp,DetachBody) - ; - generate_detach_body_n(FA,Var,Susp,DetachBody) - ). - -generate_detach_body_1(FA,Var,Susp,Body) :- - get_target_module(Mod), - Body = - ( get_attr(Var,Mod,Susps) -> - 'chr sbag_del_element'(Susps,Susp,NewSusps), - ( NewSusps == [] -> - del_attr(Var,Mod) - ; - put_attr(Var,Mod,NewSusps) - ) - ; - true - ). - -generate_detach_body_n(F/A,Var,Susp,Body) :- - get_constraint_index(F/A,Position), - get_max_constraint_index(Total), - rem_attr(Total,Var,Susp,Position,TAttr,RemGoal), - get_target_module(Mod), - Body = - ( get_attr(Var,Mod,TAttr) -> - RemGoal - ; - true - ), !. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%------------------------------------------------------------------------------- -%% generate_indexed_variables_body(+ConstraintSymbol,+ArgList,-Body,-VarList) is det. -:- chr_constraint generate_indexed_variables_body/4. -:- chr_option(mode,generate_indexed_variables_body(+,?,+,?)). -:- chr_option(type_declaration,generate_indexed_variables_body(constraint,any,any,any)). -%------------------------------------------------------------------------------- -constraint_mode(F/A,ArgModes) \ generate_indexed_variables_body(F/A,Args,Body,Vars) <=> - get_indexing_spec(F/A,Specs), - ( chr_pp_flag(term_indexing,on) -> - spectermvars(Specs,Args,F,A,Body,Vars) - ; - get_constraint_type_det(F/A,ArgTypes), - create_indexed_variables_body(Args,ArgModes,ArgTypes,Vars,1,F/A,MaybeBody,N), - ( MaybeBody == empty -> - Body = true, - Vars = [] - ; N == 0 -> - ( Args = [Term] -> - true - ; - Term =.. [term|Args] - ), - Body = term_variables(Term,Vars) - ; - MaybeBody = Body - ) - ). -generate_indexed_variables_body(FA,_,_,_) <=> - chr_error(internal,'generate_indexed_variables_body: missing mode info for ~w.\n',[FA]). -%=============================================================================== - -create_indexed_variables_body([],[],[],_,_,_,empty,0). -create_indexed_variables_body([V|Vs],[Mode|Modes],[Type|Types],Vars,I,FA,Body,N) :- - J is I + 1, - create_indexed_variables_body(Vs,Modes,Types,Tail,J,FA,RBody,M), - ( Mode == (?), - is_indexed_argument(FA,I) -> - ( atomic_type(Type) -> - Body = - ( - ( var(V) -> - Vars = [V|Tail] - ; - Vars = Tail - ), - Continuation - ), - ( RBody == empty -> - Continuation = true, Tail = [] - ; - Continuation = RBody - ) - ; - ( RBody == empty -> - Body = term_variables(V,Vars) - ; - Body = (term_variables(V,Vars,Tail),RBody) - ) - ), - N = M - ; Mode == (-), is_indexed_argument(FA,I) -> - ( RBody == empty -> - Body = (Vars = [V]) - ; - Body = (Vars = [V|Tail],RBody) - ), - N is M + 1 - ; - Vars = Tail, - Body = RBody, - N is M + 1 - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% EXPERIMENTAL -spectermvars(Specs,Args,F,A,Goal,Vars) :- - spectermvars(Args,1,Specs,F,A,Vars,[],Goal). - -spectermvars([],B,_,_,A,L,L,true) :- B > A, !. -spectermvars([Arg|Args],I,Specs,F,A,L,T,Goal) :- - Goal = (ArgGoal,RGoal), - argspecs(Specs,I,TempArgSpecs,RSpecs), - merge_argspecs(TempArgSpecs,ArgSpecs), - arggoal(ArgSpecs,Arg,ArgGoal,L,L1), - J is I + 1, - spectermvars(Args,J,RSpecs,F,A,L1,T,RGoal). - -argspecs([],_,[],[]). -argspecs([[]|Rest],I,ArgSpecs,RestSpecs) :- - argspecs(Rest,I,ArgSpecs,RestSpecs). -argspecs([[specinfo(J,Spec,Args)|Specs]|Rest],I,ArgSpecs,RestSpecs) :- - ( I == J -> - ArgSpecs = [specinfo(J,Spec,Args)|RArgSpecs], - ( Specs = [] -> - RRestSpecs = RestSpecs - ; - RestSpecs = [Specs|RRestSpecs] - ) - ; - ArgSpecs = RArgSpecs, - RestSpecs = [[specinfo(J,Spec,Args)|Specs]|RRestSpecs] - ), - argspecs(Rest,I,RArgSpecs,RRestSpecs). - -merge_argspecs(In,Out) :- - sort(In,Sorted), - merge_argspecs_(Sorted,Out). - -merge_argspecs_([],[]). -merge_argspecs_([X],R) :- !, R = [X]. -merge_argspecs_([specinfo(I,F1,A1),specinfo(I,F2,A2)|Rest],R) :- - ( (F1 == any ; F2 == any) -> - merge_argspecs_([specinfo(I,any,[])|Rest],R) - ; F1 == F2 -> - append(A1,A2,A), - merge_argspecs_([specinfo(I,F1,A)|Rest],R) - ; - R = [specinfo(I,F1,A1)|RR], - merge_argspecs_([specinfo(I,F2,A2)|Rest],RR) - ). - -arggoal(List,Arg,Goal,L,T) :- - ( List == [] -> - L = T, - Goal = true - ; List = [specinfo(_,any,_)] -> - Goal = term_variables(Arg,L,T) - ; - Goal = - ( var(Arg) -> - L = [Arg|T] - ; - Cases - ), - arggoal_cases(List,Arg,L,T,Cases) - ). - -arggoal_cases([],_,L,T,L=T). -arggoal_cases([specinfo(_,FA,ArgSpecs)|Rest],Arg,L,T,Cases) :- - ( ArgSpecs == [] -> - Cases = RCases - ; ArgSpecs == [[]] -> - Cases = RCases - ; FA = F/A -> - Cases = (Case ; RCases), - functor(Term,F,A), - Term =.. [_|Args], - Case = (Arg = Term -> ArgsGoal), - spectermvars(Args,1,ArgSpecs,F,A,L,T,ArgsGoal) - ), - arggoal_cases(Rest,Arg,L,T,RCases). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -generate_extra_clauses(Constraints,List) :- - generate_activate_clauses(Constraints,List,Tail0), - generate_remove_clauses(Constraints,Tail0,Tail1), - generate_allocate_clauses(Constraints,Tail1,Tail2), - generate_insert_constraint_internal_clauses(Constraints,Tail2,Tail3), - generate_novel_production(Tail3,Tail4), - generate_extend_history(Tail4,Tail5), - generate_run_suspensions_clauses(Constraints,Tail5,Tail6), - generate_empty_named_history_initialisations(Tail6,Tail7), - Tail7 = []. - -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -% remove_constraint_internal/[1/3] - -generate_remove_clauses([],List,List). -generate_remove_clauses([C|Cs],List,Tail) :- - generate_remove_clause(C,List,List1), - generate_remove_clauses(Cs,List1,Tail). - -remove_constraint_goal(Constraint,Susp,Agenda,DeleteNo,DeleteYes,Role,Goal) :- - uses_state(Constraint,removed), - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(remove_constraint_internal,Constraint), - Goal = ( DeleteGoal, ( Delete == yes -> DeleteYes ; DeleteNo) ), - remove_constraint_atom(Constraint,Susp,Agenda,Delete,DeleteGoal) - ; - delay_phase_end(validate_store_type_assumptions, - generate_remove_body(Constraint,Susp,Agenda,DeleteNo,DeleteYes,Role,Goal) - ) - ). - -remove_constraint_atom(Constraint,Susp,Agenda,Delete,Goal) :- - make_name('$remove_constraint_internal_',Constraint,Name), - ( chr_pp_flag(debugable,off), ( only_ground_indexed_arguments(Constraint) ; get_store_type(Constraint,var_assoc_store(_,_)) ) -> - Goal =.. [Name, Susp,Delete] - ; - Goal =.. [Name,Susp,Agenda,Delete] - ). - -generate_remove_clause(Constraint,List,Tail) :- - ( is_used_auxiliary_predicate(remove_constraint_internal,Constraint) -> - List = [RemoveClause|Tail], - RemoveClause = (Head :- RemoveBody), - remove_constraint_atom(Constraint,Susp,Agenda,Delete,Head), - generate_remove_body(Constraint,Susp,Agenda,Delete = no,Delete = yes,active,RemoveBody) - ; - List = Tail - ). - -generate_remove_body(Constraint,Susp,Agenda,DeleteNo,DeleteYes,Role,RemoveBody) :- - ( chr_pp_flag(debugable,off), ( only_ground_indexed_arguments(Constraint) ; get_store_type(Constraint,var_assoc_store(_,_))) -> - ( Role == active -> - get_update_suspension_field(Constraint,Susp,state,State,removed,GetState,GetStateValue0,UpdateState), - if_used_state(Constraint,not_stored_yet,GetStateValue0,true,GetStateValue), - if_used_state(Constraint,not_stored_yet,(State == not_stored_yet -> DeleteNo ; DeleteYes),DeleteYes,MaybeDelete) - ; Role == partner -> - get_update_suspension_field(Constraint,Susp,state,State,removed,GetState,_,UpdateState), - GetStateValue = true, - MaybeDelete = DeleteYes - ), - RemoveBody = - ( - GetState, - GetStateValue, - UpdateState, - MaybeDelete - ) - ; - static_suspension_term(Constraint,Susp2), - get_static_suspension_term_field(arguments,Constraint,Susp2,Args), - generate_indexed_variables_body(Constraint,Args,IndexedVariablesBody,Agenda), - ( chr_pp_flag(debugable,on) -> - Constraint = Functor / _, - get_static_suspension_term_field(functor,Constraint,Susp2,Functor) - ; - true - ), - ( Role == active -> - get_update_static_suspension_field(Constraint,Susp,Susp2,state,State,removed,GetStateValue0,UpdateState), - if_used_state(Constraint,not_stored_yet,GetStateValue0,true,GetStateValue), - if_used_state(Constraint,not_stored_yet,(State == not_stored_yet -> Agenda = [], DeleteNo ; IndexedVariablesBody, DeleteYes),(IndexedVariablesBody,DeleteYes),MaybeDelete) - ; Role == partner -> - get_update_static_suspension_field(Constraint,Susp,Susp2,state,State,removed,_,UpdateState), - GetStateValue = true, - MaybeDelete = (IndexedVariablesBody, DeleteYes) - ), - RemoveBody = - ( - Susp = Susp2, - GetStateValue, - UpdateState, - MaybeDelete - ) - ). - -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -% activate_constraint/4 - -generate_activate_clauses([],List,List). -generate_activate_clauses([C|Cs],List,Tail) :- - generate_activate_clause(C,List,List1), - generate_activate_clauses(Cs,List1,Tail). - -activate_constraint_goal(Constraint,StoreAction,Vars,Susp,Generation,Goal) :- - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(activate_constraint,Constraint), - Goal = ( ActivateGoal , (Store == yes -> StoreAction ; true) ), - activate_constraint_atom(Constraint,Store,Vars,Susp,Generation,ActivateGoal) - ; - delay_phase_end(validate_store_type_assumptions, - activate_constraint_body(Constraint,StoreAction,true,Vars,Susp,Generation,Goal) - ) - ). - -activate_constraint_atom(Constraint,Store,Vars,Susp,Generation,Goal) :- - make_name('$activate_constraint_',Constraint,Name), - ( chr_pp_flag(debugable,off), only_ground_indexed_arguments(Constraint) -> - Goal =.. [Name,Store, Susp] - ; chr_pp_flag(debugable,off), may_trigger(Constraint), get_store_type(Constraint,var_assoc_store(_,_)) -> - Goal =.. [Name,Store, Susp, Generation] - ; chr_pp_flag(debugable,off), may_trigger(Constraint), get_store_type(Constraint,var_assoc_store(_,_)) -> - Goal =.. [Name,Store, Vars, Susp, Generation] - ; - Goal =.. [Name,Store, Vars, Susp] - ). - -generate_activate_clause(Constraint,List,Tail) :- - ( is_used_auxiliary_predicate(activate_constraint,Constraint) -> - List = [Clause|Tail], - Clause = (Head :- Body), - activate_constraint_atom(Constraint,Store,Vars,Susp,Generation,Head), - activate_constraint_body(Constraint,Store = yes, Store = no,Vars,Susp,Generation,Body) - ; - List = Tail - ). - -activate_constraint_body(Constraint,StoreYes,StoreNo,Vars,Susp,Generation,Body) :- - ( chr_pp_flag(debugable,off), may_trigger(Constraint), uses_field(Constraint,generation) -> - get_update_suspension_field(Constraint,Susp,generation,Gen,Generation,GetGeneration,GetGenerationValue,UpdateGeneration), - GenerationHandling = (GetGeneration, GetGenerationValue, Generation is Gen+1, UpdateGeneration) - ; - GenerationHandling = true - ), - get_update_suspension_field(Constraint,Susp,state,State,active,GetState,GetStateValue0,UpdateState), - if_used_state(Constraint,not_stored_yet,GetStateValue0,true,GetStateValue), - ( chr_pp_flag(debugable,off), ( only_ground_indexed_arguments(Constraint) ; get_store_type(Constraint,var_assoc_store(_,_))) -> - if_used_state(Constraint,not_stored_yet,( State == not_stored_yet -> StoreYes ; StoreNo ),StoreNo,StoreVarsGoal) - ; - get_dynamic_suspension_term_field(arguments,Constraint,Susp,Arguments,ArgumentsGoal), - generate_indexed_variables_body(Constraint,Arguments,IndexedVariablesBody,Vars), - ( chr_pp_flag(guard_locks,off) -> - NoneLocked = true - ; - NoneLocked = 'chr none_locked'( Vars) - ), - if_used_state(Constraint,not_stored_yet, - ( State == not_stored_yet -> - ArgumentsGoal, - IndexedVariablesBody, - NoneLocked, - StoreYes - ; - % Vars = [], - StoreNo - ), - % (Vars = [],StoreNo),StoreVarsGoal) - StoreNo,StoreVarsGoal) - ), - Body = - ( - GetState, - GetStateValue, - UpdateState, - GenerationHandling, - StoreVarsGoal - ). -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -% allocate_constraint/4 - -generate_allocate_clauses([],List,List). -generate_allocate_clauses([C|Cs],List,Tail) :- - generate_allocate_clause(C,List,List1), - generate_allocate_clauses(Cs,List1,Tail). - -allocate_constraint_goal(Constraint,Susp,Args,Goal) :- - uses_state(Constraint,not_stored_yet), - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(allocate_constraint,Constraint), - allocate_constraint_atom(Constraint,Susp,Args,Goal) - ; - Goal = (Susp = Suspension, Goal0), - delay_phase_end(validate_store_type_assumptions, - allocate_constraint_body(Constraint,Suspension,Args,Goal0) - ) - ). - -allocate_constraint_atom(Constraint, Susp, Args,Goal) :- - make_name('$allocate_constraint_',Constraint,Name), - Goal =.. [Name,Susp|Args]. - -generate_allocate_clause(Constraint,List,Tail) :- - ( is_used_auxiliary_predicate(allocate_constraint,Constraint) -> - List = [Clause|Tail], - Clause = (Head :- Body), - Constraint = _/A, - length(Args,A), - allocate_constraint_atom(Constraint,Susp,Args,Head), - allocate_constraint_body(Constraint,Susp,Args,Body) - ; - List = Tail - ). - -allocate_constraint_body(Constraint,Susp,Args,Body) :- - static_suspension_term(Constraint,Suspension), - get_static_suspension_term_field(arguments,Constraint,Suspension,Args), - ( chr_pp_flag(debugable,on) -> - Constraint = Functor / _, - get_static_suspension_term_field(functor,Constraint,Suspension,Functor) - ; - true - ), - ( chr_pp_flag(debugable,on) -> - ( may_trigger(Constraint) -> - append(Args,[Susp],VarsSusp), - build_head(F,A,[0],VarsSusp, ContinuationGoal), - get_target_module(Mod), - Continuation = Mod : ContinuationGoal - ; - Continuation = true - ), - Init = (Susp = Suspension), - create_static_suspension_field(Constraint,Suspension,continuation,Continuation,CreateContinuation), - create_static_suspension_field(Constraint,Suspension,generation,0,CreateGeneration) - ; may_trigger(Constraint), uses_field(Constraint,generation) -> - create_static_suspension_field(Constraint,Suspension,generation,0,CreateGeneration), - Susp = Suspension, Init = true, CreateContinuation = true - ; - CreateGeneration = true, Susp = Suspension, Init = true, CreateContinuation = true - ), - ( uses_history(Constraint) -> - create_static_suspension_field(Constraint,Suspension,history,t,CreateHistory) - ; - CreateHistory = true - ), - create_static_suspension_field(Constraint,Suspension,state,not_stored_yet,CreateState), - ( has_suspension_field(Constraint,id) -> - get_static_suspension_term_field(id,Constraint,Suspension,Id), - gen_id(Id,GenID) - ; - GenID = true - ), - Body = - ( - Init, - CreateContinuation, - CreateGeneration, - CreateHistory, - CreateState, - GenID - ). - -gen_id(Id,'chr gen_id'(Id)). -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -% insert_constraint_internal - -generate_insert_constraint_internal_clauses([],List,List). -generate_insert_constraint_internal_clauses([C|Cs],List,Tail) :- - generate_insert_constraint_internal_clause(C,List,List1), - generate_insert_constraint_internal_clauses(Cs,List1,Tail). - -insert_constraint_internal_constraint_goal(Constraint, Vars, Suspension, Continuation, Args,Goal) :- - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(remove_constraint_internal,Constraint), - insert_constraint_internal_constraint_atom(Constraint,Vars,Suspension,Continuation,Args,Goal) - ; - delay_phase_end(validate_store_type_assumptions, - generate_insert_constraint_internal_body(Constraint,Suspension,Continuation,Args,Vars,Goal) - ) - ). - - -insert_constraint_internal_constraint_atom(Constraint,Vars,Self,Closure,Args,Goal) :- - insert_constraint_internal_constraint_name(Constraint,Name), - ( chr_pp_flag(debugable,on) -> - Goal =.. [Name, Vars, Self, Closure | Args] - ; ( only_ground_indexed_arguments(Constraint) ; get_store_type(Constraint,var_assoc_store(_,_)))-> - Goal =.. [Name,Self | Args] - ; - Goal =.. [Name,Vars, Self | Args] - ). - -insert_constraint_internal_constraint_name(Constraint,Name) :- - make_name('$insert_constraint_internal_',Constraint,Name). - -generate_insert_constraint_internal_clause(Constraint,List,Tail) :- - ( is_used_auxiliary_predicate(insert_constraint_internal,Constraint) -> - List = [Clause|Tail], - Clause = (Head :- Body), - Constraint = _/A, - length(Args,A), - insert_constraint_internal_constraint_atom(Constraint, Vars, Suspension, Continuation,Args,Head), - generate_insert_constraint_internal_body(Constraint,Suspension,Continuation,Args,Vars,Body) - ; - List = Tail - ). - - -generate_insert_constraint_internal_body(Constraint,Susp,Continuation,Args,Vars,Body) :- - static_suspension_term(Constraint,Suspension), - create_static_suspension_field(Constraint,Suspension,state,active,CreateState), - ( chr_pp_flag(debugable,on) -> - get_static_suspension_term_field(continuation,Constraint,Suspension,Continuation), - create_static_suspension_field(Constraint,Suspension,generation,0,CreateGeneration) - ; may_trigger(Constraint), uses_field(Constraint,generation) -> - create_static_suspension_field(Constraint,Suspension,generation,0,CreateGeneration) - ; - CreateGeneration = true - ), - ( chr_pp_flag(debugable,on) -> - Constraint = Functor / _, - get_static_suspension_term_field(functor,Constraint,Suspension,Functor) - ; - true - ), - ( uses_history(Constraint) -> - create_static_suspension_field(Constraint,Suspension,history,t,CreateHistory) - ; - CreateHistory = true - ), - get_static_suspension_term_field(arguments,Constraint,Suspension,Args), - List = [Clause|Tail], - ( chr_pp_flag(debugable,off), ( only_ground_indexed_arguments(Constraint) ; get_store_type(Constraint,var_assoc_store(_,_)))-> - suspension_term_base_fields(Constraint,BaseFields), - ( has_suspension_field(Constraint,id) -> - get_static_suspension_term_field(id,Constraint,Suspension,Id), - gen_id(Id,GenID) - ; - GenID = true - ), - Body = - ( - Susp = Suspension, - CreateState, - CreateGeneration, - CreateHistory, - GenID - ) - ; - ( has_suspension_field(Constraint,id) -> - get_static_suspension_term_field(id,Constraint,Suspension,Id), - gen_id(Id,GenID) - ; - GenID = true - ), - generate_indexed_variables_body(Constraint,Args,IndexedVariablesBody,Vars), - ( chr_pp_flag(guard_locks,off) -> - NoneLocked = true - ; - NoneLocked = 'chr none_locked'( Vars) - ), - Body = - ( - Susp = Suspension, - IndexedVariablesBody, - NoneLocked, - CreateState, - CreateGeneration, - CreateHistory, - GenID - ) - ). - -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -% novel_production/2 - -generate_novel_production(List,Tail) :- - ( is_used_auxiliary_predicate(novel_production) -> - List = [Clause|Tail], - Clause = - ( - '$novel_production'( Self, Tuple) :- - % arg( 3, Self, Ref), % ARGXXX - % 'chr get_mutable'( History, Ref), - arg( 3, Self, History), % ARGXXX - ( hprolog:get_ds( Tuple, History, _) -> - fail - ; - true - ) - ) - ; - List = Tail - ). - -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -% extend_history/2 - -generate_extend_history(List,Tail) :- - ( is_used_auxiliary_predicate(extend_history) -> - List = [Clause|Tail], - Clause = - ( - '$extend_history'( Self, Tuple) :- - % arg( 3, Self, Ref), % ARGXXX - % 'chr get_mutable'( History, Ref), - arg( 3, Self, History), % ARGXXX - hprolog:put_ds( Tuple, History, x, NewHistory), - setarg( 3, Self, NewHistory) % ARGXXX - ) - ; - List = Tail - ). - -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -% -:- chr_constraint - empty_named_history_initialisations/2, - generate_empty_named_history_initialisation/1, - find_empty_named_histories/0. - -generate_empty_named_history_initialisations(List, Tail) :- - empty_named_history_initialisations(List, Tail), - find_empty_named_histories. - -find_empty_named_histories, history(_, Name, []) ==> - generate_empty_named_history_initialisation(Name). - -generate_empty_named_history_initialisation(Name) \ - generate_empty_named_history_initialisation(Name) <=> true. -generate_empty_named_history_initialisation(Name) \ - empty_named_history_initialisations(List, Tail) # Passive - <=> - empty_named_history_global_variable(Name, GlobalVariable), - List = [(:- nb_setval(GlobalVariable, 0))|Rest], - empty_named_history_initialisations(Rest, Tail) - pragma passive(Passive). - -find_empty_named_histories \ - generate_empty_named_history_initialisation(_) # Passive <=> true -pragma passive(Passive). - -find_empty_named_histories, - empty_named_history_initialisations(List, Tail) # Passive <=> List = Tail -pragma passive(Passive). - -find_empty_named_histories <=> - chr_error(internal, 'find_empty_named_histories was not removed', []). - - -empty_named_history_global_variable(Name, GlobalVariable) :- - atom_concat('chr empty named history ', Name, GlobalVariable). - -empty_named_history_novel_production(Name, nb_getval(GlobalVariable, 0)) :- - empty_named_history_global_variable(Name, GlobalVariable). - -empty_named_history_extend_history(Name, b_setval(GlobalVariable, 1)) :- - empty_named_history_global_variable(Name, GlobalVariable). - - -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -% run_suspensions/2 - -generate_run_suspensions_clauses([],List,List). -generate_run_suspensions_clauses([C|Cs],List,Tail) :- - generate_run_suspensions_clause(C,List,List1), - generate_run_suspensions_clauses(Cs,List1,Tail). - -run_suspensions_goal(Constraint,Suspensions,Goal) :- - make_name('$run_suspensions_',Constraint,Name), - Goal =.. [Name,Suspensions]. - -generate_run_suspensions_clause(Constraint,List,Tail) :- - ( is_used_auxiliary_predicate(run_suspensions,Constraint) -> - List = [Clause1,Clause2|Tail], - run_suspensions_goal(Constraint,[],Clause1), - ( chr_pp_flag(debugable,on) -> - run_suspensions_goal(Constraint,[Suspension|Suspensions],Clause2Head), - get_update_suspension_field(Constraint,Suspension,state,State,triggered,GetState,GetStateValue,UpdateState), - get_update_suspension_field(Constraint,Suspension,state,Post,active,GetPost,GetPostValue,UpdatePost), - get_update_suspension_field(Constraint,Suspension,generation,Gen,Generation,GetGeneration,GetGenerationValue,UpdateGeneration), - get_dynamic_suspension_term_field(continuation,Constraint,Suspension,Continuation,GetContinuation), - run_suspensions_goal(Constraint,Suspensions,Clause2Recursion), - Clause2 = - ( - Clause2Head :- - GetState, - GetStateValue, - ( State==active -> - UpdateState, - GetGeneration, - GetGenerationValue, - Generation is Gen+1, - UpdateGeneration, - GetContinuation, - ( - 'chr debug_event'(wake(Suspension)), - call(Continuation) - ; - 'chr debug_event'(fail(Suspension)), !, - fail - ), - ( - 'chr debug_event'(exit(Suspension)) - ; - 'chr debug_event'(redo(Suspension)), - fail - ), - GetPost, - GetPostValue, - ( Post==triggered -> - UpdatePost % catching constraints that did not do anything - ; - true - ) - ; - true - ), - Clause2Recursion - ) - ; - run_suspensions_goal(Constraint,[Suspension|Suspensions],Clause2Head), - static_suspension_term(Constraint,SuspensionTerm), - get_static_suspension_term_field(arguments,Constraint,SuspensionTerm,Arguments), - append(Arguments,[Suspension],VarsSusp), - make_suspension_continuation_goal(Constraint,VarsSusp,Continuation), - run_suspensions_goal(Constraint,Suspensions,Clause2Recursion), - ( uses_field(Constraint,generation) -> - get_update_static_suspension_field(Constraint,Suspension,SuspensionTerm,generation,Gen,Generation,GetGeneration,UpdateGeneration), - GenerationHandling = ( GetGeneration, Generation is Gen+1, UpdateGeneration) - ; - GenerationHandling = true - ), - get_update_static_suspension_field(Constraint,Suspension,SuspensionTerm,state,State,triggered,GetState,UpdateState), - get_update_static_suspension_field(Constraint,Suspension,SuspensionTerm,state,Post,active,GetPostState,UpdatePostState), - if_used_state(Constraint,removed, - ( GetState, - ( State==active - -> ReactivateConstraint - ; true) - ),ReactivateConstraint,CondReactivate), - ReactivateConstraint = - ( - UpdateState, - GenerationHandling, - Continuation, - GetPostState, - ( Post==triggered -> - UpdatePostState % catching constraints that did not do anything - ; - true - ) - ), - Clause2 = - ( - Clause2Head :- - Suspension = SuspensionTerm, - CondReactivate, - Clause2Recursion - ) - ) - ; - List = Tail - ). - -%~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -generate_attach_increment(Clauses) :- - get_max_constraint_index(N), - ( is_used_auxiliary_predicate(attach_increment), N > 0 -> - Clauses = [Clause1,Clause2], - generate_attach_increment_empty(Clause1), - ( N == 1 -> - generate_attach_increment_one(Clause2) - ; - generate_attach_increment_many(N,Clause2) - ) - ; - Clauses = [] - ). - -generate_attach_increment_empty((attach_increment([],_) :- true)). - -generate_attach_increment_one(Clause) :- - Head = attach_increment([Var|Vars],Susps), - get_target_module(Mod), - ( chr_pp_flag(guard_locks,off) -> - NotLocked = true - ; - NotLocked = 'chr not_locked'( Var) - ), - Body = - ( - NotLocked, - ( get_attr(Var,Mod,VarSusps) -> - sort(VarSusps,SortedVarSusps), - 'chr merge_attributes'(Susps,SortedVarSusps,MergedSusps), - put_attr(Var,Mod,MergedSusps) - ; - put_attr(Var,Mod,Susps) - ), - attach_increment(Vars,Susps) - ), - Clause = (Head :- Body). - -generate_attach_increment_many(N,Clause) :- - Head = attach_increment([Var|Vars],TAttr1), - % writeln(merge_attributes_1_before), - merge_attributes(N,TAttr1,TAttr2,MergeGoal,Attr), - % writeln(merge_attributes_1_after), - get_target_module(Mod), - ( chr_pp_flag(guard_locks,off) -> - NotLocked = true - ; - NotLocked = 'chr not_locked'( Var) - ), - Body = - ( - NotLocked, - ( get_attr(Var,Mod,TAttr2) -> - MergeGoal, - put_attr(Var,Mod,Attr) - ; - put_attr(Var,Mod,TAttr1) - ), - attach_increment(Vars,TAttr1) - ), - Clause = (Head :- Body). - -%% attr_unify_hook -generate_attr_unify_hook(Clauses) :- - get_max_constraint_index(N), - ( N == 0 -> - Clauses = [] - ; - ( N == 1 -> - generate_attr_unify_hook_one(Clauses) - ; - generate_attr_unify_hook_many(N,Clauses) - ) - ). - -generate_attr_unify_hook_one([Clause]) :- - Head = attr_unify_hook(Susps,Other), - get_target_module(Mod), - get_indexed_constraint(1,C), - ( get_store_type(C,ST), - ( ST = default ; ST = multi_store(STs), memberchk(default,STs) ) -> - make_run_suspensions(NewSusps,SortedSusps,WakeNewSusps), - make_run_suspensions(SortedSusps,SortedSusps,WakeSusps), - ( atomic_types_suspended_constraint(C) -> - SortGoal1 = true, - SortedSusps = Susps, - SortGoal2 = true, - SortedOtherSusps = OtherSusps, - MergeGoal = (append(Susps,OtherSusps,List), sort(List,NewSusps)), - NonvarBody = true - ; - SortGoal1 = sort(Susps, SortedSusps), - SortGoal2 = sort(OtherSusps,SortedOtherSusps), - MergeGoal = 'chr merge_attributes'(SortedSusps,SortedOtherSusps,NewSusps), - use_auxiliary_predicate(attach_increment), - NonvarBody = - ( compound(Other) -> - term_variables(Other,OtherVars), - attach_increment(OtherVars, SortedSusps) - ; - true - ) - ), - Body = - ( - SortGoal1, - ( var(Other) -> - ( get_attr(Other,Mod,OtherSusps) -> - SortGoal2, - MergeGoal, - put_attr(Other,Mod,NewSusps), - WakeNewSusps - ; - put_attr(Other,Mod,SortedSusps), - WakeSusps - ) - ; - NonvarBody, - WakeSusps - ) - ), - Clause = (Head :- Body) - ; get_store_type(C,var_assoc_store(VarIndex,KeyIndex)) -> - make_run_suspensions(List,List,WakeNewSusps), - MergeGoal = (merge_into_assoc_store(Susps,OtherSusps,List)), - Body = - ( get_attr(Other,Mod,OtherSusps) -> - MergeGoal, - WakeNewSusps - ; - put_attr(Other,Mod,Susps) - ), - Clause = (Head :- Body) - ). - - -generate_attr_unify_hook_many(N,[Clause]) :- - chr_pp_flag(dynattr,off), !, - Head = attr_unify_hook(Attr,Other), - get_target_module(Mod), - make_attr(N,Mask,SuspsList,Attr), - bagof(Sort,A ^ B ^ ( member(A,SuspsList) , Sort = sort(A,B) ) , SortGoalList), - list2conj(SortGoalList,SortGoals), - bagof(B, A ^ member(sort(A,B),SortGoalList), SortedSuspsList), - merge_attributes2(N,Mask,SortedSuspsList,TOtherAttr,MergeGoal,MergedAttr), - get_all_suspensions2(N,MergedAttr,MergedSuspsList), - make_attr(N,Mask,SortedSuspsList,SortedAttr), - make_run_suspensions_loop(MergedSuspsList,SortedSuspsList,WakeMergedSusps), - make_run_suspensions_loop(SortedSuspsList,SortedSuspsList,WakeSortedSusps), - ( forall((between(1,N,Index), get_indexed_constraint(Index,Constraint)),atomic_types_suspended_constraint(Constraint)) -> - NonvarBody = true - ; - use_auxiliary_predicate(attach_increment), - NonvarBody = - ( compound(Other) -> - term_variables(Other,OtherVars), - attach_increment(OtherVars,SortedAttr) - ; - true - ) - ), - Body = - ( - SortGoals, - ( var(Other) -> - ( get_attr(Other,Mod,TOtherAttr) -> - MergeGoal, - put_attr(Other,Mod,MergedAttr), - WakeMergedSusps - ; - put_attr(Other,Mod,SortedAttr), - WakeSortedSusps - ) - ; - NonvarBody, - WakeSortedSusps - ) - ), - Clause = (Head :- Body). - -% NEW -generate_attr_unify_hook_many(N,Clauses) :- - Head = attr_unify_hook(Attr,Other), - get_target_module(Mod), - normalize_attr(Attr,NormalGoal,NormalAttr), - normalize_attr(OtherAttr,NormalOtherGoal,NormalOtherAttr), - merge_attributes(N,NormalAttr,NormalOtherAttr,MergeGoal,MergedAttr), - make_run_suspensions(N), - ( forall((between(1,N,Index), get_indexed_constraint(Index,Constraint)),atomic_types_suspended_constraint(Constraint)) -> - NonvarBody = true - ; - use_auxiliary_predicate(attach_increment), - NonvarBody = - ( compound(Other) -> - term_variables(Other,OtherVars), - attach_increment(OtherVars,NormalAttr) - ; - true - ) - ), - Body = - ( - NormalGoal, - ( var(Other) -> - ( get_attr(Other,Mod,OtherAttr) -> - NormalOtherGoal, - MergeGoal, - put_attr(Other,Mod,MergedAttr), - '$dispatch_run_suspensions'(MergedAttr) - ; - put_attr(Other,Mod,NormalAttr), - '$dispatch_run_suspensions'(NormalAttr) - ) - ; - NonvarBody, - '$dispatch_run_suspensions'(NormalAttr) - ) - ), - Clause = (Head :- Body), - Clauses = [Clause,DispatchList1,DispatchList2|Dispatchers], - DispatchList1 = ('$dispatch_run_suspensions'([])), - DispatchList2 = ('$dispatch_run_suspensions'([Pos-List|Rest]) :- '$dispatch_run_suspensions'(Pos,List),'$dispatch_run_suspensions'(Rest)), - run_suspensions_dispatchers(N,[],Dispatchers). - -% NEW -run_suspensions_dispatchers(N,Acc,Dispatchers) :- - ( N > 0 -> - get_indexed_constraint(N,C), - NAcc = [('$dispatch_run_suspensions'(N,List) :- Body)|Acc], - ( may_trigger(C) -> - run_suspensions_goal(C,List,Body) - ; - Body = true - ), - M is N - 1, - run_suspensions_dispatchers(M,NAcc,Dispatchers) - ; - Dispatchers = Acc - ). - -% NEW -make_run_suspensions(N) :- - ( N > 0 -> - ( get_indexed_constraint(N,C), - may_trigger(C) -> - use_auxiliary_predicate(run_suspensions,C) - ; - true - ), - M is N - 1, - make_run_suspensions(M) - ; - true - ). - -make_run_suspensions(AllSusps,OneSusps,Goal) :- - make_run_suspensions(1,AllSusps,OneSusps,Goal). - -make_run_suspensions(Index,AllSusps,OneSusps,Goal) :- - ( get_indexed_constraint(Index,C), may_trigger(C) -> - use_auxiliary_predicate(run_suspensions,C), - ( wakes_partially(C) -> - run_suspensions_goal(C,OneSusps,Goal) - ; - run_suspensions_goal(C,AllSusps,Goal) - ) - ; - Goal = true - ). - -make_run_suspensions_loop(AllSuspsList,OneSuspsList,Goal) :- - make_run_suspensions_loop(AllSuspsList,OneSuspsList,1,Goal). - -make_run_suspensions_loop([],[],_,true). -make_run_suspensions_loop([AllSusps|AllSuspsList],[OneSusps|OneSuspsList],I,(Goal,Goals)) :- - make_run_suspensions(I,AllSusps,OneSusps,Goal), - J is I + 1, - make_run_suspensions_loop(AllSuspsList,OneSuspsList,J,Goals). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% $insert_in_store_F/A -% $delete_from_store_F/A - -generate_insert_delete_constraints([],[]). -generate_insert_delete_constraints([FA|Rest],Clauses) :- - ( is_stored(FA) -> - generate_insert_delete_constraint(FA,Clauses,RestClauses) - ; - Clauses = RestClauses - ), - generate_insert_delete_constraints(Rest,RestClauses). - -generate_insert_delete_constraint(FA,Clauses,RestClauses) :- - insert_constraint_clause(FA,Clauses,RestClauses1), - delete_constraint_clause(FA,RestClauses1,RestClauses). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -% insert_in_store - -insert_constraint_goal(FA,Susp,Vars,Goal) :- - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(insert_in_store,FA), - insert_constraint_atom(FA,Susp,Goal) - ; - delay_phase_end(validate_store_type_assumptions, - ( insert_constraint_body(FA,Susp,UsedVars,Goal), - insert_constraint_direct_used_vars(UsedVars,Vars) - ) - ) - ). - -insert_constraint_direct_used_vars([],_). -insert_constraint_direct_used_vars([Index-Var|Rest],Vars) :- - nth1(Index,Vars,Var), - insert_constraint_direct_used_vars(Rest,Vars). - -insert_constraint_atom(FA,Susp,Call) :- - make_name('$insert_in_store_',FA,Functor), - Call =.. [Functor,Susp]. - -insert_constraint_clause(C,Clauses,RestClauses) :- - ( is_used_auxiliary_predicate(insert_in_store,C) -> - Clauses = [Clause|RestClauses], - Clause = (Head :- InsertCounterInc,VarsBody,Body), - insert_constraint_atom(C,Susp,Head), - insert_constraint_body(C,Susp,UsedVars,Body), - insert_constraint_used_vars(UsedVars,C,Susp,VarsBody), - ( chr_pp_flag(store_counter,on) -> - InsertCounterInc = '$insert_counter_inc' - ; - InsertCounterInc = true - ) - ; - Clauses = RestClauses - ). - -insert_constraint_used_vars([],_,_,true). -insert_constraint_used_vars([Index-Var|Rest],C,Susp,(Goal,Goals)) :- - get_dynamic_suspension_term_field(argument(Index),C,Susp,Var,Goal), - insert_constraint_used_vars(Rest,C,Susp,Goals). - -insert_constraint_body(C,Susp,UsedVars,Body) :- - get_store_type(C,StoreType), - insert_constraint_body(StoreType,C,Susp,UsedVars,Body). - -insert_constraint_body(default,C,Susp,[],Body) :- - global_list_store_name(C,StoreName), - make_get_store_goal(StoreName,Store,GetStoreGoal), - make_update_store_goal(StoreName,Cell,UpdateStoreGoal), - ( chr_pp_flag(debugable,on) -> - Cell = [Susp|Store], - Body = - ( - GetStoreGoal, - UpdateStoreGoal - ) - ; - set_dynamic_suspension_term_field(global_list_prev,C,NextSusp,Cell,SetGoal), - Body = - ( - GetStoreGoal, - Cell = [Susp|Store], - UpdateStoreGoal, - ( Store = [NextSusp|_] -> - SetGoal - ; - true - ) - ) - ). -% get_target_module(Mod), -% get_max_constraint_index(Total), -% ( Total == 1 -> -% generate_attach_body_1(C,Store,Susp,AttachBody) -% ; -% generate_attach_body_n(C,Store,Susp,AttachBody) -% ), -% Body = -% ( -% 'chr default_store'(Store), -% AttachBody -% ). -insert_constraint_body(multi_inthash(Indexes),C,Susp,[],Body) :- - generate_multi_inthash_insert_constraint_bodies(Indexes,C,Susp,Body). -insert_constraint_body(multi_hash(Indexes),C,Susp,MixedUsedVars,Body) :- - generate_multi_hash_insert_constraint_bodies(Indexes,C,Susp,Body,MixedUsedVars), - sort_out_used_vars(MixedUsedVars,UsedVars). -insert_constraint_body(atomic_constants(Index,_,_),C,Susp,UsedVars,Body) :- - multi_hash_key_direct(C,Index,Susp,Key,UsedVars), - constants_store_index_name(C,Index,IndexName), - IndexLookup =.. [IndexName,Key,StoreName], - Body = - ( IndexLookup -> - nb_getval(StoreName,Store), - b_setval(StoreName,[Susp|Store]) - ; - true - ). -insert_constraint_body(ground_constants(Index,_,_),C,Susp,UsedVars,Body) :- - multi_hash_key_direct(C,Index,Susp,Key,UsedVars), - constants_store_index_name(C,Index,IndexName), - IndexLookup =.. [IndexName,Key,StoreName], - Body = - ( IndexLookup -> - nb_getval(StoreName,Store), - b_setval(StoreName,[Susp|Store]) - ; - true - ). -insert_constraint_body(global_ground,C,Susp,[],Body) :- - global_ground_store_name(C,StoreName), - make_get_store_goal(StoreName,Store,GetStoreGoal), - make_update_store_goal(StoreName,Cell,UpdateStoreGoal), - ( chr_pp_flag(debugable,on) -> - Cell = [Susp|Store], - Body = - ( - GetStoreGoal, - UpdateStoreGoal - ) - ; - set_dynamic_suspension_term_field(global_list_prev,C,NextSusp,Cell,SetGoal), - Body = - ( - GetStoreGoal, - Cell = [Susp|Store], - UpdateStoreGoal, - ( Store = [NextSusp|_] -> - SetGoal - ; - true - ) - ) - ). -% global_ground_store_name(C,StoreName), -% make_get_store_goal(StoreName,Store,GetStoreGoal), -% make_update_store_goal(StoreName,[Susp|Store],UpdateStoreGoal), -% Body = -% ( -% GetStoreGoal, % nb_getval(StoreName,Store), -% UpdateStoreGoal % b_setval(StoreName,[Susp|Store]) -% ). -insert_constraint_body(var_assoc_store(VarIndex,AssocIndex),C,Susp,[VarIndex-Variable,AssocIndex-Key],Body) :- - % TODO: generalize to more than one !!! - get_target_module(Module), - Body = ( get_attr(Variable,Module,AssocStore) -> - insert_assoc_store(AssocStore,Key,Susp) - ; - new_assoc_store(AssocStore), - put_attr(Variable,Module,AssocStore), - insert_assoc_store(AssocStore,Key,Susp) - ). - -insert_constraint_body(global_singleton,C,Susp,[],Body) :- - global_singleton_store_name(C,StoreName), - make_update_store_goal(StoreName,Susp,UpdateStoreGoal), - Body = - ( - UpdateStoreGoal - ). -insert_constraint_body(multi_store(StoreTypes),C,Susp,UsedVars,Body) :- - maplist(insert_constraint_body1(C,Susp),StoreTypes,NestedUsedVars,Bodies), - list2conj(Bodies,Body), - sort_out_used_vars(NestedUsedVars,UsedVars). -insert_constraint_body1(C,Susp,StoreType,UsedVars,Body) :- - insert_constraint_body(StoreType,C,Susp,UsedVars,Body). -insert_constraint_body(identifier_store(Index),C,Susp,UsedVars,Body) :- - UsedVars = [Index-Var], - get_identifier_size(ISize), - functor(Struct,struct,ISize), - get_identifier_index(C,Index,IIndex), - arg(IIndex,Struct,Susps), - Body = (Var = Struct, setarg(IIndex,Var,[Susp|Susps])). -insert_constraint_body(type_indexed_identifier_store(Index,IndexType),C,Susp,UsedVars,Body) :- - UsedVars = [Index-Var], - type_indexed_identifier_structure(IndexType,Struct), - get_type_indexed_identifier_index(IndexType,C,Index,IIndex), - arg(IIndex,Struct,Susps), - Body = (Var = Struct, setarg(IIndex,Var,[Susp|Susps])). - -sort_out_used_vars(NestedUsedVars,UsedVars) :- - flatten(NestedUsedVars,FlatUsedVars), - sort(FlatUsedVars,SortedFlatUsedVars), - sort_out_used_vars1(SortedFlatUsedVars,UsedVars). - -sort_out_used_vars1([],[]). -sort_out_used_vars1([I-V],L) :- !, L = [I-V]. -sort_out_used_vars1([I-X,J-Y|R],L) :- - ( I == J -> - X = Y, - sort_out_used_vars1([I-X|R],L) - ; - L = [I-X|T], - sort_out_used_vars1([J-Y|R],T) - ). - -generate_multi_inthash_insert_constraint_bodies([],_,_,true). -generate_multi_inthash_insert_constraint_bodies([Index|Indexes],FA,Susp,(Body,Bodies)) :- - multi_hash_store_name(FA,Index,StoreName), - multi_hash_key(FA,Index,Susp,KeyBody,Key), - Body = - ( - KeyBody, - nb_getval(StoreName,Store), - insert_iht(Store,Key,Susp) - ), - generate_multi_inthash_insert_constraint_bodies(Indexes,FA,Susp,Bodies). - -generate_multi_hash_insert_constraint_bodies([],_,_,true,[]). -generate_multi_hash_insert_constraint_bodies([Index|Indexes],FA,Susp,(Body,Bodies),[UsedVars|MoreUsedVars]) :- - multi_hash_store_name(FA,Index,StoreName), - multi_hash_key_direct(FA,Index,Susp,Key,UsedVars), - make_get_store_goal(StoreName,Store,GetStoreGoal), - ( chr_pp_flag(ht_removal,on) - -> ht_prev_field(Index,PrevField), - set_dynamic_suspension_term_field(PrevField,FA,NextSusp,Result, - SetGoal), - Body = - ( - GetStoreGoal, - insert_ht(Store,Key,Susp,Result), - ( Result = [_,NextSusp|_] - -> SetGoal - ; true - ) - ) - ; Body = - ( - GetStoreGoal, - insert_ht(Store,Key,Susp) - ) - ), - generate_multi_hash_insert_constraint_bodies(Indexes,FA,Susp,Bodies,MoreUsedVars). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -% Delete - -delete_constraint_clause(C,Clauses,RestClauses) :- - ( is_used_auxiliary_predicate(delete_from_store,C) -> - Clauses = [Clause|RestClauses], - Clause = (Head :- Body), - delete_constraint_atom(C,Susp,Head), - C = F/A, - functor(Head,F,A), - delete_constraint_body(C,Head,Susp,[],Body) - ; - Clauses = RestClauses - ). - -delete_constraint_goal(Head,Susp,VarDict,Goal) :- - functor(Head,F,A), - C = F/A, - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(delete_from_store,C), - delete_constraint_atom(C,Susp,Goal) - ; - delay_phase_end(validate_store_type_assumptions, delete_constraint_body(C,Head,Susp,VarDict,Goal)) - ). - -delete_constraint_atom(C,Susp,Atom) :- - make_name('$delete_from_store_',C,Functor), - Atom =.. [Functor,Susp]. - - -delete_constraint_body(C,Head,Susp,VarDict,Body) :- - Body = (CounterBody,DeleteBody), - ( chr_pp_flag(store_counter,on) -> - CounterBody = '$delete_counter_inc' - ; - CounterBody = true - ), - get_store_type(C,StoreType), - delete_constraint_body(StoreType,C,Head,Susp,VarDict,DeleteBody). - -delete_constraint_body(default,C,_,Susp,_,Body) :- - ( chr_pp_flag(debugable,on) -> - global_list_store_name(C,StoreName), - make_get_store_goal(StoreName,Store,GetStoreGoal), - make_update_store_goal(StoreName,NStore,UpdateStoreGoal), - Body = - ( - GetStoreGoal, % nb_getval(StoreName,Store), - 'chr sbag_del_element'(Store,Susp,NStore), - UpdateStoreGoal % b_setval(StoreName,NStore) - ) - ; - get_dynamic_suspension_term_field(global_list_prev,C,Susp,PredCell,GetGoal), - global_list_store_name(C,StoreName), - make_get_store_goal(StoreName,Store,GetStoreGoal), - make_update_store_goal(StoreName,Tail,UpdateStoreGoal), - set_dynamic_suspension_term_field(global_list_prev,C,NextSusp,_,SetGoal1), - set_dynamic_suspension_term_field(global_list_prev,C,NextSusp,PredCell,SetGoal2), - Body = - ( - GetGoal, - ( var(PredCell) -> - GetStoreGoal, % nb_getval(StoreName,Store), - Store = [_|Tail], - UpdateStoreGoal, - ( Tail = [NextSusp|_] -> - SetGoal1 - ; - true - ) - ; - PredCell = [_,_|Tail], - setarg(2,PredCell,Tail), - ( Tail = [NextSusp|_] -> - SetGoal2 - ; - true - ) - ) - ) - ). -% get_target_module(Mod), -% get_max_constraint_index(Total), -% ( Total == 1 -> -% generate_detach_body_1(C,Store,Susp,DetachBody), -% Body = -% ( -% 'chr default_store'(Store), -% DetachBody -% ) -% ; -% generate_detach_body_n(C,Store,Susp,DetachBody), -% Body = -% ( -% 'chr default_store'(Store), -% DetachBody -% ) -% ). -delete_constraint_body(multi_inthash(Indexes),C,_,Susp,_,Body) :- - generate_multi_inthash_delete_constraint_bodies(Indexes,C,Susp,Body). -delete_constraint_body(multi_hash(Indexes),C,Head,Susp,VarDict,Body) :- - generate_multi_hash_delete_constraint_bodies(Indexes,C,Head,Susp,VarDict,Body). -delete_constraint_body(atomic_constants(Index,_,_),C,Head,Susp,VarDict,Body) :- - multi_hash_key(C,Head,Index,Susp,VarDict,KeyBody,Key), - constants_store_index_name(C,Index,IndexName), - IndexLookup =.. [IndexName,Key,StoreName], - Body = - ( KeyBody, - ( IndexLookup -> - nb_getval(StoreName,Store), - 'chr sbag_del_element'(Store,Susp,NStore), - b_setval(StoreName,NStore) - ; - true - )). -delete_constraint_body(ground_constants(Index,_,_),C,Head,Susp,VarDict,Body) :- - multi_hash_key(C,Head,Index,Susp,VarDict,KeyBody,Key), - constants_store_index_name(C,Index,IndexName), - IndexLookup =.. [IndexName,Key,StoreName], - Body = - ( KeyBody, - ( IndexLookup -> - nb_getval(StoreName,Store), - 'chr sbag_del_element'(Store,Susp,NStore), - b_setval(StoreName,NStore) - ; - true - )). -delete_constraint_body(global_ground,C,_,Susp,_,Body) :- - ( chr_pp_flag(debugable,on) -> - global_ground_store_name(C,StoreName), - make_get_store_goal(StoreName,Store,GetStoreGoal), - make_update_store_goal(StoreName,NStore,UpdateStoreGoal), - Body = - ( - GetStoreGoal, % nb_getval(StoreName,Store), - 'chr sbag_del_element'(Store,Susp,NStore), - UpdateStoreGoal % b_setval(StoreName,NStore) - ) - ; - get_dynamic_suspension_term_field(global_list_prev,C,Susp,PredCell,GetGoal), - global_ground_store_name(C,StoreName), - make_get_store_goal(StoreName,Store,GetStoreGoal), - make_update_store_goal(StoreName,Tail,UpdateStoreGoal), - set_dynamic_suspension_term_field(global_list_prev,C,NextSusp,_,SetGoal1), - set_dynamic_suspension_term_field(global_list_prev,C,NextSusp,PredCell,SetGoal2), - Body = - ( - GetGoal, - ( var(PredCell) -> - GetStoreGoal, % nb_getval(StoreName,Store), - Store = [_|Tail], - UpdateStoreGoal, - ( Tail = [NextSusp|_] -> - SetGoal1 - ; - true - ) - ; - PredCell = [_,_|Tail], - setarg(2,PredCell,Tail), - ( Tail = [NextSusp|_] -> - SetGoal2 - ; - true - ) - ) - ) - ). -% global_ground_store_name(C,StoreName), -% make_get_store_goal(StoreName,Store,GetStoreGoal), -% make_update_store_goal(StoreName,NStore,UpdateStoreGoal), -% Body = -% ( -% GetStoreGoal, % nb_getval(StoreName,Store), -% 'chr sbag_del_element'(Store,Susp,NStore), -% UpdateStoreGoal % b_setval(StoreName,NStore) -% ). -delete_constraint_body(var_assoc_store(VarIndex,AssocIndex),C,_,Susp,_,Body) :- - get_target_module(Module), - get_dynamic_suspension_term_field(argument(VarIndex),C,Susp,Variable,VariableGoal), - get_dynamic_suspension_term_field(argument(AssocIndex),C,Susp,Key,KeyGoal), - Body = ( - VariableGoal, - get_attr(Variable,Module,AssocStore), - KeyGoal, - delete_assoc_store(AssocStore,Key,Susp) - ). -delete_constraint_body(global_singleton,C,_,_Susp,_,Body) :- - global_singleton_store_name(C,StoreName), - make_update_store_goal(StoreName,[],UpdateStoreGoal), - Body = - ( - UpdateStoreGoal % b_setval(StoreName,[]) - ). -delete_constraint_body(multi_store(StoreTypes),C,Head,Susp,VarDict,Body) :- - maplist(delete_constraint_body1(C,Head,Susp,VarDict),StoreTypes,Bodies), - list2conj(Bodies,Body). -delete_constraint_body1(C,Head,Susp,VarDict,StoreType,Body) :- - delete_constraint_body(StoreType,C,Head,Susp,VarDict,Body). -delete_constraint_body(identifier_store(Index),C,Head,Susp,VarDict,Body) :- - get_suspension_argument_possibly_in_scope(Head,VarDict,Susp,Index,Variable,VariableGoal), - get_identifier_size(ISize), - functor(Struct,struct,ISize), - get_identifier_index(C,Index,IIndex), - arg(IIndex,Struct,Susps), - Body = ( - VariableGoal, - Variable = Struct, - 'chr sbag_del_element'(Susps,Susp,NSusps), - setarg(IIndex,Variable,NSusps) - ). -delete_constraint_body(type_indexed_identifier_store(Index,IndexType),C,Head,Susp,VarDict,Body) :- - get_suspension_argument_possibly_in_scope(Head,VarDict,Susp,Index,Variable,VariableGoal), - type_indexed_identifier_structure(IndexType,Struct), - get_type_indexed_identifier_index(IndexType,C,Index,IIndex), - arg(IIndex,Struct,Susps), - Body = ( - VariableGoal, - Variable = Struct, - 'chr sbag_del_element'(Susps,Susp,NSusps), - setarg(IIndex,Variable,NSusps) - ). - -generate_multi_inthash_delete_constraint_bodies([],_,_,true). -generate_multi_inthash_delete_constraint_bodies([Index|Indexes],FA,Susp,(Body,Bodies)) :- - multi_hash_store_name(FA,Index,StoreName), - multi_hash_key(FA,Index,Susp,KeyBody,Key), - Body = - ( - KeyBody, - nb_getval(StoreName,Store), - delete_iht(Store,Key,Susp) - ), - generate_multi_inthash_delete_constraint_bodies(Indexes,FA,Susp,Bodies). -generate_multi_hash_delete_constraint_bodies([],_,_,_,_,true). -generate_multi_hash_delete_constraint_bodies([Index|Indexes],C,Head,Susp,VarDict,(Body,Bodies)) :- - multi_hash_store_name(C,Index,StoreName), - multi_hash_key(C,Head,Index,Susp,VarDict,KeyBody,Key), - make_get_store_goal(StoreName,Store,GetStoreGoal), - ( chr_pp_flag(ht_removal,on) - -> ht_prev_field(Index,PrevField), - get_dynamic_suspension_term_field(PrevField,C,Susp,Prev,GetGoal), - set_dynamic_suspension_term_field(PrevField,C,NextSusp,_, - SetGoal1), - set_dynamic_suspension_term_field(PrevField,C,NextSusp,Prev, - SetGoal2), - Body = - ( - GetGoal, - ( var(Prev) - -> GetStoreGoal, - KeyBody, - delete_first_ht(Store,Key,Values), - ( Values = [NextSusp|_] - -> SetGoal1 - ; true - ) - ; Prev = [_,_|Values], - setarg(2,Prev,Values), - ( Values = [NextSusp|_] - -> SetGoal2 - ; true - ) - ) - ) - ; Body = - ( - KeyBody, - GetStoreGoal, % nb_getval(StoreName,Store), - delete_ht(Store,Key,Susp) - ) - ), - generate_multi_hash_delete_constraint_bodies(Indexes,FA,Head,Susp,VarDict,Bodies). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- chr_constraint - module_initializer/1, - module_initializers/1. - -module_initializers(G), module_initializer(Initializer) <=> - G = (Initializer,Initializers), - module_initializers(Initializers). - -module_initializers(G) <=> - G = true. - -generate_attach_code(Constraints,Clauses) :- - enumerate_stores_code(Constraints,Enumerate), - append(Enumerate,L,Clauses), - generate_attach_code(Constraints,L,T), - module_initializers(Initializers), - prolog_global_variables_code(PrologGlobalVariables), - % Do not rename or the 'chr_initialization' predicate - % without warning SSS - T = [('$chr_initialization' :- Initializers),(:- initialization '$chr_initialization')|PrologGlobalVariables]. - -generate_attach_code([],L,L). -generate_attach_code([C|Cs],L,T) :- - get_store_type(C,StoreType), - generate_attach_code(StoreType,C,L,L1), - generate_attach_code(Cs,L1,T). - -generate_attach_code(default,C,L,T) :- - global_list_store_initialisation(C,L,T). -generate_attach_code(multi_inthash(Indexes),C,L,T) :- - multi_inthash_store_initialisations(Indexes,C,L,L1), - multi_inthash_via_lookups(Indexes,C,L1,T). -generate_attach_code(multi_hash(Indexes),C,L,T) :- - multi_hash_store_initialisations(Indexes,C,L,L1), - multi_hash_lookups(Indexes,C,L1,T). -generate_attach_code(atomic_constants(Index,Constants,_),C,L,T) :- - constants_initializers(C,Index,Constants), - atomic_constants_code(C,Index,Constants,L,T). -generate_attach_code(ground_constants(Index,Constants,_),C,L,T) :- - constants_initializers(C,Index,Constants), - ground_constants_code(C,Index,Constants,L,T). -generate_attach_code(global_ground,C,L,T) :- - global_ground_store_initialisation(C,L,T). -generate_attach_code(var_assoc_store(_,_),_,L,L) :- - use_auxiliary_module(chr_assoc_store). -generate_attach_code(global_singleton,C,L,T) :- - global_singleton_store_initialisation(C,L,T). -generate_attach_code(multi_store(StoreTypes),C,L,T) :- - multi_store_generate_attach_code(StoreTypes,C,L,T). -generate_attach_code(identifier_store(Index),C,L,T) :- - get_identifier_index(C,Index,IIndex), - ( IIndex == 2 -> - get_identifier_size(ISize), - functor(Struct,struct,ISize), - Struct =.. [_,Label|Stores], - set_elems(Stores,[]), - Clause1 = new_identifier(Label,Struct), - functor(Struct2,struct,ISize), - arg(1,Struct2,Label2), - Clause2 = - ( user:portray(Struct2) :- - write('') - ), - functor(Struct3,struct,ISize), - arg(1,Struct3,Label3), - Clause3 = identifier_label(Struct3,Label3), - L = [Clause1,Clause2,Clause3|T] - ; - L = T - ). -generate_attach_code(type_indexed_identifier_store(Index,IndexType),C,L,T) :- - get_type_indexed_identifier_index(IndexType,C,Index,IIndex), - ( IIndex == 2 -> - identifier_store_initialization(IndexType,L,L1), - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - get_type_indexed_identifier_size(IndexType,ISize), - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - type_indexed_identifier_structure(IndexType,Struct), - Struct =.. [_,Label|Stores], - set_elems(Stores,[]), - type_indexed_identifier_name(IndexType,new_identifier,Name1), - Clause1 =.. [Name1,Label,Struct], - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - Goal1 =.. [Name1,Label1b,S1b], - type_indexed_identifier_structure(IndexType,Struct1b), - Struct1b =.. [_,Label1b|Stores1b], - set_elems(Stores1b,[]), - Expansion1 = (S1b = Struct1b), - Clause1b = user:goal_expansion(Goal1,Expansion1), - % writeln(Clause1-Clause1b), - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - type_indexed_identifier_structure(IndexType,Struct2), - arg(1,Struct2,Label2), - Clause2 = - ( user:portray(Struct2) :- - write('') - ), - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - type_indexed_identifier_structure(IndexType,Struct3), - arg(1,Struct3,Label3), - type_indexed_identifier_name(IndexType,identifier_label,Name3), - Clause3 =.. [Name3,Struct3,Label3], - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - Goal3b =.. [Name3,S3b,L3b], - type_indexed_identifier_structure(IndexType,Struct3b), - arg(1,Struct3b,L3b), - Expansion3b = (S3 = Struct3b), - Clause3b = ( user:goal_expansion(Goal3b,Expansion3b) :- writeln(expanding)), - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - identifier_store_name(IndexType,GlobalVariable), - lookup_identifier_atom(IndexType,X,IX,LookupAtom), - type_indexed_identifier_name(IndexType,new_identifier,NewIdentifierFunctor), - NewIdentifierGoal =.. [NewIdentifierFunctor,X,IX], - Clause4 = - ( LookupAtom :- - nb_getval(GlobalVariable,HT), - ( lookup_ht(HT,X,[IX]) -> - true - ; - NewIdentifierGoal, - insert_ht(HT,X,IX) - ) - ), - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - L1 = [(:- multifile goal_expansion/2),(:- dynamic goal_expansion/2),Clause1,Clause1b,Clause2,Clause3,Clause3b,Clause4|T] - ; - L = T - ). - -constants_initializers(C,Index,Constants) :- - maplist(constant_initializer(C,Index),Constants). - -constant_initializer(C,Index,Constant) :- - constants_store_name(C,Index,Constant,StoreName), - module_initializer(nb_setval(StoreName,[])). - -lookup_identifier_atom(Key,X,IX,Atom) :- - atom_concat('lookup_identifier_',Key,LookupFunctor), - Atom =.. [LookupFunctor,X,IX]. - -identifier_label_atom(IndexType,IX,X,Atom) :- - type_indexed_identifier_name(IndexType,identifier_label,Name), - Atom =.. [Name,IX,X]. - -multi_store_generate_attach_code([],_,L,L). -multi_store_generate_attach_code([ST|STs],C,L,T) :- - generate_attach_code(ST,C,L,L1), - multi_store_generate_attach_code(STs,C,L1,T). - -multi_inthash_store_initialisations([],_,L,L). -multi_inthash_store_initialisations([Index|Indexes],FA,L,T) :- - use_auxiliary_module(chr_integertable_store), - multi_hash_store_name(FA,Index,StoreName), - module_initializer((new_iht(HT),nb_setval(StoreName,HT))), - % L = [(:- (chr_integertable_store:new_ht(HT),nb_setval(StoreName,HT)) )|L1], - L1 = L, - multi_inthash_store_initialisations(Indexes,FA,L1,T). -multi_hash_store_initialisations([],_,L,L). -multi_hash_store_initialisations([Index|Indexes],FA,L,T) :- - use_auxiliary_module(chr_hashtable_store), - multi_hash_store_name(FA,Index,StoreName), - prolog_global_variable(StoreName), - make_init_store_goal(StoreName,HT,InitStoreGoal), - module_initializer((new_ht(HT),InitStoreGoal)), - L1 = L, - multi_hash_store_initialisations(Indexes,FA,L1,T). - -global_list_store_initialisation(C,L,T) :- - ( is_stored(C) -> - global_list_store_name(C,StoreName), - prolog_global_variable(StoreName), - make_init_store_goal(StoreName,[],InitStoreGoal), - module_initializer(InitStoreGoal) - ; - true - ), - L = T. -global_ground_store_initialisation(C,L,T) :- - global_ground_store_name(C,StoreName), - prolog_global_variable(StoreName), - make_init_store_goal(StoreName,[],InitStoreGoal), - module_initializer(InitStoreGoal), - L = T. -global_singleton_store_initialisation(C,L,T) :- - global_singleton_store_name(C,StoreName), - prolog_global_variable(StoreName), - make_init_store_goal(StoreName,[],InitStoreGoal), - module_initializer(InitStoreGoal), - L = T. -identifier_store_initialization(IndexType,L,T) :- - use_auxiliary_module(chr_hashtable_store), - identifier_store_name(IndexType,StoreName), - prolog_global_variable(StoreName), - make_init_store_goal(StoreName,HT,InitStoreGoal), - module_initializer((new_ht(HT),InitStoreGoal)), - L = T. - - -multi_inthash_via_lookups([],_,L,L). -multi_inthash_via_lookups([Index|Indexes],C,L,T) :- - multi_hash_lookup_head(C,Index,Key,SuspsList,Head), - multi_hash_lookup_body(C,inthash,Index,Key,SuspsList,Body), - L = [(Head :- Body)|L1], - multi_inthash_via_lookups(Indexes,C,L1,T). -multi_hash_lookups([],_,L,L). -multi_hash_lookups([Index|Indexes],C,L,T) :- - multi_hash_lookup_head(C,Index,Key,SuspsList,Head), - multi_hash_lookup_body(C,hash,Index,Key,SuspsList,Body), - L = [(Head :- Body)|L1], - multi_hash_lookups(Indexes,C,L1,T). - -multi_hash_lookup_head(ConstraintSymbol,Index,Key,SuspsList,Head) :- - multi_hash_lookup_name(ConstraintSymbol,Index,Name), - Head =.. [Name,Key,SuspsList]. - -%% multi_hash_lookup_body(+ConstraintSymbol,+HashType,+Index,+Key,+SuspsList,-Goal) is det. -% -% Returns goal that performs hash table lookup. -multi_hash_lookup_body(ConstraintSymbol,HashType,Index,Key,SuspsList,Goal) :- - % INLINED: - get_store_type(ConstraintSymbol,multi_store(Stores)), - ( memberchk(atomic_constants(Index,Constants,_),Stores) -> - ( ground(Key) -> - constants_store_name(ConstraintSymbol,Index,Key,StoreName), - Goal = nb_getval(StoreName,SuspsList) - ; - constants_store_index_name(ConstraintSymbol,Index,IndexName), - Lookup =.. [IndexName,Key,StoreName], - Goal = (Lookup, nb_getval(StoreName,SuspsList)) - ) - ; memberchk(ground_constants(Index,Constants,_),Stores) -> - ( ground(Key) -> - constants_store_name(ConstraintSymbol,Index,Key,StoreName), - Goal = nb_getval(StoreName,SuspsList) - ; - constants_store_index_name(ConstraintSymbol,Index,IndexName), - Lookup =.. [IndexName,Key,StoreName], - Goal = (Lookup, nb_getval(StoreName,SuspsList)) - ) - ; memberchk(multi_hash([Index]),Stores) -> - multi_hash_store_name(ConstraintSymbol,Index,StoreName), - make_get_store_goal(StoreName,HT,GetStoreGoal), - ( HashType == hash, specialized_hash_term_call(ConstraintSymbol,Index,Key,Hash,HashCall) -> - Goal = - ( - GetStoreGoal, % nb_getval(StoreName,HT), - HashCall, % hash_term(Key,Hash), - lookup_ht1(HT,Hash,Key,SuspsList) - ) - ; - lookup_hash_call(HashType,HT,Key,SuspsList,Lookup), - Goal = - ( - GetStoreGoal, % nb_getval(StoreName,HT), - Lookup - ) - ) - ; HashType == inthash -> - multi_hash_store_name(ConstraintSymbol,Index,StoreName), - make_get_store_goal(StoreName,HT,GetStoreGoal), - lookup_hash_call(HashType,HT,Key,SuspsList,Lookup), - Goal = - ( - GetStoreGoal, % nb_getval(StoreName,HT), - Lookup - ) - % ; % chr_error(internal,'Index ~w for constraint ~w does not exist!\n',[Index,ConstraintSymbol]) - % find alternative index - % -> SubIndex + RestIndex - % -> SubKey + RestKeys - % multi_hash_lookup_goal(ConstraintSymbol,HashType,SubIndex,SubKey,SuspsList,SubGoal), - % instantiate rest goal? - % Goal = (SubGoal,RestGoal) - ). - - -lookup_hash_call(hash,HT,Key,SuspsList,lookup_ht(HT,Key,SuspsList)). -lookup_hash_call(inthash,HT,Key,SuspsList,lookup_iht(HT,Key,SuspsList)). - -specialized_hash_term_call(Constraint,Index,Key,Hash,Call) :- - ( ground(Key) -> - % This is based on a property of SWI-Prolog's - % hash_term/2 predicate: - % the hash value is stable over repeated invocations - % of SWI-Prolog - hash_term(Key,Hash), - Call = true - ; Index = [IndexPos], - get_constraint_type(Constraint,ArgTypes), - nth1(IndexPos,ArgTypes,Type), - unalias_type(Type,NormalType), - memberchk_eq(NormalType,[int,natural]) -> - ( NormalType == int -> - Call = (Hash is abs(Key)) - ; - Hash = Key, - Call = true - ) - ; - nonvar(Key), - specialize_hash_term(Key,NewKey), - NewKey \== Key, - Call = hash_term(NewKey,Hash) - ). - -specialize_hash_term(Term,NewTerm) :- - ( ground(Term) -> - hash_term(Term,NewTerm) - ; var(Term) -> - NewTerm = Term - ; - Term =.. [F|Args], - maplist(specialize_hash_term,Args,NewArgs), - NewTerm =.. [F|NewArgs] - ). - -multi_hash_lookup_goal(ConstraintSymbol,HashType,Index,Key,SuspsList,Goal) :- - % format(' * lookup of ~w on ~w with ~w.\n',[ConstraintSymbol,Index,Key]), - ( /* chr_pp_flag(experiment,off) -> - true - ; */ atomic(Key) -> - actual_atomic_multi_hash_keys(ConstraintSymbol,Index,[Key]) - ; ground(Key) -> - actual_ground_multi_hash_keys(ConstraintSymbol,Index,[Key]) - ; - ( Index = [Pos], - get_constraint_arg_type(ConstraintSymbol,Pos,Type), - is_chr_constants_type(Type,_,_) - -> - true - ; - actual_non_ground_multi_hash_key(ConstraintSymbol,Index) - ) - ), - delay_phase_end(validate_store_type_assumptions, - multi_hash_lookup_body(ConstraintSymbol,HashType,Index,Key,SuspsList,Goal)). - -:- chr_constraint actual_atomic_multi_hash_keys/3. -:- chr_option(mode,actual_atomic_multi_hash_keys(+,+,?)). - -:- chr_constraint actual_ground_multi_hash_keys/3. -:- chr_option(mode,actual_ground_multi_hash_keys(+,+,?)). - -:- chr_constraint actual_non_ground_multi_hash_key/2. -:- chr_option(mode,actual_non_ground_multi_hash_key(+,+)). - -/* -actual_atomic_multi_hash_keys(C,Index,Keys) - ==> format('Keys: ~w - ~w : ~w\n', [C,Index,Keys]). - -actual_ground_multi_hash_keys(C,Index,Keys) - ==> format('Keys: ~w - ~w : ~w\n', [C,Index,Keys]). - -actual_non_ground_multi_hash_key(C,Index) - ==> format('Keys: ~w - ~w : N/A\n', [C,Index]). -*/ -actual_atomic_multi_hash_keys(C,Index,Keys1), actual_atomic_multi_hash_keys(C,Index,Keys2) - <=> append(Keys1,Keys2,Keys0), - sort(Keys0,Keys), - actual_atomic_multi_hash_keys(C,Index,Keys). - -actual_ground_multi_hash_keys(C,Index,Keys1), actual_atomic_multi_hash_keys(C,Index,Keys2) - <=> append(Keys1,Keys2,Keys0), - sort(Keys0,Keys), - actual_ground_multi_hash_keys(C,Index,Keys). - -actual_ground_multi_hash_keys(C,Index,Keys1), actual_ground_multi_hash_keys(C,Index,Keys2) - <=> append(Keys1,Keys2,Keys0), - sort(Keys0,Keys), - actual_ground_multi_hash_keys(C,Index,Keys). - -actual_non_ground_multi_hash_key(C,Index) \ actual_non_ground_multi_hash_key(C,Index) - <=> true. - -actual_non_ground_multi_hash_key(C,Index) \ actual_atomic_multi_hash_keys(C,Index,_) - <=> true. - -actual_non_ground_multi_hash_key(C,Index) \ actual_ground_multi_hash_keys(C,Index,_) - <=> true. - -%% multi_hash_lookup_name(+ConstraintSymbol,+Index,-Name) -% -% Returns predicate name of hash table lookup predicate. -multi_hash_lookup_name(F/A,Index,Name) :- - atom_concat_list(Index,IndexName), - atom_concat_list(['$via1_multi_hash_',F,'___',A,'-',IndexName],Name). - -multi_hash_store_name(F/A,Index,Name) :- - get_target_module(Mod), - atom_concat_list(Index,IndexName), - atom_concat_list(['$chr_store_multi_hash_',Mod,'____',F,'___',A,'-',IndexName],Name). - -multi_hash_key(FA,Index,Susp,KeyBody,Key) :- - ( Index = [I] -> - get_dynamic_suspension_term_field(argument(I),FA,Susp,Key,KeyBody) - ; - maplist(get_dynamic_suspension_term_field1(FA,Susp),Index,Keys,Bodies), - Key =.. [k|Keys], - list2conj(Bodies,KeyBody) - ). - -get_dynamic_suspension_term_field1(FA,Susp,I,KeyI,Goal) :- - get_dynamic_suspension_term_field(argument(I),FA,Susp,KeyI,Goal). - -multi_hash_key(C,Head,Index,Susp,VarDict,KeyBody,Key) :- - ( Index = [I] -> - get_suspension_argument_possibly_in_scope(Head,VarDict,Susp,I,Key,KeyBody) - ; - maplist(get_suspension_argument_possibly_in_scope(Head,VarDict,Susp),Index,Keys,Bodies), - Key =.. [k|Keys], - list2conj(Bodies,KeyBody) - ). - -get_suspension_argument_possibly_in_scope(Head,VarDict,Susp,Index,Arg,Goal) :- - arg(Index,Head,OriginalArg), - ( term_variables(OriginalArg,OriginalVars), - copy_term_nat(OriginalArg-OriginalVars,Arg-Vars), - translate(OriginalVars,VarDict,Vars) -> - Goal = true - ; - functor(Head,F,A), - C = F/A, - get_dynamic_suspension_term_field(argument(Index),C,Susp,Arg,Goal) - ). - -multi_hash_key_direct(FA,Index,Susp,Key,UsedVars) :- - ( Index = [I] -> - UsedVars = [I-Key] - ; - pairup(Index,Keys,UsedVars), - Key =.. [k|Keys] - ). - -multi_hash_key_args(Index,Head,KeyArgs) :- - maplist(arg1(Head),Index,KeyArgs). - -%------------------------------------------------------------------------------- -atomic_constants_code(C,Index,Constants,L,T) :- - constants_store_index_name(C,Index,IndexName), - maplist(atomic_constant_code(C,Index,IndexName),Constants,Clauses), - append(Clauses,T,L). - -atomic_constant_code(C,Index,IndexName,Constant,Clause) :- - constants_store_name(C,Index,Constant,StoreName), - Clause =.. [IndexName,Constant,StoreName]. - -%------------------------------------------------------------------------------- -ground_constants_code(C,Index,Terms,L,T) :- - constants_store_index_name(C,Index,IndexName), - maplist(constants_store_name(C,Index),Terms,StoreNames), - length(Terms,N), - replicate(N,[],More), - trie_index([Terms|More],StoreNames,IndexName,L,T). - -constants_store_name(F/A,Index,Term,Name) :- - get_target_module(Mod), - term_to_atom(Term,Constant), - term_to_atom(Index,IndexAtom), - atom_concat_list(['$chr_store_constants_',Mod,'____',F,'___',A,'___',IndexAtom,'___',Constant],Name). - -constants_store_index_name(F/A,Index,Name) :- - get_target_module(Mod), - term_to_atom(Index,IndexAtom), - atom_concat_list(['$chr_store_constants_',Mod,'____',F,'___',A,'___',IndexAtom],Name). - -% trie index code {{{ -trie_index([Patterns|MorePatterns],Results,Prefix,Clauses,Tail) :- - trie_step(Patterns,Prefix,Prefix,MorePatterns,Results,Clauses,Tail). - -trie_step([],_,_,[],[],L,L) :- !. - % length MorePatterns == length Patterns == length Results -trie_step(Patterns,Symbol,Prefix,MorePatterns,Results,Clauses,T) :- - MorePatterns = [List|_], - length(List,N), - aggregate_all(set(F/A), - ( member(Pattern,Patterns), - functor(Pattern,F,A) - ), - FAs), - N1 is N + 1, - trie_step_cases(FAs,N1,Patterns,MorePatterns,Results,Symbol,Prefix,Clauses,T). - -trie_step_cases([],_,_,_,_,_,_,Clauses,Clauses). -trie_step_cases([FA|FAs],N,Pattern,MorePatterns,Results,Symbol,Prefix,Clauses,Tail) :- - trie_step_case(FA,N,Pattern,MorePatterns,Results,Symbol,Prefix,Clauses,Clauses1), - trie_step_cases(FAs,N,Pattern,MorePatterns,Results,Symbol,Prefix,Clauses1,Tail). - -trie_step_case(F/A,N,Patterns,MorePatterns,Results,Symbol,Prefix,[Clause|List],Tail) :- - Clause = (Head :- Body), - /* Head = Symbol(IndexPattern,V2,...,Vn,Result) */ - N1 is N + 1, - functor(Head,Symbol,N1), - arg(1,Head,IndexPattern), - Head =.. [_,_|RestArgs], - once(append(Vs,[Result],RestArgs)), - /* IndexPattern = F() */ - functor(IndexPattern,F,A), - IndexPattern =.. [_|Args], - append(Args,RestArgs,RecArgs), - ( RecArgs == [Result] -> - /* nothing more to match on */ - List = Tail, - Body = true, - rec_cases(Patterns,_,Results,F/A,_,_,MoreResults), - MoreResults = [Result] - ; /* more things to match on */ - rec_cases(Patterns,MorePatterns,Results,F/A,Cases,MoreCases,MoreResults), - ( MoreCases = [OneMoreCase] -> - /* only one more thing to match on */ - List = Tail, - Body = true, - append([Cases,OneMoreCase,MoreResults],RecArgs) - ; - /* more than one thing to match on */ - /* [ x1,..., xn] - [xs1,...,xsn] - */ - pairup(Cases,MoreCases,CasePairs), - common_pattern(CasePairs,CommonPatternPair,DiffVars,Differences), - append(Args,Vs,[First|Rest]), - First-Rest = CommonPatternPair, - % Body = RSymbol(DiffVars,Result) - gensym(Prefix,RSymbol), - append(DiffVars,[Result],RecCallVars), - Body =.. [RSymbol|RecCallVars], - maplist(head_tail,Differences,CHs,CTs), - trie_step(CHs,RSymbol,Prefix,CTs,MoreResults,List,Tail) - ) - ). - -head_tail([H|T],H,T). - -rec_cases([],[],[],_,[],[],[]). -rec_cases([Pattern|Patterns],[MorePattern|MorePatterns],[Result|Results],F/A,Cases,MoreCases,MoreResults) :- - ( functor(Pattern,F,A), Pattern =.. [_|ArgPatterns], append(ArgPatterns,MorePattern,[Case|MoreCase]) -> - Cases = [Case|NCases], - MoreCases = [MoreCase|NMoreCases], - MoreResults = [Result|NMoreResults], - rec_cases(Patterns,MorePatterns,Results,F/A,NCases,NMoreCases,NMoreResults) - ; - rec_cases(Patterns,MorePatterns,Results,F/A,Cases,MoreCases,MoreResults) - ). -% }}} - -%% common_pattern(+terms,-term,-vars,-differences) is det. -common_pattern(Ts,T,Vars,Differences) :- - fold1(gct,Ts,T), - term_variables(T,Vars), - findall(Vars,member(T,Ts),Differences). - -gct(T1,T2,T) :- - gct_(T1,T2,T,[],_). - -gct_(T1,T2,T,Dict0,Dict) :- - ( nonvar(T1), - nonvar(T2), - functor(T1,F1,A1), - functor(T2,F2,A2), - F1 == F2, - A1 == A2 -> - functor(T,F1,A1), - T1 =.. [_|Args1], - T2 =.. [_|Args2], - T =.. [_|Args], - maplist_dcg(gct_,Args1,Args2,Args,Dict0,Dict) - ; - /* T is a variable */ - ( lookup_eq(Dict0,T1+T2,T) -> - /* we already have a variable for this difference */ - Dict = Dict0 - ; - /* T is a fresh variable */ - Dict = [(T1+T2)-T|Dict0] - ) - ). - - -fold1(P,[Head|Tail],Result) :- - fold(Tail,P,Head,Result). - -fold([],_,Acc,Acc). -fold([X|Xs],P,Acc,Res) :- - call(P,X,Acc,NAcc), - fold(Xs,P,NAcc,Res). - -maplist_dcg(P,L1,L2,L) --> - maplist_dcg_(L1,L2,L,P). - -maplist_dcg_([],[],[],_) --> []. -maplist_dcg_([X|Xs],[Y|Ys],[Z|Zs],P) --> - call(P,X,Y,Z), - maplist_dcg_(Xs,Ys,Zs,P). - -%------------------------------------------------------------------------------- -global_list_store_name(F/A,Name) :- - get_target_module(Mod), - atom_concat_list(['$chr_store_global_list_',Mod,'____',F,'___',A],Name). -global_ground_store_name(F/A,Name) :- - get_target_module(Mod), - atom_concat_list(['$chr_store_global_ground_',Mod,'____',F,'___',A],Name). -global_singleton_store_name(F/A,Name) :- - get_target_module(Mod), - atom_concat_list(['$chr_store_global_singleton_',Mod,'____',F,'___',A],Name). - -identifier_store_name(TypeName,Name) :- - get_target_module(Mod), - atom_concat_list(['$chr_identifier_lookup_',Mod,'____',TypeName],Name). - -:- chr_constraint prolog_global_variable/1. -:- chr_option(mode,prolog_global_variable(+)). - -:- chr_constraint prolog_global_variables/1. -:- chr_option(mode,prolog_global_variables(-)). - -prolog_global_variable(Name) \ prolog_global_variable(Name) <=> true. - -prolog_global_variables(List), prolog_global_variable(Name) <=> - List = [Name|Tail], - prolog_global_variables(Tail). -prolog_global_variables(List) <=> List = []. - -%% SWI begin -prolog_global_variables_code(Code) :- - prolog_global_variables(Names), - ( Names == [] -> - Code = [] - ; - maplist(wrap_in_functor('$chr_prolog_global_variable'),Names,NameDeclarations), - Code = [(:- dynamic user:exception/3), - (:- multifile user:exception/3), - (user:exception(undefined_global_variable,Name,retry) :- - ( - '$chr_prolog_global_variable'(Name), - '$chr_initialization' - ) - ) - | - NameDeclarations - ] - ). -%% SWI end -%% SICStus begin -% prolog_global_variables_code([]). -%% SICStus end -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%sbag_member_call(S,L,sysh:mem(S,L)). -sbag_member_call(S,L,'chr sbag_member'(S,L)). -%sbag_member_call(S,L,member(S,L)). -update_mutable_call(A,B,'chr update_mutable'( A, B)). -%update_mutable_call(A,B,setarg(1, B, A)). -create_mutable_call(Value,Mutable,true) :- Mutable = mutable(Value). -% create_mutable_call(Value,Mutable,'chr create_mutable'(Value,Mutable)). - -% get_suspension_field(Constraint,Susp,FieldName,Value,(Get0,Get1)) :- -% get_dynamic_suspension_term_field(FieldName,Constraint,Susp,Field,Get0), -% create_get_mutable(Value,Field,Get1). -% -% update_suspension_field(Constraint,Susp,FieldName,NewValue,(Get,Set)) :- -% get_dynamic_suspension_term_field(FieldName,Constraint,Susp,Field,Get), -% update_mutable_call(NewValue,Field,Set). -% -% get_update_suspension_field(Constraint,Susp,FieldName,Value,NewValue,Get0,Get1,Set) :- -% get_dynamic_suspension_term_field(FieldName,Constraint,Susp,Field,Get0), -% create_get_mutable_ref(Value,Field,Get1), -% update_mutable_call(NewValue,Field,Set). -% -% create_static_suspension_field(Constraint,Susp,FieldName,Value,Create) :- -% get_static_suspension_term_field(FieldName,Constraint,Susp,Field), -% create_mutable_call(Value,Field,Create). -% -% get_static_suspension_field(Constraint,Susp,FieldName,Value,Get) :- -% get_static_suspension_term_field(FieldName,Constraint,Susp,Field), -% create_get_mutable(Value,Field,Get). -% -% get_update_static_suspension_field(Constraint,Susp,SuspTerm,FieldName,Value,NewValue,Get,Set) :- -% get_static_suspension_term_field(FieldName,Constraint,SuspTerm,Field), -% create_get_mutable_ref(Value,Field,Get), -% update_mutable_call(NewValue,Field,Set). - -get_suspension_field(Constraint,Susp,FieldName,Value,Get) :- - get_dynamic_suspension_term_field(FieldName,Constraint,Susp,Value,Get). - -update_suspension_field(Constraint,Susp,FieldName,NewValue,Set) :- - set_dynamic_suspension_term_field(FieldName,Constraint,Susp,NewValue,Set). - -get_update_suspension_field(Constraint,Susp,FieldName,Value,NewValue,true,Get,Set) :- - get_dynamic_suspension_term_field(FieldName,Constraint,Susp,Value,Get), - set_dynamic_suspension_term_field(FieldName,Constraint,Susp,NewValue,Set). - -create_static_suspension_field(Constraint,Susp,FieldName,Value,true) :- - get_static_suspension_term_field(FieldName,Constraint,Susp,Value). - -get_static_suspension_field(Constraint,Susp,FieldName,Value,true) :- - get_static_suspension_term_field(FieldName,Constraint,Susp,Value). - -get_update_static_suspension_field(Constraint,Susp,SuspTerm,FieldName,Value,NewValue,true,Set) :- - get_static_suspension_term_field(FieldName,Constraint,SuspTerm,Value), - set_dynamic_suspension_term_field(FieldName,Constraint,Susp,NewValue,Set). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -enumerate_stores_code(Constraints,[Clause|List]) :- - Head = '$enumerate_constraints'(Constraint), - Clause = ( Head :- Body), - enumerate_store_bodies(Constraints,Constraint,List), - ( List = [] -> - Body = fail - ; - Body = ( nonvar(Constraint) -> - functor(Constraint,Functor,_), - '$enumerate_constraints'(Functor,Constraint) - ; - '$enumerate_constraints'(_,Constraint) - ) - ). - -enumerate_store_bodies([],_,[]). -enumerate_store_bodies([C|Cs],Constraint,L) :- - ( is_stored(C) -> - get_store_type(C,StoreType), - ( enumerate_store_body(StoreType,C,Suspension,SuspensionBody) -> - true - ; - chr_error(internal,'Could not generate enumeration code for constraint ~w.\n',[C]) - ), - get_dynamic_suspension_term_field(arguments,C,Suspension,Arguments,DynamicGoal), - C = F/_, - Constraint0 =.. [F|Arguments], - Head = '$enumerate_constraints'(F,Constraint), - Body = (SuspensionBody, DynamicGoal, Constraint = Constraint0), - L = [(Head :- Body)|T] - ; - L = T - ), - enumerate_store_bodies(Cs,Constraint,T). - -enumerate_store_body(default,C,Susp,Body) :- - global_list_store_name(C,StoreName), - sbag_member_call(Susp,List,Sbag), - make_get_store_goal(StoreName,List,GetStoreGoal), - Body = - ( - GetStoreGoal, % nb_getval(StoreName,List), - Sbag - ). -% get_constraint_index(C,Index), -% get_target_module(Mod), -% get_max_constraint_index(MaxIndex), -% Body1 = -% ( -% 'chr default_store'(GlobalStore), -% get_attr(GlobalStore,Mod,Attr) -% ), -% ( MaxIndex > 1 -> -% NIndex is Index + 1, -% sbag_member_call(Susp,List,Sbag), -% Body2 = -% ( -% arg(NIndex,Attr,List), -% Sbag -% ) -% ; -% sbag_member_call(Susp,Attr,Sbag), -% Body2 = Sbag -% ), -% Body = (Body1,Body2). -enumerate_store_body(multi_inthash([Index|_]),C,Susp,Body) :- - multi_inthash_enumerate_store_body(Index,C,Susp,Body). -enumerate_store_body(multi_hash([Index|_]),C,Susp,Body) :- - multi_hash_enumerate_store_body(Index,C,Susp,Body). -enumerate_store_body(atomic_constants(Index,Constants,Completeness),C,Susp,Body) :- - Completeness == complete, % fail if incomplete - maplist(enumerate_constant_store_body(C,Index,Susps),Constants,Disjuncts), - list2disj(Disjuncts, Disjunction), - Body = ( Disjunction, member(Susp,Susps) ). -enumerate_constant_store_body(C,Index,Susps,Constant,nb_getval(StoreName,Susps)) :- - constants_store_name(C,Index,Constant,StoreName). - -enumerate_store_body(ground_constants(Index,Constants,Completeness),C,Susp,Body) :- - enumerate_store_body(atomic_constants(Index,Constants,Completeness),C,Susp,Body). -enumerate_store_body(global_ground,C,Susp,Body) :- - global_ground_store_name(C,StoreName), - sbag_member_call(Susp,List,Sbag), - make_get_store_goal(StoreName,List,GetStoreGoal), - Body = - ( - GetStoreGoal, % nb_getval(StoreName,List), - Sbag - ). -enumerate_store_body(var_assoc_store(_,_),C,_,Body) :- - Body = fail. -enumerate_store_body(global_singleton,C,Susp,Body) :- - global_singleton_store_name(C,StoreName), - make_get_store_goal(StoreName,Susp,GetStoreGoal), - Body = - ( - GetStoreGoal, % nb_getval(StoreName,Susp), - Susp \== [] - ). -enumerate_store_body(multi_store(STs),C,Susp,Body) :- - ( memberchk(global_ground,STs) -> - enumerate_store_body(global_ground,C,Susp,Body) - ; - once(( - member(ST,STs), - enumerate_store_body(ST,C,Susp,Body) - )) - ). -enumerate_store_body(identifier_store(Index),C,Susp,Body) :- - Body = fail. -enumerate_store_body(type_indexed_identifier_store(Index,IndexType),C,Susp,Body) :- - Body = fail. - -multi_inthash_enumerate_store_body(I,C,Susp,B) :- - multi_hash_store_name(C,I,StoreName), - B = - ( - nb_getval(StoreName,HT), - value_iht(HT,Susp) - ). -multi_hash_enumerate_store_body(I,C,Susp,B) :- - multi_hash_store_name(C,I,StoreName), - make_get_store_goal(StoreName,HT,GetStoreGoal), - B = - ( - GetStoreGoal, % nb_getval(StoreName,HT), - value_ht(HT,Susp) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% BACKGROUND INFORMATION (declared using :- chr_declaration) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- chr_constraint - background_info/1, - background_info/2, - get_bg_info/1, - get_bg_info/2, - get_bg_info_answer/1. - -background_info(X), background_info(Y) <=> - append(X,Y,XY), background_info(XY). -background_info(X) \ get_bg_info(Q) <=> Q=X. -get_bg_info(Q) <=> Q = []. - -background_info(T,I), get_bg_info(A,Q) ==> - copy_term_nat(T,T1), - subsumes_chk(T1,A) - | - copy_term_nat(T-I,A-X), - get_bg_info_answer([X]). -get_bg_info_answer(X), get_bg_info_answer(Y) <=> - append(X,Y,XY), get_bg_info_answer(XY). - -get_bg_info_answer(X) # Id, get_bg_info(A,Q) <=> Q=X pragma passive(Id). -get_bg_info(_,Q) <=> Q=[]. % no info found on this term - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -:- chr_constraint - prev_guard_list/8, - prev_guard_list/6, - simplify_guards/1, - set_all_passive/1. - -:- chr_option(mode,prev_guard_list(+,+,+,+,+,+,+,+)). -:- chr_option(mode,prev_guard_list(+,+,+,+,+,+)). -:- chr_option(type_declaration,prev_guard_list(any,any,any,any,any,list)). -:- chr_option(mode,simplify_guards(+)). -:- chr_option(mode,set_all_passive(+)). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% GUARD SIMPLIFICATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% If the negation of the guards of earlier rules entails (part of) -% the current guard, the current guard can be simplified. We can only -% use earlier rules with a head that matches if the head of the current -% rule does, and which make it impossible for the current rule to match -% if they fire (i.e. they shouldn't be propagation rules and their -% head constraints must be subsets of those of the current rule). -% At this point, we know for sure that the negation of the guard -% of such a rule has to be true (otherwise the earlier rule would have -% fired, because of the refined operational semantics), so we can use -% that information to simplify the guard by replacing all entailed -% conditions by true/0. As a consequence, the never-stored analysis -% (in a further phase) will detect more cases of never-stored constraints. -% -% e.g. c(X),d(Y) <=> X > 0 | ... -% e(X) <=> X < 0 | ... -% c(X) \ d(Y),e(Z) <=> X =< 0, Z >= 0, ... | ... -% \____________/ -% true - -guard_simplification :- - ( chr_pp_flag(guard_simplification,on) -> - precompute_head_matchings, - simplify_guards(1) - ; - true - ). - -% for every rule, we create a prev_guard_list where the last argument -% eventually is a list of the negations of earlier guards -rule(RuleNb,Rule) \ simplify_guards(RuleNb) - <=> - Rule = pragma(rule(Head1,Head2,Guard,_B),ids(IDs1,IDs2),_Pragmas,_Name,RuleNb), - append(Head1,Head2,Heads), - make_head_matchings_explicit_not_negated(Heads,MatchingFreeHeads,Matchings), - tree_set_empty(Done), - multiple_occ_constraints_checked(Done), - apply_guard_wrt_term(Heads,Guard,SubstitutedHeads), - - append(IDs1,IDs2,IDs), - findall(tuple(C,O,RuleNb)-(-RuleNb),(member(ID,IDs),get_occurrence_from_id(C,O,RuleNb,ID)),HeapData), - empty_q(EmptyHeap), - insert_list_q(HeapData,EmptyHeap,Heap), - next_prev_rule(Heap,_,Heap1), - next_prev_rule(Heap1,PrevRuleNb,NHeap), - prev_guard_list(RuleNb,PrevRuleNb,NHeap,MatchingFreeHeads,Guard,[],Matchings,[SubstitutedHeads]), - NextRule is RuleNb+1, - simplify_guards(NextRule). - -next_prev_rule(Heap,RuleNb,NHeap) :- - ( find_min_q(Heap,_-Priority) -> - Priority = (-RuleNb), - normalize_heap(Heap,Priority,NHeap) - ; - RuleNb = 0, - NHeap = Heap - ). - -normalize_heap(Heap,Priority,NHeap) :- - ( find_min_q(Heap,_-Priority) -> - delete_min_q(Heap,Heap1,tuple(C,O,_)-_), - ( O > 1 -> - NO is O -1, - get_occurrence(C,NO,RuleNb,_), - insert_q(Heap1,tuple(C,NO,RuleNb)-(-RuleNb),Heap2) - ; - Heap2 = Heap1 - ), - normalize_heap(Heap2,Priority,NHeap) - ; - NHeap = Heap - ). - -% no more rule -simplify_guards(_) - <=> - true. - -% The negation of the guard of a non-propagation rule is added -% if its kept head constraints are a subset of the kept constraints of -% the rule we're working on, and its removed head constraints (at least one) -% are a subset of the removed constraints. - -rule(PrevRuleNb,PrevRule) \ prev_guard_list(RuleNb,PrevRuleNb,Heap,CurrentHeads,G,GuardList,Matchings,GH) - <=> - PrevRule = pragma(rule(H1,H2,PrevGuard,_B),_Ids,_Pragmas,_Name,_PrevRuleNb), % PrevRuleNb == _PrevRuleNb - H1 \== [], - make_head_matchings_explicit(PrevRuleNb,MatchingFreeHeads,PrevMatchings), - setof(Renaming,chr_translate:head_subset(MatchingFreeHeads,CurrentHeads,Renaming),Renamings) - | - append(H1,H2,Heads), - compute_derived_info(Renamings,PrevMatchings,MatchingFreeHeads,Heads,PrevGuard,Matchings,CurrentHeads,GH,DerivedInfo,GH_New1), - append(GuardList,DerivedInfo,GL1), - normalize_conj_list(GL1,GL), - append(GH_New1,GH,GH1), - normalize_conj_list(GH1,GH_New), - next_prev_rule(Heap,PrevPrevRuleNb,NHeap), - % PrevPrevRuleNb is PrevRuleNb-1, - prev_guard_list(RuleNb,PrevPrevRuleNb,NHeap,CurrentHeads,G,GL,Matchings,GH_New). - -% if this isn't the case, we skip this one and try the next rule -prev_guard_list(RuleNb,N,Heap,H,G,GuardList,M,GH) - <=> - ( N > 0 -> - next_prev_rule(Heap,N1,NHeap), - % N1 is N-1, - prev_guard_list(RuleNb,N1,NHeap,H,G,GuardList,M,GH) - ; - prev_guard_list(RuleNb,H,G,GuardList,M,GH) - ). - -prev_guard_list(RuleNb,H,G,GuardList,M,GH) - <=> - GH \== [] - | - head_types_modes_condition(GH,H,TypeInfo), - conj2list(TypeInfo,TI), - term_variables(H,HeadVars), - append([chr_pp_headvariables(HeadVars)|TI],GuardList,Info), - normalize_conj_list(Info,InfoL), - append(H,InfoL,RelevantTerms), - add_background_info([G|RelevantTerms],BGInfo), - append(InfoL,BGInfo,AllInfo_), - normalize_conj_list(AllInfo_,AllInfo), - prev_guard_list(RuleNb,H,G,AllInfo,M,[]). - -head_types_modes_condition([],H,true). -head_types_modes_condition([GH|GHs],H,(TI1, TI2)) :- - types_modes_condition(H,GH,TI1), - head_types_modes_condition(GHs,H,TI2). - -add_background_info(Term,Info) :- - get_bg_info(GeneralInfo), - add_background_info2(Term,TermInfo), - append(GeneralInfo,TermInfo,Info). - -add_background_info2(X,[]) :- var(X), !. -add_background_info2([],[]) :- !. -add_background_info2([X|Xs],Info) :- !, - add_background_info2(X,Info1), - add_background_info2(Xs,Infos), - append(Info1,Infos,Info). - -add_background_info2(X,Info) :- - (functor(X,_,A), A>0 -> - X =.. [_|XArgs], - add_background_info2(XArgs,XArgInfo) - ; - XArgInfo = [] - ), - get_bg_info(X,XInfo), - append(XInfo,XArgInfo,Info). - -%% -% when all earlier guards are added or skipped, we simplify the guard. -% if it's different from the original one, we change the rule - -prev_guard_list(RuleNb,H,G,GuardList,M,[]), rule(RuleNb,Rule) - <=> - Rule = pragma(rule(Head1,Head2,G,B),Ids,Pragmas,Name,RuleNb), - G \== true, % let's not try to simplify this ;) - append(M,GuardList,Info), - (% if guard + context is a contradiction, it should be simplified to "fail" - conj2list(G,GL), append(Info,GL,GuardWithContext), - guard_entailment:entails_guard(GuardWithContext,fail) -> - SimpleGuard = fail - ; - % otherwise we try to remove redundant conjuncts - simplify_guard(G,B,Info,SimpleGuard,NB) - ), - G \== SimpleGuard % only do this if we can change the guard - | - rule(RuleNb,pragma(rule(Head1,Head2,SimpleGuard,NB),Ids,Pragmas,Name,RuleNb)), - prev_guard_list(RuleNb,H,SimpleGuard,GuardList,M,[]). - -%% normalize_conj_list(+List,-NormalList) is det. -% -% Removes =true= elements and flattens out conjunctions. - -normalize_conj_list(List,NormalList) :- - list2conj(List,Conj), - conj2list(Conj,NormalList). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% AUXILIARY PREDICATES (GUARD SIMPLIFICATION) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -compute_derived_info([],_PrevMatchings,_MatchingFreeHeads,_Heads,_PrevGuard,_Matchings,_H,_GH,[],[]). -compute_derived_info([Renaming1|RestRenamings],PrevMatchings,PrevMatchingFreeHeads,PrevHeads,PrevGuard,Matchings,H,GH,[DerivedInfo1|DerivedInfo2],[GH3|GH_New2]) :- - copy_term(PrevMatchings-PrevGuard,FreshMatchings), - variable_replacement(PrevMatchings-PrevGuard,FreshMatchings,ExtraRenaming), - append(Renaming1,ExtraRenaming,Renaming2), - list2conj(PrevMatchings,Match), - negate_b(Match,HeadsDontMatch), - make_head_matchings_explicit_not_negated2(PrevHeads,PrevMatchingFreeHeads,HeadsMatch), - list2conj(HeadsMatch,HeadsMatchBut), - term_variables(Renaming2,RenVars), - term_variables(PrevMatchings-PrevGuard-HeadsMatch,MGVars), - new_vars(MGVars,RenVars,ExtraRenaming2), - append(Renaming2,ExtraRenaming2,Renaming), - ( PrevGuard == true -> % true can't fail - Info_ = HeadsDontMatch - ; - negate_b(PrevGuard,TheGuardFailed), - Info_ = (HeadsDontMatch ; (HeadsMatchBut, TheGuardFailed)) - ), - copy_with_variable_replacement(Info_,DerivedInfo1,Renaming), - copy_with_variable_replacement(PrevGuard,RenamedG2,Renaming), - copy_with_variable_replacement(PrevMatchings,RenamedMatchings_,Renaming), - list2conj(RenamedMatchings_,RenamedMatchings), - apply_guard_wrt_term(H,RenamedG2,GH2), - apply_guard_wrt_term(GH2,RenamedMatchings,GH3), - compute_derived_info(RestRenamings,PrevMatchings,PrevMatchingFreeHeads,PrevHeads,PrevGuard,Matchings,H,GH,DerivedInfo2,GH_New2). - -simplify_guard(G,B,Info,SG,NB) :- - conj2list(G,LG), - % writeq(guard_entailment:simplify_guards(Info,B,LG,SGL,NB)),nl, - guard_entailment:simplify_guards(Info,B,LG,SGL,NB), - list2conj(SGL,SG). - - -new_vars([],_,[]). -new_vars([A|As],RV,ER) :- - ( memberchk_eq(A,RV) -> - new_vars(As,RV,ER) - ; - ER = [A-NewA,NewA-A|ER2], - new_vars(As,RV,ER2) - ). - -%% head_subset(+Subset,+MultiSet,-Renaming) is nondet. -% -% check if a list of constraints is a subset of another list of constraints -% (multiset-subset), meanwhile computing a variable renaming to convert -% one into the other. -head_subset(H,Head,Renaming) :- - head_subset(H,Head,Renaming,[],_). - -head_subset([],Remainder,Renaming,Renaming,Remainder). -head_subset([X|Xs],MultiSet,Renaming,Acc,Remainder) :- - head_member(MultiSet,X,NAcc,Acc,Remainder1), - head_subset(Xs,Remainder1,Renaming,NAcc,Remainder). - -% check if A is in the list, remove it from Headleft -head_member([X|Xs],A,Renaming,Acc,Remainder) :- - ( variable_replacement(A,X,Acc,Renaming), - Remainder = Xs - ; - Remainder = [X|RRemainder], - head_member(Xs,A,Renaming,Acc,RRemainder) - ). -%-------------------------------------------------------------------------------% -% memoing code to speed up repeated computation - -:- chr_constraint precompute_head_matchings/0. - -rule(RuleNb,PragmaRule), precompute_head_matchings ==> - PragmaRule = pragma(rule(H1,H2,_G,_B),_Ids,_Pragmas,_Name,_PrevRuleNb), - append(H1,H2,Heads), - make_head_matchings_explicit_(Heads,MatchingFreeHeads,Matchings), - copy_term_nat(MatchingFreeHeads-Matchings,A-B), - make_head_matchings_explicit_memo_table(RuleNb,A,B). - -precompute_head_matchings <=> true. - -:- chr_constraint make_head_matchings_explicit_memo_table/3. -:- chr_constraint make_head_matchings_explicit_memo_lookup/3. - -:- chr_option(mode,make_head_matchings_explicit_memo_table(+,?,?)). -:- chr_option(mode,make_head_matchings_explicit_memo_lookup(+,?,?)). - -make_head_matchings_explicit_memo_table(RuleNb,NHeads,Matchings) \ - make_head_matchings_explicit_memo_lookup(RuleNb,Q1,Q2) - <=> - Q1 = NHeads, - Q2 = Matchings. -make_head_matchings_explicit_memo_lookup(_,_,_) <=> fail. - -make_head_matchings_explicit(RuleNb,MatchingFreeHeads,Matchings) :- - make_head_matchings_explicit_memo_lookup(RuleNb,A,B), - copy_term_nat(A-B,MatchingFreeHeads-Matchings). -%-------------------------------------------------------------------------------% - -make_head_matchings_explicit_(Heads,MatchingFreeHeads,Matchings) :- - extract_arguments(Heads,Arguments), - make_matchings_explicit(Arguments,FreeVariables,[],[],_,Matchings), - substitute_arguments(Heads,FreeVariables,MatchingFreeHeads). - -make_head_matchings_explicit_not_negated(Heads,MatchingFreeHeads,Matchings) :- - extract_arguments(Heads,Arguments), - make_matchings_explicit_not_negated(Arguments,FreshVariables,Matchings), - substitute_arguments(Heads,FreshVariables,MatchingFreeHeads). - -make_head_matchings_explicit_not_negated2(Heads,MatchingFreeHeads,Matchings) :- - extract_arguments(Heads,Arguments1), - extract_arguments(MatchingFreeHeads,Arguments2), - make_matchings_explicit_not_negated(Arguments1,Arguments2,Matchings). - -%% extract_arguments(+ListOfConstraints,-ListOfVariables) is det. -% -% Returns list of arguments of given list of constraints. -extract_arguments([],[]). -extract_arguments([Constraint|Constraints],AllArguments) :- - Constraint =.. [_|Arguments], - append(Arguments,RestArguments,AllArguments), - extract_arguments(Constraints,RestArguments). - -%% substitute_arguments(+InListOfConstraints,ListOfVariables,-OutListOfConstraints) is det. -% -% Substitutes arguments of constraints with those in the given list. - -substitute_arguments([],[],[]). -substitute_arguments([Constraint|Constraints],Variables,[NConstraint|NConstraints]) :- - functor(Constraint,F,N), - split_at(N,Variables,Arguments,RestVariables), - NConstraint =.. [F|Arguments], - substitute_arguments(Constraints,RestVariables,NConstraints). - -make_matchings_explicit([],[],_,MC,MC,[]). -make_matchings_explicit([Arg|Args],[NewVar|NewVars],VarAcc,MatchingCondition,MatchingConditionO,Matchings) :- - ( var(Arg) -> - ( memberchk_eq(Arg,VarAcc) -> - list2disj(MatchingCondition,MatchingCondition_disj), - Matchings = [(MatchingCondition_disj ; NewVar == Arg)|RestMatchings], % or only = ?? - NVarAcc = VarAcc - ; - Matchings = RestMatchings, - NewVar = Arg, - NVarAcc = [Arg|VarAcc] - ), - MatchingCondition2 = MatchingCondition - ; - functor(Arg,F,A), - Arg =.. [F|RecArgs], - make_matchings_explicit(RecArgs,RecVars,VarAcc,MatchingCondition,MatchingCondition_,RecMatchings), - FlatArg =.. [F|RecVars], - ( RecMatchings == [] -> - Matchings = [functor(NewVar,F,A)|RestMatchings] - ; - list2conj(RecMatchings,ArgM_conj), - list2disj(MatchingCondition,MatchingCondition_disj), - ArgM_ = (NewVar \= FlatArg ; MatchingCondition_disj ; ArgM_conj), - Matchings = [ functor(NewVar,F,A) , ArgM_|RestMatchings] - ), - MatchingCondition2 = [ NewVar \= FlatArg |MatchingCondition_], - term_variables(Args,ArgVars), - append(ArgVars,VarAcc,NVarAcc) - ), - make_matchings_explicit(Args,NewVars,NVarAcc,MatchingCondition2,MatchingConditionO,RestMatchings). - - -%% make_matchings_explicit_not_negated(+ListOfTerms,-ListOfVariables,-ListOfMatchings) is det. -% -% Returns list of new variables and list of pairwise unifications between given list and variables. - -make_matchings_explicit_not_negated([],[],[]). -make_matchings_explicit_not_negated([X|Xs],[Var|Vars],Matchings) :- - Matchings = [Var = X|RMatchings], - make_matchings_explicit_not_negated(Xs,Vars,RMatchings). - -%% apply_guard_wrt_term(+ListOfConstraints,+Goal,-NewListOfConstraints) is det. -% -% (Partially) applies substitutions of =Goal= to given list. - -apply_guard_wrt_term([],_Guard,[]). -apply_guard_wrt_term([Term|RH],Guard,[NTerm|RGH]) :- - ( var(Term) -> - apply_guard_wrt_variable(Guard,Term,NTerm) - ; - Term =.. [F|HArgs], - apply_guard_wrt_term(HArgs,Guard,NewHArgs), - NTerm =.. [F|NewHArgs] - ), - apply_guard_wrt_term(RH,Guard,RGH). - -%% apply_guard_wrt_variable(+Goal,+Variable,-NVariable) is det. -% -% (Partially) applies goal =Guard= wrt variable. - -apply_guard_wrt_variable((Guard1,Guard2),Variable,NVariable) :- !, - apply_guard_wrt_variable(Guard1,Variable,NVariable1), - apply_guard_wrt_variable(Guard2,NVariable1,NVariable). -apply_guard_wrt_variable(Guard,Variable,NVariable) :- - ( Guard = (X = Y), Variable == X -> - NVariable = Y - ; Guard = functor(AVariable,Functor,Arity), Variable == AVariable, ground(Functor), ground(Arity) -> - functor(NVariable,Functor,Arity) - ; - NVariable = Variable - ). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% ALWAYS FAILING GUARDS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -prev_guard_list(RuleNb,H,G,GuardList,M,[]),rule(RuleNb,Rule) - ==> - chr_pp_flag(check_impossible_rules,on), - Rule = pragma(rule(_,_,G,_),_Ids,_Pragmas,_Name,RuleNb), - conj2list(G,GL), - append(M,GuardList,Info), - append(Info,GL,GuardWithContext), - guard_entailment:entails_guard(GuardWithContext,fail) - | - chr_warning(weird_program,'Heads will never match or guard will always fail in ~@.\n\tThis rule will never fire!\n',[format_rule(Rule)]), - set_all_passive(RuleNb). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% HEAD SIMPLIFICATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% now we check the head matchings (guard may have been simplified meanwhile) -prev_guard_list(RuleNb,H,G,GuardList,M,[]) \ rule(RuleNb,Rule) - <=> - Rule = pragma(rule(Head1,Head2,G,B),Ids,Pragmas,Name,RuleNb), - simplify_heads(M,GuardList,G,B,NewM,NewB), - NewM \== [], - extract_arguments(Head1,VH1), - extract_arguments(Head2,VH2), - extract_arguments(H,VH), - replace_some_heads(VH1,VH2,VH,NewM,H1,H2,G,B,NewB_), - substitute_arguments(Head1,H1,NewH1), - substitute_arguments(Head2,H2,NewH2), - append(NewB,NewB_,NewBody), - list2conj(NewBody,BodyMatchings), - NewRule = pragma(rule(NewH1,NewH2,G,(BodyMatchings,B)),Ids,Pragmas,Name,RuleNb), - (Head1 \== NewH1 ; Head2 \== NewH2 ) - | - rule(RuleNb,NewRule). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% AUXILIARY PREDICATES (HEAD SIMPLIFICATION) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -replace_some_heads(H1,H2,NH,[],H1,H2,G,Body,[]) :- !. -replace_some_heads([],[H2|RH2],[NH|RNH],[M|RM],[],[H2_|RH2_],G,Body,NewB) :- !, - ( NH == M -> - H2_ = M, - replace_some_heads([],RH2,RNH,RM,[],RH2_,G,Body,NewB) - ; - (M = functor(X,F,A), NH == X -> - length(A_args,A), - (var(H2) -> - NewB1 = [], - H2_ =.. [F|A_args] - ; - H2 =.. [F|OrigArgs], - use_same_args(OrigArgs,A_args,A_args_,G,Body,NewB1), - H2_ =.. [F|A_args_] - ), - replace_some_heads([],RH2,RNH,RM,[],RH2_,G,Body,NewB2), - append(NewB1,NewB2,NewB) - ; - H2_ = H2, - replace_some_heads([],RH2,RNH,[M|RM],[],RH2_,G,Body,NewB) - ) - ). - -replace_some_heads([H1|RH1],H2,[NH|RNH],[M|RM],[H1_|RH1_],H2_,G,Body,NewB) :- !, - ( NH == M -> - H1_ = M, - replace_some_heads(RH1,H2,RNH,RM,RH1_,H2_,G,Body,NewB) - ; - (M = functor(X,F,A), NH == X -> - length(A_args,A), - (var(H1) -> - NewB1 = [], - H1_ =.. [F|A_args] - ; - H1 =.. [F|OrigArgs], - use_same_args(OrigArgs,A_args,A_args_,G,Body,NewB1), - H1_ =.. [F|A_args_] - ), - replace_some_heads(RH1,H2,RNH,RM,RH1_,H2_,G,Body,NewB2), - append(NewB1,NewB2,NewB) - ; - H1_ = H1, - replace_some_heads(RH1,H2,RNH,[M|RM],RH1_,H2_,G,Body,NewB) - ) - ). - -use_same_args([],[],[],_,_,[]). -use_same_args([OA|ROA],[NA|RNA],[Out|ROut],G,Body,NewB) :- - var(OA),!, - Out = OA, - use_same_args(ROA,RNA,ROut,G,Body,NewB). -use_same_args([OA|ROA],[NA|RNA],[Out|ROut],G,Body,NewB) :- - nonvar(OA),!, - ( common_variables(OA,Body) -> - NewB = [NA = OA|NextB] - ; - NewB = NextB - ), - Out = NA, - use_same_args(ROA,RNA,ROut,G,Body,NextB). - - -simplify_heads([],_GuardList,_G,_Body,[],[]). -simplify_heads([M|RM],GuardList,G,Body,NewM,NewB) :- - M = (A = B), - ( (nonvar(B) ; common_variables(B,RM-GuardList)), - guard_entailment:entails_guard(GuardList,(A=B)) -> - ( common_variables(B,G-RM-GuardList) -> - NewB = NextB, - NewM = NextM - ; - ( common_variables(B,Body) -> - NewB = [A = B|NextB] - ; - NewB = NextB - ), - NewM = [A|NextM] - ) - ; - ( nonvar(B), functor(B,BFu,BAr), - guard_entailment:entails_guard([functor(A,BFu,BAr)|GuardList],(A=B)) -> - NewB = NextB, - ( common_variables(B,G-RM-GuardList) -> - NewM = NextM - ; - NewM = [functor(A,BFu,BAr)|NextM] - ) - ; - NewM = NextM, - NewB = NextB - ) - ), - simplify_heads(RM,[M|GuardList],G,Body,NextM,NextB). - -common_variables(B,G) :- - term_variables(B,BVars), - term_variables(G,GVars), - intersect_eq(BVars,GVars,L), - L \== []. - - -set_all_passive(RuleNb), occurrence(_,_,RuleNb,ID,_) ==> passive(RuleNb,ID). -set_all_passive(_) <=> true. - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% OCCURRENCE SUBSUMPTION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- chr_constraint - first_occ_in_rule/4, - next_occ_in_rule/6. - -:- chr_option(mode,first_occ_in_rule(+,+,+,+)). -:- chr_option(mode,next_occ_in_rule(+,+,+,+,+,+)). - -:- chr_constraint multiple_occ_constraints_checked/1. -:- chr_option(mode,multiple_occ_constraints_checked(+)). - -prev_guard_list(RuleNb,H,G,GuardList,M,[]), - occurrence(C,O,RuleNb,ID,_), - occurrence(C,O2,RuleNb,ID2,_), - rule(RuleNb,Rule) - \ - multiple_occ_constraints_checked(Done) - <=> - O < O2, - chr_pp_flag(occurrence_subsumption,on), - Rule = pragma(rule(H1,H2,_G,_B),_Ids,_Pragmas,_Name,_RuleNb), % RuleNb == _RuleNb - H1 \== [], - \+ tree_set_memberchk(C,Done) - | - first_occ_in_rule(RuleNb,C,O,ID), - tree_set_add(Done,C,NDone), - multiple_occ_constraints_checked(NDone). - -% Find first occurrence of constraint =C= in rule =RuleNb= -occurrence(C,O,RuleNb,ID,_) \ first_occ_in_rule(RuleNb,C,O2,_) - <=> - O < O2 - | - first_occ_in_rule(RuleNb,C,O,ID). - -first_occ_in_rule(RuleNb,C,O,ID_o1) - <=> - C = F/A, - functor(FreshHead,F,A), - next_occ_in_rule(RuleNb,C,O,ID_o1,[],FreshHead). - -% Skip passive occurrences. -passive(RuleNb,ID_o2), occurrence(C,O2,RuleNb,ID_o2,_) \ next_occ_in_rule(RuleNb,C,O,ID_o1,Cond,FH) - <=> - O2 is O+1 - | - next_occ_in_rule(RuleNb,C,O2,ID_o1,NewCond,FH). - -prev_guard_list(RuleNb,H,G,GuardList,M,[]), occurrence(C,O2,RuleNb,ID_o2,_), rule(RuleNb,Rule) \ next_occ_in_rule(RuleNb,C,O,ID_o1,Cond,FH) - <=> - O2 is O+1, - Rule = pragma(rule(H1,H2,G,B),ids(ID1,ID2),_Pragmas,_Name,RuleNb) - | - append(H1,H2,Heads), - add_failing_occ(Rule,Heads,H,ID_o1,ExtraCond,FH,M,C,Repl), - ( ExtraCond == [chr_pp_void_info] -> - next_occ_in_rule(RuleNb,C,O2,ID_o2,Cond,FH) - ; - append(ExtraCond,Cond,NewCond), - add_failing_occ(Rule,Heads,H,ID_o2,CheckCond,FH,M,C,Repl2), - copy_term(GuardList,FGuardList), - variable_replacement(GuardList,FGuardList,GLRepl), - copy_with_variable_replacement(GuardList,GuardList2,Repl), - copy_with_variable_replacement(GuardList,GuardList3_,Repl2), - copy_with_variable_replacement(GuardList3_,GuardList3,GLRepl), - append(NewCond,GuardList2,BigCond), - append(BigCond,GuardList3,BigCond2), - copy_with_variable_replacement(M,M2,Repl), - copy_with_variable_replacement(M,M3,Repl2), - append(M3,BigCond2,BigCond3), - append([chr_pp_active_constraint(FH)|M2],BigCond3,Info), - list2conj(CheckCond,OccSubsum), - copy_term((NewCond,BigCond2,Info,OccSubsum,FH),(NewCond2,BigCond2_,Info2,OccSubsum2,FH2)), - ( OccSubsum \= chr_pp_void_info -> - ( guard_entailment:entails_guard(Info2,OccSubsum2) -> - passive(RuleNb,ID_o2) - ; - true - ) - ; - true - ),!, - next_occ_in_rule(RuleNb,C,O2,ID_o2,NewCond,FH) - ). - - -next_occ_in_rule(RuleNb,C,O,ID,Cond,Args) - <=> - true. - -prev_guard_list(RuleNb,H,G,GuardList,M,[]), multiple_occ_constraints_checked(Done) - <=> - true. - -add_failing_occ(Rule,Heads,NH,ID_o1,FailCond,FH,M,C,Repl) :- - Rule = pragma(rule(H1,H2,G,B),ids(ID1,ID2),_Pragmas,_Name,RuleNb), - append(ID2,ID1,IDs), - missing_partner_cond(Heads,NH,IDs,ID_o1,MPCond,H,C), - copy_term((H,Heads,NH),(FH2,FHeads,NH2)), - variable_replacement((H,Heads,NH),(FH2,FHeads,NH2),Repl), - copy_with_variable_replacement(G,FG,Repl), - extract_explicit_matchings(FG,FG2), - negate_b(FG2,NotFG), - copy_with_variable_replacement(MPCond,FMPCond,Repl), - ( subsumes(FH,FH2) -> - FailCond = [(NotFG;FMPCond)] - ; - % in this case, not much can be done - % e.g. c(f(...)), c(g(...)) <=> ... - FailCond = [chr_pp_void_info] - ). - -missing_partner_cond([],[],[],ID_o1,fail,H2,C). -missing_partner_cond([H|Hs],[H2|H2s],[ID_o1|IDs],ID_o1,Cond,H,C) :- !, - missing_partner_cond(Hs,H2s,IDs,ID_o1,Cond,H,C). -missing_partner_cond([H|Hs],[NH|NHs],[ID|IDs],ID_o1,Cond,H2,F/A) :- - Cond = (chr_pp_not_in_store(H);Cond1), - missing_partner_cond(Hs,NHs,IDs,ID_o1,Cond1,H2,F/A). - -extract_explicit_matchings((A,B),D) :- !, - ( extract_explicit_matchings(A) -> - extract_explicit_matchings(B,D) - ; - D = (A,E), - extract_explicit_matchings(B,E) - ). -extract_explicit_matchings(A,D) :- !, - ( extract_explicit_matchings(A) -> - D = true - ; - D = A - ). - -extract_explicit_matchings(A=B) :- - var(A), var(B), !, A=B. -extract_explicit_matchings(A==B) :- - var(A), var(B), !, A=B. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% TYPE INFORMATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- chr_constraint - type_definition/2, - type_alias/2, - constraint_type/2, - get_type_definition/2, - get_constraint_type/2. - - -:- chr_option(mode,type_definition(?,?)). -:- chr_option(mode,get_type_definition(?,?)). -:- chr_option(mode,type_alias(?,?)). -:- chr_option(mode,constraint_type(+,+)). -:- chr_option(mode,get_constraint_type(+,-)). - -assert_constraint_type(Constraint,ArgTypes) :- - ( ground(ArgTypes) -> - constraint_type(Constraint,ArgTypes) - ; - chr_error(type_error,'Declared argument types "~w" for constraint "~w" must be ground!\n',[ArgTypes,Constraint]) - ). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% Consistency checks of type aliases - -type_alias(T1,T2) <=> - var(T1) - | - chr_error(type_error,'Variable alias definition: "~w".\n',[(:- chr_type T1 == T2)]). - -type_alias(T1,T2) <=> - var(T2) - | - chr_error(type_error,'Variable alias definition: "~w".\n',[(:- chr_type T1 == T2)]). - -type_alias(T,T2) <=> - functor(T,F,A), - functor(T2,F,A), - copy_term((T,T2),(X,Y)), subsumes(X,Y) - | - chr_error(type_error,'Cyclic alias definition: "~w".\n',[(T == T2)]). - -type_alias(T1,A1), type_alias(T2,A2) <=> - functor(T1,F,A), - functor(T2,F,A), - \+ (T1\=T2) - | - copy_term_nat(T1,T1_), - copy_term_nat(T2,T2_), - T1_ = T2_, - chr_error(type_error, - 'Ambiguous type aliases: you have defined \n\t`~w\'\n\t`~w\'\n\tresulting in two definitions for "~w".\n',[T1==A1,T2==A2,T1_]). - -type_alias(T,B) \ type_alias(X,T2) <=> - functor(T,F,A), - functor(T2,F,A), - copy_term_nat((X,T2,T,B),(X2,T3,T1,D1)), - subsumes(T1,T3) - | - % chr_info(type_information,'Inferring `~w\' from `~w\' and `~w\'.\n',[X2==D1,X==T2,T==B]), - type_alias(X2,D1). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% Consistency checks of type definitions - -type_definition(T1,_), type_definition(T2,_) - <=> - functor(T1,F,A), functor(T2,F,A) - | - chr_error(type_error,'Multiple definitions for type: ~w/~w.\n',[F,A]). - -type_definition(T1,_), type_alias(T2,_) - <=> - functor(T1,F,A), functor(T2,F,A) - | - chr_error(type_error,'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w.\n',[F,A]). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -%% get_type_definition(+Type,-Definition) is semidet. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -get_type_definition(T,Def) - <=> - \+ ground(T) - | - chr_error(type_error,'Non-ground type in constraint definition: "~w".\n',[T]). - -type_alias(T,D) \ get_type_definition(T2,Def) - <=> - nonvar(T),nonvar(T2),functor(T,F,A),functor(T2,F,A), - copy_term_nat((T,D),(T1,D1)),T1=T2 - | - ( get_type_definition(D1,Def) -> - true - ; - chr_error(type_error,'Could not find type definition for "~w" (accessed via alias "~w").\n',[D1,T1]), fail - ). - -type_definition(T,D) \ get_type_definition(T2,Def) - <=> - nonvar(T),nonvar(T2),functor(T,F,A),functor(T2,F,A), - copy_term_nat((T,D),(T1,D1)),T1=T2 - | - Def = D1. - -get_type_definition(Type,Def) - <=> - atomic_builtin_type(Type,_,_) - | - Def = [Type]. - -get_type_definition(Type,Def) - <=> - compound_builtin_type(Type,_,_,_) - | - Def = [Type]. - -get_type_definition(X,Y) <=> fail. - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -%% get_type_definition_det(+Type,-Definition) is det. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -get_type_definition_det(Type,Definition) :- - ( get_type_definition(Type,Definition) -> - true - ; - chr_error(type,'Could not find type definition for type `~w\'.\n',[Type]) - ). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% get_constraint_type(+ConstraintSymbol,-Types) is semidet. -% -% Return argument types of =ConstraintSymbol=, but fails if none where -% declared. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -constraint_type(C,T) \ get_constraint_type(C,Type) <=> Type = T. -get_constraint_type(_,_) <=> fail. - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% get_constraint_type_det(+ConstraintSymbol,-Types) is det. -% -% Like =get_constraint_type/2=, but returns list of =any= types when -% no types are declared. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -get_constraint_type_det(ConstraintSymbol,Types) :- - ( get_constraint_type(ConstraintSymbol,Types) -> - true - ; - ConstraintSymbol = _ / N, - replicate(N,any,Types) - ). -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% unalias_type(+Alias,-Type) is det. -% -% Follows alias chain until base type is reached. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -:- chr_constraint unalias_type/2. - -unalias_var @ -unalias_type(Alias,BaseType) - <=> - var(Alias) - | - BaseType = Alias. - -unalias_alias @ -type_alias(AliasProtoType,ProtoType) \ unalias_type(Alias,BaseType) - <=> - nonvar(AliasProtoType), - nonvar(Alias), - functor(AliasProtoType,F,A), - functor(Alias,F,A), - copy_term_nat((AliasProtoType,ProtoType),(AliasInstance,Type)), - Alias = AliasInstance - | - unalias_type(Type,BaseType). - -unalias_type_definition @ -type_definition(ProtoType,Definition) \ unalias_type(Alias,BaseType) - <=> - nonvar(ProtoType), - nonvar(Alias), - functor(ProtoType,F,A), - functor(Alias,F,A) - | - BaseType = Alias. - -unalias_atomic_builtin @ -unalias_type(Alias,BaseType) - <=> - atomic_builtin_type(Alias,_,_) - | - BaseType = Alias. - -unalias_compound_builtin @ -unalias_type(Alias,BaseType) - <=> - compound_builtin_type(Alias,_,_,_) - | - BaseType = Alias. - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% types_modes_condition(+Heads,+UnrollHeads,-Condition) is det. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -:- chr_constraint types_modes_condition/3. -:- chr_option(mode,types_modes_condition(+,+,?)). -:- chr_option(type_declaration,types_modes_condition(list,list,goal)). - -types_modes_condition([],[],T) <=> T=true. - -constraint_mode(F/A,Modes) \ types_modes_condition([Head|Heads],[UnrollHead|UnrollHeads],Condition) - <=> - functor(Head,F,A) - | - Head =.. [_|Args], - Condition = (ModesCondition, TypesCondition, RestCondition), - modes_condition(Modes,Args,ModesCondition), - get_constraint_type_det(F/A,Types), - UnrollHead =.. [_|RealArgs], - types_condition(Types,Args,RealArgs,Modes,TypesCondition), - types_modes_condition(Heads,UnrollHeads,RestCondition). - -types_modes_condition([Head|_],_,_) - <=> - functor(Head,F,A), - chr_error(internal,'Mode information missing for ~w.\n',[F/A]). - - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% modes_condition(+Modes,+Args,-Condition) is det. -% -% Return =Condition= on =Args= that checks =Modes=. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -modes_condition([],[],true). -modes_condition([Mode|Modes],[Arg|Args],Condition) :- - ( Mode == (+) -> - Condition = ( ground(Arg) , RCondition ) - ; Mode == (-) -> - Condition = ( var(Arg) , RCondition ) - ; - Condition = RCondition - ), - modes_condition(Modes,Args,RCondition). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% types_condition(+Types,+Args,+UnrollArgs,+Modes,-Condition) is det. -% -% Return =Condition= on =Args= that checks =Types= given =Modes=. -% =UnrollArgs= controls the depth of type definition unrolling. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -types_condition([],[],[],[],true). -types_condition([Type|Types],[Arg|Args],[UnrollArg|UnrollArgs],[Mode|Modes],(DisjTypeConditionList,RCondition)) :- - ( Mode == (-) -> - TypeConditionList = [true] % TypeConditionList = [var(Arg)] already encoded in modes_condition - ; - get_type_definition_det(Type,Def), - type_condition(Def,Arg,UnrollArg,Mode,TypeConditionList1), - ( Mode == (+) -> - TypeConditionList = TypeConditionList1 - ; - TypeConditionList = [(\+ ground(Arg))|TypeConditionList1] - ) - ), - list2disj(TypeConditionList,DisjTypeConditionList), - types_condition(Types,Args,UnrollArgs,Modes,RCondition). - -type_condition([],_,_,_,[]). -type_condition([DefCase|DefCases],Arg,UnrollArg,Mode,[Condition|Conditions]) :- - ( var(DefCase) -> - chr_error(type,'Unexpected variable type in type definition!\n',[]) % Condition = true - ; atomic_builtin_type(DefCase,Arg,Condition) -> - true - ; compound_builtin_type(DefCase,Arg,Condition,_) -> - true - ; - type_def_case_condition(DefCase,Arg,UnrollArg,Mode,Condition) - ), - type_condition(DefCases,Arg,UnrollArg,Mode,Conditions). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -:- chr_type atomic_builtin_type ---> any - ; number - ; float - ; int - ; natural - ; dense_int - ; chr_identifier - ; chr_identifier(any) - ; /* all possible values are given */ - chr_enum(list(any)) - ; /* all possible values appear in rule heads; - to distinguish between multiple chr_constants - we have a key*/ - chr_constants(any) - ; /* all relevant values appear in rule heads; - for other values a handler is provided */ - chr_constants(any,any). -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% - -atomic_builtin_type(any,_Arg,true). -atomic_builtin_type(dense_int,Arg,(integer(Arg),Arg>=0)). -atomic_builtin_type(int,Arg,integer(Arg)). -atomic_builtin_type(number,Arg,number(Arg)). -atomic_builtin_type(float,Arg,float(Arg)). -atomic_builtin_type(natural,Arg,(integer(Arg),Arg>=0)). -atomic_builtin_type(chr_identifier,_Arg,true). - -compound_builtin_type(chr_constants(_),_Arg,true,true). -compound_builtin_type(chr_constants(_,_),_Arg,true,true). -compound_builtin_type(chr_identifier(_),_Arg,true,true). -compound_builtin_type(chr_enum(Constants),Arg,(ground(Arg), memberchk(Arg,Constants)), - once(( member(Constant,Constants), - unifiable(Arg,Constant,_) - ) - ) - ). - -is_chr_constants_type(chr_constants(Key),Key,no). -is_chr_constants_type(chr_constants(Key,ErrorHandler),Key,yes(ErrorHandler)). - -type_def_case_condition(DefCase,Arg,UnrollArg,Mode,Condition) :- - ( nonvar(DefCase) -> - functor(DefCase,F,A), - ( A == 0 -> - Condition = (Arg = DefCase) - ; var(UnrollArg) -> - Condition = functor(Arg,F,A) - ; functor(UnrollArg,F,A) -> - Condition = (functor(Arg,F,A),Arg=Template,ArgsCondition), - DefCase =.. [_|ArgTypes], - UnrollArg =.. [_|UnrollArgs], - functor(Template,F,A), - Template =.. [_|TemplateArgs], - replicate(A,Mode,ArgModes), - types_condition(ArgTypes,TemplateArgs,UnrollArgs,ArgModes,ArgsCondition) - ; - Condition = functor(Arg,F,A) - ) - ; - chr_error(internal,'Illegal type definition (must be nonvar).\n',[]) - ). - - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% STATIC TYPE CHECKING -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% Checks head constraints and CHR constraint calls in bodies. -% -% TODO: -% - type clashes involving built-in types -% - Prolog built-ins in guard and body -% - indicate position in terms in error messages -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:- chr_constraint - static_type_check/0. - - -% 1. Check the declared types - -constraint_type(Constraint,ArgTypes), static_type_check - ==> - forall( - ( member(ArgType,ArgTypes), sub_term(ArgType,Type) ), - ( get_type_definition(Type,_) -> - true - ; - chr_error(type_error,'Undefined type "~w" used in type declaration of "~w".\n',[Type,Constraint]) - ) - ). - -% 2. Check the rules - -:- chr_type type_error_src ---> head(any) ; body(any). - -rule(_,Rule), static_type_check - ==> - copy_term_nat(Rule,RuleCopy), - RuleCopy = pragma(rule(Head1,Head2,G,Body),ids(IDs1,IDs2),Pragmas,Name,RuleNb), - ( - catch( - ( static_type_check_heads(Head1), - static_type_check_heads(Head2), - conj2list(Body,GoalList), - static_type_check_body(GoalList) - ), - type_error(Error), - ( Error = invalid_functor(Src,Term,Type) -> - chr_error(type_error,'Invalid functor in ~@ of ~@:\n\t\tfound `~w\',\n\t\texpected type `~w\'!\n', - [chr_translate:format_src(Src),format_rule(Rule),Term,Type]) - ; Error = type_clash(Var,Src1,Src2,Type1,Type2) -> - chr_error(type_error,'Type clash for variable ~w in ~@:\n\t\texpected type ~w in ~@\n\t\texpected type ~w in ~@\n', - [Var,format_rule(Rule),Type1,chr_translate:format_src(Src1),Type2,chr_translate:format_src(Src2)]) - ) - ), - fail % cleanup constraints - ; - true - ). - - -static_type_check <=> true. - -static_type_check_heads([]). -static_type_check_heads([Head|Heads]) :- - static_type_check_head(Head), - static_type_check_heads(Heads). - -static_type_check_head(Head) :- - functor(Head,F,A), - get_constraint_type_det(F/A,Types), - Head =..[_|Args], - maplist(static_type_check_term(head(Head)),Args,Types). - -static_type_check_body([]). -static_type_check_body([Goal|Goals]) :- - functor(Goal,F,A), - get_constraint_type_det(F/A,Types), - Goal =..[_|Args], - maplist(static_type_check_term(body(Goal)),Args,Types), - static_type_check_body(Goals). - -:- chr_constraint static_type_check_term/3. -:- chr_option(mode,static_type_check_term(?,?,?)). -:- chr_option(type_declaration,static_type_check_term(type_error_src,any,any)). - -static_type_check_term(Src,Term,Type) - <=> - var(Term) - | - static_type_check_var(Src,Term,Type). -static_type_check_term(Src,Term,Type) - <=> - atomic_builtin_type(Type,Term,Goal) - | - ( call(Goal) -> - true - ; - throw(type_error(invalid_functor(Src,Term,Type))) - ). -static_type_check_term(Src,Term,Type) - <=> - compound_builtin_type(Type,Term,_,Goal) - | - ( call(Goal) -> - true - ; - throw(type_error(invalid_functor(Src,Term,Type))) - ). -type_alias(AType,ADef) \ static_type_check_term(Src,Term,Type) - <=> - functor(Type,F,A), - functor(AType,F,A) - | - copy_term_nat(AType-ADef,Type-Def), - static_type_check_term(Src,Term,Def). - -type_definition(AType,ADef) \ static_type_check_term(Src,Term,Type) - <=> - functor(Type,F,A), - functor(AType,F,A) - | - copy_term_nat(AType-ADef,Type-Variants), - functor(Term,TF,TA), - ( member(Variant,Variants), functor(Variant,TF,TA) -> - Term =.. [_|Args], - Variant =.. [_|Types], - maplist(static_type_check_term(Src),Args,Types) - ; - throw(type_error(invalid_functor(Src,Term,Type))) - ). - -static_type_check_term(Src,Term,Type) - <=> - chr_error(internal,'Undefined type ~w while type checking term ~w in ~@.\n',[Type,Term,chr_translate:format_src(Src)]). - -:- chr_constraint static_type_check_var/3. -:- chr_option(mode,static_type_check_var(?,-,?)). -:- chr_option(type_declaration,static_type_check_term(type_error_src,any,any)). - -type_alias(AType,ADef) \ static_type_check_var(Src,Var,Type) - <=> - functor(AType,F,A), - functor(Type,F,A) - | - copy_term_nat(AType-ADef,Type-Def), - static_type_check_var(Src,Var,Def). - -static_type_check_var(Src,Var,Type) - <=> - atomic_builtin_type(Type,_,_) - | - static_atomic_builtin_type_check_var(Src,Var,Type). - -static_type_check_var(Src,Var,Type) - <=> - compound_builtin_type(Type,_,_,_) - | - true. - - -static_type_check_var(Src1,Var,Type1), static_type_check_var(Src2,Var,Type2) - <=> - Type1 \== Type2 - | - throw(type_error(type_clash(Var,Src1,Src2,Type1,Type2))). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% static_atomic_builtin_type_check_var(+type_error_src,-Var,+atomic_builtin_type) -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -:- chr_constraint static_atomic_builtin_type_check_var/3. -:- chr_option(mode,static_type_check_var(?,-,+)). -:- chr_option(type_declaration,static_type_check_term(type_error_src,any,atomic_builtin_type)). - -static_atomic_builtin_type_check_var(_,_,any) <=> true. -static_atomic_builtin_type_check_var(_,Var,BuiltinType) \ static_atomic_builtin_type_check_var(_,Var,BuiltinType) - <=> - true. -static_atomic_builtin_type_check_var(_,Var,float) \ static_atomic_builtin_type_check_var(_,Var,number) - <=> - true. -static_atomic_builtin_type_check_var(_,Var,int) \ static_atomic_builtin_type_check_var(_,Var,number) - <=> - true. -static_atomic_builtin_type_check_var(_,Var,natural) \ static_atomic_builtin_type_check_var(_,Var,number) - <=> - true. -static_atomic_builtin_type_check_var(_,Var,dense_int) \ static_atomic_builtin_type_check_var(_,Var,number) - <=> - true. -static_atomic_builtin_type_check_var(_,Var,natural) \ static_atomic_builtin_type_check_var(_,Var,int) - <=> - true. -static_atomic_builtin_type_check_var(_,Var,dense_int) \ static_atomic_builtin_type_check_var(_,Var,int) - <=> - true. -static_atomic_builtin_type_check_var(_,Var,dense_int) \ static_atomic_builtin_type_check_var(_,Var,natural) - <=> - true. -static_atomic_builtin_type_check_var(Src1,Var,Type1), static_atomic_builtin_type_check_var(Src2,Var,Type2) - <=> - throw(type_error(type_clash(Var,Src1,Src2,Type1,Type2))). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% format_src(+type_error_src) is det. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -format_src(head(Head)) :- format('head ~w',[Head]). -format_src(body(Goal)) :- format('body goal ~w',[Goal]). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% Dynamic type checking -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:- chr_constraint - dynamic_type_check/0, - dynamic_type_check_clauses/1, - get_dynamic_type_check_clauses/1. - -generate_dynamic_type_check_clauses(Clauses) :- - ( chr_pp_flag(debugable,on) -> - dynamic_type_check, - get_dynamic_type_check_clauses(Clauses0), - append(Clauses0, - [('$dynamic_type_check'(Type,Term) :- - throw(error(type_error(Type,Term),context(_,'CHR Runtime Type Error'))) - )], - Clauses) - ; - Clauses = [] - ). - -type_definition(T,D), dynamic_type_check - ==> - copy_term_nat(T-D,Type-Definition), - maplist(dynamic_type_check_clause(Type),Definition,DynamicChecks), - dynamic_type_check_clauses(DynamicChecks). -type_alias(A,B), dynamic_type_check - ==> - copy_term_nat(A-B,Alias-Body), - dynamic_type_check_alias_clause(Alias,Body,Clause), - dynamic_type_check_clauses([Clause]). - -dynamic_type_check <=> - findall( - ('$dynamic_type_check'(Type,Term) :- Goal), - ( atomic_builtin_type(Type,Term,Goal) ; compound_builtin_type(Type,Term,Goal,_) ), - BuiltinChecks - ), - dynamic_type_check_clauses(BuiltinChecks). - -dynamic_type_check_clause(T,DC,Clause) :- - copy_term(T-DC,Type-DefinitionClause), - functor(DefinitionClause,F,A), - functor(Term,F,A), - DefinitionClause =.. [_|DCArgs], - Term =.. [_|TermArgs], - maplist(dynamic_type_check_call,DCArgs,TermArgs,RecursiveCallList), - list2conj(RecursiveCallList,RecursiveCalls), - Clause = ( - '$dynamic_type_check'(Type,Term) :- - RecursiveCalls - ). - -dynamic_type_check_alias_clause(Alias,Body,Clause) :- - Clause = ( - '$dynamic_type_check'(Alias,Term) :- - '$dynamic_type_check'(Body,Term) - ). - -dynamic_type_check_call(Type,Term,Call) :- - % ( nonvar(Type), atomic_builtin_type(Type,Term,Goal) -> - % Call = when(nonvar(Term),Goal) - % ; nonvar(Type), compound_builtin_type(Type,Term,Goal) -> - % Call = when(nonvar(Term),Goal) - % ; - ( Type == any -> - Call = true - ; - Call = when(nonvar(Term),once('$dynamic_type_check'(Type,Term))) - ) - % ) - . - -dynamic_type_check_clauses(C1), dynamic_type_check_clauses(C2) - <=> - append(C1,C2,C), - dynamic_type_check_clauses(C). - -get_dynamic_type_check_clauses(Q), dynamic_type_check_clauses(C) - <=> - Q = C. -get_dynamic_type_check_clauses(Q) - <=> - Q = []. - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% Atomic Types -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% Some optimizations can be applied for atomic types... -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -atomic_types_suspended_constraint(C) :- - C = _/N, - get_constraint_type(C,ArgTypes), - get_constraint_mode(C,ArgModes), - numlist(1,N,Indexes), - maplist(atomic_types_suspended_constraint(C),ArgTypes,ArgModes,Indexes). - -atomic_types_suspended_constraint(C,Type,Mode,Index) :- - ( is_indexed_argument(C,Index) -> - ( Mode == (?) -> - atomic_type(Type) - ; - true - ) - ; - true - ). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% atomic_type(+Type) is semidet. -% -% Succeeds when all values of =Type= are atomic. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -:- chr_constraint atomic_type/1. - -atomic_type(Type) <=> atomic_builtin_type(Type,_,_) | Type \== any. - -type_definition(TypePat,Def) \ atomic_type(Type) - <=> - functor(Type,F,A), functor(TypePat,F,A) - | - maplist(atomic,Def). - -type_alias(TypePat,Alias) \ atomic_type(Type) - <=> - functor(Type,F,A), functor(TypePat,F,A) - | - atomic(Alias), - copy_term_nat(TypePat-Alias,Type-NType), - atomic_type(NType). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% enumerated_atomic_type(+Type,-Atoms) is semidet. -% -% Succeeds when all values of =Type= are atomic -% and the atom values are finitely enumerable. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -:- chr_constraint enumerated_atomic_type/2. - -enumerated_atomic_type(Type,_) <=> atomic_builtin_type(Type,_,_) | fail. - -type_definition(TypePat,Def) \ enumerated_atomic_type(Type,Atoms) - <=> - functor(Type,F,A), functor(TypePat,F,A) - | - maplist(atomic,Def), - Atoms = Def. - -type_alias(TypePat,Alias) \ enumerated_atomic_type(Type,Atoms) - <=> - functor(Type,F,A), functor(TypePat,F,A) - | - atomic(Alias), - copy_term_nat(TypePat-Alias,Type-NType), - enumerated_atomic_type(NType,Atoms). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- chr_constraint - stored/3, % constraint,occurrence,(yes/no/maybe) - stored_completing/3, - stored_complete/3, - is_stored/1, - is_finally_stored/1, - check_all_passive/2. - -:- chr_option(mode,stored(+,+,+)). -:- chr_option(type_declaration,stored(any,int,storedinfo)). -:- chr_type storedinfo ---> yes ; no ; maybe. -:- chr_option(mode,stored_complete(+,+,+)). -:- chr_option(mode,maybe_complementary_guards(+,+,?,?)). -:- chr_option(mode,guard_list(+,+,+,+)). -:- chr_option(mode,check_all_passive(+,+)). -:- chr_option(type_declaration,check_all_passive(any,list)). - -% change yes in maybe when yes becomes passive -passive(RuleNb,ID), occurrence(C,O,RuleNb,ID,_) \ - stored(C,O,yes), stored_complete(C,RO,Yesses) - <=> O < RO | NYesses is Yesses - 1, - stored(C,O,maybe), stored_complete(C,RO,NYesses). -% change yes in maybe when not observed -ai_not_observed(C,O) \ stored(C,O,yes), stored_complete(C,RO,Yesses) - <=> O < RO | - NYesses is Yesses - 1, - stored(C,O,maybe), stored_complete(C,RO,NYesses). - -occurrence(_,_,RuleNb,ID,_), occurrence(C2,_,RuleNb,_,_), stored_complete(C2,RO,0), max_occurrence(C2,MO2) - ==> RO =< MO2 | % C2 is never stored - passive(RuleNb,ID). - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -rule(RuleNb,Rule),passive(RuleNb,Id) ==> - Rule = pragma(rule(Head1,Head2,G,B),ids([Id|IDs1],IDs2),Pragmas,Name,RuleNb) | - append(IDs1,IDs2,I), check_all_passive(RuleNb,I). - -rule(RuleNb,Rule),passive(RuleNb,Id) ==> - Rule = pragma(rule(Head1,Head2,G,B),ids([],[Id|IDs2]),Pragmas,Name,RuleNb) | - check_all_passive(RuleNb,IDs2). - -passive(RuleNb,Id) \ check_all_passive(RuleNb,[Id|IDs]) <=> - check_all_passive(RuleNb,IDs). - -rule(RuleNb,Rule) \ check_all_passive(RuleNb,[]) <=> - chr_warning(weird_program,'All heads passive in ~@.\n\tThis rule never fires. Please check your program.\n',[format_rule(Rule)]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% collect the storage information -stored(C,O,yes) \ stored_completing(C,O,Yesses) - <=> NO is O + 1, NYesses is Yesses + 1, - stored_completing(C,NO,NYesses). -stored(C,O,maybe) \ stored_completing(C,O,Yesses) - <=> NO is O + 1, - stored_completing(C,NO,Yesses). - -stored(C,O,no) \ stored_completing(C,O,Yesses) - <=> stored_complete(C,O,Yesses). -stored_completing(C,O,Yesses) - <=> stored_complete(C,O,Yesses). - -stored_complete(C,O,Yesses), occurrence(C,O2,RuleNb,Id,_) ==> - O2 > O | passive(RuleNb,Id). - -% decide whether a constraint is stored -max_occurrence(C,MO), stored_complete(C,RO,0) \ is_stored(C) - <=> RO =< MO | fail. -is_stored(C) <=> true. - -% decide whether a constraint is suspends after occurrences -max_occurrence(C,MO), stored_complete(C,RO,_) \ is_finally_stored(C) - <=> RO =< MO | fail. -is_finally_stored(C) <=> true. - -storage_analysis(Constraints) :- - ( chr_pp_flag(storage_analysis,on) -> - check_constraint_storages(Constraints) - ; - true - ). - -check_constraint_storages([]). -check_constraint_storages([C|Cs]) :- - check_constraint_storage(C), - check_constraint_storages(Cs). - -check_constraint_storage(C) :- - get_max_occurrence(C,MO), - check_occurrences_storage(C,1,MO). - -check_occurrences_storage(C,O,MO) :- - ( O > MO -> - stored_completing(C,1,0) - ; - check_occurrence_storage(C,O), - NO is O + 1, - check_occurrences_storage(C,NO,MO) - ). - -check_occurrence_storage(C,O) :- - get_occurrence(C,O,RuleNb,ID), - ( is_passive(RuleNb,ID) -> - stored(C,O,maybe) - ; - get_rule(RuleNb,PragmaRule), - PragmaRule = pragma(rule(Heads1,Heads2,Guard,Body),ids(IDs1,IDs2),_,_,_), - ( select2(ID,Head1,IDs1,Heads1,RIDs1,RHeads1) -> - check_storage_head1(Head1,O,Heads1,Heads2,Guard) - ; select2(ID,Head2,IDs2,Heads2,RIDs2,RHeads2) -> - check_storage_head2(Head2,O,Heads1,Body) - ) - ). - -check_storage_head1(Head,O,H1,H2,G) :- - functor(Head,F,A), - C = F/A, - ( H1 == [Head], - H2 == [], - % writeq(guard_entailment:entails_guard([chr_pp_headvariables(Head)],G)),nl, - guard_entailment:entails_guard([chr_pp_headvariables(Head)],G), - Head =.. [_|L], - no_matching(L,[]) -> - stored(C,O,no) - ; - stored(C,O,maybe) - ). - -no_matching([],_). -no_matching([X|Xs],Prev) :- - var(X), - \+ memberchk_eq(X,Prev), - no_matching(Xs,[X|Prev]). - -check_storage_head2(Head,O,H1,B) :- - functor(Head,F,A), - C = F/A, - ( %( - ( H1 \== [], B == true ) - %; - % \+ is_observed(F/A,O) % always fails because observation analysis has not been performed yet - %) - -> - stored(C,O,maybe) - ; - stored(C,O,yes) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ ____ _ _ _ _ -%% | _ \ _ _| | ___ / ___|___ _ __ ___ _ __ (_) | __ _| |_(_) ___ _ __ -%% | |_) | | | | |/ _ \ | | / _ \| '_ ` _ \| '_ \| | |/ _` | __| |/ _ \| '_ \ -%% | _ <| |_| | | __/ | |__| (_) | | | | | | |_) | | | (_| | |_| | (_) | | | | -%% |_| \_\\__,_|_|\___| \____\___/|_| |_| |_| .__/|_|_|\__,_|\__|_|\___/|_| |_| -%% |_| - -constraints_code(Constraints,Clauses) :- - (chr_pp_flag(reduced_indexing,on), - forall(C,Constraints,chr_translate:only_ground_indexed_arguments(C)) -> - none_suspended_on_variables - ; - true - ), - constraints_code1(Constraints,Clauses,[]). - -%=============================================================================== -:- chr_constraint constraints_code1/3. -:- chr_option(mode,constraints_code1(+,+,+)). -:- chr_option(type_declaration,constraints_code1(list,any,any)). -%------------------------------------------------------------------------------- -constraints_code1([],L,T) <=> L = T. -constraints_code1([C|RCs],L,T) - <=> - constraint_code(C,L,T1), - constraints_code1(RCs,T1,T). -%=============================================================================== -:- chr_constraint constraint_code/3. -:- chr_option(mode,constraint_code(+,+,+)). -%------------------------------------------------------------------------------- -%% Generate code for a single CHR constraint -constraint_code(Constraint, L, T) - <=> true - | ( (chr_pp_flag(debugable,on) ; - is_stored(Constraint), ( has_active_occurrence(Constraint); chr_pp_flag(late_allocation,off)), - ( may_trigger(Constraint) ; - get_allocation_occurrence(Constraint,AO), - get_max_occurrence(Constraint,MO), MO >= AO ) ) - -> - constraint_prelude(Constraint,Clause), - add_dummy_location(Clause,LocatedClause), - L = [LocatedClause | L1] - ; - L = L1 - ), - Id = [0], - occurrences_code(Constraint,1,Id,NId,L1,L2), - gen_cond_attach_clause(Constraint,NId,L2,T). - -%=============================================================================== -%% Generate prelude predicate for a constraint. -%% f(...) :- f/a_0(...,Susp). -constraint_prelude(F/A, Clause) :- - vars_susp(A,Vars,Susp,VarsSusp), - Head =.. [ F | Vars], - make_suspension_continuation_goal(F/A,VarsSusp,Continuation), - build_head(F,A,[0],VarsSusp,Delegate), - ( chr_pp_flag(debugable,on) -> - insert_constraint_goal(F/A,Susp,Vars,InsertCall), - attach_constraint_atom(F/A,Vars2,Susp,AttachCall), - delay_phase_end(validate_store_type_assumptions,chr_translate:update_suspension_field(F/A,Susp,state,inactive,Inactive)), - insert_constraint_internal_constraint_goal(F/A, Vars2, Susp, Continuation, Vars,InsertGoal), - - ( get_constraint_type(F/A,ArgTypeList) -> - maplist(dynamic_type_check_call,ArgTypeList,Vars,DynamicTypeCheckList), - list2conj(DynamicTypeCheckList,DynamicTypeChecks) - ; - DynamicTypeChecks = true - ), - - Clause = - ( Head :- - DynamicTypeChecks, - InsertGoal, - InsertCall, - AttachCall, - Inactive, - 'chr debug_event'(insert(Head#Susp)), - ( - 'chr debug_event'(call(Susp)), - Delegate - ; - 'chr debug_event'(fail(Susp)), !, - fail - ), - ( - 'chr debug_event'(exit(Susp)) - ; - 'chr debug_event'(redo(Susp)), - fail - ) - ) - ; get_allocation_occurrence(F/A,0) -> - gen_insert_constraint_internal_goal(F/A,Goal,VarsSusp,Vars,Susp), - delay_phase_end(validate_store_type_assumptions,chr_translate:update_suspension_field(F/A,Susp,state,inactive,Inactive)), - Clause = ( Head :- Goal, Inactive, Delegate ) - ; - Clause = ( Head :- Delegate ) - ). - -make_suspension_continuation_goal(F/A,VarsSusp,Goal) :- - ( may_trigger(F/A) -> - build_head(F,A,[0],VarsSusp,Delegate), - ( chr_pp_flag(debugable,off) -> - Goal = Delegate - ; - get_target_module(Mod), - Goal = Mod:Delegate - ) - ; - Goal = true - ). - -%=============================================================================== -:- chr_constraint has_active_occurrence/1, has_active_occurrence/2. -:- chr_option(mode,has_active_occurrence(+)). -:- chr_option(mode,has_active_occurrence(+,+)). - -:- chr_constraint memo_has_active_occurrence/1. -:- chr_option(mode,memo_has_active_occurrence(+)). -%------------------------------------------------------------------------------- -memo_has_active_occurrence(C) \ has_active_occurrence(C) <=> true. -has_active_occurrence(C) <=> has_active_occurrence(C,1), memo_has_active_occurrence(C). - -max_occurrence(C,MO) \ has_active_occurrence(C,O) <=> - O > MO | fail. -passive(RuleNb,ID),occurrence(C,O,RuleNb,ID,_) \ - has_active_occurrence(C,O) <=> - NO is O + 1, - has_active_occurrence(C,NO). -has_active_occurrence(C,O) <=> true. -%=============================================================================== - -gen_cond_attach_clause(F/A,Id,L,T) :- - ( is_finally_stored(F/A) -> - get_allocation_occurrence(F/A,AllocationOccurrence), - get_max_occurrence(F/A,MaxOccurrence), - ( chr_pp_flag(debugable,off), MaxOccurrence < AllocationOccurrence -> - ( only_ground_indexed_arguments(F/A) -> - gen_insert_constraint_internal_goal(F/A,Body,AllArgs,Args,Susp) - ; - gen_cond_attach_goal(F/A,Body,AllArgs,Args,Susp) - ) - ; vars_susp(A,Args,Susp,AllArgs), - gen_uncond_attach_goal(F/A,Susp,Args,Body,_) - ), - build_head(F,A,Id,AllArgs,Head), - Clause = ( Head :- Body ), - add_dummy_location(Clause,LocatedClause), - L = [LocatedClause | T] - ; - L = T - ). - -:- chr_constraint use_auxiliary_predicate/1. -:- chr_option(mode,use_auxiliary_predicate(+)). - -:- chr_constraint use_auxiliary_predicate/2. -:- chr_option(mode,use_auxiliary_predicate(+,+)). - -:- chr_constraint is_used_auxiliary_predicate/1. -:- chr_option(mode,is_used_auxiliary_predicate(+)). - -:- chr_constraint is_used_auxiliary_predicate/2. -:- chr_option(mode,is_used_auxiliary_predicate(+,+)). - - -use_auxiliary_predicate(P) \ use_auxiliary_predicate(P) <=> true. - -use_auxiliary_predicate(P,C) \ use_auxiliary_predicate(P,C) <=> true. - -use_auxiliary_predicate(P) \ is_used_auxiliary_predicate(P) <=> true. - -use_auxiliary_predicate(P,_) \ is_used_auxiliary_predicate(P) <=> true. - -is_used_auxiliary_predicate(P) <=> fail. - -use_auxiliary_predicate(P) \ is_used_auxiliary_predicate(P,_) <=> true. -use_auxiliary_predicate(P,C) \ is_used_auxiliary_predicate(P,C) <=> true. - -is_used_auxiliary_predicate(P,C) <=> fail. - -%------------------------------------------------------------------------------% -% Only generate import statements for actually used modules. -%------------------------------------------------------------------------------% - -:- chr_constraint use_auxiliary_module/1. -:- chr_option(mode,use_auxiliary_module(+)). - -:- chr_constraint is_used_auxiliary_module/1. -:- chr_option(mode,is_used_auxiliary_module(+)). - - -use_auxiliary_module(P) \ use_auxiliary_module(P) <=> true. - -use_auxiliary_module(P) \ is_used_auxiliary_module(P) <=> true. - -is_used_auxiliary_module(P) <=> fail. - - % only called for constraints with - % at least one - % non-ground indexed argument -gen_cond_attach_goal(F/A,Goal,AllArgs,Args,Susp) :- - vars_susp(A,Args,Susp,AllArgs), - make_suspension_continuation_goal(F/A,AllArgs,Closure), - ( get_store_type(F/A,var_assoc_store(_,_)) -> - Attach = true - ; - attach_constraint_atom(F/A,Vars,Susp,Attach) - ), - FTerm =.. [F|Args], - insert_constraint_goal(F/A,Susp,Args,InsertCall), - insert_constraint_internal_constraint_goal(F/A, Vars, Susp, Closure, Args,InsertGoal), - ( may_trigger(F/A) -> - activate_constraint_goal(F/A,(InsertCall,Attach),Vars,Susp,_,ActivateGoal), - Goal = - ( - ( var(Susp) -> - InsertGoal, % insert_constraint_internal(Stored,Vars,Susp,Closure,F,Args) - InsertCall, - Attach - ; - ActivateGoal % activate_constraint(Stored,Vars,Susp,_) - ) - ) - ; - Goal = - ( - InsertGoal, % insert_constraint_internal(Stored,Vars,Susp,Closure,F,Args), - InsertCall, - Attach - ) - ). - -gen_insert_constraint_internal_goal(F/A,Goal,AllArgs,Args,Susp) :- - vars_susp(A,Args,Susp,AllArgs), - make_suspension_continuation_goal(F/A,AllArgs,Cont), - ( \+ only_ground_indexed_arguments(F/A), \+ get_store_type(F/A,var_assoc_store(_,_)) -> - attach_constraint_atom(F/A,Vars,Susp,Attach) - ; - Attach = true - ), - FTerm =.. [F|Args], - insert_constraint_goal(F/A,Susp,Args,InsertCall), - insert_constraint_internal_constraint_goal(F/A, Vars, Susp, Cont, Args,InsertInternalGoal), - ( only_ground_indexed_arguments(F/A), chr_pp_flag(debugable,off) -> - Goal = - ( - InsertInternalGoal, % insert_constraint_internal(Susp,F,Args), - InsertCall - ) - ; - Goal = - ( - InsertInternalGoal, % insert_constraint_internal(_,Vars,Susp,Cont,F,Args), - InsertCall, - Attach - ) - ). - -gen_uncond_attach_goal(FA,Susp,Args,AttachGoal,Generation) :- - ( \+ only_ground_indexed_arguments(FA), \+ get_store_type(FA,var_assoc_store(_,_)) -> - attach_constraint_atom(FA,Vars,Susp,Attach) - ; - Attach = true - ), - insert_constraint_goal(FA,Susp,Args,InsertCall), - ( chr_pp_flag(late_allocation,on) -> - activate_constraint_goal(FA,(InsertCall,Attach),Vars,Susp,Generation,AttachGoal) - ; - activate_constraint_goal(FA,true,Vars,Susp,Generation,AttachGoal) - ). - -%------------------------------------------------------------------------------- -:- chr_constraint occurrences_code/6. -:- chr_option(mode,occurrences_code(+,+,+,+,+,+)). -%------------------------------------------------------------------------------- -max_occurrence(C,MO) \ occurrences_code(C,O,Id,NId,L,T) - <=> O > MO - | NId = Id, L = T. -occurrences_code(C,O,Id,NId,L,T) - <=> - occurrence_code(C,O,Id,Id1,L,L1), - NO is O + 1, - occurrences_code(C,NO,Id1,NId,L1,T). -%------------------------------------------------------------------------------- -:- chr_constraint occurrence_code/6. -:- chr_option(mode,occurrence_code(+,+,+,+,+,+)). -%------------------------------------------------------------------------------- -occurrence(C,O,RuleNb,ID,_), passive(RuleNb,ID) \ occurrence_code(C,O,Id,NId,L,T) - <=> - ( named_history(RuleNb,_,_) -> - does_use_history(C,O) - ; - true - ), - NId = Id, - L = T. -occurrence(C,O,RuleNb,ID,_), rule(RuleNb,PragmaRule) \ occurrence_code(C,O,Id,NId,L,T) - <=> true | - PragmaRule = pragma(rule(Heads1,Heads2,_,_),ids(IDs1,IDs2),_,_,_), - ( select2(ID,Head1,IDs1,Heads1,RIDs1,RHeads1) -> - NId = Id, - head1_code(Head1,ID,RHeads1,RIDs1,PragmaRule,C,O,Id,L,T) - ; select2(ID,Head2,IDs2,Heads2,RIDs2,RHeads2) -> - - head2_code(Head2,ID,RHeads2,RIDs2,PragmaRule,C,O,Id,L,L1), - ( should_skip_to_next_id(C,O) -> - inc_id(Id,NId), - ( unconditional_occurrence(C,O) -> - L1 = T - ; - gen_alloc_inc_clause(C,O,Id,L1,T) - ) - ; - NId = Id, - L1 = T - ) - ). - -occurrence_code(C,O,_,_,_,_) - <=> - chr_error(internal,'occurrence_code/6: missing information to compile ~w:~w\n',[C,O]). -%------------------------------------------------------------------------------- - -%% Generate code based on one removed head of a CHR rule -head1_code(Head,ID,OtherHeads,OtherIDs,PragmaRule,FA,O,Id,L,T) :- - PragmaRule = pragma(Rule,_,_,_Name,RuleNb), - Rule = rule(_,Head2,_,_), - ( Head2 == [] -> - reorder_heads(RuleNb,Head,OtherHeads,OtherIDs,NOtherHeads,NOtherIDs), - simplification_code(Head,ID,NOtherHeads,NOtherIDs,PragmaRule,FA,O,Id,L,T) - ; - simpagation_head1_code(Head,ID,OtherHeads,OtherIDs,PragmaRule,FA,O,Id,L,T) - ). - -%% Generate code based on one persistent head of a CHR rule -head2_code(Head,ID,OtherHeads,OtherIDs,PragmaRule,FA,O,Id,L,T) :- - PragmaRule = pragma(Rule,_,_,_Name,RuleNb), - Rule = rule(Head1,_,_,_), - ( Head1 == [] -> - reorder_heads(RuleNb,Head,OtherHeads,OtherIDs,NOtherHeads,NOtherIDs), - propagation_code(Head,ID,NOtherHeads,NOtherIDs,Rule,RuleNb,FA,O,Id,L,T) - ; - simpagation_head2_code(Head,ID,OtherHeads,OtherIDs,PragmaRule,FA,O,Id,L,T) - ). - -gen_alloc_inc_clause(F/A,O,Id,L,T) :- - vars_susp(A,Vars,Susp,VarsSusp), - build_head(F,A,Id,VarsSusp,Head), - inc_id(Id,IncId), - build_head(F,A,IncId,VarsSusp,CallHead), - gen_occ_allocation(F/A,O,Vars,Susp,ConditionalAlloc), - Clause = - ( - Head :- - ConditionalAlloc, - CallHead - ), - add_dummy_location(Clause,LocatedClause), - L = [LocatedClause|T]. - -gen_occ_allocation(FA,O,Vars,Susp,Goal) :- - get_allocation_occurrence(FA,AO), - get_occurrence_code_id(FA,AO,AId), - get_occurrence_code_id(FA,O,Id), - ( chr_pp_flag(debugable,off), Id == AId -> - allocate_constraint_goal(FA,Susp,Vars,Goal0), - ( may_trigger(FA) -> - Goal = (var(Susp) -> Goal0 ; true) - ; - Goal = Goal0 - ) - ; - Goal = true - ). - -gen_occ_allocation_in_guard(FA,O,Vars,Susp,Goal) :- - get_allocation_occurrence(FA,AO), - ( chr_pp_flag(debugable,off), O < AO -> - allocate_constraint_goal(FA,Susp,Vars,Goal0), - ( may_trigger(FA) -> - Goal = (var(Susp) -> Goal0 ; true) - ; - Goal = Goal0 - ) - ; - Goal = true - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Reorders guard goals with respect to partner constraint retrieval goals and -% active constraint. Returns combined partner retrieval + guard goal. - -guard_via_reschedule_new(Retrievals,GuardList,Prelude,GuardListSkeleton,LookupSkeleton,GoalSkeleton) :- - ( chr_pp_flag(guard_via_reschedule,on) -> - guard_via_reschedule_main_new(Retrievals,GuardList,Prelude,GuardListSkeleton,LookupSkeleton,ScheduleSkeleton), - list2conj(ScheduleSkeleton,GoalSkeleton) - ; - length(Retrievals,RL), length(LookupSkeleton,RL), - length(GuardList,GL), length(GuardListSkeleton,GL), - append(LookupSkeleton,GuardListSkeleton,GoalListSkeleton), - list2conj(GoalListSkeleton,GoalSkeleton) - ). -guard_via_reschedule_main_new(PartnerLookups,GuardList,ActiveHead, - GuardListSkeleton,LookupSkeleton,ScheduleSkeleton) :- - initialize_unit_dictionary(ActiveHead,Dict), - maplist(wrap_in_functor(lookup),PartnerLookups,WrappedPartnerLookups), - maplist(wrap_in_functor(guard),GuardList,WrappedGuardList), - build_units(WrappedPartnerLookups,WrappedGuardList,Dict,Units), - dependency_reorder(Units,NUnits), - wrappedunits2lists(NUnits,IndexedGuardListSkeleton,LookupSkeleton,ScheduleSkeleton), - sort(IndexedGuardListSkeleton,SortedIndexedGuardListSkeleton), - snd_of_pairs(SortedIndexedGuardListSkeleton,GuardListSkeleton). - -wrappedunits2lists([],[],[],[]). -wrappedunits2lists([unit(N,WrappedGoal,_,_)|Units],Gs,Ls,Ss) :- - Ss = [GoalCopy|TSs], - ( WrappedGoal = lookup(Goal) -> - Ls = [GoalCopy|TLs], - Gs = TGs - ; WrappedGoal = guard(Goal) -> - Gs = [N-GoalCopy|TGs], - Ls = TLs - ), - wrappedunits2lists(Units,TGs,TLs,TSs). - -guard_splitting(Rule,SplitGuardList) :- - Rule = rule(H1,H2,Guard,_), - append(H1,H2,Heads), - conj2list(Guard,GuardList), - term_variables(Heads,HeadVars), - split_off_simple_guard_new(GuardList,HeadVars,GuardPrefix,RestGuardList), - append(GuardPrefix,[RestGuard],SplitGuardList), - term_variables(RestGuardList,GuardVars1), - % variables that are declared to be ground don't need to be locked - ground_vars(Heads,GroundVars), - list_difference_eq(HeadVars,GroundVars,LockableHeadVars), - intersect_eq(LockableHeadVars,GuardVars1,GuardVars), - ( chr_pp_flag(guard_locks,on), - bagof(('chr lock'(X)) - ('chr unlock'(X)), (lists:member(X,GuardVars)), LocksUnlocks) -> - once(pairup(Locks,Unlocks,LocksUnlocks)) - ; - Locks = [], - Unlocks = [] - ), - list2conj(Locks,LockPhase), - list2conj(Unlocks,UnlockPhase), - list2conj(RestGuardList,RestGuard1), - RestGuard = (LockPhase,(RestGuard1,UnlockPhase)). - -guard_body_copies3(Rule,GuardList,VarDict,GuardCopyList,BodyCopy) :- - Rule = rule(_,_,_,Body), - my_term_copy(GuardList,VarDict,VarDict2,GuardCopyList), - my_term_copy(Body,VarDict2,BodyCopy). - - -split_off_simple_guard_new([],_,[],[]). -split_off_simple_guard_new([G|Gs],VarDict,S,C) :- - ( simple_guard_new(G,VarDict) -> - S = [G|Ss], - split_off_simple_guard_new(Gs,VarDict,Ss,C) - ; - S = [], - C = [G|Gs] - ). - -% simple guard: cheap and benign (does not bind variables) -simple_guard_new(G,Vars) :- - builtin_binds_b(G,BoundVars), - \+ (( member(V,BoundVars), - memberchk_eq(V,Vars) - )). - -dependency_reorder(Units,NUnits) :- - dependency_reorder(Units,[],NUnits). - -dependency_reorder([],Acc,Result) :- - reverse(Acc,Result). - -dependency_reorder([Unit|Units],Acc,Result) :- - Unit = unit(_GID,_Goal,Type,GIDs), - ( Type == fixed -> - NAcc = [Unit|Acc] - ; - dependency_insert(Acc,Unit,GIDs,NAcc) - ), - dependency_reorder(Units,NAcc,Result). - -dependency_insert([],Unit,_,[Unit]). -dependency_insert([X|Xs],Unit,GIDs,L) :- - X = unit(GID,_,_,_), - ( memberchk(GID,GIDs) -> - L = [Unit,X|Xs] - ; - L = [X | T], - dependency_insert(Xs,Unit,GIDs,T) - ). - -build_units(Retrievals,Guard,InitialDict,Units) :- - build_retrieval_units(Retrievals,1,N,InitialDict,Dict,Units,Tail), - build_guard_units(Guard,N,Dict,Tail). - -build_retrieval_units([],N,N,Dict,Dict,L,L). -build_retrieval_units([U|Us],N,M,Dict,NDict,L,T) :- - term_variables(U,Vs), - update_unit_dictionary(Vs,N,Dict,Dict1,[],GIDs), - L = [unit(N,U,fixed,GIDs)|L1], - N1 is N + 1, - build_retrieval_units(Us,N1,M,Dict1,NDict,L1,T). - -initialize_unit_dictionary(Term,Dict) :- - term_variables(Term,Vars), - pair_all_with(Vars,0,Dict). - -update_unit_dictionary([],_,Dict,Dict,GIDs,GIDs). -update_unit_dictionary([V|Vs],This,Dict,NDict,GIDs,NGIDs) :- - ( lookup_eq(Dict,V,GID) -> - ( (GID == This ; memberchk(GID,GIDs) ) -> - GIDs1 = GIDs - ; - GIDs1 = [GID|GIDs] - ), - Dict1 = Dict - ; - Dict1 = [V - This|Dict], - GIDs1 = GIDs - ), - update_unit_dictionary(Vs,This,Dict1,NDict,GIDs1,NGIDs). - -build_guard_units(Guard,N,Dict,Units) :- - ( Guard = [Goal] -> - Units = [unit(N,Goal,fixed,[])] - ; Guard = [Goal|Goals] -> - term_variables(Goal,Vs), - update_unit_dictionary2(Vs,N,Dict,NDict,[],GIDs), - Units = [unit(N,Goal,movable,GIDs)|RUnits], - N1 is N + 1, - build_guard_units(Goals,N1,NDict,RUnits) - ). - -update_unit_dictionary2([],_,Dict,Dict,GIDs,GIDs). -update_unit_dictionary2([V|Vs],This,Dict,NDict,GIDs,NGIDs) :- - ( lookup_eq(Dict,V,GID) -> - ( (GID == This ; memberchk(GID,GIDs) ) -> - GIDs1 = GIDs - ; - GIDs1 = [GID|GIDs] - ), - Dict1 = [V - This|Dict] - ; - Dict1 = [V - This|Dict], - GIDs1 = GIDs - ), - update_unit_dictionary2(Vs,This,Dict1,NDict,GIDs1,NGIDs). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ ____ _ _ -%% / ___| ___| |_ / ___| ___ _ __ ___ __ _ _ __ | |_(_) ___ ___ _ -%% \___ \ / _ \ __| \___ \ / _ \ '_ ` _ \ / _` | '_ \| __| |/ __/ __(_) -%% ___) | __/ |_ ___) | __/ | | | | | (_| | | | | |_| | (__\__ \_ -%% |____/ \___|\__| |____/ \___|_| |_| |_|\__,_|_| |_|\__|_|\___|___(_) -%% -%% _ _ _ ___ __ -%% | | | |_ __ (_) __ _ _ _ ___ |_ _|_ __ / _| ___ _ __ ___ _ __ ___ ___ -%% | | | | '_ \| |/ _` | | | |/ _ \ | || '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \ -%% | |_| | | | | | (_| | |_| | __/ | || | | | _| __/ | | __/ | | | (_| __/ -%% \___/|_| |_|_|\__, |\__,_|\___| |___|_| |_|_| \___|_| \___|_| |_|\___\___| -%% |_| -:- chr_constraint - functional_dependency/4, - get_functional_dependency/4. - -:- chr_option(mode,functional_dependency(+,+,?,?)). -:- chr_option(mode,get_functional_dependency(+,+,?,?)). - -allocation_occurrence(C,AO), occurrence(C,O,RuleNb,_,_) \ functional_dependency(C,RuleNb,Pattern,Key) - <=> - RuleNb > 1, AO > O - | - functional_dependency(C,1,Pattern,Key). - -functional_dependency(C,RuleNb1,Pattern,Key) \ get_functional_dependency(C,RuleNb2,QPattern,QKey) - <=> - RuleNb2 >= RuleNb1 - | - QPattern = Pattern, QKey = Key. -get_functional_dependency(_,_,_,_) - <=> - fail. - -functional_dependency_analysis(Rules) :- - ( fail, chr_pp_flag(functional_dependency_analysis,on) -> - functional_dependency_analysis_main(Rules) - ; - true - ). - -functional_dependency_analysis_main([]). -functional_dependency_analysis_main([PRule|PRules]) :- - ( discover_unique_pattern(PRule,C,RuleNb,Pattern,Key) -> - functional_dependency(C,RuleNb,Pattern,Key) - ; - true - ), - functional_dependency_analysis_main(PRules). - -discover_unique_pattern(PragmaRule,F/A,RuleNb,Pattern,Key) :- - PragmaRule = pragma(Rule,_,_,Name,RuleNb), - Rule = rule(H1,H2,Guard,_), - ( H1 = [C1], - H2 = [C2] -> - true - ; H1 = [C1,C2], - H2 == [] -> - true - ), - check_unique_constraints(C1,C2,Guard,RuleNb,List), - term_variables(C1,Vs), - \+ ( - member(V1,Vs), - lookup_eq(List,V1,V2), - memberchk_eq(V2,Vs) - ), - select_pragma_unique_variables(Vs,List,Key1), - copy_term_nat(C1-Key1,Pattern-Key), - functor(C1,F,A). - -select_pragma_unique_variables([],_,[]). -select_pragma_unique_variables([V|Vs],List,L) :- - ( lookup_eq(List,V,_) -> - L = T - ; - L = [V|T] - ), - select_pragma_unique_variables(Vs,List,T). - - % depends on functional dependency analysis - % and shape of rule: C1 \ C2 <=> true. -set_semantics_rules(Rules) :- - ( fail, chr_pp_flag(set_semantics_rule,on) -> - set_semantics_rules_main(Rules) - ; - true - ). - -set_semantics_rules_main([]). -set_semantics_rules_main([R|Rs]) :- - set_semantics_rule_main(R), - set_semantics_rules_main(Rs). - -set_semantics_rule_main(PragmaRule) :- - PragmaRule = pragma(Rule,IDs,Pragmas,_,RuleNb), - ( Rule = rule([C1],[C2],true,_), - IDs = ids([ID1],[ID2]), - \+ is_passive(RuleNb,ID1), - functor(C1,F,A), - get_functional_dependency(F/A,RuleNb,Pattern,Key), - copy_term_nat(Pattern-Key,C1-Key1), - copy_term_nat(Pattern-Key,C2-Key2), - Key1 == Key2 -> - passive(RuleNb,ID2) - ; - true - ). - -check_unique_constraints(C1,C2,G,RuleNb,List) :- - \+ any_passive_head(RuleNb), - variable_replacement(C1-C2,C2-C1,List), - copy_with_variable_replacement(G,OtherG,List), - negate_b(G,NotG), - once(entails_b(NotG,OtherG)). - - % checks for rules of the shape ...,C1,C2... (<|=)=> ... - % where C1 and C2 are symmteric constraints -symmetry_analysis(Rules) :- - ( chr_pp_flag(check_unnecessary_active,off) -> - true - ; - symmetry_analysis_main(Rules) - ). - -symmetry_analysis_main([]). -symmetry_analysis_main([R|Rs]) :- - R = pragma(Rule,ids(IDs1,IDs2),_,_,RuleNb), - Rule = rule(H1,H2,_,_), - ( ( \+ chr_pp_flag(check_unnecessary_active,simplification) ; H2 == [] ), H1 \== [] -> - symmetry_analysis_heads_simplification(H1,IDs1,[],[],Rule,RuleNb), - symmetry_analysis_heads_propagation(H2,IDs2,[],[],Rule,RuleNb) - ; - true - ), - symmetry_analysis_main(Rs). - -symmetry_analysis_heads_simplification([],[],_,_,_,_). -symmetry_analysis_heads_simplification([H|Hs],[ID|IDs],PreHs,PreIDs,Rule,RuleNb) :- - ( \+ is_passive(RuleNb,ID), - member2(PreHs,PreIDs,PreH-PreID), - \+ is_passive(RuleNb,PreID), - variable_replacement(PreH,H,List), - copy_with_variable_replacement(Rule,Rule2,List), - identical_guarded_rules(Rule,Rule2) -> - passive(RuleNb,ID) - ; - true - ), - symmetry_analysis_heads_simplification(Hs,IDs,[H|PreHs],[ID|PreIDs],Rule,RuleNb). - -symmetry_analysis_heads_propagation([],[],_,_,_,_). -symmetry_analysis_heads_propagation([H|Hs],[ID|IDs],PreHs,PreIDs,Rule,RuleNb) :- - ( \+ is_passive(RuleNb,ID), - member2(PreHs,PreIDs,PreH-PreID), - \+ is_passive(RuleNb,PreID), - variable_replacement(PreH,H,List), - copy_with_variable_replacement(Rule,Rule2,List), - identical_rules(Rule,Rule2) -> - passive(RuleNb,ID) - ; - true - ), - symmetry_analysis_heads_propagation(Hs,IDs,[H|PreHs],[ID|PreIDs],Rule,RuleNb). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ __ _ _ _ -%% / ___|(_)_ __ ___ _ __ | (_)/ _(_) ___ __ _| |_(_) ___ _ __ -%% \___ \| | '_ ` _ \| '_ \| | | |_| |/ __/ _` | __| |/ _ \| '_ \ -%% ___) | | | | | | | |_) | | | _| | (_| (_| | |_| | (_) | | | | -%% |____/|_|_| |_| |_| .__/|_|_|_| |_|\___\__,_|\__|_|\___/|_| |_| -%% |_| -%% {{{ - -simplification_code(Head,ID,RestHeads,RestIDs,PragmaRule,F/A,O,Id,L,T) :- - PragmaRule = pragma(Rule,_,Pragmas,_,RuleNb), - head_info(Head,A,_Vars,Susp,HeadVars,HeadPairs), - build_head(F,A,Id,HeadVars,ClauseHead), - get_constraint_mode(F/A,Mode), - head_arg_matches(HeadPairs,Mode,[],FirstMatching,VarDict1,[],GroundVars), - - - guard_splitting(Rule,GuardList0), - ( is_stored_in_guard(F/A, RuleNb) -> - GuardList = [Hole1|GuardList0] - ; - GuardList = GuardList0 - ), - guard_via_reschedule_new(RestHeads,GuardList,Head,GuardCopyList,GetRestHeads,RescheduledTest), - - rest_heads_retrieval_and_matching(RestHeads,RestIDs,Head,GetRestHeads,Susps,VarDict1,VarDict,[],[],[],GroundVars,_), - - guard_body_copies3(Rule,GuardList,VarDict,GuardCopyList,BodyCopy), - - ( is_stored_in_guard(F/A, RuleNb) -> - gen_occ_allocation_in_guard(F/A,O,Vars,Susp,Allocation), - gen_uncond_attach_goal(F/A,Susp,Vars,Attachment,_), - GuardCopyList = [Hole1Copy|_], - Hole1Copy = (Allocation, Attachment) - ; - true - ), - - - partner_constraint_detachments(Susps,RestHeads,VarDict,SuspsDetachments), - active_constraint_detachment(Id,Susp,Head,VarDict,SuspDetachment), - - ( chr_pp_flag(debugable,on) -> - Rule = rule(_,_,Guard,Body), - my_term_copy(Guard - Body, VarDict, DebugGuard - DebugBody), - sort_by_key([Susp|Susps],[ID|RestIDs],SortedSusps), - DebugTry = 'chr debug_event'( try(SortedSusps,[],DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply(SortedSusps,[],DebugGuard,DebugBody)), - instrument_goal(ActualCut,DebugTry,DebugApply,Cut) - ; - Cut = ActualCut - ), - ( unconditional_occurrence(F/A,O), chr_pp_flag(late_allocation,on) -> ActualCut = true ; ActualCut = (!) ), - Clause = ( ClauseHead :- - FirstMatching, - RescheduledTest, - Cut, - SuspsDetachments, - SuspDetachment, - BodyCopy - ), - add_location(Clause,RuleNb,LocatedClause), - L = [LocatedClause | T]. - -% }}} - -add_location(Clause,RuleNb,NClause) :- - ( chr_pp_flag(line_numbers,on) -> - get_chr_source_file(File), - get_line_number(RuleNb,LineNb), - NClause = '$source_location'(File,LineNb):Clause - ; - NClause = Clause - ). - -add_dummy_location(Clause,NClause) :- - ( chr_pp_flag(line_numbers,on) -> - get_chr_source_file(File), - NClause = '$source_location'(File,1):Clause - ; - NClause = Clause - ). -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% head_arg_matches(+Pairs,+Modes,+VarDict,-Goal,-NVarDict) is det. -% -% Return goal matching newly introduced variables with variables in -% previously looked-up heads. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -head_arg_matches(Pairs,Modes,VarDict,Goal,NVarDict) :- - head_arg_matches(Pairs,Modes,VarDict,Goal,NVarDict,[],_). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% head_arg_matches(+Pairs,+Modes,+VarDict,-Goal,-NVarDict,+GroundVars,-NGroundVars) is det. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -head_arg_matches(Pairs,Modes,VarDict,Goal,NVarDict,GroundVars,NGroundVars) :- - head_arg_matches_(Pairs,Modes,VarDict,GroundVars,GoalList,NVarDict,NGroundVars), - list2conj(GoalList,Goal). - -head_arg_matches_([],[],VarDict,GroundVars,[],VarDict,GroundVars). -head_arg_matches_([silent(Arg-Var)| Rest],[Mode|Modes],VarDict,GroundVars,GoalList,NVarDict,NGroundVars) :- !, - ( Mode == (+) -> - term_variables(Arg,GroundVars0,GroundVars), - head_arg_matches_(Rest,Modes,VarDict,GroundVars0,GoalList,NVarDict,NGroundVars) - ; - head_arg_matches_(Rest,Modes,VarDict,GroundVars,GoalList,NVarDict,NGroundVars) - ). -head_arg_matches_([Arg-Var| Rest],[Mode|Modes],VarDict,GroundVars,GoalList,NVarDict,NGroundVars) :- - ( var(Arg) -> - ( lookup_eq(VarDict,Arg,OtherVar) -> - ( Mode = (+) -> - ( memberchk_eq(Arg,GroundVars) -> - GoalList = [Var = OtherVar | RestGoalList], - GroundVars1 = GroundVars - ; - GoalList = [Var == OtherVar | RestGoalList], - GroundVars1 = [Arg|GroundVars] - ) - ; - GoalList = [Var == OtherVar | RestGoalList], - GroundVars1 = GroundVars - ), - VarDict1 = VarDict - ; - VarDict1 = [Arg-Var | VarDict], - GoalList = RestGoalList, - ( Mode = (+) -> - GroundVars1 = [Arg|GroundVars] - ; - GroundVars1 = GroundVars - ) - ), - Pairs = Rest, - RestModes = Modes - ; ground(Arg), Arg = '$chr_identifier_match'(ActualArg,IndexType) -> - identifier_label_atom(IndexType,Var,ActualArg,Goal), - GoalList = [Goal|RestGoalList], - VarDict = VarDict1, - GroundVars1 = GroundVars, - Pairs = Rest, - RestModes = Modes - ; atomic(Arg) -> - ( Mode = (+) -> - GoalList = [ Var = Arg | RestGoalList] - ; - GoalList = [ Var == Arg | RestGoalList] - ), - VarDict = VarDict1, - GroundVars1 = GroundVars, - Pairs = Rest, - RestModes = Modes - ; Mode == (+), is_ground(GroundVars,Arg) -> - copy_with_variable_replacement(Arg,ArgCopy,VarDict), - GoalList = [ Var = ArgCopy | RestGoalList], - VarDict = VarDict1, - GroundVars1 = GroundVars, - Pairs = Rest, - RestModes = Modes - ; Mode == (?), is_ground(GroundVars,Arg) -> - copy_with_variable_replacement(Arg,ArgCopy,VarDict), - GoalList = [ Var == ArgCopy | RestGoalList], - VarDict = VarDict1, - GroundVars1 = GroundVars, - Pairs = Rest, - RestModes = Modes - ; Arg =.. [_|Args], - functor(Arg,Fct,N), - functor(Term,Fct,N), - Term =.. [_|Vars], - ( Mode = (+) -> - GoalList = [ Var = Term | RestGoalList ] - ; - GoalList = [ nonvar(Var), Var = Term | RestGoalList ] - ), - pairup(Args,Vars,NewPairs), - append(NewPairs,Rest,Pairs), - replicate(N,Mode,NewModes), - append(NewModes,Modes,RestModes), - VarDict1 = VarDict, - GroundVars1 = GroundVars - ), - head_arg_matches_(Pairs,RestModes,VarDict1,GroundVars1,RestGoalList,NVarDict,NGroundVars). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -% add_heads_types(+ListOfHeads,+VarTypes,-NVarTypes) is det. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -add_heads_types([],VarTypes,VarTypes). -add_heads_types([Head|Heads],VarTypes,NVarTypes) :- - add_head_types(Head,VarTypes,VarTypes1), - add_heads_types(Heads,VarTypes1,NVarTypes). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -% add_head_types(+Head,+VarTypes,-NVarTypes) is det. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -add_head_types(Head,VarTypes,NVarTypes) :- - functor(Head,F,A), - get_constraint_type_det(F/A,ArgTypes), - Head =.. [_|Args], - add_args_types(Args,ArgTypes,VarTypes,NVarTypes). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -% add_args_types(+Terms,+Types,+VarTypes,-NVarTypes) is det. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -add_args_types([],[],VarTypes,VarTypes). -add_args_types([Arg|Args],[Type|Types],VarTypes,NVarTypes) :- - add_arg_types(Arg,Type,VarTypes,VarTypes1), - add_args_types(Args,Types,VarTypes1,NVarTypes). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -% add_arg_types(+Term,+Type,+VarTypes,-NVarTypes) is det. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -add_arg_types(Term,Type,VarTypes,NVarTypes) :- - ( var(Term) -> - ( lookup_eq(VarTypes,Term,_) -> - NVarTypes = VarTypes - ; - NVarTypes = [Term-Type|VarTypes] - ) - ; ground(Term) -> - NVarTypes = VarTypes - ; % TODO improve approximation! - term_variables(Term,Vars), - length(Vars,VarNb), - replicate(VarNb,any,Types), - add_args_types(Vars,Types,VarTypes,NVarTypes) - ). - - - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% add_heads_ground_variables(+ListOfHeads,+GroundVars,-NGroundVars) is det. -% -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -add_heads_ground_variables([],GroundVars,GroundVars). -add_heads_ground_variables([Head|Heads],GroundVars,NGroundVars) :- - add_head_ground_variables(Head,GroundVars,GroundVars1), - add_heads_ground_variables(Heads,GroundVars1,NGroundVars). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% add_head_ground_variables(+Head,+GroundVars,-GroundVars) is det. -% -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -add_head_ground_variables(Head,GroundVars,NGroundVars) :- - functor(Head,F,A), - get_constraint_mode(F/A,ArgModes), - Head =.. [_|Args], - add_arg_ground_variables(Args,ArgModes,GroundVars,NGroundVars). - - -add_arg_ground_variables([],[],GroundVars,GroundVars). -add_arg_ground_variables([Arg|Args],[Mode|Modes],GroundVars,NGroundVars) :- - ( Mode == (+) -> - term_variables(Arg,Vars), - add_var_ground_variables(Vars,GroundVars,GroundVars1) - ; - GroundVars = GroundVars1 - ), - add_arg_ground_variables(Args,Modes,GroundVars1,NGroundVars). - -add_var_ground_variables([],GroundVars,GroundVars). -add_var_ground_variables([Var|Vars],GroundVars,NGroundVars) :- - ( memberchk_eq(Var,GroundVars) -> - GroundVars1 = GroundVars - ; - GroundVars1 = [Var|GroundVars] - ), - add_var_ground_variables(Vars,GroundVars1,NGroundVars). -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% is_ground(+GroundVars,+Term) is semidet. -% -% Determine whether =Term= is always ground. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -is_ground(GroundVars,Term) :- - ( ground(Term) -> - true - ; compound(Term) -> - Term =.. [_|Args], - maplist(is_ground(GroundVars),Args) - ; - memberchk_eq(Term,GroundVars) - ). - -%% check_ground(+GroundVars,+Term,-Goal) is det. -% -% Return runtime check to see whether =Term= is ground. -check_ground(GroundVars,Term,Goal) :- - term_variables(Term,Variables), - check_ground_variables(Variables,GroundVars,Goal). - -check_ground_variables([],_,true). -check_ground_variables([Var|Vars],GroundVars,Goal) :- - ( memberchk_eq(Var,GroundVars) -> - check_ground_variables(Vars,GroundVars,Goal) - ; - Goal = (ground(Var), RGoal), - check_ground_variables(Vars,GroundVars,RGoal) - ). - -rest_heads_retrieval_and_matching(Heads,IDs,ActiveHead,GoalList,Susps,VarDict,NVarDict,PrevHs,PrevSusps,AttrDict) :- - rest_heads_retrieval_and_matching(Heads,IDs,ActiveHead,GoalList,Susps,VarDict,NVarDict,PrevHs,PrevSusps,AttrDict,[],_). - -rest_heads_retrieval_and_matching(Heads,IDs,ActiveHead,GoalList,Susps,VarDict,NVarDict,PrevHs,PrevSusps,AttrDict,GroundVars,NGroundVars) :- - ( Heads = [_|_] -> - rest_heads_retrieval_and_matching_n(Heads,IDs,PrevHs,PrevSusps,ActiveHead,GoalList,Susps,VarDict,NVarDict,AttrDict,GroundVars,NGroundVars) - ; - GoalList = [], - Susps = [], - VarDict = NVarDict, - GroundVars = NGroundVars - ). - -rest_heads_retrieval_and_matching_n([],_,_,_,_,[],[],VarDict,VarDict,_AttrDict,GroundVars,GroundVars). -rest_heads_retrieval_and_matching_n([H|Hs],[ID|IDs],PrevHs,PrevSusps,ActiveHead, - [Goal|Goals],[Susp|Susps],VarDict,NVarDict,_AttrDict,GroundVars,NGroundVars) :- - functor(H,F,A), - head_info(H,A,Vars,_,_,Pairs), - get_store_type(F/A,StoreType), - ( StoreType == default -> - passive_head_via(H,[ActiveHead|PrevHs],VarDict,ViaGoal,VarSusps), - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(F/A,Suspension), - get_static_suspension_term_field(arguments,F/A,Suspension,Vars), - get_static_suspension_field(F/A,Suspension,state,active,GetState) - ) - ), - % create_get_mutable_ref(active,State,GetMutable), - get_constraint_mode(F/A,Mode), - head_arg_matches(Pairs,Mode,VarDict,MatchingGoal,VarDict1,GroundVars,GroundVars1), - NPairs = Pairs, - sbag_member_call(Susp,VarSusps,Sbag), - ExistentialLookup = ( - ViaGoal, - Sbag, - Susp = Suspension, % not inlined - GetState - ) - ; - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(F/A,Suspension), - get_static_suspension_term_field(arguments,F/A,Suspension,Vars) - ) - ), - existential_lookup(StoreType,H,[ActiveHead|PrevHs],VarDict,GroundVars,Suspension,ExistentialLookup,Susp,Pairs,NPairs), - get_constraint_mode(F/A,Mode), - NMode = Mode, % filter_mode(NPairs,Pairs,Mode,NMode), - head_arg_matches(NPairs,NMode,VarDict,MatchingGoal,VarDict1,GroundVars,GroundVars1) - ), - different_from_other_susps(H,Susp,PrevHs,PrevSusps,DiffSuspGoals), - filter_append(NPairs,VarDict1,DA_), % order important here - translate(GroundVars1,DA_,GroundVarsA), - translate(GroundVars1,VarDict1,GroundVarsB), - inline_matching_goal(MatchingGoal,MatchingGoal2,GroundVarsA,GroundVarsB), - Goal = - ( - ExistentialLookup, - DiffSuspGoals, - MatchingGoal2 - ), - rest_heads_retrieval_and_matching_n(Hs,IDs,[H|PrevHs],[Susp|PrevSusps],ActiveHead,Goals,Susps,VarDict1,NVarDict,_NewAttrDict,GroundVars1,NGroundVars). - -inline_matching_goal(A==B,true,GVA,GVB) :- - memberchk_eq(A,GVA), - memberchk_eq(B,GVB), - A=B, !. - -% inline_matching_goal(A=B,true,_,_) :- A=B, !. -inline_matching_goal((A,B),(A2,B2),GVA,GVB) :- !, - inline_matching_goal(A,A2,GVA,GVB), - inline_matching_goal(B,B2,GVA,GVB). -inline_matching_goal(X,X,_,_). - - -filter_mode([],_,_,[]). -filter_mode([Arg-Var|Rest],[_-V|R],[M|Ms],Modes) :- - ( Var == V -> - Modes = [M|MT], - filter_mode(Rest,R,Ms,MT) - ; - filter_mode([Arg-Var|Rest],R,Ms,Modes) - ). - -filter_append([],VarDict,VarDict). -filter_append([X|Xs],VarDict,NVarDict) :- - ( X = silent(_) -> - filter_append(Xs,VarDict,NVarDict) - ; - NVarDict = [X|NVarDict0], - filter_append(Xs,VarDict,NVarDict0) - ). - -check_unique_keys([],_). -check_unique_keys([V|Vs],Dict) :- - lookup_eq(Dict,V,_), - check_unique_keys(Vs,Dict). - -% Generates tests to ensure the found constraint differs from previously found constraints -% TODO: detect more cases where constraints need be different -different_from_other_susps(Head,Susp,Heads,Susps,DiffSuspGoals) :- - different_from_other_susps_(Heads,Susps,Head,Susp,DiffSuspGoalList), - list2conj(DiffSuspGoalList,DiffSuspGoals). - -different_from_other_susps_(_,[],_,_,[]) :- !. -different_from_other_susps_([PreHead|Heads],[PreSusp|Susps],Head,Susp,List) :- - ( functor(Head,F,A), functor(PreHead,F,A), - copy_term_nat(PreHead-Head,PreHeadCopy-HeadCopy), - \+ \+ PreHeadCopy = HeadCopy -> - - List = [Susp \== PreSusp | Tail] - ; - List = Tail - ), - different_from_other_susps_(Heads,Susps,Head,Susp,Tail). - -% passive_head_via(in,in,in,in,out,out,out) :- -passive_head_via(Head,PrevHeads,VarDict,Goal,AllSusps) :- - functor(Head,F,A), - get_constraint_index(F/A,Pos), - /* which static variables may contain runtime variables */ - common_variables(Head,PrevHeads,CommonVars0), - ground_vars([Head],GroundVars), - list_difference_eq(CommonVars0,GroundVars,CommonVars), - /********************************************************/ - global_list_store_name(F/A,Name), - GlobalGoal = nb_getval(Name,AllSusps), - get_constraint_mode(F/A,ArgModes), - ( Vars == [] -> - Goal = GlobalGoal - ; member(CommonVar,CommonVars), nth1(I,ArgModes,(-)), arg(I,Head,Arg), Arg == CommonVar -> - translate([CommonVar],VarDict,[Var]), - gen_get_mod_constraints(F/A,Var,AttrGoal,AllSusps), - Goal = AttrGoal - ; - translate(CommonVars,VarDict,Vars), - add_heads_types(PrevHeads,[],TypeDict), - my_term_copy(TypeDict,VarDict,TypeDictCopy), - gen_get_mod_constraints(F/A,Vars,TypeDictCopy,ViaGoal,AttrGoal,AllSusps), - Goal = - ( ViaGoal -> - AttrGoal - ; - GlobalGoal - ) - ). - -common_variables(T,Ts,Vs) :- - term_variables(T,V1), - term_variables(Ts,V2), - intersect_eq(V1,V2,Vs). - -gen_get_mod_constraints(FA,Vars,TypeDict,ViaGoal,AttrGoal,AllSusps) :- - via_goal(Vars,TypeDict,ViaGoal,Var), - get_target_module(Mod), - AttrGoal = - ( get_attr(Var,Mod,TSusps), - TSuspsEqSusps % TSusps = Susps - ), - get_max_constraint_index(N), - ( N == 1 -> - TSuspsEqSusps = true, % TSusps = Susps - AllSusps = TSusps - ; - get_constraint_index(FA,Pos), - get_suspensions(N,Pos,TSusps,TSuspsEqSusps,AllSusps) - ). -via_goal(Vars,TypeDict,ViaGoal,Var) :- - ( Vars = [] -> - ViaGoal = fail - ; Vars = [A] -> - lookup_eq(TypeDict,A,Type), - ( atomic_type(Type) -> - ViaGoal = var(A), - A = Var - ; - ViaGoal = 'chr newvia_1'(A,Var) - ) - ; Vars = [A,B] -> - ViaGoal = 'chr newvia_2'(A,B,Var) - ; - ViaGoal = 'chr newvia'(Vars,Var) - ). -gen_get_mod_constraints(FA,Var,AttrGoal,AllSusps) :- - get_target_module(Mod), - AttrGoal = - ( get_attr(Var,Mod,TSusps), - TSuspsEqSusps % TSusps = Susps - ), - get_max_constraint_index(N), - ( N == 1 -> - TSuspsEqSusps = true, % TSusps = Susps - AllSusps = TSusps - ; - get_constraint_index(FA,Pos), - get_suspensions(N,Pos,TSusps,TSuspsEqSusps,AllSusps) - ). - -guard_body_copies(Rule,VarDict,GuardCopy,BodyCopy) :- - guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy), - list2conj(GuardCopyList,GuardCopy). - -guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy) :- - Rule = rule(_,H,Guard,Body), - conj2list(Guard,GuardList), - split_off_simple_guard(GuardList,VarDict,GuardPrefix,RestGuardList), - my_term_copy(GuardPrefix-RestGuardList,VarDict,VarDict2,GuardPrefixCopy-RestGuardListCopyCore), - - append(GuardPrefixCopy,[RestGuardCopy],GuardCopyList), - term_variables(RestGuardList,GuardVars), - term_variables(RestGuardListCopyCore,GuardCopyVars), - % variables that are declared to be ground don't need to be locked - ground_vars(H,GroundVars), - list_difference_eq(GuardVars,GroundVars,LockedGuardVars), - ( chr_pp_flag(guard_locks,on), - bagof(('chr lock'(Y)) - ('chr unlock'(Y)), - X ^ (lists:member(X,LockedGuardVars), % X is a variable appearing in the original guard - pairlist:lookup_eq(VarDict,X,Y), % translate X into new variable - memberchk_eq(Y,GuardCopyVars) % redundant check? or multiple entries for X possible? - ), - LocksUnlocks) -> - once(pairup(Locks,Unlocks,LocksUnlocks)) - ; - Locks = [], - Unlocks = [] - ), - list2conj(Locks,LockPhase), - list2conj(Unlocks,UnlockPhase), - list2conj(RestGuardListCopyCore,RestGuardCopyCore), - RestGuardCopy = (LockPhase,(RestGuardCopyCore,UnlockPhase)), - my_term_copy(Body,VarDict2,BodyCopy). - - -split_off_simple_guard([],_,[],[]). -split_off_simple_guard([G|Gs],VarDict,S,C) :- - ( simple_guard(G,VarDict) -> - S = [G|Ss], - split_off_simple_guard(Gs,VarDict,Ss,C) - ; - S = [], - C = [G|Gs] - ). - -% simple guard: cheap and benign (does not bind variables) -simple_guard(G,VarDict) :- - binds_b(G,Vars), - \+ (( member(V,Vars), - lookup_eq(VarDict,V,_) - )). - -active_constraint_detachment(Id,Susp,Head,VarDict,SuspDetachment) :- - functor(Head,F,A), - C = F/A, - ( is_stored(C) -> - ( - ( - Id == [0], chr_pp_flag(store_in_guards, off) - ; - ( get_allocation_occurrence(C,AO), - get_max_occurrence(C,MO), - MO < AO ) - ), - only_ground_indexed_arguments(C), chr_pp_flag(late_allocation,on) -> - SuspDetachment = true - ; - gen_uncond_susp_detachment(Head,Susp,active,VarDict,UnCondSuspDetachment), - ( chr_pp_flag(late_allocation,on) -> - SuspDetachment = - ( var(Susp) -> - true - ; - UnCondSuspDetachment - ) - ; - SuspDetachment = UnCondSuspDetachment - ) - ) - ; - SuspDetachment = true - ). - -partner_constraint_detachments([],[],_,true). -partner_constraint_detachments([Susp|Susps],[Head|Heads],VarDict,(SuspDetachment,SuspsDetachments)) :- - gen_uncond_susp_detachment(Head,Susp,partner,VarDict,SuspDetachment), - partner_constraint_detachments(Susps,Heads,VarDict,SuspsDetachments). - -gen_uncond_susp_detachment(Head,Susp,Role,VarDict,SuspDetachment) :- - functor(Head,F,A), - C = F/A, - ( is_stored(C) -> - SuspDetachment = ( DebugEvent, RemoveInternalGoal), - ( chr_pp_flag(debugable,on) -> - DebugEvent = 'chr debug_event'(remove(Susp)) - ; - DebugEvent = true - ), - remove_constraint_goal(C,Susp,Vars,true,(DeleteCall,Detach),Role,RemoveInternalGoal), - delete_constraint_goal(Head,Susp,VarDict,DeleteCall), - ( \+ only_ground_indexed_arguments(C), \+ get_store_type(C,var_assoc_store(_,_)) -> - detach_constraint_atom(C,Vars,Susp,Detach) - ; - Detach = true - ) - ; - SuspDetachment = true - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ _ -%% / ___|(_)_ __ ___ _ __ __ _ __ _ __ _| |_(_) ___ _ __ / | -%% \___ \| | '_ ` _ \| '_ \ / _` |/ _` |/ _` | __| |/ _ \| '_ \ | | -%% ___) | | | | | | | |_) | (_| | (_| | (_| | |_| | (_) | | | | | | -%% |____/|_|_| |_| |_| .__/ \__,_|\__, |\__,_|\__|_|\___/|_| |_| |_| -%% |_| |___/ -%% {{{ - -simpagation_head1_code(Head,ID,RestHeads,OtherIDs,PragmaRule,F/A,O,Id,L,T) :- - PragmaRule = pragma(Rule,ids(_,Heads2IDs),Pragmas,_Name,RuleNb), - Rule = rule(_Heads,Heads2,Guard,Body), - - head_info(Head,A,Vars,Susp,HeadVars,HeadPairs), - get_constraint_mode(F/A,Mode), - head_arg_matches(HeadPairs,Mode,[],FirstMatching,VarDict1,[],GroundVars), - - build_head(F,A,Id,HeadVars,ClauseHead), - - append(RestHeads,Heads2,Heads), - append(OtherIDs,Heads2IDs,IDs), - reorder_heads(RuleNb,Head,Heads,IDs,NHeads,NIDs), - - guard_splitting(Rule,GuardList0), - ( is_stored_in_guard(F/A, RuleNb) -> - GuardList = [Hole1|GuardList0] - ; - GuardList = GuardList0 - ), - guard_via_reschedule_new(NHeads,GuardList,Head,GuardCopyList,GetRestHeads,RescheduledTest), - - rest_heads_retrieval_and_matching(NHeads,NIDs,Head,GetRestHeads,Susps,VarDict1,VarDict,[],[],[],GroundVars,_), - split_by_ids(NIDs,Susps,OtherIDs,Susps1,Susps1IDs,Susps2,Susps2IDs), - - guard_body_copies3(Rule,GuardList,VarDict,GuardCopyList,BodyCopy), - - ( is_stored_in_guard(F/A, RuleNb) -> - gen_uncond_attach_goal(F/A,Susp,Vars,Attachment,_), - GuardCopyList = [Hole1Copy|_], - Hole1Copy = Attachment - ; - true - ), - - sort_by_key(Susps1,Susps1IDs,SortedSusps1), - partner_constraint_detachments(SortedSusps1,RestHeads,VarDict,SuspsDetachments), - active_constraint_detachment(Id,Susp,Head,VarDict,SuspDetachment), - - ( chr_pp_flag(debugable,on) -> - my_term_copy(Guard - Body, VarDict, DebugGuard - DebugBody), - sort_by_key([Susp|Susps1],[ID|Susps1IDs],RemovedSusps), - sort_by_key(Susps2,Susps2IDs,KeptSusps), - DebugTry = 'chr debug_event'( try(RemovedSusps,KeptSusps,DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply(RemovedSusps,KeptSusps,DebugGuard,DebugBody)), - instrument_goal((!),DebugTry,DebugApply,Cut) - ; - Cut = (!) - ), - - Clause = ( ClauseHead :- - FirstMatching, - RescheduledTest, - Cut, - SuspsDetachments, - SuspDetachment, - BodyCopy - ), - add_location(Clause,RuleNb,LocatedClause), - L = [LocatedClause | T]. - -% }}} - -split_by_ids([],[],_,[],[]). -split_by_ids([I|Is],[S|Ss],I1s,S1s,S2s) :- - ( memberchk_eq(I,I1s) -> - S1s = [S | R1s], - S2s = R2s - ; - S1s = R1s, - S2s = [S | R2s] - ), - split_by_ids(Is,Ss,I1s,R1s,R2s). - -split_by_ids([],[],_,[],[],[],[]). -split_by_ids([I|Is],[S|Ss],I1s,S1s,SI1s,S2s,SI2s) :- - ( memberchk_eq(I,I1s) -> - S1s = [S | R1s], - SI1s = [I|RSI1s], - S2s = R2s, - SI2s = RSI2s - ; - S1s = R1s, - SI1s = RSI1s, - S2s = [S | R2s], - SI2s = [I|RSI2s] - ), - split_by_ids(Is,Ss,I1s,R1s,RSI1s,R2s,RSI2s). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ ____ -%% / ___|(_)_ __ ___ _ __ __ _ __ _ __ _| |_(_) ___ _ __ |___ \ -%% \___ \| | '_ ` _ \| '_ \ / _` |/ _` |/ _` | __| |/ _ \| '_ \ __) | -%% ___) | | | | | | | |_) | (_| | (_| | (_| | |_| | (_) | | | | / __/ -%% |____/|_|_| |_| |_| .__/ \__,_|\__, |\__,_|\__|_|\___/|_| |_| |_____| -%% |_| |___/ - -%% Genereate prelude + worker predicate -%% prelude calls worker -%% worker iterates over one type of removed constraints -simpagation_head2_code(Head2,ID,RestHeads2,RestIDs,PragmaRule,FA,O,Id,L,T) :- - PragmaRule = pragma(Rule,ids(IDs1,IDs2),Pragmas,_Name,RuleNb), - Rule = rule(Heads1,_,Guard,Body), - append(Heads1,RestHeads2,Heads), - append(IDs1,RestIDs,IDs), - reorder_heads(RuleNb,Head2,Heads,IDs,[NHead|NHeads],[NID|NIDs]), - simpagation_head2_prelude(Head2,NHead,[NHeads,Guard,Body],FA,O,Id,L,L1), - extend_id(Id,Id1), - ( memberchk_eq(NID,IDs2) -> - simpagation_universal_searches(NHeads,NIDs,IDs2,[NHead,Head2],Rule,FA,O,NextHeads,PreHeads,NextIDs,Id1,Id2,L1,L2) - ; - L1 = L2, Id1 = Id2,NextHeads = NHeads, PreHeads = [NHead,Head2], NextIDs = NIDs - ), - universal_search_iterator_end(PreHeads,NextHeads,Rule,FA,O,Id2,L2,L3), - simpagation_head2_worker(PreHeads,NextHeads,NextIDs,ID,PragmaRule,FA,O,Id2,L3,T). - -simpagation_universal_searches([],[],_,PreHeads,_,_,_,[],PreHeads,[],Id,Id,L,L). -simpagation_universal_searches(Heads,[ID|IDs],IDs2,PreHeads,Rule,C,O,OutHeads,OutPreHeads,OutIDs,Id,NId,L,T) :- - Heads = [Head|RHeads], - inc_id(Id,Id1), - universal_search_iterator_end(PreHeads,Heads,Rule,C,O,Id,L,L0), - universal_search_iterator(Heads,PreHeads,Rule,C,O,Id,L0,L1), - ( memberchk_eq(ID,IDs2) -> - simpagation_universal_searches(RHeads,IDs,IDs2,[Head|PreHeads],Rule,C,O,OutHeads,OutPreHeads,OutIDs,Id1,NId,L1,T) - ; - NId = Id1, L1 = T, OutHeads = RHeads, OutPreHeads = [Head|PreHeads], IDs = OutIDs - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_prelude(Head,Head1,Rest,F/A,O,Id1,L,T) :- - head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs), - build_head(F,A,Id1,VarsSusp,ClauseHead), - get_constraint_mode(F/A,Mode), - head_arg_matches(HeadPairs,Mode,[],FirstMatching,VarDict,[],GroundVars), - - lookup_passive_head(Head1,[Head],VarDict,GroundVars,ModConstraintsGoal,AllSusps), - - gen_occ_allocation(F/A,O,Vars,Susp,ConstraintAllocationGoal), - - extend_id(Id1,DelegateId), - extra_active_delegate_variables(Head,[Head1|Rest],VarDict,ExtraVars), - append([AllSusps|VarsSusp],ExtraVars,DelegateCallVars), - build_head(F,A,[O|DelegateId],DelegateCallVars,Delegate), - - PreludeClause = - ( ClauseHead :- - FirstMatching, - ModConstraintsGoal, - !, - ConstraintAllocationGoal, - Delegate - ), - add_dummy_location(PreludeClause,LocatedPreludeClause), - L = [LocatedPreludeClause|T]. - -extra_active_delegate_variables(Term,Terms,VarDict,Vars) :- - Term =.. [_|Args], - delegate_variables(Term,Terms,VarDict,Args,Vars). - -passive_delegate_variables(Term,PrevTerms,NextTerms,VarDict,Vars) :- - term_variables(PrevTerms,PrevVars), - delegate_variables(Term,NextTerms,VarDict,PrevVars,Vars). - -delegate_variables(Term,Terms,VarDict,PrevVars,Vars) :- - term_variables(Term,V1), - term_variables(Terms,V2), - intersect_eq(V1,V2,V3), - list_difference_eq(V3,PrevVars,V4), - translate(V4,VarDict,Vars). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_worker([CurrentHead|PreHeads],NextHeads,NextIDs,ID,PragmaRule,F/A,O,Id,L,T) :- - PragmaRule = pragma(Rule,ids(IDs1,_),Pragmas,_,RuleNb), - Rule = rule(_,_,Guard,Body), - get_prop_inner_loop_vars(PreHeads,[CurrentHead,NextHeads,Guard,Body],PreVarsAndSusps,VarDict,Susp,Vars,PreSusps), - - gen_var(OtherSusp), - gen_var(OtherSusps), - - functor(CurrentHead,OtherF,OtherA), - gen_vars(OtherA,OtherVars), - head_info(CurrentHead,OtherA,OtherVars,OtherSusp,_VarsSusp,HeadPairs), - get_constraint_mode(OtherF/OtherA,Mode), - head_arg_matches(HeadPairs,Mode,VarDict,FirstMatching,VarDict1,[],GroundVars), - - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(OtherF/OtherA,OtherSuspension), - get_static_suspension_field(OtherF/OtherA,OtherSuspension,state,active,GetState), - get_static_suspension_term_field(arguments,OtherF/OtherA,OtherSuspension,OtherVars) - ) - ), - % create_get_mutable_ref(active,State,GetMutable), - different_from_other_susps(CurrentHead,OtherSusp,PreHeads,PreSusps,DiffSuspGoals), - CurrentSuspTest = ( - OtherSusp = OtherSuspension, - GetState, - DiffSuspGoals, - FirstMatching - ), - - ClauseVars = [[OtherSusp|OtherSusps]|PreVarsAndSusps], - build_head(F,A,[O|Id],ClauseVars,ClauseHead), - - guard_splitting(Rule,GuardList0), - ( is_stored_in_guard(F/A, RuleNb) -> - GuardList = [Hole1|GuardList0] - ; - GuardList = GuardList0 - ), - guard_via_reschedule_new(NextHeads,GuardList,[CurrentHead|PreHeads],GuardCopyList,RestSuspsRetrieval,RescheduledTest), - - rest_heads_retrieval_and_matching(NextHeads,NextIDs,[CurrentHead|PreHeads],RestSuspsRetrieval,Susps,VarDict1,VarDict2,[CurrentHead|PreHeads],[OtherSusp|PreSusps],[]), - split_by_ids(NextIDs,Susps,IDs1,Susps1,Susps2), - split_by_ids(NextIDs,NextHeads,IDs1,RestHeads1,_), - - partner_constraint_detachments([OtherSusp | Susps1],[CurrentHead|RestHeads1],VarDict2,Susps1Detachments), - - RecursiveVars = [OtherSusps|PreVarsAndSusps], - build_head(F,A,[O|Id],RecursiveVars,RecursiveCall), - RecursiveVars2 = [[]|PreVarsAndSusps], - build_head(F,A,[O|Id],RecursiveVars2,RecursiveCall2), - - guard_body_copies3(Rule,GuardList,VarDict2,GuardCopyList,BodyCopy), - ( is_stored_in_guard(F/A, RuleNb) -> - GuardCopyList = [GuardAttachment|_] % once( ) ?? - ; - true - ), - - ( is_observed(F/A,O) -> - gen_uncond_attach_goal(F/A,Susp,Vars,Attachment,Generation), - gen_state_cond_call(Susp,F/A,RecursiveCall,Generation,ConditionalRecursiveCall), - gen_state_cond_call(Susp,F/A,RecursiveCall2,Generation,ConditionalRecursiveCall2) - ; - Attachment = true, - ConditionalRecursiveCall = RecursiveCall, - ConditionalRecursiveCall2 = RecursiveCall2 - ), - - ( chr_pp_flag(debugable,on) -> - my_term_copy(Guard - Body, VarDict, DebugGuard - DebugBody), - DebugTry = 'chr debug_event'( try([OtherSusp|Susps1],[Susp|Susps2],DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply([OtherSusp|Susps1],[Susp|Susps2],DebugGuard,DebugBody)) - ; - DebugTry = true, - DebugApply = true - ), - - ( is_stored_in_guard(F/A, RuleNb) -> - GuardAttachment = Attachment, - BodyAttachment = true - ; - GuardAttachment = true, - BodyAttachment = Attachment % will be true if not observed at all - ), - - ( member(unique(ID1,UniqueKeys), Pragmas), - check_unique_keys(UniqueKeys,VarDict) -> - Clause = - ( ClauseHead :- - ( CurrentSuspTest -> - ( RescheduledTest, - DebugTry -> - DebugApply, - Susps1Detachments, - BodyAttachment, - BodyCopy, - ConditionalRecursiveCall2 - ; - RecursiveCall2 - ) - ; - RecursiveCall - ) - ) - ; - Clause = - ( ClauseHead :- - ( CurrentSuspTest, - RescheduledTest, - DebugTry -> - DebugApply, - Susps1Detachments, - BodyAttachment, - BodyCopy, - ConditionalRecursiveCall - ; - RecursiveCall - ) - ) - ), - add_location(Clause,RuleNb,LocatedClause), - L = [LocatedClause | T]. - -gen_state_cond_call(Susp,FA,Call,Generation,ConditionalCall) :- - ( may_trigger(FA) -> - does_use_field(FA,generation), - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(FA,Suspension), - get_update_static_suspension_field(FA,Susp,Suspension,state,active,inactive,GetState,UpdateState), - get_static_suspension_field(FA,Suspension,generation,Generation,GetGeneration), - get_static_suspension_term_field(arguments,FA,Suspension,Args) - ) - ) - ; - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(FA,Suspension), - get_update_static_suspension_field(FA,Susp,Suspension,state,active,inactive,GetState,UpdateState), - get_static_suspension_term_field(arguments,FA,Suspension,Args) - ) - ), - GetGeneration = true - ), - ConditionalCall = - ( Susp = Suspension, - GetState, - GetGeneration -> - UpdateState, - Call - ; - true - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ -%% | _ \ _ __ ___ _ __ __ _ __ _ __ _| |_(_) ___ _ __ -%% | |_) | '__/ _ \| '_ \ / _` |/ _` |/ _` | __| |/ _ \| '_ \ -%% | __/| | | (_) | |_) | (_| | (_| | (_| | |_| | (_) | | | | -%% |_| |_| \___/| .__/ \__,_|\__, |\__,_|\__|_|\___/|_| |_| -%% |_| |___/ - -propagation_code(Head,ID,RestHeads,RestIDs,Rule,RuleNb,FA,O,Id,L,T) :- - ( RestHeads == [] -> - propagation_single_headed(Head,ID,Rule,RuleNb,FA,O,Id,L,T) - ; - propagation_multi_headed(Head,RestHeads,RestIDs,Rule,RuleNb,FA,O,Id,L,T) - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Single headed propagation -%% everything in a single clause -propagation_single_headed(Head,ID,Rule,RuleNb,F/A,O,Id,ProgramList,ProgramTail) :- - head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs), - build_head(F,A,Id,VarsSusp,ClauseHead), - - inc_id(Id,NextId), - build_head(F,A,NextId,VarsSusp,NextHead), - - get_constraint_mode(F/A,Mode), - head_arg_matches(HeadPairs,Mode,[],HeadMatching,VarDict,[],GroundVars), - guard_body_copies(Rule,VarDict,GuardCopy,BodyCopy), - - % - recursive call - - RecursiveCall = NextHead, - - ( unconditional_occurrence(F/A,O), chr_pp_flag(late_allocation,on) -> - ActualCut = true - ; - ActualCut = ! - ), - - Rule = rule(_,_,Guard,Body), - ( chr_pp_flag(debugable,on) -> - my_term_copy(Guard - Body, VarDict, DebugGuard - DebugBody), - DebugTry = 'chr debug_event'( try([],[Susp],DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply([],[Susp],DebugGuard,DebugBody)), - instrument_goal(ActualCut,DebugTry,DebugApply,Cut) - ; - Cut = ActualCut - ), - ( may_trigger(F/A), \+ has_no_history(RuleNb)-> - use_auxiliary_predicate(novel_production), - use_auxiliary_predicate(extend_history), - does_use_history(F/A,O), - gen_occ_allocation(F/A,O,Vars,Susp,Allocation), - - ( named_history(RuleNb,HistoryName,HistoryIDs) -> - ( HistoryIDs == [] -> - empty_named_history_novel_production(HistoryName,NovelProduction), - empty_named_history_extend_history(HistoryName,ExtendHistory) - ; - Tuple = HistoryName - ) - ; - Tuple = RuleNb - ), - - ( var(NovelProduction) -> - NovelProduction = '$novel_production'(Susp,Tuple), - ExtendHistory = '$extend_history'(Susp,Tuple) - ; - true - ), - - ( is_observed(F/A,O) -> - gen_uncond_attach_goal(F/A,Susp,Vars,Attachment,Generation), - gen_state_cond_call(Susp,F/A,RecursiveCall,Generation,ConditionalRecursiveCall) - ; - Attachment = true, - ConditionalRecursiveCall = RecursiveCall - ) - ; - Allocation = true, - NovelProduction = true, - ExtendHistory = true, - - ( is_observed(F/A,O) -> - get_allocation_occurrence(F/A,AllocO), - ( O == AllocO -> - gen_insert_constraint_internal_goal(F/A,Attachment,VarsSusp,Vars,Susp), - Generation = 0 - ; % more room for improvement? - Attachment = (Attachment1, Attachment2), - gen_occ_allocation(F/A,O,Vars,Susp,Attachment1), - gen_uncond_attach_goal(F/A,Susp,Vars,Attachment2,Generation) - ), - gen_state_cond_call(Susp,F/A,RecursiveCall,Generation,ConditionalRecursiveCall) - ; - gen_occ_allocation(F/A,O,Vars,Susp,Attachment), - ConditionalRecursiveCall = RecursiveCall - ) - ), - - ( is_stored_in_guard(F/A, RuleNb) -> - GuardAttachment = Attachment, - BodyAttachment = true - ; - GuardAttachment = true, - BodyAttachment = Attachment % will be true if not observed at all - ), - - Clause = ( - ClauseHead :- - HeadMatching, - Allocation, - NovelProduction, - GuardAttachment, - GuardCopy, - Cut, - ExtendHistory, - BodyAttachment, - BodyCopy, - ConditionalRecursiveCall - ), - add_location(Clause,RuleNb,LocatedClause), - ProgramList = [LocatedClause | ProgramTail]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% multi headed propagation -%% prelude + predicates to accumulate the necessary combinations of suspended -%% constraints + predicate to execute the body -propagation_multi_headed(Head,RestHeads,RestIDs,Rule,RuleNb,FA,O,Id,L,T) :- - RestHeads = [First|Rest], - propagation_prelude(Head,RestHeads,Rule,FA,O,Id,L,L1), - extend_id(Id,ExtendedId), - propagation_nested_code(Rest,[First,Head],RestIDs,Rule,RuleNb,FA,O,ExtendedId,L1,T). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -propagation_prelude(Head,[First|Rest],Rule,F/A,O,Id,L,T) :- - head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs), - build_head(F,A,Id,VarsSusp,PreludeHead), - get_constraint_mode(F/A,Mode), - head_arg_matches(HeadPairs,Mode,[],FirstMatching,VarDict,[],GroundVars), - Rule = rule(_,_,Guard,Body), - extra_active_delegate_variables(Head,[First,Rest,Guard,Body],VarDict,ExtraVars), - - lookup_passive_head(First,[Head],VarDict,GroundVars,FirstSuspGoal,Susps), - - gen_occ_allocation(F/A,O,Vars,Susp,CondAllocation), - - extend_id(Id,NestedId), - append([Susps|VarsSusp],ExtraVars,NestedVars), - build_head(F,A,[O|NestedId],NestedVars,NestedHead), - NestedCall = NestedHead, - - Prelude = ( - PreludeHead :- - FirstMatching, - FirstSuspGoal, - !, - CondAllocation, - NestedCall - ), - add_dummy_location(Prelude,LocatedPrelude), - L = [LocatedPrelude|T]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -propagation_nested_code([],[CurrentHead|PreHeads],RestIDs,Rule,RuleNb,FA,O,Id,L,T) :- - universal_search_iterator_end([CurrentHead|PreHeads],[],Rule,FA,O,Id,L,L1), - propagation_body(CurrentHead,PreHeads,RestIDs,Rule,RuleNb,FA,O,Id,L1,T). - -propagation_nested_code([Head|RestHeads],PreHeads,RestIDs,Rule,RuleNb,FA,O,Id,L,T) :- - universal_search_iterator_end(PreHeads,[Head|RestHeads],Rule,FA,O,Id,L,L1), - universal_search_iterator([Head|RestHeads],PreHeads,Rule,FA,O,Id,L1,L2), - inc_id(Id,IncId), - propagation_nested_code(RestHeads,[Head|PreHeads],RestIDs,Rule,RuleNb,FA,O,IncId,L2,T). - -%check_fd_lookup_condition(_,_,_,_) :- fail. -check_fd_lookup_condition(F,A,_,_) :- - get_store_type(F/A,global_singleton), !. -check_fd_lookup_condition(F,A,CurrentHead,PreHeads) :- - \+ may_trigger(F/A), - get_functional_dependency(F/A,1,P,K), - copy_term(P-K,CurrentHead-Key), - term_variables(PreHeads,PreVars), - intersect_eq(Key,PreVars,Key),!. - -propagation_body(CurrentHead,PreHeads,RestIDs,Rule,RuleNb,F/A,O,Id,L,T) :- - Rule = rule(_,H2,Guard,Body), - gen_var_susp_list_for_b(PreHeads,[CurrentHead,Guard,Body],VarDict1,PreVarsAndSuspsList,FirstVarsSusp,AllSusps,PrevIterators), - flatten(PreVarsAndSuspsList,PreVarsAndSusps), - init(AllSusps,RestSusps), - last(AllSusps,Susp), - gen_var(OtherSusp), - gen_var(OtherSusps), - functor(CurrentHead,OtherF,OtherA), - gen_vars(OtherA,OtherVars), - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(OtherF/OtherA,Suspension), - get_static_suspension_field(OtherF/OtherA,Suspension,state,active,GetState), - get_static_suspension_term_field(arguments,OtherF/OtherA,Suspension,OtherVars) - ) - ), - % create_get_mutable_ref(active,State,GetMutable), - CurrentSuspTest = ( - OtherSusp = Suspension, - GetState - ), - ClauseVars = [[OtherSusp|OtherSusps]|PreVarsAndSusps], - build_head(F,A,[O|Id],ClauseVars,ClauseHead), - ( check_fd_lookup_condition(OtherF,OtherA,CurrentHead,PreHeads) -> % iterator (OtherSusps) is empty at runtime - universal_search_iterator_failure_vars(PreHeads,Id,PreVarsAndSuspsList,FirstVarsSusp,PrevIterators,PreVarsAndSusps1,PrevId0), - RecursiveVars = PreVarsAndSusps1 - ; - RecursiveVars = [OtherSusps|PreVarsAndSusps], - PrevId0 = Id - ), - ( PrevId0 = [_] -> - PrevId = PrevId0 - ; - PrevId = [O|PrevId0] - ), - build_head(F,A,PrevId,RecursiveVars,RecursiveHead), - RecursiveCall = RecursiveHead, - CurrentHead =.. [_|OtherArgs], - pairup(OtherArgs,OtherVars,OtherPairs), - get_constraint_mode(OtherF/OtherA,Mode), - head_arg_matches(OtherPairs,Mode,VarDict1,Matching,VarDict), - - different_from_other_susps(CurrentHead,OtherSusp,PreHeads,RestSusps,DiffSuspGoals), - guard_body_copies(Rule,VarDict,GuardCopy,BodyCopy), - get_occurrence(F/A,O,_,ID), - - ( is_observed(F/A,O) -> - init(FirstVarsSusp,FirstVars), - gen_uncond_attach_goal(F/A,Susp,FirstVars,Attachment,Generation), - gen_state_cond_call(Susp,F/A,RecursiveCall,Generation,ConditionalRecursiveCall) - ; - Attachment = true, - ConditionalRecursiveCall = RecursiveCall - ), - ( (is_least_occurrence(RuleNb) ; has_no_history(RuleNb)) -> - NovelProduction = true, - ExtendHistory = true - ; \+ may_trigger(F/A), maplist(is_passive(RuleNb),RestIDs) -> - NovelProduction = true, - ExtendHistory = true - ; - get_occurrence(F/A,O,_,ID), - use_auxiliary_predicate(novel_production), - use_auxiliary_predicate(extend_history), - does_use_history(F/A,O), - ( named_history(RuleNb,HistoryName,HistoryIDs) -> - ( HistoryIDs == [] -> - empty_named_history_novel_production(HistoryName,NovelProduction), - empty_named_history_extend_history(HistoryName,ExtendHistory) - ; - reverse([OtherSusp|RestSusps],NamedSusps), - named_history_susps(HistoryIDs,[ID|RestIDs],[Susp|NamedSusps],HistorySusps), - HistorySusps = [HistorySusp|_], - - ( length(HistoryIDs, 1) -> - ExtendHistory = '$extend_history'(HistorySusp,HistoryName), - NovelProduction = '$novel_production'(HistorySusp,HistoryName) - ; - findall(ConstraintSymbol,(member(SomeID,HistoryIDs),get_occurrence_from_id(ConstraintSymbol,_,RuleNb,SomeID)),ConstraintSymbols), - Tuple =.. [t,HistoryName|HistorySusps] - ) - ) - ; - HistorySusp = Susp, - maplist(extract_symbol,H2,ConstraintSymbols), - sort([ID|RestIDs],HistoryIDs), - history_susps(RestIDs,[OtherSusp|RestSusps],Susp,ID,HistorySusps), - Tuple =.. [t,RuleNb|HistorySusps] - ), - - ( var(NovelProduction) -> - novel_production_calls(ConstraintSymbols,HistoryIDs,HistorySusps,RuleNb,TupleVar,NovelProductions), - ExtendHistory = '$extend_history'(HistorySusp,TupleVar), - NovelProduction = ( TupleVar = Tuple, NovelProductions ) - ; - true - ) - ), - - - ( chr_pp_flag(debugable,on) -> - Rule = rule(_,_,Guard,Body), - my_term_copy(Guard - Body, VarDict, DebugGuard - DebugBody), - get_occurrence(F/A,O,_,ID), - sort_by_key([Susp,OtherSusp|RestSusps],[ID|RestIDs],KeptSusps), - DebugTry = 'chr debug_event'( try([],KeptSusps,DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply([],KeptSusps,DebugGuard,DebugBody)) - ; - DebugTry = true, - DebugApply = true - ), - - ( is_stored_in_guard(F/A, RuleNb) -> - GuardAttachment = Attachment, - BodyAttachment = true - ; - GuardAttachment = true, - BodyAttachment = Attachment % will be true if not observed at all - ), - - Clause = ( - ClauseHead :- - ( CurrentSuspTest, - DiffSuspGoals, - Matching, - NovelProduction, - GuardAttachment, - GuardCopy, - DebugTry -> - DebugApply, - ExtendHistory, - BodyAttachment, - BodyCopy, - ConditionalRecursiveCall - ; RecursiveCall - ) - ), - add_location(Clause,RuleNb,LocatedClause), - L = [LocatedClause|T]. - -extract_symbol(Head,F/A) :- - functor(Head,F,A). - -novel_production_calls([],[],[],_,_,true). -novel_production_calls([ConstraintSymbol|ConstraintSymbols],[ID|IDs],[Suspension|Suspensions],RuleNb,Tuple,(Goal,Goals)) :- - get_occurrence_from_id(ConstraintSymbol,Occurrence,RuleNb,ID), - delay_phase_end(validate_store_type_assumptions,novel_production_call(ConstraintSymbol,Occurrence,'$novel_production'(Suspension,Tuple),Goal)), - novel_production_calls(ConstraintSymbols,IDs,Suspensions,RuleNb,Tuple,Goals). - -history_susps(RestIDs,ReversedRestSusps,Susp,ID,HistorySusps) :- - reverse(ReversedRestSusps,RestSusps), - sort_by_key([Susp|RestSusps],[ID|RestIDs],HistorySusps). - -named_history_susps([],_,_,[]). -named_history_susps([HistoryID|HistoryIDs],IDs,Susps,[HistorySusp|HistorySusps]) :- - select2(HistoryID,HistorySusp,IDs,Susps,RestIDs,RestSusps), !, - named_history_susps(HistoryIDs,RestIDs,RestSusps,HistorySusps). - - - -gen_var_susp_list_for([Head],Terms,VarDict,HeadVars,VarsSusp,Susp) :- - !, - functor(Head,F,A), - head_info(Head,A,_Vars,Susp,VarsSusp,HeadPairs), - get_constraint_mode(F/A,Mode), - head_arg_matches(HeadPairs,Mode,[],_,VarDict), - extra_active_delegate_variables(Head,Terms,VarDict,ExtraVars), - append(VarsSusp,ExtraVars,HeadVars). -gen_var_susp_list_for([Head|Heads],Terms,NVarDict,VarsSusps,Rest,Susps) :- - gen_var_susp_list_for(Heads,[Head|Terms],VarDict,Rest,_,_), - functor(Head,F,A), - gen_var(Susps), - head_info(Head,A,_Vars,Susp,_VarsSusp,HeadPairs), - get_constraint_mode(F/A,Mode), - head_arg_matches(HeadPairs,Mode,VarDict,_,NVarDict), - passive_delegate_variables(Head,Heads,Terms,NVarDict,HeadVars), - append(HeadVars,[Susp,Susps|Rest],VarsSusps). - - % returns - % VarDict for the copies of variables in the original heads - % VarsSuspsList list of lists of arguments for the successive heads - % FirstVarsSusp top level arguments - % SuspList list of all suspensions - % Iterators list of all iterators -gen_var_susp_list_for_b([Head],NextHeads,VarDict,[HeadVars],VarsSusp,[Susp],[]) :- - !, - functor(Head,F,A), - head_info(Head,A,_Vars,Susp,VarsSusp,Pairs), % make variables for argument positions - get_constraint_mode(F/A,Mode), - head_arg_matches(Pairs,Mode,[],_,VarDict), % copy variables inside arguments, build dictionary - extra_active_delegate_variables(Head,NextHeads,VarDict,ExtraVars), % decide what additional variables are needed - append(VarsSusp,ExtraVars,HeadVars). % add additional variables to head variables -gen_var_susp_list_for_b([Head|Heads],NextHeads,NVarDict,[Vars|RestVars],FirstVarsSusp,[Susp|SuspList],[Susps|Iterators]) :- - gen_var_susp_list_for_b(Heads,[Head|NextHeads],VarDict,RestVars,FirstVarsSusp,SuspList,Iterators), - functor(Head,F,A), - gen_var(Susps), - head_info(Head,A,_Vars,Susp,_VarsSusp,HeadPairs), - get_constraint_mode(F/A,Mode), - head_arg_matches(HeadPairs,Mode,VarDict,_,NVarDict), - passive_delegate_variables(Head,Heads,NextHeads,NVarDict,HeadVars), - append(HeadVars,[Susp,Susps],Vars). - -get_prop_inner_loop_vars([Head],NextHeads,HeadVars,VarDict,Susp,Vars,[]) :- - !, - functor(Head,F,A), - head_info(Head,A,Vars,Susp,VarsSusp,Pairs), - get_constraint_mode(F/A,Mode), - head_arg_matches(Pairs,Mode,[],_,VarDict), - extra_active_delegate_variables(Head,NextHeads,VarDict,ExtraVars), - append(VarsSusp,ExtraVars,HeadVars). -get_prop_inner_loop_vars([Head|Heads],Terms,VarsSusps,NVarDict,MainSusp,MainVars,[Susp|RestSusps]) :- - get_prop_inner_loop_vars(Heads,[Head|Terms],RestVarsSusp,VarDict,MainSusp,MainVars,RestSusps), - functor(Head,F,A), - gen_var(Susps), - head_info(Head,A,_Vars,Susp,_VarsSusp,Pairs), - get_constraint_mode(F/A,Mode), - head_arg_matches(Pairs,Mode,VarDict,_,NVarDict), - passive_delegate_variables(Head,Heads,Terms,NVarDict,HeadVars), - append(HeadVars,[Susp,Susps|RestVarsSusp],VarsSusps). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ _ -%% | _ \ __ _ ___ ___(_)_ _____ | | | | ___ __ _ __| | -%% | |_) / _` / __/ __| \ \ / / _ \ | |_| |/ _ \/ _` |/ _` | -%% | __/ (_| \__ \__ \ |\ V / __/ | _ | __/ (_| | (_| | -%% |_| \__,_|___/___/_| \_/ \___| |_| |_|\___|\__,_|\__,_| -%% -%% ____ _ _ _ -%% | _ \ ___| |_ _ __(_) _____ ____ _| | -%% | |_) / _ \ __| '__| |/ _ \ \ / / _` | | -%% | _ < __/ |_| | | | __/\ V / (_| | | -%% |_| \_\___|\__|_| |_|\___| \_/ \__,_|_| -%% -%% ____ _ _ -%% | _ \ ___ ___ _ __ __| | ___ _ __(_)_ __ __ _ -%% | |_) / _ \/ _ \| '__/ _` |/ _ \ '__| | '_ \ / _` | -%% | _ < __/ (_) | | | (_| | __/ | | | | | | (_| | -%% |_| \_\___|\___/|_| \__,_|\___|_| |_|_| |_|\__, | -%% |___/ - -reorder_heads(RuleNb,Head,RestHeads,RestIDs,NRestHeads,NRestIDs) :- - ( chr_pp_flag(reorder_heads,on), length(RestHeads,Length), Length =< 6 -> - reorder_heads_main(RuleNb,Head,RestHeads,RestIDs,NRestHeads,NRestIDs) - ; - NRestHeads = RestHeads, - NRestIDs = RestIDs - ). - -reorder_heads_main(RuleNb,Head,RestHeads,RestIDs,NRestHeads,NRestIDs) :- - term_variables(Head,Vars), - InitialData = entry([],[],Vars,RestHeads,RestIDs,RuleNb), - copy_term_nat(InitialData,InitialDataCopy), - a_star(InitialDataCopy,FD^(chr_translate:final_data(FD)),N^EN^C^(chr_translate:expand_data(N,EN,C)),FinalData), - InitialDataCopy = InitialData, - FinalData = entry(RNRestHeads,RNRestIDs,_,_,_,_), - reverse(RNRestHeads,NRestHeads), - reverse(RNRestIDs,NRestIDs). - -final_data(Entry) :- - Entry = entry(_,_,_,_,[],_). - -expand_data(Entry,NEntry,Cost) :- - Entry = entry(Heads,IDs,Vars,NHeads,NIDs,RuleNb), - select2(Head1,ID1,NHeads,NIDs,NHeads1,NIDs1), - term_variables([Head1|Vars],Vars1), - NEntry = entry([Head1|Heads],[ID1|IDs],Vars1,NHeads1,NIDs1,RuleNb), - order_score(Head1,ID1,Vars,NHeads1,RuleNb,Cost). - -% Assigns score to head based on known variables and heads to lookup -% order_score(+head,+id,+knownvars,+heads,+rule_nb,-score). {{{ -order_score(Head,ID,KnownVars,RestHeads,RuleNb,Score) :- - functor(Head,F,A), - get_store_type(F/A,StoreType), - order_score(StoreType,Head,ID,KnownVars,RestHeads,RuleNb,99999,Score). -% }}} - -%% order_score(+store+_type,+head,+id,+vars,+heads,+rule_nb,+score,-score) {{{ -order_score(default,Head,_ID,KnownVars,RestHeads,RuleNb,CScore,NScore) :- - term_variables(Head,HeadVars0), - term_variables(RestHeads,RestVars), - ground_vars([Head],GroundVars), - list_difference_eq(HeadVars0,GroundVars,HeadVars), - order_score_vars(HeadVars,KnownVars,RestVars,Score), - NScore is min(CScore,Score). -order_score(multi_inthash(Indexes),Head,_ID,KnownVars,RestHeads,RuleNb,CScore,Score) :- - ( CScore =< 100 -> - Score = CScore - ; - order_score_indexes(Indexes,Head,KnownVars,Score) - ). -order_score(multi_hash(Indexes),Head,_ID,KnownVars,RestHeads,RuleNb,CScore,Score) :- - ( CScore =< 100 -> - Score = CScore - ; - order_score_indexes(Indexes,Head,KnownVars,Score) - ). -order_score(global_ground,Head,ID,KnownVars,RestHeads,RuleNb,CScore,NScore) :- - term_variables(Head,HeadVars), - term_variables(RestHeads,RestVars), - order_score_vars(HeadVars,KnownVars,RestVars,Score_), - Score is Score_ * 200, - NScore is min(CScore,Score). -order_score(var_assoc_store(_,_),_,_,_,_,_,_,1). -order_score(global_singleton,_Head,ID,_KnownVars,_RestHeads,_RuleNb,_,Score) :- - Score = 1. % guaranteed O(1) -order_score(multi_store(StoreTypes),Head,ID,KnownVars,RestHeads,RuleNb,CScore,Score) :- - multi_order_score(StoreTypes,Head,ID,KnownVars,RestHeads,RuleNb,CScore,Score). -multi_order_score([],_,_,_,_,_,Score,Score). -multi_order_score([StoreType|StoreTypes],Head,ID,KnownVars,RestHeads,RuleNb,Score0,Score) :- - ( order_score(StoreType,Head,ID,KnownVars,RestHeads,RuleNb,Score0,Score1) -> true - ; Score1 = Score0 - ), - multi_order_score(StoreTypes,Head,ID,KnownVars,RestHeads,RuleNb,Score1,Score). - -order_score(identifier_store(Index),Head,ID,KnownVars,RestHeads,RuleNb,CScore,Score) :- - Score is min(CScore,10). -order_score(type_indexed_identifier_store(_,_),Head,ID,KnownVars,RestHeads,RuleNb,CScore,Score) :- - Score is min(CScore,10). -% }}} - - -%% order_score_indexes(+indexes,+head,+vars,-score). {{{ -order_score_indexes(Indexes,Head,Vars,Score) :- - copy_term_nat(Head+Vars,HeadCopy+VarsCopy), - numbervars(VarsCopy,0,_), - order_score_indexes(Indexes,HeadCopy,Score). - -order_score_indexes([I|Is],Head,Score) :- - multi_hash_key_args(I,Head,Args), - ( maplist(ground,Args) /* forall(Arg,Args,memberchk_eq(Arg,KnownVars)) */ -> - Score = 100 - ; - order_score_indexes(Is,Head,Score) - ). -% }}} - -memberchk_eq_flip(List,Element) :- memberchk_eq(Element,List). - -order_score_vars(Vars,KnownVars,RestVars,Score) :- - order_score_count_vars(Vars,KnownVars,RestVars,K-R-O), - ( K-R-O == 0-0-0 -> - Score = 0 - ; K > 0 -> - Score is max(10 - K,0) - ; R > 0 -> - Score is max(10 - R,1) * 100 - ; - Score is max(10-O,1) * 1000 - ). -order_score_count_vars([],_,_,0-0-0). -order_score_count_vars([V|Vs],KnownVars,RestVars,NK-NR-NO) :- - order_score_count_vars(Vs,KnownVars,RestVars,K-R-O), - ( memberchk_eq(V,KnownVars) -> - NK is K + 1, - NR = R, NO = O - ; memberchk_eq(V,RestVars) -> - NR is R + 1, - NK = K, NO = O - ; - NO is O + 1, - NK = K, NR = R - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ___ _ _ _ -%% |_ _|_ __ | (_)_ __ (_)_ __ __ _ -%% | || '_ \| | | '_ \| | '_ \ / _` | -%% | || | | | | | | | | | | | | (_| | -%% |___|_| |_|_|_|_| |_|_|_| |_|\__, | -%% |___/ - -%% SWI begin -create_get_mutable_ref(V,M,GM) :- GM = (M = mutable(V)). -create_get_mutable(V,M,GM) :- M = mutable(V), GM = true. -%% SWI end - -%% SICStus begin -%% create_get_mutable(V,M,GM) :- GM = get_mutable(V,M). -%% create_get_mutable_ref(V,M,GM) :- GM = get_mutable(V,M). -%% SICStus end - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% _ _ _ _ _ _ _ -%% | | | | |_(_) (_) |_ _ _ -%% | | | | __| | | | __| | | | -%% | |_| | |_| | | | |_| |_| | -%% \___/ \__|_|_|_|\__|\__, | -%% |___/ - -% Create a fresh variable. -gen_var(_). - -% Create =N= fresh variables. -gen_vars(N,Xs) :- - length(Xs,N). - -head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs) :- - vars_susp(A,Vars,Susp,VarsSusp), - Head =.. [_|Args], - pairup(Args,Vars,HeadPairs). - -inc_id([N|Ns],[O|Ns]) :- - O is N + 1. -dec_id([N|Ns],[M|Ns]) :- - M is N - 1. - -extend_id(Id,[0|Id]). - -next_id([_,N|Ns],[O|Ns]) :- - O is N + 1. - - % return clause Head - % for F/A constraint symbol, predicate identifier Id and arguments Head -build_head(F,A,Id,Args,Head) :- - buildName(F,A,Id,Name), - ( (chr_pp_flag(debugable,on) ; is_stored(F/A), ( has_active_occurrence(F/A) ; chr_pp_flag(late_allocation,off)), - ( may_trigger(F/A) ; - get_allocation_occurrence(F/A,AO), - get_max_occurrence(F/A,MO), - MO >= AO ) ) -> - Head =.. [Name|Args] - ; - init(Args,ArgsWOSusp), % XXX not entirely correct! - Head =.. [Name|ArgsWOSusp] - ). - - % return predicate name Result - % for Fct/Aty constraint symbol and predicate identifier List -buildName(Fct,Aty,List,Result) :- - ( (chr_pp_flag(debugable,on) ; (once((is_stored(Fct/Aty), ( has_active_occurrence(Fct/Aty) ; chr_pp_flag(late_allocation,off)), - ( may_trigger(Fct/Aty) ; get_allocation_occurrence(Fct/Aty,AO), get_max_occurrence(Fct/Aty,MO), - MO >= AO ) ; List \= [0])) ) ) -> - atom_concat(Fct, '___' ,FctSlash), - atomic_concat(FctSlash,Aty,FctSlashAty), - buildName_(List,FctSlashAty,Result) - ; - Result = Fct - ). - -buildName_([],Name,Name). -buildName_([N|Ns],Name,Result) :- - buildName_(Ns,Name,Name1), - atom_concat(Name1,'__',NameDash), % '_' is a char :-( - atomic_concat(NameDash,N,Result). - -vars_susp(A,Vars,Susp,VarsSusp) :- - length(Vars,A), - append(Vars,[Susp],VarsSusp). - -or_pattern(Pos,Pat) :- - Pow is Pos - 1, - Pat is 1 << Pow. % was 2 ** X - -and_pattern(Pos,Pat) :- - X is Pos - 1, - Y is 1 << X, % was 2 ** X - Pat is (-1)*(Y + 1). - -make_name(Prefix,F/A,Name) :- - atom_concat_list([Prefix,F,'___',A],Name). - -%=============================================================================== -% Attribute for attributed variables - -make_attr(N,Mask,SuspsList,Attr) :- - length(SuspsList,N), - Attr =.. [v,Mask|SuspsList]. - -get_all_suspensions2(N,Attr,SuspensionsList) :- - chr_pp_flag(dynattr,off), !, - make_attr(N,_,SuspensionsList,Attr). - -% NEW -get_all_suspensions2(N,Attr,Goal,SuspensionsList) :- - % writeln(get_all_suspensions2), - length(SuspensionsList,N), - Goal = 'chr all_suspensions'(SuspensionsList,1,Attr). - - -% NEW -normalize_attr(Attr,NormalGoal,NormalAttr) :- - % writeln(normalize_attr), - NormalGoal = 'chr normalize_attr'(Attr,NormalAttr). - -get_suspensions(N,Position,TAttr,(TAttr = Attr),Suspensions) :- - chr_pp_flag(dynattr,off), !, - make_attr(N,_,SuspsList,Attr), - nth1(Position,SuspsList,Suspensions). - -% NEW -get_suspensions(N,Position,TAttr,Goal,Suspensions) :- - % writeln(get_suspensions), - Goal = - ( memberchk(Position-Suspensions,TAttr) -> - true - ; - Suspensions = [] - ). - -%------------------------------------------------------------------------------- -% +N: number of constraint symbols -% +Suspension: source-level variable, for suspension -% +Position: constraint symbol number -% -Attr: source-level term, for new attribute -singleton_attr(N,Suspension,Position,Attr) :- - chr_pp_flag(dynattr,off), !, - or_pattern(Position,Pattern), - make_attr(N,Pattern,SuspsList,Attr), - nth1(Position,SuspsList,[Suspension]), - chr_delete(SuspsList,[Suspension],RestSuspsList), - set_elems(RestSuspsList,[]). - -% NEW -singleton_attr(N,Suspension,Position,Attr) :- - % writeln(singleton_attr), - Attr = [Position-[Suspension]]. - -%------------------------------------------------------------------------------- -% +N: number of constraint symbols -% +Suspension: source-level variable, for suspension -% +Position: constraint symbol number -% +TAttr: source-level variable, for old attribute -% -Goal: goal for creating new attribute -% -NTAttr: source-level variable, for new attribute -add_attr(N,Suspension,Position,TAttr,Goal,NTAttr) :- - chr_pp_flag(dynattr,off), !, - make_attr(N,Mask,SuspsList,Attr), - or_pattern(Position,Pattern), - nth1(Position,SuspsList,Susps), - substitute_eq(Susps,SuspsList,[Suspension|Susps],SuspsList1), - make_attr(N,Mask,SuspsList1,NewAttr1), - substitute_eq(Susps,SuspsList,[Suspension],SuspsList2), - make_attr(N,NewMask,SuspsList2,NewAttr2), - Goal = ( - TAttr = Attr, - ( Mask /\ Pattern =:= Pattern -> - NTAttr = NewAttr1 - ; - NewMask is Mask \/ Pattern, - NTAttr = NewAttr2 - ) - ), !. - -% NEW -add_attr(N,Suspension,Position,TAttr,Goal,NTAttr) :- - % writeln(add_attr), - Goal = - ( 'chr select'(TAttr,Position-Suspensions,RAttr) -> - NTAttr = [Position-[Suspension|Suspensions]|RAttr] - ; - NTAttr = [Position-[Suspension]|TAttr] - ). - -rem_attr(N,Var,Suspension,Position,TAttr,Goal) :- - chr_pp_flag(dynattr,off), !, - or_pattern(Position,Pattern), - and_pattern(Position,DelPattern), - make_attr(N,Mask,SuspsList,Attr), - nth1(Position,SuspsList,Susps), - substitute_eq(Susps,SuspsList,[],SuspsList1), - make_attr(N,NewMask,SuspsList1,Attr1), - substitute_eq(Susps,SuspsList,NewSusps,SuspsList2), - make_attr(N,Mask,SuspsList2,Attr2), - get_target_module(Mod), - Goal = ( - TAttr = Attr, - ( Mask /\ Pattern =:= Pattern -> - 'chr sbag_del_element'(Susps,Suspension,NewSusps), - ( NewSusps == [] -> - NewMask is Mask /\ DelPattern, - ( NewMask == 0 -> - del_attr(Var,Mod) - ; - put_attr(Var,Mod,Attr1) - ) - ; - put_attr(Var,Mod,Attr2) - ) - ; - true - ) - ), !. - -% NEW -rem_attr(N,Var,Suspension,Position,TAttr,Goal) :- - % writeln(rem_attr), - get_target_module(Mod), - Goal = - ( 'chr select'(TAttr,Position-Suspensions,RAttr) -> - 'chr sbag_del_element'(Suspensions,Suspension,NSuspensions), - ( NSuspensions == [] -> - ( RAttr == [] -> - del_attr(Var,Mod) - ; - put_attr(Var,Mod,RAttr) - ) - ; - put_attr(Var,Mod,[Position-NSuspensions|RAttr]) - ) - ; - true - ). - -%------------------------------------------------------------------------------- -% +N: number of constraint symbols -% +TAttr1: source-level variable, for attribute -% +TAttr2: source-level variable, for other attribute -% -Goal: goal for merging the two attributes -% -Attr: source-level term, for merged attribute -merge_attributes(N,TAttr1,TAttr2,Goal,Attr) :- - chr_pp_flag(dynattr,off), !, - make_attr(N,Mask1,SuspsList1,Attr1), - merge_attributes2(N,Mask1,SuspsList1,TAttr2,Goal2,Attr), - Goal = ( - TAttr1 = Attr1, - Goal2 - ). - -% NEW -merge_attributes(N,TAttr1,TAttr2,Goal,Attr) :- - % writeln(merge_attributes), - Goal = ( - sort(TAttr1,Sorted1), - sort(TAttr2,Sorted2), - 'chr new_merge_attributes'(Sorted1,Sorted2,Attr) - ). - - -%------------------------------------------------------------------------------- -% +N: number of constraint symbols -% +Mask1: ... -% +SuspsList1: static term, for suspensions list -% +TAttr2: source-level variable, for other attribute -% -Goal: goal for merging the two attributes -% -Attr: source-level term, for merged attribute -merge_attributes2(N,Mask1,SuspsList1,TAttr2,Goal,Attr) :- - make_attr(N,Mask2,SuspsList2,Attr2), - bagof(G,X ^ Y ^ SY ^ M ^ (member2(SuspsList1,SuspsList2,X-Y),G = (sort(Y,SY),'chr merge_attributes'(X,SY,M))),Gs), - list2conj(Gs,SortGoals), - bagof(MS,A ^ B ^ C ^ member((A,'chr merge_attributes'(B,C,MS)),Gs), SuspsList), - make_attr(N,Mask,SuspsList,Attr), - Goal = ( - TAttr2 = Attr2, - SortGoals, - Mask is Mask1 \/ Mask2 - ). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Storetype dependent lookup - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% lookup_passive_head(+Head,+PreviousVars,+RenamingVarDict, -%% -Goal,-SuspensionList) is det. -% -% Create a universal lookup goal for given head. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -lookup_passive_head(Head,PreJoin,VarDict,Goal,AllSusps) :- - functor(Head,F,A), - get_store_type(F/A,StoreType), - lookup_passive_head(StoreType,Head,PreJoin,VarDict,[],Goal,AllSusps). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% lookup_passive_head(+Head,+PreviousVars,+RenamingVarDict,+GroundVars, -%% -Goal,-SuspensionList) is det. -% -% Create a universal lookup goal for given head. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -lookup_passive_head(Head,PreJoin,VarDict,GroundVars,Goal,AllSusps) :- - functor(Head,F,A), - get_store_type(F/A,StoreType), - lookup_passive_head(StoreType,Head,PreJoin,VarDict,GroundVars,Goal,AllSusps). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% lookup_passive_head(+StoreType,+Head,+PreviousVars,+RenamingVarDict, -%% +GroundVars,-Goal,-SuspensionList) is det. -% -% Create a universal lookup goal for given head. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -lookup_passive_head(default,Head,PreJoin,VarDict,_,Goal,AllSusps) :- - functor(Head,F,A), - passive_head_via(Head,PreJoin,VarDict,Goal,AllSusps), - update_store_type(F/A,default). -lookup_passive_head(multi_inthash(Indexes),Head,_PreJoin,VarDict,GroundVars,Goal,AllSusps) :- - hash_lookup_passive_head(inthash,Indexes,Head,VarDict,GroundVars,Goal,AllSusps,_). -lookup_passive_head(multi_hash(Indexes),Head,_PreJoin,VarDict,GroundVars,Goal,AllSusps) :- - hash_lookup_passive_head(hash,Indexes,Head,VarDict,GroundVars,Goal,AllSusps,_). -lookup_passive_head(global_ground,Head,_PreJoin,_VarDict,_,Goal,AllSusps) :- - functor(Head,F,A), - global_ground_store_name(F/A,StoreName), - make_get_store_goal(StoreName,AllSusps,Goal), % Goal = nb_getval(StoreName,AllSusps), - update_store_type(F/A,global_ground). -lookup_passive_head(var_assoc_store(VarIndex,KeyIndex),Head,_PreJoin,VarDict,_,Goal,AllSusps) :- - arg(VarIndex,Head,OVar), - arg(KeyIndex,Head,OKey), - translate([OVar,OKey],VarDict,[Var,Key]), - get_target_module(Module), - Goal = ( - get_attr(Var,Module,AssocStore), - lookup_assoc_store(AssocStore,Key,AllSusps) - ). -lookup_passive_head(global_singleton,Head,_PreJoin,_VarDict,_,Goal,AllSusps) :- - functor(Head,F,A), - global_singleton_store_name(F/A,StoreName), - make_get_store_goal(StoreName,Susp,GetStoreGoal), - Goal = (GetStoreGoal,Susp \== [],AllSusps = [Susp]), - update_store_type(F/A,global_singleton). -lookup_passive_head(multi_store(StoreTypes),Head,PreJoin,VarDict,GroundVars,Goal,AllSusps) :- - once(( - member(ST,StoreTypes), - lookup_passive_head(ST,Head,PreJoin,VarDict,GroundVars,Goal,AllSusps) - )). -lookup_passive_head(identifier_store(Index),Head,PreJoin,VarDict,GroundVars,Goal,AllSusps) :- - functor(Head,F,A), - arg(Index,Head,Var), - translate([Var],VarDict,[KeyVar]), - delay_phase_end(validate_store_type_assumptions, - identifier_lookup(F/A,Index,AllSusps,KeyVar,Goal) - ), - update_store_type(F/A,identifier_store(Index)), - get_identifier_index(F/A,Index,_). -lookup_passive_head(type_indexed_identifier_store(Index,IndexType),Head,PreJoin,VarDict,GroundVars,Goal,AllSusps) :- - functor(Head,F,A), - arg(Index,Head,Var), - ( var(Var) -> - translate([Var],VarDict,[KeyVar]), - Goal = StructGoal - ; ground(Var), Var = '$chr_identifier_match'(ActualVar,_) -> - lookup_identifier_atom(IndexType,ActualVar,KeyVar,LookupGoal), - Goal = (LookupGoal,StructGoal) - ), - delay_phase_end(validate_store_type_assumptions, - type_indexed_identifier_lookup(F/A,Index,IndexType,AllSusps,KeyVar,StructGoal) - ), - update_store_type(F/A,type_indexed_identifier_store(Index,IndexType)), - get_type_indexed_identifier_index(IndexType,F/A,Index,_). - -identifier_lookup(C,Index,AllSusps,KeyVar,Goal) :- - get_identifier_size(ISize), - functor(Struct,struct,ISize), - get_identifier_index(C,Index,IIndex), - arg(IIndex,Struct,AllSusps), - Goal = (KeyVar = Struct). - -type_indexed_identifier_lookup(C,Index,IndexType,AllSusps,KeyVar,Goal) :- - type_indexed_identifier_structure(IndexType,Struct), - get_type_indexed_identifier_index(IndexType,C,Index,IIndex), - arg(IIndex,Struct,AllSusps), - Goal = (KeyVar = Struct). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% hash_lookup_passive_head(+StoreType,+Indexes,+Head,+RenamingVarDict, -%% +GroundVars,-Goal,-SuspensionList,-Index) is det. -% -% Create a universal hash lookup goal for given head. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -hash_lookup_passive_head(HashType,Indexes,Head,VarDict,GroundVars,Goal,AllSusps,Index) :- - pick_hash_index(Indexes,Head,VarDict,Index,KeyArgs,KeyArgCopies), - ( KeyArgCopies = [KeyCopy] -> - true - ; - KeyCopy =.. [k|KeyArgCopies] - ), - functor(Head,F,A), - multi_hash_lookup_goal(F/A,HashType,Index,KeyCopy,AllSusps,LookupGoal), - - check_ground(GroundVars,KeyArgs,OriginalGroundCheck), - my_term_copy(OriginalGroundCheck,VarDict,GroundCheck), - - Goal = (GroundCheck,LookupGoal), - - ( HashType == inthash -> - update_store_type(F/A,multi_inthash([Index])) - ; - update_store_type(F/A,multi_hash([Index])) - ). - -pick_hash_index(Indexes,Head,VarDict,Index,KeyArgs,KeyArgCopies) :- - member(Index,Indexes), - multi_hash_key_args(Index,Head,KeyArgs), - key_in_scope(KeyArgs,VarDict,KeyArgCopies), - !. - -% check whether we can copy the given terms -% with the given dictionary, and, if so, do so -key_in_scope([],VarDict,[]). -key_in_scope([Arg|Args],VarDict,[ArgCopy|ArgCopies]) :- - term_variables(Arg,Vars), - translate(Vars,VarDict,VarCopies), - copy_term(Arg/Vars,ArgCopy/VarCopies), - key_in_scope(Args,VarDict,ArgCopies). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% existential_lookup(+StoreType,+Head,+PrevVariablesHead,+RenamingVarDict, -%% +GroundVariables,-SuspensionTerm,-Goal,-SuspVar, -%% +VarArgDict,-NewVarArgDict) is det. -% -% Create existential lookup goal for given head. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -existential_lookup(var_assoc_store(VarIndex,KeyIndex),Head,PreJoin,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,Pairs) :- !, - lookup_passive_head(var_assoc_store(VarIndex,KeyIndex),Head,PreJoin,VarDict,GroundVars,UniversalGoal,AllSusps), - sbag_member_call(Susp,AllSusps,Sbag), - functor(Head,F,A), - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(F/A,SuspTerm), - get_static_suspension_field(F/A,SuspTerm,state,active,GetState) - ) - ), - Goal = ( - UniversalGoal, - Sbag, - Susp = SuspTerm, - GetState - ). -existential_lookup(global_singleton,Head,_PreJoin,_VarDict,_,SuspTerm,Goal,Susp,Pairs,Pairs) :- !, - functor(Head,F,A), - global_singleton_store_name(F/A,StoreName), - make_get_store_goal(StoreName,Susp,GetStoreGoal), - Goal = ( - GetStoreGoal, % nb_getval(StoreName,Susp), - Susp \== [], - Susp = SuspTerm - ), - update_store_type(F/A,global_singleton). -existential_lookup(multi_store(StoreTypes),Head,PreJoin,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,NPairs) :- !, - once(( - member(ST,StoreTypes), - existential_lookup(ST,Head,PreJoin,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,NPairs) - )). -existential_lookup(multi_inthash(Indexes),Head,_,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,NPairs) :- !, - existential_hash_lookup(inthash,Indexes,Head,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,NPairs). -existential_lookup(multi_hash(Indexes),Head,_,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,NPairs) :- !, - existential_hash_lookup(hash,Indexes,Head,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,NPairs). -existential_lookup(identifier_store(Index),Head,PreJoin,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,NPairs) :- !, - lookup_passive_head(identifier_store(Index),Head,PreJoin,VarDict,GroundVars,LookupGoal,AllSusps), - hash_index_filter(Pairs,Index,NPairs), - - functor(Head,F,A), - ( check_fd_lookup_condition(F,A,Head,KeyArgs) -> - Sbag = (AllSusps = [Susp]) - ; - sbag_member_call(Susp,AllSusps,Sbag) - ), - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(F/A,SuspTerm), - get_static_suspension_field(F/A,SuspTerm,state,active,GetState) - ) - ), - Goal = ( - LookupGoal, - Sbag, - Susp = SuspTerm, % not inlined - GetState - ). -existential_lookup(type_indexed_identifier_store(Index,IndexType),Head,PreJoin,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,NPairs) :- !, - lookup_passive_head(type_indexed_identifier_store(Index,IndexType),Head,PreJoin,VarDict,GroundVars,LookupGoal,AllSusps), - hash_index_filter(Pairs,Index,NPairs), - - functor(Head,F,A), - ( check_fd_lookup_condition(F,A,Head,KeyArgs) -> - Sbag = (AllSusps = [Susp]) - ; - sbag_member_call(Susp,AllSusps,Sbag) - ), - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(F/A,SuspTerm), - get_static_suspension_field(F/A,SuspTerm,state,active,GetState) - ) - ), - Goal = ( - LookupGoal, - Sbag, - Susp = SuspTerm, % not inlined - GetState - ). -existential_lookup(StoreType,Head,PreJoin,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,Pairs) :- - lookup_passive_head(StoreType,Head,PreJoin,VarDict,GroundVars,UGoal,Susps), - sbag_member_call(Susp,Susps,Sbag), - functor(Head,F,A), - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(F/A,SuspTerm), - get_static_suspension_field(F/A,SuspTerm,state,active,GetState) - ) - ), - Goal = ( - UGoal, - Sbag, - Susp = SuspTerm, % not inlined - GetState - ). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% existential_hash_lookup(+StoreType,+Indexes,+Head,+RenamingVarDict, -%% +GroundVariables,-SuspensionTerm,-Goal,-SuspVar, -%% +VarArgDict,-NewVarArgDict) is det. -% -% Create existential hash lookup goal for given head. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -existential_hash_lookup(HashType,Indexes,Head,VarDict,GroundVars,SuspTerm,Goal,Susp,Pairs,NPairs) :- - hash_lookup_passive_head(HashType,Indexes,Head,VarDict,GroundVars,LookupGoal,AllSusps,Index), - - hash_index_filter(Pairs,Index,NPairs), - - functor(Head,F,A), - ( check_fd_lookup_condition(F,A,Head,KeyArgs) -> - Sbag = (AllSusps = [Susp]) - ; - sbag_member_call(Susp,AllSusps,Sbag) - ), - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(F/A,SuspTerm), - get_static_suspension_field(F/A,SuspTerm,state,active,GetState) - ) - ), - Goal = ( - LookupGoal, - Sbag, - Susp = SuspTerm, % not inlined - GetState - ). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -%% hash_index_filter(+Pairs,+Index,-NPairs) is det. -% -% Filter out pairs already covered by given hash index. -% makes them 'silent' -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~% -hash_index_filter(Pairs,Index,NPairs) :- - hash_index_filter(Pairs,Index,1,NPairs). - -hash_index_filter([],_,_,[]). -hash_index_filter([P|Ps],Index,N,NPairs) :- - ( Index = [I|Is] -> - NN is N + 1, - ( I > N -> - NPairs = [P|NPs], - hash_index_filter(Ps,[I|Is],NN,NPs) - ; I == N -> - NPairs = [silent(P)|NPs], - hash_index_filter(Ps,Is,NN,NPs) - ) - ; - NPairs = [P|Ps] - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%------------------------------------------------------------------------------% -%% assume_constraint_stores(+ConstraintSymbols) is det. -% -% Compute all constraint store types that are possible for the given -% =ConstraintSymbols=. -%------------------------------------------------------------------------------% -assume_constraint_stores([]). -assume_constraint_stores([C|Cs]) :- - ( chr_pp_flag(debugable,off), - ( only_ground_indexed_arguments(C) ; chr_pp_flag(mixed_stores,on) ), - is_stored(C), - get_store_type(C,default) -> - get_indexed_arguments(C,AllIndexedArgs), - get_constraint_mode(C,Modes), - aggregate_all(bag(Index)-count, - (member(Index,AllIndexedArgs),nth1(Index,Modes,+)), - IndexedArgs-NbIndexedArgs), - % Construct Index Combinations - ( NbIndexedArgs > 10 -> - findall([Index],member(Index,IndexedArgs),Indexes) - ; - findall(Index,(sublist(Index,IndexedArgs), Index \== []),UnsortedIndexes), - predsort(longer_list,UnsortedIndexes,Indexes) - ), - % EXPERIMENTAL HEURISTIC - % findall(Index, ( - % member(Arg1,IndexedArgs), - % member(Arg2,IndexedArgs), - % Arg1 =< Arg2, - % sort([Arg1,Arg2], Index) - % ), UnsortedIndexes), - % predsort(longer_list,UnsortedIndexes,Indexes), - % Choose Index Type - ( get_functional_dependency(C,1,Pattern,Key), - all_distinct_var_args(Pattern), Key == [] -> - assumed_store_type(C,global_singleton) - ; ( only_ground_indexed_arguments(C) ; NbIndexedArgs > 0 ) -> - get_constraint_type_det(C,ArgTypes), - partition_indexes(Indexes,ArgTypes,HashIndexes,IntHashIndexes,IdentifierIndexes,CompoundIdentifierIndexes), - - ( IntHashIndexes = [] -> - Stores = Stores1 - ; - Stores = [multi_inthash(IntHashIndexes)|Stores1] - ), - ( HashIndexes = [] -> - Stores1 = Stores2 - ; - Stores1 = [multi_hash(HashIndexes)|Stores2] - ), - ( IdentifierIndexes = [] -> - Stores2 = Stores3 - ; - maplist(wrap_in_functor(identifier_store),IdentifierIndexes,WrappedIdentifierIndexes), - append(WrappedIdentifierIndexes,Stores3,Stores2) - ), - append(CompoundIdentifierIndexes,Stores4,Stores3), - ( only_ground_indexed_arguments(C) - -> Stores4 = [global_ground] - ; Stores4 = [default] - ), - assumed_store_type(C,multi_store(Stores)) - ; true - ) - ; - true - ), - assume_constraint_stores(Cs). - -%------------------------------------------------------------------------------% -%% partition_indexes(+Indexes,+Types, -%% -HashIndexes,-IntHashIndexes,-IdentifierIndexes) is det. -%------------------------------------------------------------------------------% -partition_indexes([],_,[],[],[],[]). -partition_indexes([Index|Indexes],Types,HashIndexes,IntHashIndexes,IdentifierIndexes,CompoundIdentifierIndexes) :- - ( Index = [I], - nth1(I,Types,Type), - unalias_type(Type,UnAliasedType), - UnAliasedType == chr_identifier -> - IdentifierIndexes = [I|RIdentifierIndexes], - IntHashIndexes = RIntHashIndexes, - HashIndexes = RHashIndexes, - CompoundIdentifierIndexes = RCompoundIdentifierIndexes - ; Index = [I], - nth1(I,Types,Type), - unalias_type(Type,UnAliasedType), - nonvar(UnAliasedType), - UnAliasedType = chr_identifier(IndexType) -> - CompoundIdentifierIndexes = [type_indexed_identifier_store(I,IndexType)|RCompoundIdentifierIndexes], - IdentifierIndexes = RIdentifierIndexes, - IntHashIndexes = RIntHashIndexes, - HashIndexes = RHashIndexes - ; Index = [I], - nth1(I,Types,Type), - unalias_type(Type,UnAliasedType), - UnAliasedType == dense_int -> - IntHashIndexes = [Index|RIntHashIndexes], - HashIndexes = RHashIndexes, - IdentifierIndexes = RIdentifierIndexes, - CompoundIdentifierIndexes = RCompoundIdentifierIndexes - ; member(I,Index), - nth1(I,Types,Type), - unalias_type(Type,UnAliasedType), - nonvar(UnAliasedType), - UnAliasedType = chr_identifier(_) -> - % don't use chr_identifiers in hash indexes - IntHashIndexes = RIntHashIndexes, - HashIndexes = RHashIndexes, - IdentifierIndexes = RIdentifierIndexes, - CompoundIdentifierIndexes = RCompoundIdentifierIndexes - ; - IntHashIndexes = RIntHashIndexes, - HashIndexes = [Index|RHashIndexes], - IdentifierIndexes = RIdentifierIndexes, - CompoundIdentifierIndexes = RCompoundIdentifierIndexes - ), - partition_indexes(Indexes,Types,RHashIndexes,RIntHashIndexes,RIdentifierIndexes,RCompoundIdentifierIndexes). - -longer_list(R,L1,L2) :- - length(L1,N1), - length(L2,N2), - compare(Rt,N2,N1), - ( Rt == (=) -> - compare(R,L1,L2) - ; - R = Rt - ). - -all_distinct_var_args(Term) :- - copy_term_nat(Term,TermCopy), - functor(Term,F,A), - functor(Pattern,F,A), - Pattern =@= TermCopy. - -get_indexed_arguments(C,IndexedArgs) :- - C = F/A, - get_indexed_arguments(1,A,C,IndexedArgs). - -get_indexed_arguments(I,N,C,L) :- - ( I > N -> - L = [] - ; ( is_indexed_argument(C,I) -> - L = [I|T] - ; - L = T - ), - J is I + 1, - get_indexed_arguments(J,N,C,T) - ). - -validate_store_type_assumptions([]). -validate_store_type_assumptions([C|Cs]) :- - validate_store_type_assumption(C), - validate_store_type_assumptions(Cs). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% new code generation -universal_search_iterator_end([CurrentHead|PrevHeads],NextHeads,Rule,F/A,O,Id,L,T) :- - Rule = rule(H1,_,Guard,Body), - gen_var_susp_list_for_b(PrevHeads,[CurrentHead,NextHeads,Guard,Body],_,VarsAndSuspsList,FirstVarsSusp,_,PrevIterators), - universal_search_iterator_failure_vars(PrevHeads,Id,VarsAndSuspsList,FirstVarsSusp,PrevIterators,PrevVarsAndSusps,PrevId0), - flatten(VarsAndSuspsList,VarsAndSusps), - Vars = [ [] | VarsAndSusps], - build_head(F,A,[O|Id],Vars,Head), - ( PrevId0 = [_] -> - get_success_continuation_code_id(F/A,O,PredictedPrevId), - % format('~w == ~w ?\n',[PrevId0,PredictedPrevId]), - PrevId = [PredictedPrevId] % PrevId = PrevId0 - ; - PrevId = [O|PrevId0] - ), - build_head(F,A,PrevId,PrevVarsAndSusps,PredecessorCall), - Clause = ( Head :- PredecessorCall), - add_dummy_location(Clause,LocatedClause), - L = [LocatedClause | T]. -% ( H1 == [], -% functor(CurrentHead,CF,CA), -% check_fd_lookup_condition(CF,CA,CurrentHead,PrevHeads) -> -% L = T -% ; -% gen_var_susp_list_for_b(PrevHeads,[CurrentHead,NextHeads,Guard,Body],_,VarsAndSuspsList,FirstVarsSusp,_,PrevIterators), -% universal_search_iterator_failure_vars(PrevHeads,Id,VarsAndSuspsList,FirstVarsSusp,PrevIterators,PrevVarsAndSusps,PrevId), -% flatten(VarsAndSuspsList,VarsAndSusps), -% Vars = [ [] | VarsAndSusps], -% build_head(F,A,Id,Vars,Head), -% build_head(F,A,PrevId,PrevVarsAndSusps,PredecessorCall), -% Clause = ( Head :- PredecessorCall), -% L = [Clause | T] -% ). - - % skips back intelligently over global_singleton lookups -universal_search_iterator_failure_vars(PrevHeads,Id,VarsAndSuspsList,BaseCallArgs,PrevIterators,PrevVarsAndSusps,PrevId) :- - ( Id = [0|_] -> - % TOM: add partial success continuation optimization here! - next_id(Id,PrevId), - PrevVarsAndSusps = BaseCallArgs - ; - VarsAndSuspsList = [_|AllButFirstList], - dec_id(Id,PrevId1), - ( PrevHeads = [PrevHead|PrevHeads1], - functor(PrevHead,F,A), - check_fd_lookup_condition(F,A,PrevHead,PrevHeads1) -> - PrevIterators = [_|PrevIterators1], - universal_search_iterator_failure_vars(PrevHeads1,PrevId1,AllButFirstList,BaseCallArgs,PrevIterators1,PrevVarsAndSusps,PrevId) - ; - PrevId = PrevId1, - flatten(AllButFirstList,AllButFirst), - PrevIterators = [PrevIterator|_], - PrevVarsAndSusps = [PrevIterator|AllButFirst] - ) - ). - -universal_search_iterator([NextHead|RestHeads],[CurrentHead|PreHeads],Rule,F/A,O,Id,L,T) :- - Rule = rule(_,_,Guard,Body), - gen_var_susp_list_for_b(PreHeads,[CurrentHead,NextHead,RestHeads,Guard,Body],VarDict,PreVarsAndSuspsList,FirstVarsSusp,AllSusps,PrevIterators), - init(AllSusps,PreSusps), - flatten(PreVarsAndSuspsList,PreVarsAndSusps), - gen_var(OtherSusps), - functor(CurrentHead,OtherF,OtherA), - gen_vars(OtherA,OtherVars), - head_info(CurrentHead,OtherA,OtherVars,OtherSusp,_VarsSusp,HeadPairs), - get_constraint_mode(OtherF/OtherA,Mode), - head_arg_matches(HeadPairs,Mode,VarDict,FirstMatching,VarDict1), - - delay_phase_end(validate_store_type_assumptions, - ( static_suspension_term(OtherF/OtherA,OtherSuspension), - get_static_suspension_field(OtherF/OtherA,OtherSuspension,state,active,GetState), - get_static_suspension_term_field(arguments,OtherF/OtherA,OtherSuspension,OtherVars) - ) - ), - - different_from_other_susps(CurrentHead,OtherSusp,PreHeads,PreSusps,DiffSuspGoals), - % create_get_mutable_ref(active,State,GetMutable), - CurrentSuspTest = ( - OtherSusp = OtherSuspension, - GetState, - DiffSuspGoals, - FirstMatching - ), - add_heads_ground_variables([CurrentHead|PreHeads],[],GroundVars), - lookup_passive_head(NextHead,[CurrentHead|PreHeads],VarDict1,GroundVars,NextSuspGoal,NextSusps), - inc_id(Id,NestedId), - ClauseVars = [[OtherSusp|OtherSusps]|PreVarsAndSusps], - build_head(F,A,[O|Id],ClauseVars,ClauseHead), - passive_delegate_variables(CurrentHead,PreHeads,[NextHead,RestHeads,Guard,Body],VarDict1,CurrentHeadVars), - append([NextSusps|CurrentHeadVars],[OtherSusp,OtherSusps|PreVarsAndSusps],NestedVars), - build_head(F,A,[O|NestedId],NestedVars,NestedHead), - - ( check_fd_lookup_condition(OtherF,OtherA,CurrentHead,PreHeads) -> % iterator (OtherSusps) is empty at runtime - universal_search_iterator_failure_vars(PreHeads,Id,PreVarsAndSuspsList,FirstVarsSusp,PrevIterators,PreVarsAndSusps1,PrevId0), - RecursiveVars = PreVarsAndSusps1 - ; - RecursiveVars = [OtherSusps|PreVarsAndSusps], - PrevId0 = Id - ), - ( PrevId0 = [_] -> - PrevId = PrevId0 - ; - PrevId = [O|PrevId0] - ), - build_head(F,A,PrevId,RecursiveVars,RecursiveHead), - - Clause = ( - ClauseHead :- - ( CurrentSuspTest, - NextSuspGoal - -> - NestedHead - ; RecursiveHead - ) - ), - add_dummy_location(Clause,LocatedClause), - L = [LocatedClause|T]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Observation Analysis -% -% CLASSIFICATION -% Enabled -% -% Analysis based on Abstract Interpretation paper. -% -% TODO: -% stronger analysis domain [research] - -:- chr_constraint - initial_call_pattern/1, - call_pattern/1, - call_pattern_worker/1, - final_answer_pattern/2, - abstract_constraints/1, - depends_on/2, - depends_on_ap/4, - depends_on_goal/2, - ai_observed_internal/2, - % ai_observed/2, - ai_not_observed_internal/2, - ai_not_observed/2, - ai_is_observed/2, - depends_on_as/3, - ai_observation_gather_results/0. - -:- chr_type abstract_domain ---> odom(program_point,list(constraint)). -:- chr_type program_point == any. - -:- chr_option(mode,initial_call_pattern(+)). -:- chr_option(type_declaration,call_pattern(abstract_domain)). - -:- chr_option(mode,call_pattern(+)). -:- chr_option(type_declaration,call_pattern(abstract_domain)). - -:- chr_option(mode,call_pattern_worker(+)). -:- chr_option(type_declaration,call_pattern_worker(abstract_domain)). - -:- chr_option(mode,final_answer_pattern(+,+)). -:- chr_option(type_declaration,final_answer_pattern(abstract_domain,abstract_domain)). - -:- chr_option(mode,abstract_constraints(+)). -:- chr_option(type_declaration,abstract_constraints(list)). - -:- chr_option(mode,depends_on(+,+)). -:- chr_option(type_declaration,depends_on(abstract_domain,abstract_domain)). - -:- chr_option(mode,depends_on_as(+,+,+)). -:- chr_option(mode,depends_on_ap(+,+,+,+)). -:- chr_option(mode,depends_on_goal(+,+)). -:- chr_option(mode,ai_is_observed(+,+)). -:- chr_option(mode,ai_not_observed(+,+)). -% :- chr_option(mode,ai_observed(+,+)). -:- chr_option(mode,ai_not_observed_internal(+,+)). -:- chr_option(mode,ai_observed_internal(+,+)). - - -abstract_constraints_fd @ - abstract_constraints(_) \ abstract_constraints(_) <=> true. - -ai_observed_internal(C,O) \ ai_not_observed_internal(C,O) <=> true. -ai_not_observed_internal(C,O) \ ai_not_observed_internal(C,O) <=> true. -ai_observed_internal(C,O) \ ai_observed_internal(C,O) <=> true. - -ai_not_observed(C,O) \ ai_is_observed(C,O) <=> fail. -ai_is_observed(_,_) <=> true. - -ai_observation_gather_results \ ai_observed_internal(C,O) <=> true. % ai_observed(C,O). -ai_observation_gather_results \ ai_not_observed_internal(C,O) <=> ai_not_observed(C,O). -ai_observation_gather_results <=> true. - -%------------------------------------------------------------------------------% -% Main Analysis Entry -%------------------------------------------------------------------------------% -ai_observation_analysis(ACs) :- - ( chr_pp_flag(ai_observation_analysis,on), - get_target_module(Module), '$chr_compiled_with_version'(3) -> % , Module \== guard_entailment -> - list_to_ord_set(ACs,ACSet), - abstract_constraints(ACSet), - ai_observation_schedule_initial_calls(ACSet,ACSet), - ai_observation_gather_results - ; - true - ). - -ai_observation_schedule_initial_calls([],_). -ai_observation_schedule_initial_calls([AC|RACs],ACs) :- - ai_observation_schedule_initial_call(AC,ACs), - ai_observation_schedule_initial_calls(RACs,ACs). - -ai_observation_schedule_initial_call(AC,ACs) :- - ai_observation_top(AC,CallPattern), - % ai_observation_bot(AC,ACs,CallPattern), - initial_call_pattern(CallPattern). - -ai_observation_schedule_new_calls([],AP). -ai_observation_schedule_new_calls([AC|ACs],AP) :- - AP = odom(_,Set), - initial_call_pattern(odom(AC,Set)), - ai_observation_schedule_new_calls(ACs,AP). - -final_answer_pattern(CP,AP1) \ final_answer_pattern(CP,AP2) - <=> - ai_observation_leq(AP2,AP1) - | - true. - -initial_call_pattern(CP) \ initial_call_pattern(CP) <=> true. - -initial_call_pattern(CP) ==> call_pattern(CP). - -initial_call_pattern(CP), final_answer_pattern(CP,AP), abstract_constraints(ACs) # ID3 - ==> - ai_observation_schedule_new_calls(ACs,AP) - pragma - passive(ID3). - -call_pattern(CP) \ call_pattern(CP) <=> true. - -depends_on(CP1,CP2), final_answer_pattern(CP2,AP) ==> - final_answer_pattern(CP1,AP). - - %call_pattern(CP) ==> writeln(call_pattern(CP)). - -call_pattern(CP) ==> call_pattern_worker(CP). - -%------------------------------------------------------------------------------% -% Abstract Goal -%------------------------------------------------------------------------------% - - % AbstractGoala -%call_pattern(odom([],Set)) ==> -% final_answer_pattern(odom([],Set),odom([],Set)). - -call_pattern_worker(odom([],Set)) <=> - % writeln(' - AbstractGoal'(odom([],Set))), - final_answer_pattern(odom([],Set),odom([],Set)). - - % AbstractGoalb -call_pattern_worker(odom([G|Gs],Set)) <=> - % writeln(' - AbstractGoal'(odom([G|Gs],Set))), - CP1 = odom(G,Set), - depends_on_goal(odom([G|Gs],Set),CP1), - call_pattern(CP1). - -depends_on_goal(CP1,CP2), final_answer_pattern(CP2,AP2) \ depends_on(CP1,_) # ID - <=> true pragma passive(ID). -depends_on_goal(CP1,CP2), final_answer_pattern(CP2,AP2) - ==> - CP1 = odom([_|Gs],_), - AP2 = odom([],Set), - CCP = odom(Gs,Set), - call_pattern(CCP), - depends_on(CP1,CCP). - -%------------------------------------------------------------------------------% -% Abstract Disjunction -%------------------------------------------------------------------------------% - -call_pattern_worker(odom((AG1;AG2),Set)) <=> - CP = odom((AG1;AG2),Set), - InitialAnswerApproximation = odom([],Set), - final_answer_pattern(CP,InitialAnswerApproximation), - CP1 = odom(AG1,Set), - CP2 = odom(AG2,Set), - call_pattern(CP1), - call_pattern(CP2), - depends_on_as(CP,CP1,CP2). - -%------------------------------------------------------------------------------% -% Abstract Solve -%------------------------------------------------------------------------------% -call_pattern_worker(odom(builtin,Set)) <=> - % writeln(' - AbstractSolve'(odom(builtin,Set))), - ord_empty(EmptySet), - final_answer_pattern(odom(builtin,Set),odom([],EmptySet)). - -%------------------------------------------------------------------------------% -% Abstract Drop -%------------------------------------------------------------------------------% -max_occurrence(C,MO) # ID2 \ call_pattern_worker(odom(occ(C,O),Set)) - <=> - O > MO - | - % writeln(' - AbstractDrop'(odom(occ(C,O),Set))), - final_answer_pattern(odom(occ(C,O),Set),odom([],Set)) - pragma - passive(ID2). - -%------------------------------------------------------------------------------% -% Abstract Activate -%------------------------------------------------------------------------------% -call_pattern_worker(odom(AC,Set)) - <=> - AC = _ / _ - | - % writeln(' - AbstractActivate'(odom(AC,Set))), - CP = odom(occ(AC,1),Set), - call_pattern(CP), - depends_on(odom(AC,Set),CP). - -%------------------------------------------------------------------------------% -% Abstract Passive -%------------------------------------------------------------------------------% -occurrence(C,O,RuleNb,ID,_) # ID2 \ call_pattern_worker(odom(occ(C,O),Set)) - <=> - is_passive(RuleNb,ID) - | - % writeln(' - AbstractPassive'(odom(occ(C,O),Set))), - % DEFAULT - NO is O + 1, - DCP = odom(occ(C,NO),Set), - call_pattern(DCP), - final_answer_pattern(odom(occ(C,O),Set),odom([],Set)), - depends_on(odom(occ(C,O),Set),DCP) - pragma - passive(ID2). -%------------------------------------------------------------------------------% -% Abstract Simplify -%------------------------------------------------------------------------------% - - % AbstractSimplify -occurrence(C,O,RuleNb,ID,simplification) # ID2 \ call_pattern_worker(odom(occ(C,O),Set)) - <=> - \+ is_passive(RuleNb,ID) - | - % writeln(' - AbstractPassive'(odom(occ(C,O),Set))), - ai_observation_memo_simplification_rest_heads(C,O,AbstractRestHeads), - ai_observation_observe_set(Set,AbstractRestHeads,Set2), - ai_observation_memo_abstract_goal(RuleNb,AG), - call_pattern(odom(AG,Set2)), - % DEFAULT - NO is O + 1, - DCP = odom(occ(C,NO),Set), - call_pattern(DCP), - depends_on_as(odom(occ(C,O),Set),odom(AG,Set2),DCP), - % DEADLOCK AVOIDANCE - final_answer_pattern(odom(occ(C,O),Set),odom([],Set)) - pragma - passive(ID2). - -depends_on_as(CP,CPS,CPD), - final_answer_pattern(CPS,APS), - final_answer_pattern(CPD,APD) ==> - ai_observation_lub(APS,APD,AP), - final_answer_pattern(CP,AP). - - -:- chr_constraint - ai_observation_memo_simplification_rest_heads/3, - ai_observation_memoed_simplification_rest_heads/3. - -:- chr_option(mode,ai_observation_memo_simplification_rest_heads(+,+,?)). -:- chr_option(mode,ai_observation_memoed_simplification_rest_heads(+,+,+)). - -ai_observation_memoed_simplification_rest_heads(C,O,RH) \ ai_observation_memo_simplification_rest_heads(C,O,QRH) - <=> - QRH = RH. -abstract_constraints(ACs) # ID1, occurrence(C,O,RuleNb,ID,_) # ID2, rule(RuleNb,Rule) # ID3 \ ai_observation_memo_simplification_rest_heads(C,O,QRH) - <=> - Rule = pragma(rule(H1,H2,_,_),ids(IDs1,_),_,_,_), - once(select2(ID,_,IDs1,H1,_,RestH1)), - ai_observation_abstract_constraints(RestH1,ACs,ARestHeads), - ai_observation_abstract_constraints(H2,ACs,AH2), - append(ARestHeads,AH2,AbstractHeads), - sort(AbstractHeads,QRH), - ai_observation_memoed_simplification_rest_heads(C,O,QRH) - pragma - passive(ID1), - passive(ID2), - passive(ID3). - -ai_observation_memo_simplification_rest_heads(_,_,_) <=> fail. - -%------------------------------------------------------------------------------% -% Abstract Propagate -%------------------------------------------------------------------------------% - - - % AbstractPropagate -occurrence(C,O,RuleNb,ID,propagation) # ID2 \ call_pattern_worker(odom(occ(C,O),Set)) - <=> - \+ is_passive(RuleNb,ID) - | - % writeln(' - AbstractPropagate'(odom(occ(C,O),Set))), - % observe partners - ai_observation_memo_propagation_rest_heads(C,O,AHs), - ai_observation_observe_set(Set,AHs,Set2), - ord_add_element(Set2,C,Set3), - ai_observation_memo_abstract_goal(RuleNb,AG), - call_pattern(odom(AG,Set3)), - ( ord_memberchk(C,Set2) -> - Delete = no - ; - Delete = yes - ), - % DEFAULT - NO is O + 1, - DCP = odom(occ(C,NO),Set), - call_pattern(DCP), - depends_on_ap(odom(occ(C,O),Set),odom(AG,Set3),DCP,Delete) - pragma - passive(ID2). - -:- chr_constraint - ai_observation_memo_propagation_rest_heads/3, - ai_observation_memoed_propagation_rest_heads/3. - -:- chr_option(mode,ai_observation_memo_propagation_rest_heads(+,+,?)). -:- chr_option(mode,ai_observation_memoed_propagation_rest_heads(+,+,+)). - -ai_observation_memoed_propagation_rest_heads(C,O,RH) \ ai_observation_memo_propagation_rest_heads(C,O,QRH) - <=> - QRH = RH. -abstract_constraints(ACs) # ID1, occurrence(C,O,RuleNb,ID,_) # ID2, rule(RuleNb,Rule) # ID3 \ ai_observation_memo_propagation_rest_heads(C,O,QRH) - <=> - Rule = pragma(rule(H1,H2,_,_),ids(_,IDs2),_,_,_), - once(select2(ID,_,IDs2,H2,_,RestH2)), - ai_observation_abstract_constraints(RestH2,ACs,ARestHeads), - ai_observation_abstract_constraints(H1,ACs,AH1), - append(ARestHeads,AH1,AbstractHeads), - sort(AbstractHeads,QRH), - ai_observation_memoed_propagation_rest_heads(C,O,QRH) - pragma - passive(ID1), - passive(ID2), - passive(ID3). - -ai_observation_memo_propagation_rest_heads(_,_,_) <=> fail. - -depends_on_ap(CP,CPP,CPD,Delete), final_answer_pattern(CPD,APD) ==> - final_answer_pattern(CP,APD). -depends_on_ap(CP,CPP,CPD,Delete), final_answer_pattern(CPP,APP), - final_answer_pattern(CPD,APD) ==> - true | - CP = odom(occ(C,O),_), - ( ai_observation_is_observed(APP,C) -> - ai_observed_internal(C,O) - ; - ai_not_observed_internal(C,O) - ), - ( Delete == yes -> - APP = odom([],Set0), - ord_del_element(Set0,C,Set), - NAPP = odom([],Set) - ; - NAPP = APP - ), - ai_observation_lub(NAPP,APD,AP), - final_answer_pattern(CP,AP). - -%------------------------------------------------------------------------------% -% Catch All -%------------------------------------------------------------------------------% - -call_pattern_worker(CP) <=> chr_error(internal,'AI observation analysis: unexpected abstract state ~w\n',[CP]). - -%------------------------------------------------------------------------------% -% Auxiliary Predicates -%------------------------------------------------------------------------------% - -ai_observation_lub(odom(AG,S1),odom(AG,S2),odom(AG,S3)) :- - ord_intersection(S1,S2,S3). - -ai_observation_bot(AG,AS,odom(AG,AS)). - -ai_observation_top(AG,odom(AG,EmptyS)) :- - ord_empty(EmptyS). - -ai_observation_leq(odom(AG,S1),odom(AG,S2)) :- - ord_subset(S2,S1). - -ai_observation_observe_set(S,ACSet,NS) :- - ord_subtract(S,ACSet,NS). - -ai_observation_abstract_constraint(C,ACs,AC) :- - functor(C,F,A), - AC = F/A, - memberchk(AC,ACs). - -ai_observation_abstract_constraints(Cs,ACs,NACs) :- - findall(NAC,(member(C,Cs),ai_observation_abstract_constraint(C,ACs,NAC)),NACs). - -%------------------------------------------------------------------------------% -% Abstraction of Rule Bodies -%------------------------------------------------------------------------------% - -:- chr_constraint - ai_observation_memoed_abstract_goal/2, - ai_observation_memo_abstract_goal/2. - -:- chr_option(mode,ai_observation_memoed_abstract_goal(+,+)). -:- chr_option(mode,ai_observation_memo_abstract_goal(+,?)). - -ai_observation_memoed_abstract_goal(RuleNb,AG) # ID1 \ ai_observation_memo_abstract_goal(RuleNb,QAG) - <=> - QAG = AG - pragma - passive(ID1). - -rule(RuleNb,Rule) # ID1, abstract_constraints(ACs) # ID2 \ ai_observation_memo_abstract_goal(RuleNb,QAG) - <=> - Rule = pragma(rule(H1,H2,Guard,Body),_,_,_,_), - ai_observation_abstract_goal_(H1,H2,Guard,Body,ACs,AG), - QAG = AG, - ai_observation_memoed_abstract_goal(RuleNb,AG) - pragma - passive(ID1), - passive(ID2). - -ai_observation_abstract_goal_(H1,H2,Guard,G,ACs,AG) :- - % also guard: e.g. b, c(X) ==> Y=X | p(Y). - term_variables((H1,H2,Guard),HVars), - append(H1,H2,Heads), - % variables that are declared to be ground are safe, - ground_vars(Heads,GroundVars), - % so we remove them from the list of 'dangerous' head variables - list_difference_eq(HVars,GroundVars,HV), - ai_observation_abstract_goal(G,ACs,AG,[],HV),!. - % writeln(ai_observation_abstract_goal(G,ACs,AG,[],HV)). - % HV are 'dangerous' variables, all others are fresh and safe - -ground_vars([],[]). -ground_vars([H|Hs],GroundVars) :- - functor(H,F,A), - get_constraint_mode(F/A,Mode), - % TOM: fix this code! - head_info(H,A,_Vars,_Susp,_HeadVars,HeadPairs), - head_arg_matches(HeadPairs,Mode,[],_FirstMatching,_VarDict1,[],GroundVars1), - ground_vars(Hs,GroundVars2), - append(GroundVars1,GroundVars2,GroundVars). - -ai_observation_abstract_goal((G1,G2),ACs,List,Tail,HV) :- !, % conjunction - ai_observation_abstract_goal(G1,ACs,List,IntermediateList,HV), - ai_observation_abstract_goal(G2,ACs,IntermediateList,Tail,HV). -ai_observation_abstract_goal((G1;G2),ACs,[(ABranch1;ABranch2)|Tail],Tail,HV) :- !, % disjunction - ai_observation_abstract_goal(G1,ACs,ABranch1,[],HV), - ai_observation_abstract_goal(G2,ACs,ABranch2,[],HV). -ai_observation_abstract_goal((G1->G2),ACs,List,Tail,HV) :- !, % if-then - ai_observation_abstract_goal(G1,ACs,List,IntermediateList,HV), - ai_observation_abstract_goal(G2,ACs,IntermediateList,Tail,HV). -ai_observation_abstract_goal(C,ACs,[AC|Tail],Tail,HV) :- - ai_observation_abstract_constraint(C,ACs,AC), !. % CHR constraint -ai_observation_abstract_goal(true,_,Tail,Tail,_) :- !. -ai_observation_abstract_goal(writeln(_),_,Tail,Tail,_) :- !. -% non-CHR constraint is safe if it only binds fresh variables -ai_observation_abstract_goal(G,_,Tail,Tail,HV) :- - builtin_binds_b(G,Vars), - intersect_eq(Vars,HV,[]), - !. -ai_observation_abstract_goal(G,_,[AG|Tail],Tail,_) :- - AG = builtin. % default case if goal is not recognized/safe - -ai_observation_is_observed(odom(_,ACSet),AC) :- - \+ ord_memberchk(AC,ACSet). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -unconditional_occurrence(C,O) :- - get_occurrence(C,O,RuleNb,ID), - get_rule(RuleNb,PRule), - PRule = pragma(ORule,_,_,_,_), - copy_term_nat(ORule,Rule), - Rule = rule(H1,H2,Guard,_), - guard_entailment:entails_guard([chr_pp_headvariables(H1,H2)],Guard), - once(( - H1 = [Head], H2 == [] - ; - H2 = [Head], H1 == [], \+ may_trigger(C) - )), - all_distinct_var_args(Head). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% Partial wake analysis -% -% In a Var = Var unification do not wake up constraints of both variables, -% but rather only those of one variable. -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:- chr_constraint partial_wake_analysis/0. -:- chr_constraint no_partial_wake/1. -:- chr_option(mode,no_partial_wake(+)). -:- chr_constraint wakes_partially/1. -:- chr_option(mode,wakes_partially(+)). - -partial_wake_analysis, occurrence(FA,O,RuleNb,ID,Type), rule(RuleNb,Rule), constraint_mode(FA,ArgModes) - ==> - Rule = pragma(rule(H1,H2,Guard,Body),_,_,_,_), - ( is_passive(RuleNb,ID) -> - true - ; Type == simplification -> - select(H,H1,RestH1), - H =.. [_|Args], - term_variables(Guard,Vars), - partial_wake_args(Args,ArgModes,Vars,FA) - ; % Type == propagation -> - select(H,H2,RestH2), - H =.. [_|Args], - term_variables(Guard,Vars), - partial_wake_args(Args,ArgModes,Vars,FA) - ). - -partial_wake_args([],_,_,_). -partial_wake_args([Arg|Args],[Mode|Modes],Vars,C) :- - ( Mode \== (+) -> - ( nonvar(Arg) -> - no_partial_wake(C) - ; memberchk_eq(Arg,Vars) -> - no_partial_wake(C) - ; - true - ) - ; - true - ), - partial_wake_args(Args,Modes,Vars,C). - -no_partial_wake(C) \ no_partial_wake(C) <=> true. - -no_partial_wake(C) \ wakes_partially(C) <=> fail. - -wakes_partially(C) <=> true. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Generate rules that implement chr_show_store/1 functionality. -% -% CLASSIFICATION -% Experimental -% Unused -% -% Generates additional rules: -% -% $show, C1 # ID ==> writeln(C1) pragma passive(ID). -% ... -% $show, Cn # ID ==> writeln(Cn) pragma passive(ID). -% $show <=> true. - -generate_show_constraint(Constraints0,Constraints,Rules0,Rules) :- - ( chr_pp_flag(show,on) -> - Constraints = ['$show'/0|Constraints0], - generate_show_rules(Constraints0,Rules,[Rule|Rules0]), - inc_rule_count(RuleNb), - Rule = pragma( - rule(['$show'],[],true,true), - ids([0],[]), - [], - no, - RuleNb - ) - ; - Constraints = Constraints0, - Rules = Rules0 - ). - -generate_show_rules([],Rules,Rules). -generate_show_rules([F/A|Rest],[Rule|Tail],Rules) :- - functor(C,F,A), - inc_rule_count(RuleNb), - Rule = pragma( - rule([],['$show',C],true,writeln(C)), - ids([],[0,1]), - [passive(1)], - no, - RuleNb - ), - generate_show_rules(Rest,Tail,Rules). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Custom supension term layout - -static_suspension_term(F/A,Suspension) :- - suspension_term_base(F/A,Base), - Arity is Base + A, - functor(Suspension,suspension,Arity). - -has_suspension_field(FA,Field) :- - suspension_term_base_fields(FA,Fields), - memberchk(Field,Fields). - -suspension_term_base(FA,Base) :- - suspension_term_base_fields(FA,Fields), - length(Fields,Base). - -suspension_term_base_fields(FA,Fields) :- - ( chr_pp_flag(debugable,on) -> - % 1. ID - % 2. State - % 3. Propagation History - % 4. Generation Number - % 5. Continuation Goal - % 6. Functor - Fields = [id,state,history,generation,continuation,functor] - ; - ( uses_history(FA) -> - Fields = [id,state,history|Fields2] - ; only_ground_indexed_arguments(FA), get_functional_dependency(FA,1,_,_) -> - Fields = [state|Fields2] - ; - Fields = [id,state|Fields2] - ), - ( only_ground_indexed_arguments(FA) -> - get_store_type(FA,StoreType), - basic_store_types(StoreType,BasicStoreTypes), - ( memberchk(global_ground,BasicStoreTypes) -> - % 1. ID - % 2. State - % 3. Propagation History - % 4. Global List Prev - Fields2 = [global_list_prev|Fields3] - ; - % 1. ID - % 2. State - % 3. Propagation History - Fields2 = Fields3 - ), - ( chr_pp_flag(ht_removal,on) - -> ht_prev_fields(BasicStoreTypes,Fields3) - ; Fields3 = [] - ) - ; may_trigger(FA) -> - % 1. ID - % 2. State - % 3. Propagation History - ( uses_field(FA,generation) -> - % 4. Generation Number - % 5. Global List Prev - Fields2 = [generation,global_list_prev|Fields3] - ; - Fields2 = [global_list_prev|Fields3] - ), - ( chr_pp_flag(mixed_stores,on), - chr_pp_flag(ht_removal,on) - -> get_store_type(FA,StoreType), - basic_store_types(StoreType,BasicStoreTypes), - ht_prev_fields(BasicStoreTypes,Fields3) - ; Fields3 = [] - ) - ; - % 1. ID - % 2. State - % 3. Propagation History - % 4. Global List Prev - Fields2 = [global_list_prev|Fields3], - ( chr_pp_flag(mixed_stores,on), - chr_pp_flag(ht_removal,on) - -> get_store_type(FA,StoreType), - basic_store_types(StoreType,BasicStoreTypes), - ht_prev_fields(BasicStoreTypes,Fields3) - ; Fields3 = [] - ) - ) - ). - -ht_prev_fields(Stores,Prevs) :- - ht_prev_fields_int(Stores,PrevsList), - append(PrevsList,Prevs). -ht_prev_fields_int([],[]). -ht_prev_fields_int([H|T],Fields) :- - ( H = multi_hash(Indexes) - -> maplist(ht_prev_field,Indexes,FH), - Fields = [FH|FT] - ; Fields = FT - ), - ht_prev_fields_int(T,FT). - -ht_prev_field(Index,Field) :- - concat_atom(['multi_hash_prev-'|Index],Field). - -get_static_suspension_term_field(FieldName,FA,StaticSuspension,Field) :- - suspension_term_base_fields(FA,Fields), - nth1(Index,Fields,FieldName), !, - arg(Index,StaticSuspension,Field). -get_static_suspension_term_field(arguments,FA,StaticSuspension,Field) :- !, - suspension_term_base(FA,Base), - StaticSuspension =.. [_|Args], - drop(Base,Args,Field). -get_static_suspension_term_field(FieldName,FA,_StaticSuspension,_Field) :- - chr_error(internal,'Trying to obtain field ~w of ~w, wich does not have it!',[FieldName,FA]). - - -get_dynamic_suspension_term_field(FieldName,FA,DynamicSuspension,Field,Goal) :- - suspension_term_base_fields(FA,Fields), - nth1(Index,Fields,FieldName), !, - Goal = arg(Index,DynamicSuspension,Field). -get_dynamic_suspension_term_field(arguments,FA,DynamicSuspension,Field,Goal) :- !, - static_suspension_term(FA,StaticSuspension), - get_static_suspension_term_field(arguments,FA,StaticSuspension,Field), - Goal = (DynamicSuspension = StaticSuspension). -get_dynamic_suspension_term_field(argument(I),FA,DynamicSuspension,Field,Goal) :- !, - suspension_term_base(FA,Base), - Index is I + Base, - Goal = arg(Index,DynamicSuspension,Field). -get_dynamic_suspension_term_field(FieldName,FA,_DynamicSuspension,_Field,_Goal) :- - chr_error(internal,'Dynamic goal to get ~w of ~w, which does not have this field!',[FieldName,FA]). - - -set_dynamic_suspension_term_field(FieldName,FA,DynamicSuspension,Field,Goal) :- - suspension_term_base_fields(FA,Fields), - nth1(Index,Fields,FieldName), !, - Goal = setarg(Index,DynamicSuspension,Field). -set_dynamic_suspension_term_field(FieldName,FA,_DynamicSuspension,_Field,_Goal) :- - chr_error(internal,'Dynamic goal to set ~w of ~w, which does not have this field!',[FieldName,FA]). - -basic_store_types(multi_store(Types),Types) :- !. -basic_store_types(Type,[Type]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% - -:- chr_constraint - phase_end/1, - delay_phase_end/2. - -:- chr_option(mode,phase_end(+)). -:- chr_option(mode,delay_phase_end(+,?)). - -phase_end(Phase) \ delay_phase_end(Phase,Goal) <=> call(Goal). -% phase_end(Phase) <=> true. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -:- chr_constraint - does_use_history/2, - uses_history/1, - novel_production_call/4. - -:- chr_option(mode,uses_history(+)). -:- chr_option(mode,does_use_history(+,+)). -:- chr_option(mode,novel_production_call(+,+,?,?)). - -does_use_history(FA,Occ) \ does_use_history(FA,Occ) <=> true. -does_use_history(FA,_) \ uses_history(FA) <=> true. -uses_history(_FA) <=> fail. - -does_use_history(FA,Occ) \ novel_production_call(FA,Occ,PossibleGoal,Goal) <=> Goal = PossibleGoal. -novel_production_call(FA,_,_PossibleGoal,Goal) <=> Goal = true. - -:- chr_constraint - does_use_field/2, - uses_field/2. - -:- chr_option(mode,uses_field(+,+)). -:- chr_option(mode,does_use_field(+,+)). - -does_use_field(FA,Field) \ does_use_field(FA,Field) <=> true. -does_use_field(FA,Field) \ uses_field(FA,Field) <=> true. -uses_field(_FA,_Field) <=> fail. - -:- chr_constraint - uses_state/2, - if_used_state/5, - used_states_known/0. - -:- chr_option(mode,uses_state(+,+)). -:- chr_option(mode,if_used_state(+,+,?,?,?)). - - -% states ::= not_stored_yet | passive | active | triggered | removed -% -% allocate CREATES not_stored_yet -% remove CHECKS not_stored_yet -% activate CHECKS not_stored_yet -% -% ==> no allocate THEN no not_stored_yet - -% recurs CREATES inactive -% lookup CHECKS inactive - -% insert CREATES active -% activate CREATES active -% lookup CHECKS active -% recurs CHECKS active - -% runsusp CREATES triggered -% lookup CHECKS triggered -% -% ==> no runsusp THEN no triggered - -% remove CREATES removed -% runsusp CHECKS removed -% lookup CHECKS removed -% recurs CHECKS removed -% -% ==> no remove THEN no removed - -% ==> no allocate, no remove, no active/inactive distinction THEN no state at all... - -uses_state(Constraint,State) \ uses_state(Constraint,State) <=> true. - -used_states_known, uses_state(Constraint,State) \ if_used_state(Constraint,State,Used,NotUsed,ResultGoal) - <=> ResultGoal = Used. -used_states_known \ if_used_state(Constraint,State,Used,NotUsed,ResultGoal) - <=> ResultGoal = NotUsed. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% CHECK STOREDNESS ANNOTATIONS AND GENERATE DEFAULT SIMPLIFICATION RULES -% (Feature for SSS) -% -% 1. Checking -% ~~~~~~~~~~~ -% -% When the programmer enables the `declare_stored_constraints' option, i.e. writes -% -% :- chr_option(declare_stored_constraints,on). -% -% the compiler will check for the storedness of constraints. -% -% By default, the compiler assumes that the programmer wants his constraints to -% be never-stored. Hence, a warning will be issues when a constraint is actually -% stored. -% -% Such warnings are suppressed, if the programmer adds the `# stored' modifier -% to a constraint declaration, i.e. writes -% -% :- chr_constraint c(...) # stored. -% -% In that case a warning is issued when the constraint is never-stored. -% -% NOTE: Checking is only performed if `storage_analysis' is on. Otherwise, all -% constraints are stored anyway. -% -% -% 2. Rule Generation -% ~~~~~~~~~~~~~~~~~~ -% -% When the programmer enables the `declare_stored_constraints' option, i.e. writes -% -% :- chr_option(declare_stored_constraints,on). -% -% the compiler will generate default simplification rules for constraints. -% -% By default, no default rule is generated for a constraint. However, if the -% programmer writes a default/1 annotation in the constraint declaration, i.e. writes -% -% :- chr_constraint c(...) # default(Goal). -% -% where `Goal' is a ground and callable goal (e.g. `true', `fail' or `throw(error)'), -% the compiler generates a rule: -% -% c(_,...,_) <=> Goal. -% -% at the end of the program. If multiple default rules are generated, for several constraints, -% then the order of the default rules is not specified. - - -:- chr_constraint stored_assertion/1. -:- chr_option(mode,stored_assertion(+)). -:- chr_option(type_declaration,stored_assertion(constraint)). - -:- chr_constraint never_stored_default/2. -:- chr_option(mode,never_stored_default(+,?)). -:- chr_option(type_declaration,never_stored_default(constraint,any)). - -% Rule Generation -% ~~~~~~~~~~~~~~~ - -generate_never_stored_rules(Constraints,Rules) :- - ( chr_pp_flag(declare_stored_constraints,on) -> - never_stored_rules(Constraints,Rules) - ; - Rules = [] - ). - -:- chr_constraint never_stored_rules/2. -:- chr_option(mode,never_stored_rules(+,?)). -:- chr_option(type_declaration,never_stored_rules(list(constraint),any)). - -never_stored_rules([],Rules) <=> Rules = []. -never_stored_default(Constraint,Goal) \ never_stored_rules([Constraint|Constraints],Rules) <=> - Constraint = F/A, - functor(Head,F,A), - inc_rule_count(RuleNb), - Rule = pragma( - rule([Head],[],true,Goal), - ids([0],[]), - [], - no, - RuleNb - ), - Rules = [Rule|Tail], - never_stored_rules(Constraints,Tail). -never_stored_rules([_|Constraints],Rules) <=> - never_stored_rules(Constraints,Rules). - -% Checking -% ~~~~~~~~ - -check_storedness_assertions(Constraints) :- - ( chr_pp_flag(storage_analysis,on), chr_pp_flag(declare_stored_constraints,on) -> - forall(Constraint,Constraints,check_storedness_assertion(Constraint)) - ; - true - ). - - -:- chr_constraint check_storedness_assertion/1. -:- chr_option(mode,check_storedness_assertion(+)). -:- chr_option(type_declaration,check_storedness_assertion(constraint)). - -check_storedness_assertion(Constraint), stored_assertion(Constraint) - <=> ( is_stored(Constraint) -> - true - ; - chr_warning(assertion_failed,'Constraint ~w is not stored. However, it was asserted to be stored.\n',[Constraint]) - ). -never_stored_default(Constraint,_) \ check_storedness_assertion(Constraint) - <=> ( is_finally_stored(Constraint) -> - chr_warning(assertion_failed,'Constraint ~w is stored. However, it was asserted not to be stored.\n',[Constraint]) - ; is_stored(Constraint) -> - chr_warning(assertion_failed,'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',[Constraint]) - ; - true - ). - % never-stored, no default goal -check_storedness_assertion(Constraint) - <=> ( is_finally_stored(Constraint) -> - chr_warning(assertion_failed,'Constraint ~w is stored. However, it was asserted not to be stored.\n',[Constraint]) - ; is_stored(Constraint) -> - chr_warning(assertion_failed,'Constraint ~w is temporarily stored. However, it was asserted not to be stored.\n',[Constraint]) - ; - true - ). - -%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -% success continuation analysis - -% TODO -% also use for forward jumping improvement! -% use Prolog indexing for generated code -% -% EXPORTED -% -% should_skip_to_next_id(C,O) -% -% get_occurrence_code_id(C,O,Id) -% -%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - -continuation_analysis(ConstraintSymbols) :- - maplist(analyse_continuations,ConstraintSymbols). - -analyse_continuations(C) :- - % 1. compute success continuations of the - % occurrences of constraint C - continuation_analysis(C,1), - % 2. determine for which occurrences - % to skip to next code id - get_max_occurrence(C,MO), - LO is MO + 1, - bulk_propagation(C,1,LO), - % 3. determine code id for each occurrence - set_occurrence_code_id(C,1,0). - -% 1. Compute the success continuations of constrait C -%------------------------------------------------------------------------------- - -continuation_analysis(C,O) :- - get_max_occurrence(C,MO), - ( O > MO -> - true - ; O == MO -> - NextO is O + 1, - continuation_occurrence(C,O,NextO) - ; - constraint_continuation(C,O,MO,NextO), - continuation_occurrence(C,O,NextO), - NO is O + 1, - continuation_analysis(C,NO) - ). - -constraint_continuation(C,O,MO,NextO) :- - ( get_occurrence_head(C,O,Head) -> - NO is O + 1, - ( between(NO,MO,NextO), - get_occurrence_head(C,NextO,NextHead), - unifiable(Head,NextHead,_) -> - true - ; - NextO is MO + 1 - ) - ; % current occurrence is passive - NextO = MO - ). - -get_occurrence_head(C,O,Head) :- - get_occurrence(C,O,RuleNb,Id), - \+ is_passive(RuleNb,Id), - get_rule(RuleNb,Rule), - Rule = pragma(rule(H1,H2,_,_),ids(Ids1,Ids2),_,_,_), - ( select2(Id,Head,Ids1,H1,_,_) -> true - ; select2(Id,Head,Ids2,H2,_,_) - ). - -:- chr_constraint continuation_occurrence/3. -:- chr_option(mode,continuation_occurrence(+,+,+)). - -:- chr_constraint get_success_continuation_occurrence/3. -:- chr_option(mode,get_success_continuation_occurrence(+,+,-)). - -continuation_occurrence(C,O,NO) \ get_success_continuation_occurrence(C,O,X) - <=> - X = NO. - -get_success_continuation_occurrence(C,O,X) - <=> - chr_error(internal,'Success continuation not found for ~w.\n',[C:O]). - -% 2. figure out when to skip to next code id -%------------------------------------------------------------------------------- - % don't go beyond the last occurrence - % we have to go to next id for storage here - -:- chr_constraint skip_to_next_id/2. -:- chr_option(mode,skip_to_next_id(+,+)). - -:- chr_constraint should_skip_to_next_id/2. -:- chr_option(mode,should_skip_to_next_id(+,+)). - -skip_to_next_id(C,O) \ should_skip_to_next_id(C,O) - <=> - true. - -should_skip_to_next_id(_,_) - <=> - fail. - -:- chr_constraint bulk_propagation/3. -:- chr_option(mode,bulk_propagation(+,+,+)). - -max_occurrence(C,MO) \ bulk_propagation(C,O,_) - <=> - O >= MO - | - skip_to_next_id(C,O). - % we have to go to the next id here because - % a predecessor needs it -bulk_propagation(C,O,LO) - <=> - LO =:= O + 1 - | - skip_to_next_id(C,O), - get_max_occurrence(C,MO), - NLO is MO + 1, - bulk_propagation(C,LO,NLO). - % we have to go to the next id here because - % we're running into a simplification rule - % IMPROVE: propagate back to propagation predecessor (IF ANY) -occurrence(C,NO,_,_,simplification) \ bulk_propagation(C,O,LO) - <=> - NO =:= O + 1 - | - skip_to_next_id(C,O), - get_max_occurrence(C,MO), - NLO is MO + 1, - bulk_propagation(C,NO,NLO). - % we skip the next id here - % and go to the next occurrence -continuation_occurrence(C,O,NextO) \ bulk_propagation(C,O,LO) - <=> - NextO > O + 1 - | - NLO is min(LO,NextO), - NO is O + 1, - bulk_propagation(C,NO,NLO). - % default case - % err on the safe side -bulk_propagation(C,O,LO) - <=> - skip_to_next_id(C,O), - get_max_occurrence(C,MO), - NLO is MO + 1, - NO is O + 1, - bulk_propagation(C,NO,NLO). - -skip_to_next_id(C,O) \ skip_to_next_id(C,O) <=> true. - - % if this occurrence is passive, but has to skip, - % then the previous one must skip instead... - % IMPROVE reasoning is conservative -occurrence(C,O,RuleNb,Id,_), passive(RuleNb,Id), skip_to_next_id(C,O) - ==> - O > 1 - | - PO is O - 1, - skip_to_next_id(C,PO). - -% 3. determine code id of each occurrence -%------------------------------------------------------------------------------- - -:- chr_constraint set_occurrence_code_id/3. -:- chr_option(mode,set_occurrence_code_id(+,+,+)). - -:- chr_constraint occurrence_code_id/3. -:- chr_option(mode,occurrence_code_id(+,+,+)). - - % stop at the end -set_occurrence_code_id(C,O,IdNb) - <=> - get_max_occurrence(C,MO), - O > MO - | - occurrence_code_id(C,O,IdNb). - - % passive occurrences don't change the code id -occurrence(C,O,RuleNb,Id,_), passive(RuleNb,Id) \ set_occurrence_code_id(C,O,IdNb) - <=> - occurrence_code_id(C,O,IdNb), - NO is O + 1, - set_occurrence_code_id(C,NO,IdNb). - -occurrence(C,O,RuleNb,Id,simplification) \ set_occurrence_code_id(C,O,IdNb) - <=> - occurrence_code_id(C,O,IdNb), - NO is O + 1, - set_occurrence_code_id(C,NO,IdNb). - -occurrence(C,O,RuleNb,Id,propagation), skip_to_next_id(C,O) \ set_occurrence_code_id(C,O,IdNb) - <=> - occurrence_code_id(C,O,IdNb), - NO is O + 1, - NIdNb is IdNb + 1, - set_occurrence_code_id(C,NO,NIdNb). - -occurrence(C,O,RuleNb,Id,propagation) \ set_occurrence_code_id(C,O,IdNb) - <=> - occurrence_code_id(C,O,IdNb), - NO is O + 1, - set_occurrence_code_id(C,NO,IdNb). - -% occurrence_code_id(C,O,IdNb) ==> writeln(occurrence_code_id(C,O,IdNb)). - -:- chr_constraint get_occurrence_code_id/3. -:- chr_option(mode,get_occurrence_code_id(+,+,-)). - -occurrence_code_id(C,O,IdNb) \ get_occurrence_code_id(C,O,X) - <=> - X = IdNb. - -get_occurrence_code_id(C,O,X) - <=> - ( O == 0 -> - true % X = 0 - ; - format('no occurrence code for ~w!\n',[C:O]) - ). - -get_success_continuation_code_id(C,O,NextId) :- - get_success_continuation_occurrence(C,O,NextO), - get_occurrence_code_id(C,NextO,NextId). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% COLLECT CONSTANTS FOR INLINING -% -% for SSS - -% collect_constants(+rules,+constraint_symbols,+clauses) {{{ -collect_constants(Rules,Constraints,Clauses0) :- - ( not_restarted -> - maplist(collect_rule_constants(Constraints),Rules), - ( chr_pp_flag(verbose,on) -> - print_chr_constants - ; - true - ), - ( chr_pp_flag(experiment,on) -> - flattening_dictionary(Constraints,Dictionary), - copy_term_nat(Clauses0,Clauses), - flatten_clauses(Clauses,Dictionary,FlatClauses), - install_new_declarations_and_restart(FlatClauses) - ; - true - ) - ; - true - ). - -:- chr_constraint chr_constants/2. -:- chr_option(mode,chr_constants(+,+)). - -:- chr_constraint get_chr_constants/2. - -chr_constants(Key,Constants) \ get_chr_constants(Key,Q) <=> Q = Constants. - -get_chr_constants(Key,Q) <=> chr_warning(internal,'No constants found for key ~w.\n',[Key]), Q = []. - -% collect_rule_constants(+constraint_symbols,+rule) {{{ -collect_rule_constants(Constraints,Rule) :- - Rule = pragma(rule(H1,H2,_,B),_,_,_,_), - maplist(collect_head_constants,H1), - maplist(collect_head_constants,H2), - collect_body_constants(B,Constraints). - -collect_body_constants(Body,Constraints) :- - conj2list(Body,Goals), - maplist(collect_goal_constants(Constraints),Goals). - -collect_goal_constants(Constraints,Goal) :- - ( nonvar(Goal), - functor(Goal,C,N), - memberchk(C/N,Constraints) -> - collect_head_constants(Goal) - ; nonvar(Goal), - Goal = Mod : TheGoal, - get_target_module(Module), - Mod == Module, - nonvar(TheGoal), - functor(TheGoal,C,N), - memberchk(C/N,Constraints) -> - collect_head_constants(TheGoal) - ; - true - ). - -collect_head_constants(Head) :- - functor(Head,C,N), - get_constraint_type_det(C/N,Types), - Head =.. [_|Args], - maplist(collect_arg_constants,Args,Types). - -collect_arg_constants(Arg,Type) :- - ( ground(Arg), - unalias_type(Type,NormalType), - is_chr_constants_type(NormalType,Key,_) -> - add_chr_constant(Key,Arg) - ; - true - ). -:- chr_constraint add_chr_constant/2. -:- chr_option(mode,add_chr_constant(+,+)). - -add_chr_constant(Key,Constant) , chr_constants(Key,Constants) <=> - sort([Constant|Constants],NConstants), - chr_constants(Key,NConstants). - -add_chr_constant(Key,Constant) <=> - chr_constants(Key,[Constant]). - -% }}} - -:- chr_constraint print_chr_constants/0. % {{{ - -print_chr_constants, chr_constants(Key,Constants) # Id ==> - format('\t* chr_constants ~w : ~w.\n',[Key,Constants]) - pragma passive(Id). - -print_chr_constants <=> - true. - -% }}} - -% flattening_dictionary(+constraint_symbols,-dictionary) {{{ -flattening_dictionary([],[]). -flattening_dictionary([CS|CSs],Dictionary) :- - ( flattening_dictionary_entry(CS,Entry) -> - Dictionary = [Entry|Rest] - ; - Dictionary = Rest - ), - flattening_dictionary(CSs,Rest). - -flattening_dictionary_entry(CS,Entry) :- - get_constraint_arg_type(CS,Pos,Type), - ( is_chr_constants_type(Type,Key,MaybeErrorHandler) -> - get_chr_constants(Key,Constants) - ; Type = chr_enum(Constants) -> - MaybeErrorHandler = no - ), - Entry = CS-Pos-Specs-MaybeErrorHandler, - maplist(flat_spec(CS,Pos),Constants,Specs). - -flat_spec(C/N,Pos,Term,Spec) :- - Spec = Term - Functor, - term_to_atom(Term,TermAtom), - atom_concat_list(['$flat_',C,'/',N,'___',Pos,'___',TermAtom],Functor). -% }}} - -% }}} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% RESTART AFTER FLATTENING {{{ - -restart_after_flattening(Declarations,Declarations) :- - nb_setval('$chr_restart_after_flattening',started). -restart_after_flattening(_,Declarations) :- - nb_getval('$chr_restart_after_flattening',restart(Declarations)), - nb_setval('$chr_restart_after_flattening',restarted). - -not_restarted :- - nb_getval('$chr_restart_after_flattening',started). - -install_new_declarations_and_restart(Declarations) :- - nb_setval('$chr_restart_after_flattening',restart(Declarations)), - fail. /* fails to choicepoint of restart_after_flattening */ -% }}} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% FLATTENING {{{ - -% DONE -% -) generate dictionary from collected chr_constants -% enable with :- chr_option(experiment,on). -% -) issue constraint declarations for constraints not present in -% dictionary -% -% TODO: -% -) integrate with CHR compiler -% RELEASE----------------------------------------------------------------- -% -) pass Mike's test code (full syntactic support for current CHR code) -% -) rewrite the body using the inliner -% -) refined semantics correctness issue -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -flatten_clauses(Clauses,Dict,NClauses) :- - flatten_readcontent(Clauses,Rules,Symbols,ModeDecls,_TypeDefs,TypeDecls,RestClauses), - flatten_clauses_(Dict,Rules,RestClauses,Symbols,ModeDecls,TypeDecls,NClauses). - -flatten_clauses_(Dict,Clauses,RestClauses,Symbols,ModeDecls,TypeDecls,NClauses) :- - auxiliary_constraints_declarations(Dict,ModeDecls,TypeDecls,NClauses0), - dispatching_rules(Dict,NClauses1), - declarations(Symbols,Dict,ModeDecls,TypeDecls,NClauses2), - flatten_rules(Clauses,Dict,NClauses3), - append([RestClauses,NClauses0,NClauses1,NClauses2,NClauses3],NClauses). - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% Declarations for non-flattened constraints - -% declarations(+constraint_symbols,+dict,+mode_decls,+type_decls,-clauses) {{{ -declarations(ConstraintSymbols,Dict,ModeDecls,TypeDecls,Declarations) :- - findall(Symbol,(member(Symbol,ConstraintSymbols), \+ memberchk(Symbol-_-_-_,Dict)),Symbols), - maplist(declaration(ModeDecls,TypeDecls),Symbols,DeclarationsList), - flatten(DeclarationsList,Declarations). - -declaration(ModeDecls,TypeDecls,ConstraintSymbol, - [(:- chr_constraint ConstraintSymbol), - (:- chr_option(mode,ModeDeclPattern)), - (:- chr_option(type_declaration,TypeDeclPattern)) - ]) :- - ConstraintSymbol = Functor / Arity, - % print optional mode declaration - functor(ModeDeclPattern,Functor,Arity), - ( memberchk(ModeDeclPattern,ModeDecls) -> - true - ; - replicate(Arity,(?),Modes), - ModeDeclPattern =.. [_|Modes] - ), - % print optional type declaration - functor(TypeDeclPattern,Functor,Arity), - ( memberchk(TypeDeclPattern,TypeDecls) -> - true - ; - replicate(Arity,any,Types), - TypeDeclPattern =.. [_|Types] - ). -% }}} -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% read clauses from file -% CHR are returned -% declared constaints are returned -% type definitions are returned and printed -% mode declarations are returned -% other clauses are returned - -% flatten_readcontent(+clauses,-rules,-symbols,-mode_decls,-type_defs,-type_decls,-rest_clauses) {{{ -flatten_readcontent([],[],[],[],[],[],[]). -flatten_readcontent([Clause|RClauses],Rules,ConstraintSymbols,ModeDecls,TypeDefs,TypeDecls,RestClauses) :- - % read(Clause), - ( Clause == end_of_file -> - Rules = [], - ConstraintSymbols = [], - ModeDecls = [], - TypeDecls = [], - TypeDefs = [], - RestClauses = [] - ; crude_is_rule(Clause) -> - Rules = [Clause|RestRules], - flatten_readcontent(RClauses,RestRules,ConstraintSymbols,ModeDecls,TypeDefs,TypeDecls,RestClauses) - ; pure_is_declaration(Clause,SomeConstraintSymbols,SomeModeDecls,SomeTypeDecls) -> - append(SomeConstraintSymbols,RestConstraintSymbols,ConstraintSymbols), - append(SomeModeDecls,RestModeDecls,ModeDecls), - append(SomeTypeDecls,RestTypeDecls,TypeDecls), - flatten_readcontent(RClauses,Rules,RestConstraintSymbols,RestModeDecls,TypeDefs,RestTypeDecls,RestClauses) - ; is_mode_declaration(Clause,ModeDecl) -> - ModeDecls = [ModeDecl|RestModeDecls], - flatten_readcontent(RClauses,Rules,ConstraintSymbols,RestModeDecls,TypeDefs,TypeDecls,RestClauses) - ; is_type_declaration(Clause,TypeDecl) -> - TypeDecls = [TypeDecl|RestTypeDecls], - flatten_readcontent(RClauses,Rules,ConstraintSymbols,ModeDecls,TypeDefs,RestTypeDecls,RestClauses) - ; is_type_definition(Clause,TypeDef) -> - RestClauses = [Clause|NRestClauses], - TypeDefs = [TypeDef|RestTypeDefs], - flatten_readcontent(RClauses,Rules,ConstraintSymbols,ModeDecls,RestTypeDefs,TypeDecls,NRestClauses) - ; ( Clause = (:- op(A,B,C)) -> - % assert operators in order to read and print them out properly - op(A,B,C) - ; - true - ), - RestClauses = [Clause|NRestClauses], - flatten_readcontent(RClauses,Rules,ConstraintSymbols,ModeDecls,TypeDefs,TypeDecls,NRestClauses) - ). - -crude_is_rule((_ @ _)). -crude_is_rule((_ pragma _)). -crude_is_rule((_ ==> _)). -crude_is_rule((_ <=> _)). - -pure_is_declaration(D, Constraints,Modes,Types) :- %% constraint declaration - D = (:- Decl), Decl =.. [F,Cs], F == (chr_constraint), - conj2list(Cs,Constraints0), - pure_extract_type_mode(Constraints0,Constraints,Modes,Types). - -pure_extract_type_mode([],[],[],[]). -pure_extract_type_mode([F/A|R],[F/A|R2],Modes,Types) :- !, - pure_extract_type_mode(R,R2,Modes,Types). -pure_extract_type_mode([C|R],[ConstraintSymbol|R2],[Mode|Modes],Types) :- - functor(C,F,A), - ConstraintSymbol = F/A, - C =.. [_|Args], - extract_types_and_modes(Args,ArgTypes,ArgModes), - Mode =.. [F|ArgModes], - ( forall(member(ArgType,ArgTypes),ArgType == any) -> - Types = RTypes - ; - Types = [Type|RTypes], - Type =.. [F|ArgTypes] - ), - pure_extract_type_mode(R,R2,Modes,RTypes). - -is_mode_declaration((:- chr_option(mode,ModeDecl)),ModeDecl). - -is_type_declaration((:- chr_option(type_declaration,TypeDecl)),TypeDecl). -% }}} -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% DECLARATIONS FOR FLATTENED CONSTRAINTS -% including mode and type declarations - -% auxiliary_constraints_declarations(+dict,+mode_decls,+type_decls,-constraint_specs) {{{ -auxiliary_constraints_declarations(Dict,ModeDecls,TypeDecls,ConstraintSpecs) :- - findall(ConstraintSpec,auxiliary_constraints_declaration(Dict,ModeDecls,TypeDecls,ConstraintSpec),ConstraintSpecs0), - flatten(ConstraintSpecs0,ConstraintSpecs). - -auxiliary_constraints_declaration(Dict,ModeDecls,TypeDecls, - [(:- chr_constraint ConstraintSpec), - (:- chr_option(mode,NewModeDecl)), - (:- chr_option(type_declaration,NewTypeDecl))]) :- - member(C/N-I-SFs-_,Dict), - arg_modes(C,N,ModeDecls,Modes), - specialize_modes(Modes,I,SpecializedModes), - arg_types(C,N,TypeDecls,Types), - specialize_types(Types,I,SpecializedTypes), - AN is N - 1, - member(_Term-F,SFs), - ConstraintSpec = F/AN, - NewModeDecl =.. [F|SpecializedModes], - NewTypeDecl =.. [F|SpecializedTypes]. - -arg_modes(C,N,ModeDecls,ArgModes) :- - functor(ConstraintPattern,C,N), - ( memberchk(ConstraintPattern,ModeDecls) -> - ConstraintPattern =.. [_|ArgModes] - ; - replicate(N,?,ArgModes) - ). - -specialize_modes(Modes,I,SpecializedModes) :- - split(Modes,I,Before,_At,After), - append(Before,After,SpecializedModes). - -arg_types(C,N,TypeDecls,ArgTypes) :- - functor(ConstraintPattern,C,N), - ( memberchk(ConstraintPattern,TypeDecls) -> - ConstraintPattern =.. [_|ArgTypes] - ; - replicate(N,any,ArgTypes) - ). - -specialize_types(Types,I,SpecializedTypes) :- - split(Types,I,Before,_At,After), - append(Before,After,SpecializedTypes). -% }}} - -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% DISPATCHING RULES -% -% dispatching_rules(+dict,-newrules) - - -% {{{ - -% This code generates a decision tree for calling the appropriate specialized -% constraint based on the particular value of the argument the constraint -% is being specialized on. -% -% In case an error handler is provided, the handler is called with the -% unexpected constraint. - -dispatching_rules([],[]). -dispatching_rules([CN-I-SFs-MaybeErrorHandler|Dict], DispatchingRules) :- - constraint_dispatching_rule(SFs,CN,I,MaybeErrorHandler,DispatchingRules,RestDispatchingRules), - dispatching_rules(Dict,RestDispatchingRules). - -constraint_dispatching_rule(SFs,C/N,I,MaybeErrorHandler,Rules,RestRules) :- - ( I == 1 -> - /* index on first argument */ - Rules0 = Rules, - NCN = C/N - ; - /* reorder arguments for 1st argument indexing */ - functor(Head,C,N), - Head =.. [_|Args], - split(Args,I,BeforeArgs,IndexArg,AfterArgs), - append([IndexArg|BeforeArgs],AfterArgs,ShuffledArgs), - atom_concat(C,'_$shuffled',NC), - Body =.. [NC|ShuffledArgs], - [(Head :- Body)|Rules0] = Rules, - NCN = NC / N - ), - Context = swap(C,I), - dispatching_rule_term_cases(SFs,NCN,MaybeErrorHandler,Context,Rules0,RestRules). - -dispatching_rule_term_cases(SFs,NC/N,MaybeErrorHandler,Context,Rules,RestRules) :- - once(pairup(Terms,Functors,SFs)), - length(Terms,K), - replicate(K,[],MorePatterns), - Payload is N - 1, - maplist(wrap_in_functor(dispatching_action),Functors,Actions), - dispatch_trie_index([Terms|MorePatterns],Payload,MaybeErrorHandler,Context,Actions,NC,Rules,RestRules). - -dispatching_action(Functor,PayloadArgs,Goal) :- - Goal =.. [Functor|PayloadArgs]. - -dispatch_trie_index([Patterns|MorePatterns],Payload,MaybeErrorHandler,Context,Actions,Prefix,Clauses,Tail) :- - dispatch_trie_step(Patterns,Prefix,Prefix,MorePatterns,Payload,MaybeErrorHandler,Context,Actions,Clauses,Tail). - -dispatch_trie_step([],_,_,_,[],_,_,[],L,L) :- !. - % length MorePatterns == length Patterns == length Results -dispatch_trie_step(Patterns,Symbol,Prefix,MorePatterns,Payload,MaybeErrorHandler,Context,Actions,Clauses,T) :- - MorePatterns = [List|_], - length(List,N), - aggregate_all(set(F/A), - ( member(Pattern,Patterns), - functor(Pattern,F,A) - ), - FAs), - N1 is N + 1, - dispatch_trie_step_cases(FAs,N1,Patterns,MorePatterns,Payload,MaybeErrorHandler,Context,Actions,Symbol,Prefix,Clauses,T). - -dispatch_trie_step_cases([],N,_,_,Payload,MaybeErrorHandler,Context,_,Symbol,_,Clauses0,Clauses) :- - ( MaybeErrorHandler = yes(ErrorHandler) -> - Clauses0 = [ErrorClause|Clauses], - ErrorClause = (Head :- Body), - Arity is N + Payload, - functor(Head,Symbol,Arity), - reconstruct_original_term(Context,Head,Term), - Body =.. [ErrorHandler,Term] - ; - Clauses0 = Clauses - ). -dispatch_trie_step_cases([FA|FAs],N,Pattern,MorePatterns,Payload,MaybeErrorHandler,Context,Actions,Symbol,Prefix,Clauses,Tail) :- - dispatch_trie_step_case(FA,N,Pattern,MorePatterns,Payload,MaybeErrorHandler,Context,Actions,Symbol,Prefix,Clauses,Clauses1), - dispatch_trie_step_cases(FAs,N,Pattern,MorePatterns,Payload,MaybeErrorHandler,Context,Actions,Symbol,Prefix,Clauses1,Tail). - -dispatch_trie_step_case(F/A,N,Patterns,MorePatterns,Payload,MaybeErrorHandler,Context0,Actions,Symbol,Prefix,[Clause|List],Tail) :- - Clause = (Head :- Cut, Body), - ( MaybeErrorHandler = yes(_) -> - Cut = (!) - ; - Cut = true - ), - /* Head = Symbol(IndexPattern,V2,...,Vn,Payload) */ - N1 is N + Payload, - functor(Head,Symbol,N1), - arg(1,Head,IndexPattern), - Head =.. [_,_|RestArgs], - length(PayloadArgs,Payload), - once(append(Vs,PayloadArgs,RestArgs)), - /* IndexPattern = F(...) */ - functor(IndexPattern,F,A), - Context1 = index_functor(F,A,Context0), - IndexPattern =.. [_|Args], - append(Args,RestArgs,RecArgs), - ( RecArgs == PayloadArgs -> - /* nothing more to match on */ - List = Tail, - rec_cases(Patterns,_,Actions,F/A,_,_,MoreActions), - MoreActions = [Action], - call(Action,PayloadArgs,Body) - ; /* more things to match on */ - rec_cases(Patterns,MorePatterns,Actions,F/A,Cases,MoreCases,MoreActions), - ( MoreActions = [OneMoreAction] -> - /* only one more thing to match on */ - List = Tail, - call(OneMoreAction,PayloadArgs,Body) - ; - /* more than one thing to match on */ - /* [ x1,..., xn] - [xs1,...,xsn] - */ - pairup(Cases,MoreCases,CasePairs), - common_pattern(CasePairs,CommonPatternPair,DiffVars,Differences), - append(Args,Vs,[First|Rest]), - First-Rest = CommonPatternPair, - Context2 = gct(Vs,Context1), - gensym(Prefix,RSymbol), - append(DiffVars,PayloadArgs,RecCallVars), - Body =.. [RSymbol|RecCallVars], - findall(CH-CT,member([CH|CT],Differences),CPairs), - once(pairup(CHs,CTs,CPairs)), - dispatch_trie_step(CHs,RSymbol,Prefix,CTs,Payload,MaybeErrorHandler,Context2,MoreActions,List,Tail) - ) - ). - - -% split(list,int,before,at,after). - -split([X|Xs],I,Before,At,After) :- - ( I == 1 -> - Before = [], - At = X, - After = Xs - ; - J is I - 1, - Before = [X|RBefore], - split(Xs,J,RBefore,At,After) - ). - -% reconstruct_original_term(Context,CurrentTerm,OriginalTerm) -% -% context ::= swap(functor,position) -% | index_functor(functor,arity,context) -% | gct(Pattern,Context) - -reconstruct_original_term(swap(Functor,Position),Term,OriginalTerm) :- - Term =.. [_,IndexArg|Args], - PrefixSize is Position - 1, - split_at(PrefixSize,Args,Prefix,Suffix), - append(Prefix,[IndexArg|Suffix],OriginalArgs), - OriginalTerm =.. [Functor|OriginalArgs]. -reconstruct_original_term(index_functor(Functor,Arity,Context),Term0,OriginalTerm) :- - Term0 =.. [Predicate|Args], - split_at(Arity,Args,IndexArgs,RestArgs), - Index =.. [Functor|IndexArgs], - Term1 =.. [Predicate,Index|RestArgs], - reconstruct_original_term(Context,Term1,OriginalTerm). -reconstruct_original_term(gct(PatternList,Context),Term0,OriginalTerm) :- - copy_term_nat(PatternList,IndexTerms), - term_variables(IndexTerms,Variables), - Term0 =.. [Predicate|Args0], - append(Variables,RestArgs,Args0), - append(IndexTerms,RestArgs,Args1), - Term1 =.. [Predicate|Args1], - reconstruct_original_term(Context,Term1,OriginalTerm). -% }}} -%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -% SUBSTITUTE CONSTRAINT SYMBOL FUNCTORS -% -% flatten_rules(+rule_clauses,+dict,-rule_clauses). -% -% dict :== list(functor/arity-int-list(term-functor)-maybe(error_handler)) - -% {{{ -flatten_rules(Rules,Dict,FlatRules) :- - flatten_rules1(Rules,Dict,FlatRulesList), - flatten(FlatRulesList,FlatRules). - -flatten_rules1([],_,[]). -flatten_rules1([Rule|Rules],Dict,[FlatRules|FlatRulesList]) :- - findall(FlatRule,flatten_rule(Rule,Dict,FlatRule),FlatRules), - flatten_rules1(Rules,Dict,FlatRulesList). - -flatten_rule((Name @ Rule),Dict,(Name @ NRule)) :- !, - flatten_rule(Rule,Dict,NRule). -flatten_rule((Rule pragma Pragmas),Dict,(NRule pragma Pragmas)) :- !, - flatten_rule(Rule,Dict,NRule). -flatten_rule((H ==> B),Dict,(NH ==> NB)) :- !, - flatten_heads(H,Dict,NH), - flatten_body(B,Dict,NB). -flatten_rule((H1 \ H2 <=> B),Dict,(NH1 \ NH2 <=> NB)) :- !, - flatten_heads((H1,H2),Dict,(NH1,NH2)), - flatten_body(B,Dict,NB). -flatten_rule((H <=> B),Dict,(NH <=> NB)) :- - flatten_heads(H,Dict,NH), - flatten_body(B,Dict,NB). - -flatten_heads((H1,H2),Dict,(NH1,NH2)) :- !, - flatten_heads(H1,Dict,NH1), - flatten_heads(H2,Dict,NH2). -flatten_heads((H # Annotation),Dict,(NH # Annotation)) :- !, - flatten_heads(H,Dict,NH). -flatten_heads(H,Dict,NH) :- - ( functor(H,C,N), - memberchk(C/N-I-SFs-_,Dict) -> - H =.. [_|AllArgs], - split(AllArgs,I,PreArgs,Arg,PostArgs), - member(Term-Name,SFs), - Arg = Term, - append(PreArgs,PostArgs,FlatArgs), - NH =.. [Name|FlatArgs] - ; - NH = H - ). - -flatten_body((Guard | Body),Dict,(NGuard | NBody)) :- !, - conj2list(Guard,Guards), - maplist(flatten_goal(Dict),Guards,NGuards), - list2conj(NGuards,NGuard), - conj2list(Body,Goals), - maplist(flatten_goal(Dict),Goals,NGoals), - list2conj(NGoals,NBody). -flatten_body(Body,Dict,NBody) :- - conj2list(Body,Goals), - maplist(flatten_goal(Dict),Goals,NGoals), - list2conj(NGoals,NBody). - -flatten_goal(Dict,Goal,NGoal) :- var(Goal), !, NGoal = Goal. -flatten_goal(Dict,Goal,NGoal) :- - ( is_specializable_goal(Goal,Dict,ArgPos) - -> - specialize_goal(Goal,ArgPos,NGoal) - ; Goal = Mod : TheGoal, - get_target_module(Module), - Mod == Module, - nonvar(TheGoal), - is_specializable_goal(TheGoal,Dict,ArgPos) - -> - specialize_goal(TheGoal,ArgPos,NTheGoal), - NGoal = Mod : NTheGoal - ; partial_eval(Goal,NGoal) - -> - true - ; - NGoal = Goal - ). - -is_specializable_goal(Goal,Dict,ArgPos) :- - functor(Goal,C,N), - memberchk(C/N-ArgPos-_-_,Dict), - arg(ArgPos,Goal,Arg), - ground(Arg). - - -specialize_goal(Goal,ArgPos,NGoal) :- - functor(Goal,C,N), - Goal =.. [_|Args], - split(Args,ArgPos,Before,Arg,After), - append(Before,After,NArgs), - flat_spec(C/N,ArgPos,Arg,_-Functor), - NGoal =.. [Functor|NArgs]. - -partial_eval(append(L1,L2,L3),NGoal) :- - ( L1 == [] -> - NGoal = (L3 = L2) - ; L2 == [] -> - NGoal = (L3 = L1) - ). -partial_eval(flatten_path(L1,L2),NGoal) :- - nonvar(L1), - flatten(L1,FlatterL1), - FlatterL1 \== L1 -> - NGoal = flatten_path(FlatterL1,L2). - - -% }}} - -% }}} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -dump_code(Clauses) :- - ( chr_pp_flag(dump,on) -> - maplist(portray_clause,Clauses) - ; - true - ). - -chr_banner :- - chr_info(banner,'\tThe K.U.Leuven CHR System\t\n\t\tContributors:\tTom Schrijvers, Jon Sneyers, Bart Demoen,\n\t\t\t\tJan Wielemaker\n\t\tCopyright:\tK.U.Leuven, Belgium\n\t\tURL:\t\thttp://www.cs.kuleuven.be/~~toms/CHR/\n',[]). diff --git a/LGPL/chr/chr_translate.pl b/LGPL/chr/chr_translate.pl deleted file mode 100644 index 1929808a8..000000000 --- a/LGPL/chr/chr_translate.pl +++ /dev/null @@ -1,21472 +0,0 @@ -/* Generated by CHR bootstrap compiler - From: chr_translate.chr - Date: Wed Mar 26 03:32:05 2008 - - - DO NOT EDIT. EDIT THE CHR FILE INSTEAD -*/ - -:-module(chr_translate,[chr_translate/2,chr_translate_line_info/3]). -:-use_module(chr_runtime). -:-style_check(-discontiguous). -:-use_module(library(lists),[member/2,append/3,reverse/2,permutation/2,last/2]). -:-use_module(library(ordsets)). -:-use_module(library(aggregate)). -:-use_module(library(apply_macros)). -:-use_module(library(occurs)). -:-use_module(library(assoc)). -:-use_module(hprolog). -:-use_module(pairlist). -:-use_module(a_star). -:-use_module(listmap). -:-use_module(clean_code). -:-use_module(builtins). -:-use_module(find). -:-use_module(binomialheap). -:-use_module(guard_entailment). -:-use_module(chr_compiler_options). -:-use_module(chr_compiler_utility). -:-use_module(chr_compiler_errors). -:-include(chr_op). -:-op(1150,fx,chr_type). -:-op(1150,fx,chr_declaration). -:-op(1130,xfx,--->). -:-op(980,fx,+). -:-op(980,fx,-). -:-op(980,fx,?). -:-op(1150,fx,constraints). -:-op(1150,fx,chr_constraint). -format_storetype(multi_store(A)) :- - !, - maplist(format_storetype,A). -format_storetype(atomic_constants(A,B,_)) :- - format(' * a trie index on the argument(s) ~w for the ground terms ~w -',[A,B]). -format_storetype(ground_constants(A,B,_)) :- - format(' * a trie index on the argument(s) ~w for the ground terms ~w -',[A,B]). -format_storetype(A) :- - format(' * ~w -',[A]). -get_constraint_arg_type(A,B,C) :- - get_constraint_type(A,D), - nth1(B,D,E), - unalias_type(E,C). -partial_store(ground_constants(_,_,incomplete)). -partial_store(atomic_constants(_,_,incomplete)). -late_allocation_analysis(A) :- - ( chr_pp_flag(late_allocation,on) -> - maplist(late_allocation,A) - ; - true - ). -late_allocation(A) :- - late_allocation(A,0). -late_allocation(A,B) :- - allocation_occurrence(A,B), - !. -late_allocation(A,B) :- - C is B+1, - late_allocation(A,C). -stored_in_guard_before_next_kept_occurrence(A,B) :- - chr_pp_flag(store_in_guards,on), - C is B+1, - stored_in_guard_lookahead(A,C). -set_constraint_indices(A) :- - set_constraint_indices(A,1). -set_constraint_indices([],A) :- - B is A-1, - max_constraint_index(B). -set_constraint_indices([A|B],C) :- - ( - ( - chr_pp_flag(debugable,on) - ; - \+only_ground_indexed_arguments(A), - is_stored(A) - ; - is_stored(A), - get_store_type(A,default) - ; - get_store_type(A,var_assoc_store(_,_)) - ) -> - constraint_index(A,C), - D is C+1, - set_constraint_indices(B,D) - ; - set_constraint_indices(B,C) - ). -type_indexed_identifier_structure(A,B) :- - type_indexed_identifier_name(A,type_indexed_identifier_struct,C), - get_type_indexed_identifier_size(A,D), - functor(B,C,D). -type_indexed_identifier_name(A,B,C) :- - ( atom(A) -> - D=A - ; - term_to_atom(A,D) - ), - atom_concat_list([B,'_',D],C). -chr_translate(A,B) :- - chr_translate_line_info(A,bootstrap,B). -chr_translate_line_info(A,B,C) :- - chr_banner, - restart_after_flattening(A,D), - init_chr_pp_flags, - chr_source_file(B), - partition_clauses(D,E,F,G), - chr_compiler_options:sanity_check, - dump_code(D), - check_declared_constraints(E), - generate_show_constraint(E,H,F,I), - add_constraints(H), - add_rules(I), - generate_never_stored_rules(H,J), - add_rules(J), - append(I,J,K), - chr_analysis(K,H,D), - time('constraint code generation',chr_translate:constraints_code(H,L)), - time('validate store assumptions',chr_translate:validate_store_type_assumptions(H)), - phase_end(validate_store_type_assumptions), - used_states_known, - time('store code generation',chr_translate:store_management_preds(H,M)), - insert_declarations(G,N), - chr_module_declaration(O), - append([M,L,O,[end_of_file]],P), - clean_clauses(P,Q), - append([N,Q],C), - dump_code(C), - !. -chr_analysis(A,B,C) :- - check_rules(A,B), - time('type checking',chr_translate:static_type_check), - collect_constants(A,B,C), - add_occurrences(A), - time('functional dependency',chr_translate:functional_dependency_analysis(A)), - time('set semantics',chr_translate:set_semantics_rules(A)), - time('symmetry analysis',chr_translate:symmetry_analysis(A)), - time('guard simplification',chr_translate:guard_simplification), - time('late storage',chr_translate:storage_analysis(B)), - time(observation,chr_translate:observation_analysis(B)), - time('ai observation',chr_translate:ai_observation_analysis(B)), - time('late allocation',chr_translate:late_allocation_analysis(B)), - partial_wake_analysis, - time('assume constraint stores',chr_translate:assume_constraint_stores(B)), - time('default constraint indices',chr_translate:set_constraint_indices(B)), - time('check storedness assertions',chr_translate:check_storedness_assertions(B)), - time('continuation analysis',chr_translate:continuation_analysis(B)). -store_management_preds(A,B) :- - generate_attach_detach_a_constraint_all(A,C), - generate_attr_unify_hook(D), - generate_attach_increment(E), - generate_extra_clauses(A,F), - generate_insert_delete_constraints(A,G), - generate_attach_code(A,H), - generate_counter_code(I), - generate_dynamic_type_check_clauses(J), - append([C,E,D,F,G,H,I,J],B). -insert_declarations(A,B) :- - findall((:-use_module(chr(C))),(auxiliary_module(C),is_used_auxiliary_module(C)),D), - append(A,[(:-use_module(chr(chr_runtime)))|D],B). -auxiliary_module(chr_hashtable_store). -auxiliary_module(chr_integertable_store). -auxiliary_module(chr_assoc_store). -generate_counter_code(A) :- - ( chr_pp_flag(store_counter,on) -> - A=[('$counter_init'(B):-nb_setval(B,0)),('$counter'(C,D):-nb_getval(C,D)),('$counter_inc'(E):-nb_getval(E,F),G is F+1,nb_setval(E,G)),(:-'$counter_init'('$insert_counter')),(:-'$counter_init'('$delete_counter')),('$insert_counter_inc':-'$counter_inc'('$insert_counter')),('$delete_counter_inc':-'$counter_inc'('$delete_counter')),(counter_stats(H,I):-'$counter'('$insert_counter',H),'$counter'('$delete_counter',I))] - ; - A=[] - ). -chr_module_declaration(A) :- - get_target_module(B), - ( B\==chr_translate, - chr_pp_flag(toplevel_show_store,on) -> - A=[(:-multifile chr:'$chr_module'/1),chr:'$chr_module'(B)] - ; - A=[] - ). -partition_clauses([],[],[],[]). -partition_clauses([A|B],C,D,E) :- - ( parse_rule(A,F) -> - C=G, - D=[F|H], - E=I - ; - ( is_declaration(A,J) -> - append(J,G,C), - D=H, - E=I - ) - ; - ( is_module_declaration(A,K) -> - target_module(K), - C=G, - D=H, - E=[A|I] - ) - ; - ( is_type_definition(A) -> - C=G, - D=H, - E=I - ) - ; - ( is_chr_declaration(A) -> - C=G, - D=H, - E=I - ) - ; - ( A=(handler _) -> - chr_warning(deprecated(A),'Backward compatibility: ignoring handler/1 declaration. -',[]), - C=G, - D=H, - E=I - ) - ; - ( A=(rules _) -> - chr_warning(deprecated(A),'Backward compatibility: ignoring rules/1 declaration. -',[]), - C=G, - D=H, - E=I - ) - ; - ( A=option(L,M) -> - chr_warning(deprecated(A),'Instead use `:-chr_option(~w,~w).'' -',[L,M]), - handle_option(L,M), - C=G, - D=H, - E=I - ) - ; - ( A=(:-chr_option(L,M)) -> - handle_option(L,M), - C=G, - D=H, - E=I - ) - ; - ( A='$chr_compiled_with_version'(_) -> - C=G, - D=H, - E=['$chr_compiled_with_version'(3)|I] - ) - ; - C=G, - D=H, - E=[A|I] - ), - partition_clauses(B,G,H,I). -'$chr_compiled_with_version'(3). -is_declaration(A,B) :- - ( A=(:-C), - C=..[D,E], - D==chr_constraint -> - conj2list(E,F) - ; - ( A=(:-C) -> - C=..[constraints,E] - ; - A=..[constraints,E] - ), - conj2list(E,F), - chr_warning(deprecated(A),'Instead use :- chr_constraint ~w. -',[E]) - ), - extract_type_mode(F,B). -extract_type_mode([],[]). -extract_type_mode([A/B|C],[A/B|D]) :- - !, - extract_type_mode(C,D). -extract_type_mode([A|B],[C|D]) :- - ( A=E#F -> - functor(E,G,H), - extract_annotation(F,G/H) - ; - A=E, - functor(E,G,H) - ), - C=G/H, - E=..[_|I], - extract_types_and_modes(I,J,K), - assert_constraint_type(C,J), - constraint_mode(C,K), - extract_type_mode(B,D). -extract_annotation(stored,A) :- - stored_assertion(A). -extract_annotation(default(A),B) :- - never_stored_default(B,A). -extract_types_and_modes([],[],[]). -extract_types_and_modes([A|B],[C|D],[E|F]) :- - extract_type_and_mode(A,C,E), - extract_types_and_modes(B,D,F). -extract_type_and_mode(+A,A,+) :- - !. -extract_type_and_mode(?A,A,?) :- - !. -extract_type_and_mode(-A,A,-) :- - !. -extract_type_and_mode(+,any,+) :- - !. -extract_type_and_mode(?,any,?) :- - !. -extract_type_and_mode(-,any,-) :- - !. -extract_type_and_mode(A,_,_) :- - chr_error(syntax(A),'Illegal mode/type declaration. - Correct syntax is +type, -type or ?type - or +, - or ?. -',[]). -is_chr_declaration(A) :- - A=(:-chr_declaration B), - ( B=(C--->D) -> - background_info(C,D) - ; - ( B=D -> - background_info([D]) - ) - ). -is_type_definition(A) :- - is_type_definition(A,B), - assert_type_definition(B). -assert_type_definition(typedef(A,B)) :- - type_definition(A,B). -assert_type_definition(alias(A,B)) :- - type_alias(A,B). -is_type_definition(A,B) :- - ( A=(:-C) -> - true - ; - A=C - ), - C=..[chr_type,D], - ( D=(E--->F) -> - tdisj2list(F,G), - B=typedef(E,G) - ; - ( D=(H==E) -> - B=alias(H,E) - ) - ; - B=typedef(D,[]), - chr_warning(syntax,'Empty type definition `~w''. -Are you sure you want to declare a phantom type? -',[A]) - ). -tdisj2list(A,B) :- - tdisj2list(A,B,[]). -tdisj2list(A,B,C) :- - A=(D;E), - !, - tdisj2list(D,B,F), - tdisj2list(E,F,C). -tdisj2list(A,[A|B],B). -parse_rule(A,B) :- - A=(C@D), - !, - rule(D,yes(C),B). -parse_rule(A,B) :- - rule(A,no,B). -rule(A,B,C) :- - A=(D pragma E), - !, - ( var(E) -> - F=[_] - ; - conj2list(E,F) - ), - inc_rule_count(G), - C=pragma(H,I,F,B,G), - is_rule(D,H,I,C). -rule(A,B,C) :- - inc_rule_count(D), - C=pragma(E,F,[],B,D), - is_rule(A,E,F,C). -is_rule(A,B,C,D) :- - A=(E==>F), - !, - conj2list(E,G), - get_ids(G,H,I,D), - C=ids([],H), - ( F=(J '|' K) -> - B=rule([],I,J,K) - ; - B=rule([],I,true,F) - ). -is_rule(A,B,C,D) :- - A=(E<=>F), - !, - ( F=(G '|' H) -> - I=G, - J=H - ; - I=true, - J=F - ), - ( E=(K\L) -> - conj2list(K,M), - conj2list(L,N), - get_ids(M,O,P,0,Q,D), - get_ids(N,R,S,Q,_,D), - C=ids(R,O) - ; - conj2list(E,N), - P=[], - get_ids(N,R,S,D), - C=ids(R,[]) - ), - B=rule(S,P,I,J). -get_ids(A,B,C,D) :- - get_ids(A,B,C,0,_,D). -get_ids([],[],[],A,A,_). -get_ids([A|B],[C|D],[E|F],C,G,H) :- - ( A=E#I -> - ( var(I) -> - I=C - ; - check_direct_pragma(I,C,H) - ) - ; - E=A - ), - J is C+1, - get_ids(B,D,F,J,G,H). -check_direct_pragma(passive,A,B) :- - !, - B=pragma(_,_,_,_,C), - passive(C,A). -check_direct_pragma(A,_,B) :- - ( direct_pragma(C), - atom_concat(A,_,C) -> - chr_warning(problem_pragma(A,B),'completed `~w'' to `~w'' -',[A,C]) - ; - chr_warning(unsupported_pragma(A,B),'',[]) - ). -direct_pragma(passive). -is_module_declaration((:-module(A)),A). -is_module_declaration((:-module(A,_)),A). -add_constraints([]). -add_constraints([A|B]) :- - max_occurrence(A,0), - A=_/C, - length(D,C), - set_elems(D,?), - constraint_mode(A,D), - add_constraints(B). -add_rules([]). -add_rules([A|B]) :- - A=pragma(_,_,_,_,C), - rule(C,A), - add_rules(B). -check_declared_constraints(A) :- - tree_set_empty(B), - check_declared_constraints(A,B). -check_declared_constraints([],_). -check_declared_constraints([A|B],C) :- - ( tree_set_memberchk(A,C) -> - chr_error(syntax(A),'Constraint multiply defined: ~w. - Remove redundant declaration! -',[A]) - ; - true - ), - tree_set_add(C,A,D), - check_declared_constraints(B,D). -check_rules([],_). -check_rules([A|B],C) :- - check_rule(A,C), - check_rules(B,C). -check_rule(A,B) :- - check_rule_indexing(A), - check_trivial_propagation_rule(A), - A=pragma(C,_,D,_,_), - C=rule(E,F,_,_), - append(E,F,G), - check_head_constraints(G,B,A), - check_pragmas(D,A). -check_trivial_propagation_rule(A) :- - A=pragma(B,_,_,_,C), - ( B=rule([],_,_,true) -> - chr_warning(weird_program,'Ignoring propagation rule with empty body: ~@. - -',[format_rule(A)]), - set_all_passive(C) - ; - true - ). -check_head_constraints([],_,_). -check_head_constraints([A|B],C,D) :- - functor(A,E,F), - ( memberchk(E/F,C) -> - check_head_constraints(B,C,D) - ; - chr_error(syntax(A),'Undeclared constraint ~w in head of ~@. - Constraint should be one of ~w. -',[E/F,format_rule(D),C]) - ). -check_pragmas([],_). -check_pragmas([A|B],C) :- - check_pragma(A,C), - check_pragmas(B,C). -check_pragma(A,B) :- - var(A), - !, - chr_error(syntax(A),'Invalid pragma ~w in ~@. - Pragma should not be a variable! -',[A,format_rule(B)]). -check_pragma(passive(A),B) :- - !, - B=pragma(_,ids(C,D),_,_,E), - ( memberchk_eq(A,C) -> - true - ; - ( memberchk_eq(A,D) -> - true - ) - ; - chr_error(syntax(A),'Invalid identifier ~w in pragma passive in ~@. -',[A,format_rule(B)]) - ), - passive(E,A). -check_pragma(mpassive(A),B) :- - !, - B=pragma(_,_,_,_,C), - chr_warning(experimental,'Experimental pragma ~w. Use with care! -',[mpassive(A)]), - maplist(passive(C),A). -check_pragma(A,B) :- - A=already_in_heads, - !, - chr_warning(unsupported_pragma(A,B),'Termination and correctness may be affected. -',[]). -check_pragma(A,B) :- - A=already_in_head(_), - !, - chr_warning(unsupported_pragma(A,B),'Termination and correctness may be affected. -',[]). -check_pragma(A,B) :- - A=no_history, - !, - chr_warning(experimental,'Experimental pragma no_history. Use with care! -',[]), - B=pragma(_,_,_,_,C), - no_history(C). -check_pragma(A,B) :- - A=history(C,D), - !, - B=pragma(_,ids(E,F),_,_,G), - chr_warning(experimental,'Experimental pragma ~w. Use with care! -',[A]), - ( E\==[] -> - chr_error(syntax(A),'Pragma history only implemented for propagation rules. -',[]) - ; - ( \+atom(C) -> - chr_error(syntax(A),'Illegal argument for pragma history: ~w is not an atom (rule number ~w). -',[C,G]) - ) - ; - ( \+is_set(D) -> - chr_error(syntax(A),'Illegal argument for pragma history: ~w is not a set (rule number ~w). -',[D,G]) - ) - ; - ( check_history_pragma_ids(D,E,F) -> - history(G,C,D) - ) - ; - chr_error(syntax(A),'Invalid identifier(s) in pragma ~w of rule number ~w. -',[A,G]) - ). -check_pragma(A,B) :- - A=line_number(C), - !, - B=pragma(_,_,_,_,D), - line_number(D,C). -check_history_pragma_ids([],_,_). -check_history_pragma_ids([A|B],C,D) :- - ( - memberchk_eq(A,D) - ; - memberchk_eq(A,C) - ), - check_history_pragma_ids(B,C,D). -check_pragma(A,B) :- - chr_error(syntax(A),'Unknown pragma ~w in ~@. -',[A,format_rule(B)]). -test_named_history_id_pairs(_,[],_,[]). -test_named_history_id_pairs(A,[B|C],D,[E|F]) :- - test_named_history_id_pair(A,B,D,E), - test_named_history_id_pairs(A,C,D,F). -format_rule(A) :- - A=pragma(_,_,_,B,C), - ( B=yes(D) -> - write('rule '), - write(D) - ; - write('rule number '), - write(C) - ), - get_line_number(C,E), - write(' (line '), - write(E), - write(')'). -check_rule_indexing(A) :- - A=pragma(B,_,_,_,_), - B=rule(C,D,E,_), - term_variables(C-D,F), - remove_anti_monotonic_guards(E,F,G), - check_indexing(C,G-D), - check_indexing(D,G-C), - ( chr_pp_flag(term_indexing,on) -> - term_variables(G,H), - append(C,D,I), - check_specs_indexing(I,H,_) - ; - true - ). -remove_anti_monotonic_guards(A,B,C) :- - conj2list(A,D), - remove_anti_monotonic_guard_list(D,B,E), - list2conj(E,C). -remove_anti_monotonic_guard_list([],_,[]). -remove_anti_monotonic_guard_list([A|B],C,D) :- - ( A=var(E), - memberchk_eq(E,C) -> - D=F - ; - D=[A|F] - ), - remove_anti_monotonic_guard_list(B,C,F). -check_indexing([],_). -check_indexing([A|B],C) :- - functor(A,D,E), - A=..[_|F], - term_variables(B-C,G), - check_indexing(F,1,D/E,G), - check_indexing(B,[A|C]). -check_indexing([],_,_,_). -check_indexing([A|B],C,D,E) :- - ( is_indexed_argument(D,C) -> - true - ; - ( nonvar(A) -> - indexed_argument(D,C) - ) - ; - term_variables(B,F), - append(F,E,G), - ( memberchk_eq(A,G) -> - indexed_argument(D,C) - ; - true - ) - ), - H is C+1, - term_variables(A,I), - append(I,E,J), - check_indexing(B,H,D,J). -check_specs_indexing([],_,[]). -check_specs_indexing([A|B],C,D) :- - D=[E|F], - term_variables(B,G,C), - check_spec_indexing(A,G,E), - term_variables(A,H,C), - check_specs_indexing(B,H,F). -check_spec_indexing(A,B,C) :- - functor(A,D,E), - C=spec(D,E,F), - A=..[_|G], - check_args_spec_indexing(G,1,B,F), - indexing_spec(D/E,[F]). -check_args_spec_indexing([],_,_,[]). -check_args_spec_indexing([A|B],C,D,E) :- - term_variables(B,F,D), - ( check_arg_spec_indexing(A,C,F,G) -> - E=[G|H] - ; - E=H - ), - I is C+1, - term_variables(A,J,D), - check_args_spec_indexing(B,I,J,H). -check_arg_spec_indexing(A,B,C,D) :- - ( var(A) -> - memberchk_eq(A,C), - D=specinfo(B,any,[]) - ; - functor(A,E,F), - D=specinfo(B,E/F,[G]), - A=..[_|H], - check_args_spec_indexing(H,1,C,G) - ). -add_occurrences([]). -add_occurrences([A|B]) :- - A=pragma(rule(C,D,_,_),ids(E,F),_,_,G), - add_occurrences(C,E,simplification,G), - add_occurrences(D,F,propagation,G), - add_occurrences(B). -add_occurrences([],[],_,_). -add_occurrences([A|B],[C|D],E,F) :- - functor(A,G,H), - I=G/H, - new_occurrence(I,F,C,E), - add_occurrences(B,D,E,F). -observation_analysis(A,B,C,D) :- - ( all_spawned(A,C) -> - true - ; - ( var(B) -> - spawns_all(A,C) - ) - ; - ( B=true -> - true - ) - ; - ( B=fail -> - true - ) - ; - ( B=! -> - true - ) - ; - ( B=(E,F) -> - observation_analysis(A,E,C,D), - observation_analysis(A,F,C,D) - ) - ; - ( B=(E;F) -> - observation_analysis(A,E,C,D), - observation_analysis(A,F,C,D) - ) - ; - ( B=(E->F) -> - observation_analysis(A,E,C,D), - observation_analysis(A,F,C,D) - ) - ; - ( B=(\+G) -> - observation_analysis(A,G,C,D) - ) - ; - ( functor(B,H,I), - memberchk(H/I,D) -> - spawns(A,C,H/I) - ) - ; - ( B=(_=_) -> - spawns_all_triggers(A,C) - ) - ; - ( B=(_ is _) -> - spawns_all_triggers(A,C) - ) - ; - ( builtin_binds_b(B,J) -> - ( J==[] -> - true - ; - spawns_all_triggers(A,C) - ) - ) - ; - spawns_all(A,C) - ). -is_observed(A,B) :- - is_observed(A,B,_), - ai_is_observed(A,B). -is_stored_in_guard(A,B) :- - chr_pp_flag(store_in_guards,on), - do_is_observed(A,B,guard). -generate_attach_detach_a_constraint_all([],[]). -generate_attach_detach_a_constraint_all([A|B],C) :- - ( - ( - chr_pp_flag(debugable,on) - ; - is_stored(A), - \+only_ground_indexed_arguments(A), - \+get_store_type(A,var_assoc_store(_,_)) - ) -> - generate_attach_a_constraint(A,D), - generate_detach_a_constraint(A,E) - ; - D=[], - E=[] - ), - generate_attach_detach_a_constraint_all(B,F), - append([D,E,F],C). -generate_attach_a_constraint(A,[B,C]) :- - generate_attach_a_constraint_nil(A,B), - generate_attach_a_constraint_cons(A,C). -attach_constraint_atom(A,B,C,D) :- - make_name(attach_,A,E), - D=..[E,B,C]. -generate_attach_a_constraint_nil(A,B) :- - B=(C:-true), - attach_constraint_atom(A,[],_,C). -generate_attach_a_constraint_cons(A,B) :- - B=(C:-D), - attach_constraint_atom(A,[E|F],G,C), - attach_constraint_atom(A,F,G,H), - D=(I,J,H), - get_max_constraint_index(K), - ( K==1 -> - generate_attach_body_1(A,E,G,I) - ; - generate_attach_body_n(A,E,G,I) - ), - chr_pp_flag(solver_events,L), - ( L\==none -> - _=[[E|_],G], - get_target_module(M), - use_auxiliary_predicate(run_suspensions), - J=clp_events:subscribe(E,L,M,M:'$run_suspensions'([G])) - ; - J=true - ). -generate_attach_body_1(_,A,B,C) :- - get_target_module(D), - C=(get_attr(A,D,E)->put_attr(A,D,[B|E]);put_attr(A,D,[B])). -generate_attach_body_n(A/B,C,D,E) :- - get_constraint_index(A/B,F), - get_max_constraint_index(G), - get_target_module(H), - add_attr(G,D,F,I,J,K), - singleton_attr(G,D,F,L), - E=(get_attr(C,H,I)->J,put_attr(C,H,K);put_attr(C,H,L)), - !. -generate_detach_a_constraint(A,[B,C]) :- - generate_detach_a_constraint_nil(A,B), - generate_detach_a_constraint_cons(A,C). -detach_constraint_atom(A,B,C,D) :- - make_name(detach_,A,E), - D=..[E,B,C]. -generate_detach_a_constraint_nil(A,B) :- - B=(C:-true), - detach_constraint_atom(A,[],_,C). -generate_detach_a_constraint_cons(A,B) :- - B=(C:-D), - detach_constraint_atom(A,[E|F],G,C), - detach_constraint_atom(A,F,G,H), - D=(I,H), - get_max_constraint_index(J), - ( J==1 -> - generate_detach_body_1(A,E,G,I) - ; - generate_detach_body_n(A,E,G,I) - ). -generate_detach_body_1(_,A,B,C) :- - get_target_module(D), - C=(get_attr(A,D,E)->'chr sbag_del_element'(E,B,F),(F==[]->del_attr(A,D);put_attr(A,D,F));true). -generate_detach_body_n(A/B,C,D,E) :- - get_constraint_index(A/B,F), - get_max_constraint_index(G), - rem_attr(G,C,D,F,H,I), - get_target_module(J), - E=(get_attr(C,J,H)->I;true), - !. -create_indexed_variables_body([],[],[],_,_,_,empty,0). -create_indexed_variables_body([A|B],[C|D],[E|F],G,H,I,J,K) :- - L is H+1, - create_indexed_variables_body(B,D,F,M,L,I,N,O), - ( C== ?, - is_indexed_argument(I,H) -> - ( atomic_type(E) -> - J=((var(A)->G=[A|M];G=M),P), - ( N==empty -> - P=true, - M=[] - ; - P=N - ) - ; - ( N==empty -> - J=term_variables(A,G) - ) - ; - J=(term_variables(A,G,M),N) - ), - K=O - ; - ( C== -, - is_indexed_argument(I,H) -> - ( N==empty -> - J=(G=[A]) - ; - J=(G=[A|M],N) - ), - K is O+1 - ) - ; - G=M, - J=N, - K is O+1 - ). -spectermvars(A,B,C,D,E,F) :- - spectermvars(B,1,A,C,D,F,[],E). -spectermvars([],A,_,_,B,C,C,true) :- - A>B, - !. -spectermvars([A|B],C,D,E,F,G,H,I) :- - I=(J,K), - argspecs(D,C,L,M), - merge_argspecs(L,N), - arggoal(N,A,J,G,O), - P is C+1, - spectermvars(B,P,M,E,F,O,H,K). -argspecs([],_,[],[]). -argspecs([[]|A],B,C,D) :- - argspecs(A,B,C,D). -argspecs([[specinfo(A,B,C)|D]|E],F,G,H) :- - ( F==A -> - G=[specinfo(A,B,C)|I], - ( D=[] -> - J=H - ; - H=[D|J] - ) - ; - G=I, - H=[[specinfo(A,B,C)|D]|J] - ), - argspecs(E,F,I,J). -merge_argspecs(A,B) :- - sort(A,C), - merge_argspecs_(C,B). -merge_argspecs_([],[]). -merge_argspecs_([A],B) :- - !, - B=[A]. -merge_argspecs_([specinfo(A,B,C),specinfo(A,D,E)|F],G) :- - ( - ( - B==any - ; - D==any - ) -> - merge_argspecs_([specinfo(A,any,[])|F],G) - ; - ( B==D -> - append(C,E,H), - merge_argspecs_([specinfo(A,B,H)|F],G) - ) - ; - G=[specinfo(A,B,C)|I], - merge_argspecs_([specinfo(A,D,E)|F],I) - ). -arggoal(A,B,C,D,E) :- - ( A==[] -> - D=E, - C=true - ; - ( A=[specinfo(_,any,_)] -> - C=term_variables(B,D,E) - ) - ; - C=(var(B)->D=[B|E];F), - arggoal_cases(A,B,D,E,F) - ). -arggoal_cases([],_,A,B,A=B). -arggoal_cases([specinfo(_,A,B)|C],D,E,F,G) :- - ( B==[] -> - G=H - ; - ( B==[[]] -> - G=H - ) - ; - ( A=I/J -> - G=(K;H), - functor(L,I,J), - L=..[_|M], - K=(D=L->N), - spectermvars(M,1,B,I,J,E,F,N) - ) - ), - arggoal_cases(C,D,E,F,H). -generate_extra_clauses(A,B) :- - generate_activate_clauses(A,B,C), - generate_remove_clauses(A,C,D), - generate_allocate_clauses(A,D,E), - generate_insert_constraint_internal_clauses(A,E,F), - generate_novel_production(F,G), - generate_extend_history(G,H), - generate_run_suspensions_clauses(A,H,I), - generate_empty_named_history_initialisations(I,J), - J=[]. -generate_remove_clauses([],A,A). -generate_remove_clauses([A|B],C,D) :- - generate_remove_clause(A,C,E), - generate_remove_clauses(B,E,D). -remove_constraint_goal(A,B,C,D,E,F,G) :- - uses_state(A,removed), - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(remove_constraint_internal,A), - G=(H,(I==yes->E;D)), - remove_constraint_atom(A,B,C,I,H) - ; - delay_phase_end(validate_store_type_assumptions,generate_remove_body(A,B,C,D,E,F,G)) - ). -remove_constraint_atom(A,B,C,D,E) :- - make_name('$remove_constraint_internal_',A,F), - ( chr_pp_flag(debugable,off), - ( - only_ground_indexed_arguments(A) - ; - get_store_type(A,var_assoc_store(_,_)) - ) -> - E=..[F,B,D] - ; - E=..[F,B,C,D] - ). -generate_remove_clause(A,B,C) :- - ( is_used_auxiliary_predicate(remove_constraint_internal,A) -> - B=[D|C], - D=(E:-F), - remove_constraint_atom(A,G,H,I,E), - generate_remove_body(A,G,H,I=no,I=yes,active,F) - ; - B=C - ). -generate_remove_body(A,B,C,D,E,F,G) :- - ( chr_pp_flag(debugable,off), - ( - only_ground_indexed_arguments(A) - ; - get_store_type(A,var_assoc_store(_,_)) - ) -> - ( F==active -> - get_update_suspension_field(A,B,state,H,removed,I,J,K), - if_used_state(A,not_stored_yet,J,true,L), - if_used_state(A,not_stored_yet,(H==not_stored_yet->D;E),E,M) - ; - ( F==partner -> - get_update_suspension_field(A,B,state,H,removed,I,_,K), - L=true, - M=E - ) - ), - G=(I,L,K,M) - ; - static_suspension_term(A,N), - get_static_suspension_term_field(arguments,A,N,O), - generate_indexed_variables_body(A,O,P,C), - ( chr_pp_flag(debugable,on) -> - A=Q/_, - get_static_suspension_term_field(functor,A,N,Q) - ; - true - ), - ( F==active -> - get_update_static_suspension_field(A,B,N,state,H,removed,J,K), - if_used_state(A,not_stored_yet,J,true,L), - if_used_state(A,not_stored_yet,(H==not_stored_yet->C=[],D;P,E),(P,E),M) - ; - ( F==partner -> - get_update_static_suspension_field(A,B,N,state,H,removed,_,K), - L=true, - M=(P,E) - ) - ), - G=(B=N,L,K,M) - ). -generate_activate_clauses([],A,A). -generate_activate_clauses([A|B],C,D) :- - generate_activate_clause(A,C,E), - generate_activate_clauses(B,E,D). -activate_constraint_goal(A,B,C,D,E,F) :- - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(activate_constraint,A), - F=(G,(H==yes->B;true)), - activate_constraint_atom(A,H,C,D,E,G) - ; - delay_phase_end(validate_store_type_assumptions,activate_constraint_body(A,B,true,C,D,E,F)) - ). -activate_constraint_atom(A,B,C,D,E,F) :- - make_name('$activate_constraint_',A,G), - ( chr_pp_flag(debugable,off), - only_ground_indexed_arguments(A) -> - F=..[G,B,D] - ; - ( chr_pp_flag(debugable,off), - may_trigger(A), - get_store_type(A,var_assoc_store(_,_)) -> - F=..[G,B,D,E] - ) - ; - ( chr_pp_flag(debugable,off), - may_trigger(A), - get_store_type(A,var_assoc_store(_,_)) -> - F=..[G,B,C,D,E] - ) - ; - F=..[G,B,C,D] - ). -generate_activate_clause(A,B,C) :- - ( is_used_auxiliary_predicate(activate_constraint,A) -> - B=[D|C], - D=(E:-F), - activate_constraint_atom(A,G,H,I,J,E), - activate_constraint_body(A,G=yes,G=no,H,I,J,F) - ; - B=C - ). -activate_constraint_body(A,B,C,D,E,F,G) :- - ( chr_pp_flag(debugable,off), - may_trigger(A), - uses_field(A,generation) -> - get_update_suspension_field(A,E,generation,H,F,I,J,K), - L=(I,J,F is H+1,K) - ; - L=true - ), - get_update_suspension_field(A,E,state,M,active,N,O,P), - if_used_state(A,not_stored_yet,O,true,Q), - ( chr_pp_flag(debugable,off), - ( - only_ground_indexed_arguments(A) - ; - get_store_type(A,var_assoc_store(_,_)) - ) -> - if_used_state(A,not_stored_yet,(M==not_stored_yet->B;C),C,R) - ; - get_dynamic_suspension_term_field(arguments,A,E,S,T), - generate_indexed_variables_body(A,S,U,D), - ( chr_pp_flag(guard_locks,off) -> - V=true - ; - V='chr none_locked'(D) - ), - if_used_state(A,not_stored_yet,(M==not_stored_yet->T,U,V,B;C),C,R) - ), - G=(N,Q,P,L,R). -generate_allocate_clauses([],A,A). -generate_allocate_clauses([A|B],C,D) :- - generate_allocate_clause(A,C,E), - generate_allocate_clauses(B,E,D). -allocate_constraint_goal(A,B,C,D) :- - uses_state(A,not_stored_yet), - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(allocate_constraint,A), - allocate_constraint_atom(A,B,C,D) - ; - D=(B=E,F), - delay_phase_end(validate_store_type_assumptions,allocate_constraint_body(A,E,C,F)) - ). -allocate_constraint_atom(A,B,C,D) :- - make_name('$allocate_constraint_',A,E), - D=..[E,B|C]. -generate_allocate_clause(A,B,C) :- - ( is_used_auxiliary_predicate(allocate_constraint,A) -> - B=[D|C], - D=(E:-F), - A=_/G, - length(H,G), - allocate_constraint_atom(A,I,H,E), - allocate_constraint_body(A,I,H,F) - ; - B=C - ). -allocate_constraint_body(A,B,C,D) :- - static_suspension_term(A,E), - get_static_suspension_term_field(arguments,A,E,C), - ( chr_pp_flag(debugable,on) -> - A=F/_, - get_static_suspension_term_field(functor,A,E,F) - ; - true - ), - ( chr_pp_flag(debugable,on) -> - ( may_trigger(A) -> - append(C,[B],G), - build_head(_,_,[0],G,H), - get_target_module(I), - J=I:H - ; - J=true - ), - K=(B=E), - create_static_suspension_field(A,E,continuation,J,L), - create_static_suspension_field(A,E,generation,0,M) - ; - ( may_trigger(A), - uses_field(A,generation) -> - create_static_suspension_field(A,E,generation,0,M), - B=E, - K=true, - L=true - ) - ; - M=true, - B=E, - K=true, - L=true - ), - ( uses_history(A) -> - create_static_suspension_field(A,E,history,t,N) - ; - N=true - ), - create_static_suspension_field(A,E,state,not_stored_yet,O), - ( has_suspension_field(A,id) -> - get_static_suspension_term_field(id,A,E,P), - gen_id(P,Q) - ; - Q=true - ), - D=(K,L,M,N,O,Q). -gen_id(A,'chr gen_id'(A)). -generate_insert_constraint_internal_clauses([],A,A). -generate_insert_constraint_internal_clauses([A|B],C,D) :- - generate_insert_constraint_internal_clause(A,C,E), - generate_insert_constraint_internal_clauses(B,E,D). -insert_constraint_internal_constraint_goal(A,B,C,D,E,F) :- - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(remove_constraint_internal,A), - insert_constraint_internal_constraint_atom(A,B,C,D,E,F) - ; - delay_phase_end(validate_store_type_assumptions,generate_insert_constraint_internal_body(A,C,D,E,B,F)) - ). -insert_constraint_internal_constraint_atom(A,B,C,D,E,F) :- - insert_constraint_internal_constraint_name(A,G), - ( chr_pp_flag(debugable,on) -> - F=..[G,B,C,D|E] - ; - ( - ( - only_ground_indexed_arguments(A) - ; - get_store_type(A,var_assoc_store(_,_)) - ) -> - F=..[G,C|E] - ) - ; - F=..[G,B,C|E] - ). -insert_constraint_internal_constraint_name(A,B) :- - make_name('$insert_constraint_internal_',A,B). -generate_insert_constraint_internal_clause(A,B,C) :- - ( is_used_auxiliary_predicate(insert_constraint_internal,A) -> - B=[D|C], - D=(E:-F), - A=_/G, - length(H,G), - insert_constraint_internal_constraint_atom(A,I,J,K,H,E), - generate_insert_constraint_internal_body(A,J,K,H,I,F) - ; - B=C - ). -generate_insert_constraint_internal_body(A,B,C,D,E,F) :- - static_suspension_term(A,G), - create_static_suspension_field(A,G,state,active,H), - ( chr_pp_flag(debugable,on) -> - get_static_suspension_term_field(continuation,A,G,C), - create_static_suspension_field(A,G,generation,0,I) - ; - ( may_trigger(A), - uses_field(A,generation) -> - create_static_suspension_field(A,G,generation,0,I) - ) - ; - I=true - ), - ( chr_pp_flag(debugable,on) -> - A=J/_, - get_static_suspension_term_field(functor,A,G,J) - ; - true - ), - ( uses_history(A) -> - create_static_suspension_field(A,G,history,t,K) - ; - K=true - ), - get_static_suspension_term_field(arguments,A,G,D), - _=[_|_], - ( chr_pp_flag(debugable,off), - ( - only_ground_indexed_arguments(A) - ; - get_store_type(A,var_assoc_store(_,_)) - ) -> - suspension_term_base_fields(A,_), - ( has_suspension_field(A,id) -> - get_static_suspension_term_field(id,A,G,L), - gen_id(L,M) - ; - M=true - ), - F=(B=G,H,I,K,M) - ; - ( has_suspension_field(A,id) -> - get_static_suspension_term_field(id,A,G,L), - gen_id(L,M) - ; - M=true - ), - generate_indexed_variables_body(A,D,N,E), - ( chr_pp_flag(guard_locks,off) -> - O=true - ; - O='chr none_locked'(E) - ), - F=(B=G,N,O,H,I,K,M) - ). -generate_novel_production(A,B) :- - ( is_used_auxiliary_predicate(novel_production) -> - A=[C|B], - C=('$novel_production'(D,E):-arg(3,D,F),(hprolog:get_ds(E,F,_)->fail;true)) - ; - A=B - ). -generate_extend_history(A,B) :- - ( is_used_auxiliary_predicate(extend_history) -> - A=[C|B], - C=('$extend_history'(D,E):-arg(3,D,F),hprolog:put_ds(E,F,x,G),setarg(3,D,G)) - ; - A=B - ). -generate_empty_named_history_initialisations(A,B) :- - empty_named_history_initialisations(A,B), - find_empty_named_histories. -empty_named_history_global_variable(A,B) :- - atom_concat('chr empty named history ',A,B). -empty_named_history_novel_production(A,nb_getval(B,0)) :- - empty_named_history_global_variable(A,B). -empty_named_history_extend_history(A,b_setval(B,1)) :- - empty_named_history_global_variable(A,B). -generate_run_suspensions_clauses([],A,A). -generate_run_suspensions_clauses([A|B],C,D) :- - generate_run_suspensions_clause(A,C,E), - generate_run_suspensions_clauses(B,E,D). -run_suspensions_goal(A,B,C) :- - make_name('$run_suspensions_',A,D), - C=..[D,B]. -generate_run_suspensions_clause(A,B,C) :- - ( is_used_auxiliary_predicate(run_suspensions,A) -> - B=[D,E|C], - run_suspensions_goal(A,[],D), - ( chr_pp_flag(debugable,on) -> - run_suspensions_goal(A,[F|G],H), - get_update_suspension_field(A,F,state,I,triggered,J,K,L), - get_update_suspension_field(A,F,state,M,active,N,O,P), - get_update_suspension_field(A,F,generation,Q,R,S,T,U), - get_dynamic_suspension_term_field(continuation,A,F,V,W), - run_suspensions_goal(A,G,X), - E=(H:-J,K,(I==active->L,S,T,R is Q+1,U,W,('chr debug_event'(wake(F)),call(V);'chr debug_event'(fail(F)),!,fail),('chr debug_event'(exit(F));'chr debug_event'(redo(F)),fail),N,O,(M==triggered->P;true);true),X) - ; - run_suspensions_goal(A,[F|G],H), - static_suspension_term(A,Y), - get_static_suspension_term_field(arguments,A,Y,Z), - append(Z,[F],A1), - make_suspension_continuation_goal(A,A1,V), - run_suspensions_goal(A,G,X), - ( uses_field(A,generation) -> - get_update_static_suspension_field(A,F,Y,generation,Q,R,S,U), - B1=(S,R is Q+1,U) - ; - B1=true - ), - get_update_static_suspension_field(A,F,Y,state,I,triggered,J,L), - get_update_static_suspension_field(A,F,Y,state,M,active,C1,D1), - if_used_state(A,removed,(J,(I==active->E1;true)),E1,F1), - E1=(L,B1,V,C1,(M==triggered->D1;true)), - E=(H:-F=Y,F1,X) - ) - ; - B=C - ). -generate_attach_increment(A) :- - get_max_constraint_index(B), - ( is_used_auxiliary_predicate(attach_increment), - B>0 -> - A=[C,D], - generate_attach_increment_empty(C), - ( B==1 -> - generate_attach_increment_one(D) - ; - generate_attach_increment_many(B,D) - ) - ; - A=[] - ). -generate_attach_increment_empty((attach_increment([],_):-true)). -generate_attach_increment_one(A) :- - B=attach_increment([C|D],E), - get_target_module(F), - ( chr_pp_flag(guard_locks,off) -> - G=true - ; - G='chr not_locked'(C) - ), - H=(G,(get_attr(C,F,I)->sort(I,J),'chr merge_attributes'(E,J,K),put_attr(C,F,K);put_attr(C,F,E)),attach_increment(D,E)), - A=(B:-H). -generate_attach_increment_many(A,B) :- - C=attach_increment([D|E],F), - merge_attributes(A,F,G,H,I), - get_target_module(J), - ( chr_pp_flag(guard_locks,off) -> - K=true - ; - K='chr not_locked'(D) - ), - L=(K,(get_attr(D,J,G)->H,put_attr(D,J,I);put_attr(D,J,F)),attach_increment(E,F)), - B=(C:-L). -generate_attr_unify_hook(A) :- - get_max_constraint_index(B), - ( B==0 -> - A=[] - ; - ( B==1 -> - generate_attr_unify_hook_one(A) - ) - ; - generate_attr_unify_hook_many(B,A) - ). -generate_attr_unify_hook_one([A]) :- - B=attr_unify_hook(C,D), - get_target_module(E), - get_indexed_constraint(1,F), - ( get_store_type(F,G), - ( - G=default - ; - G=multi_store(H), - memberchk(default,H) - ) -> - make_run_suspensions(I,J,K), - make_run_suspensions(J,J,L), - ( atomic_types_suspended_constraint(F) -> - M=true, - J=C, - N=true, - O=P, - Q=(append(C,P,R),sort(R,I)), - S=true - ; - M=sort(C,J), - N=sort(P,O), - Q='chr merge_attributes'(J,O,I), - use_auxiliary_predicate(attach_increment), - S=(compound(D)->term_variables(D,T),attach_increment(T,J);true) - ), - U=(M,(var(D)->(get_attr(D,E,P)->N,Q,put_attr(D,E,I),K;put_attr(D,E,J),L);S,L)), - A=(B:-U) - ; - ( get_store_type(F,var_assoc_store(_,_)) -> - make_run_suspensions(R,R,K), - Q=merge_into_assoc_store(C,P,R), - U=(get_attr(D,E,P)->Q,K;put_attr(D,E,C)), - A=(B:-U) - ) - ). -generate_attr_unify_hook_many(A,[B]) :- - chr_pp_flag(dynattr,off), - !, - C=attr_unify_hook(D,E), - get_target_module(F), - make_attr(A,G,H,D), - bagof(I,J^K^(member(J,H),I=sort(J,K)),L), - list2conj(L,M), - bagof(K,J^member(sort(J,K),L),N), - merge_attributes2(A,G,N,O,P,Q), - get_all_suspensions2(A,Q,R), - make_attr(A,G,N,S), - make_run_suspensions_loop(R,N,T), - make_run_suspensions_loop(N,N,U), - ( forall((between(1,A,V),get_indexed_constraint(V,W)),atomic_types_suspended_constraint(W)) -> - X=true - ; - use_auxiliary_predicate(attach_increment), - X=(compound(E)->term_variables(E,Y),attach_increment(Y,S);true) - ), - Z=(M,(var(E)->(get_attr(E,F,O)->P,put_attr(E,F,Q),T;put_attr(E,F,S),U);X,U)), - B=(C:-Z). -generate_attr_unify_hook_many(A,B) :- - C=attr_unify_hook(D,E), - get_target_module(F), - normalize_attr(D,G,H), - normalize_attr(I,J,K), - merge_attributes(A,H,K,L,M), - make_run_suspensions(A), - ( forall((between(1,A,N),get_indexed_constraint(N,O)),atomic_types_suspended_constraint(O)) -> - P=true - ; - use_auxiliary_predicate(attach_increment), - P=(compound(E)->term_variables(E,Q),attach_increment(Q,H);true) - ), - R=(G,(var(E)->(get_attr(E,F,I)->J,L,put_attr(E,F,M),'$dispatch_run_suspensions'(M);put_attr(E,F,H),'$dispatch_run_suspensions'(H));P,'$dispatch_run_suspensions'(H))), - S=(C:-R), - B=[S,T,U|V], - T='$dispatch_run_suspensions'([]), - U=('$dispatch_run_suspensions'([W-X|Y]):-'$dispatch_run_suspensions'(W,X),'$dispatch_run_suspensions'(Y)), - run_suspensions_dispatchers(A,[],V). -run_suspensions_dispatchers(A,B,C) :- - ( A>0 -> - get_indexed_constraint(A,D), - E=[('$dispatch_run_suspensions'(A,F):-G)|B], - ( may_trigger(D) -> - run_suspensions_goal(D,F,G) - ; - G=true - ), - H is A-1, - run_suspensions_dispatchers(H,E,C) - ; - C=B - ). -make_run_suspensions(A) :- - ( A>0 -> - ( get_indexed_constraint(A,B), - may_trigger(B) -> - use_auxiliary_predicate(run_suspensions,B) - ; - true - ), - C is A-1, - make_run_suspensions(C) - ; - true - ). -make_run_suspensions(A,B,C) :- - make_run_suspensions(1,A,B,C). -make_run_suspensions(A,B,C,D) :- - ( get_indexed_constraint(A,E), - may_trigger(E) -> - use_auxiliary_predicate(run_suspensions,E), - ( wakes_partially(E) -> - run_suspensions_goal(E,C,D) - ; - run_suspensions_goal(E,B,D) - ) - ; - D=true - ). -make_run_suspensions_loop(A,B,C) :- - make_run_suspensions_loop(A,B,1,C). -make_run_suspensions_loop([],[],_,true). -make_run_suspensions_loop([A|B],[C|D],E,(F,G)) :- - make_run_suspensions(E,A,C,F), - H is E+1, - make_run_suspensions_loop(B,D,H,G). -generate_insert_delete_constraints([],[]). -generate_insert_delete_constraints([A|B],C) :- - ( is_stored(A) -> - generate_insert_delete_constraint(A,C,D) - ; - C=D - ), - generate_insert_delete_constraints(B,D). -generate_insert_delete_constraint(A,B,C) :- - insert_constraint_clause(A,B,D), - delete_constraint_clause(A,D,C). -insert_constraint_goal(A,B,C,D) :- - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(insert_in_store,A), - insert_constraint_atom(A,B,D) - ; - delay_phase_end(validate_store_type_assumptions,(insert_constraint_body(A,B,E,D),insert_constraint_direct_used_vars(E,C))) - ). -insert_constraint_direct_used_vars([],_). -insert_constraint_direct_used_vars([A-B|C],D) :- - nth1(A,D,B), - insert_constraint_direct_used_vars(C,D). -insert_constraint_atom(A,B,C) :- - make_name('$insert_in_store_',A,D), - C=..[D,B]. -insert_constraint_clause(A,B,C) :- - ( is_used_auxiliary_predicate(insert_in_store,A) -> - B=[D|C], - D=(E:-F,G,H), - insert_constraint_atom(A,I,E), - insert_constraint_body(A,I,J,H), - insert_constraint_used_vars(J,A,I,G), - ( chr_pp_flag(store_counter,on) -> - F='$insert_counter_inc' - ; - F=true - ) - ; - B=C - ). -insert_constraint_used_vars([],_,_,true). -insert_constraint_used_vars([A-B|C],D,E,(F,G)) :- - get_dynamic_suspension_term_field(argument(A),D,E,B,F), - insert_constraint_used_vars(C,D,E,G). -insert_constraint_body(A,B,C,D) :- - get_store_type(A,E), - insert_constraint_body(E,A,B,C,D). -insert_constraint_body(default,A,B,[],C) :- - global_list_store_name(A,D), - make_get_store_goal(D,E,F), - make_update_store_goal(D,G,H), - ( chr_pp_flag(debugable,on) -> - G=[B|E], - C=(F,H) - ; - set_dynamic_suspension_term_field(global_list_prev,A,I,G,J), - C=(F,G=[B|E],H,(E=[I|_]->J;true)) - ). -insert_constraint_body(multi_inthash(A),B,C,[],D) :- - generate_multi_inthash_insert_constraint_bodies(A,B,C,D). -insert_constraint_body(multi_hash(A),B,C,D,E) :- - generate_multi_hash_insert_constraint_bodies(A,B,C,E,D), - sort_out_used_vars(D,_). -insert_constraint_body(atomic_constants(A,_,_),B,C,D,E) :- - multi_hash_key_direct(B,A,C,F,D), - constants_store_index_name(B,A,G), - H=..[G,F,I], - E=(H->nb_getval(I,J),b_setval(I,[C|J]);true). -insert_constraint_body(ground_constants(A,_,_),B,C,D,E) :- - multi_hash_key_direct(B,A,C,F,D), - constants_store_index_name(B,A,G), - H=..[G,F,I], - E=(H->nb_getval(I,J),b_setval(I,[C|J]);true). -insert_constraint_body(global_ground,A,B,[],C) :- - global_ground_store_name(A,D), - make_get_store_goal(D,E,F), - make_update_store_goal(D,G,H), - ( chr_pp_flag(debugable,on) -> - G=[B|E], - C=(F,H) - ; - set_dynamic_suspension_term_field(global_list_prev,A,I,G,J), - C=(F,G=[B|E],H,(E=[I|_]->J;true)) - ). -insert_constraint_body(var_assoc_store(A,B),_,C,[A-D,B-E],F) :- - get_target_module(G), - F=(get_attr(D,G,H)->insert_assoc_store(H,E,C);new_assoc_store(H),put_attr(D,G,H),insert_assoc_store(H,E,C)). -insert_constraint_body(global_singleton,A,B,[],C) :- - global_singleton_store_name(A,D), - make_update_store_goal(D,B,E), - C=E. -insert_constraint_body(multi_store(A),B,C,D,E) :- - maplist(insert_constraint_body1(B,C),A,F,G), - list2conj(G,E), - sort_out_used_vars(F,D). -insert_constraint_body1(A,B,C,D,E) :- - insert_constraint_body(C,A,B,D,E). -insert_constraint_body(identifier_store(A),B,C,D,E) :- - D=[A-F], - get_identifier_size(G), - functor(H,struct,G), - get_identifier_index(B,A,I), - arg(I,H,J), - E=(F=H,setarg(I,F,[C|J])). -insert_constraint_body(type_indexed_identifier_store(A,B),C,D,E,F) :- - E=[A-G], - type_indexed_identifier_structure(B,H), - get_type_indexed_identifier_index(B,C,A,I), - arg(I,H,J), - F=(G=H,setarg(I,G,[D|J])). -sort_out_used_vars(A,B) :- - flatten(A,C), - sort(C,D), - sort_out_used_vars1(D,B). -sort_out_used_vars1([],[]). -sort_out_used_vars1([A-B],C) :- - !, - C=[A-B]. -sort_out_used_vars1([A-B,C-D|E],F) :- - ( A==C -> - B=D, - sort_out_used_vars1([A-B|E],F) - ; - F=[A-B|G], - sort_out_used_vars1([C-D|E],G) - ). -generate_multi_inthash_insert_constraint_bodies([],_,_,true). -generate_multi_inthash_insert_constraint_bodies([A|B],C,D,(E,F)) :- - multi_hash_store_name(C,A,G), - multi_hash_key(C,A,D,H,I), - E=(H,nb_getval(G,J),insert_iht(J,I,D)), - generate_multi_inthash_insert_constraint_bodies(B,C,D,F). -generate_multi_hash_insert_constraint_bodies([],_,_,true,[]). -generate_multi_hash_insert_constraint_bodies([A|B],C,D,(E,F),[G|H]) :- - multi_hash_store_name(C,A,I), - multi_hash_key_direct(C,A,D,J,G), - make_get_store_goal(I,K,L), - ( chr_pp_flag(ht_removal,on) -> - ht_prev_field(A,M), - set_dynamic_suspension_term_field(M,C,N,O,P), - E=(L,insert_ht(K,J,D,O),(O=[_,N|_]->P;true)) - ; - E=(L,insert_ht(K,J,D)) - ), - generate_multi_hash_insert_constraint_bodies(B,C,D,F,H). -delete_constraint_clause(A,B,C) :- - ( is_used_auxiliary_predicate(delete_from_store,A) -> - B=[D|C], - D=(E:-F), - delete_constraint_atom(A,G,E), - A=H/I, - functor(E,H,I), - delete_constraint_body(A,E,G,[],F) - ; - B=C - ). -delete_constraint_goal(A,B,C,D) :- - functor(A,E,F), - G=E/F, - ( chr_pp_flag(inline_insertremove,off) -> - use_auxiliary_predicate(delete_from_store,G), - delete_constraint_atom(G,B,D) - ; - delay_phase_end(validate_store_type_assumptions,delete_constraint_body(G,A,B,C,D)) - ). -delete_constraint_atom(A,B,C) :- - make_name('$delete_from_store_',A,D), - C=..[D,B]. -delete_constraint_body(A,B,C,D,E) :- - E=(F,G), - ( chr_pp_flag(store_counter,on) -> - F='$delete_counter_inc' - ; - F=true - ), - get_store_type(A,H), - delete_constraint_body(H,A,B,C,D,G). -delete_constraint_body(default,A,_,B,_,C) :- - ( chr_pp_flag(debugable,on) -> - global_list_store_name(A,D), - make_get_store_goal(D,E,F), - make_update_store_goal(D,G,H), - C=(F,'chr sbag_del_element'(E,B,G),H) - ; - get_dynamic_suspension_term_field(global_list_prev,A,B,I,J), - global_list_store_name(A,D), - make_get_store_goal(D,E,F), - make_update_store_goal(D,K,H), - set_dynamic_suspension_term_field(global_list_prev,A,L,_,M), - set_dynamic_suspension_term_field(global_list_prev,A,L,I,N), - C=(J,(var(I)->F,E=[_|K],H,(K=[L|_]->M;true);I=[_,_|K],setarg(2,I,K),(K=[L|_]->N;true))) - ). -delete_constraint_body(multi_inthash(A),B,_,C,_,D) :- - generate_multi_inthash_delete_constraint_bodies(A,B,C,D). -delete_constraint_body(multi_hash(A),B,C,D,E,F) :- - generate_multi_hash_delete_constraint_bodies(A,B,C,D,E,F). -delete_constraint_body(atomic_constants(A,_,_),B,C,D,E,F) :- - multi_hash_key(B,C,A,D,E,G,H), - constants_store_index_name(B,A,I), - J=..[I,H,K], - F=(G,(J->nb_getval(K,L),'chr sbag_del_element'(L,D,M),b_setval(K,M);true)). -delete_constraint_body(ground_constants(A,_,_),B,C,D,E,F) :- - multi_hash_key(B,C,A,D,E,G,H), - constants_store_index_name(B,A,I), - J=..[I,H,K], - F=(G,(J->nb_getval(K,L),'chr sbag_del_element'(L,D,M),b_setval(K,M);true)). -delete_constraint_body(global_ground,A,_,B,_,C) :- - ( chr_pp_flag(debugable,on) -> - global_ground_store_name(A,D), - make_get_store_goal(D,E,F), - make_update_store_goal(D,G,H), - C=(F,'chr sbag_del_element'(E,B,G),H) - ; - get_dynamic_suspension_term_field(global_list_prev,A,B,I,J), - global_ground_store_name(A,D), - make_get_store_goal(D,E,F), - make_update_store_goal(D,K,H), - set_dynamic_suspension_term_field(global_list_prev,A,L,_,M), - set_dynamic_suspension_term_field(global_list_prev,A,L,I,N), - C=(J,(var(I)->F,E=[_|K],H,(K=[L|_]->M;true);I=[_,_|K],setarg(2,I,K),(K=[L|_]->N;true))) - ). -delete_constraint_body(var_assoc_store(A,B),C,_,D,_,E) :- - get_target_module(F), - get_dynamic_suspension_term_field(argument(A),C,D,G,H), - get_dynamic_suspension_term_field(argument(B),C,D,I,J), - E=(H,get_attr(G,F,K),J,delete_assoc_store(K,I,D)). -delete_constraint_body(global_singleton,A,_,_,_,B) :- - global_singleton_store_name(A,C), - make_update_store_goal(C,[],D), - B=D. -delete_constraint_body(multi_store(A),B,C,D,E,F) :- - maplist(delete_constraint_body1(B,C,D,E),A,G), - list2conj(G,F). -delete_constraint_body1(A,B,C,D,E,F) :- - delete_constraint_body(E,A,B,C,D,F). -delete_constraint_body(identifier_store(A),B,C,D,E,F) :- - get_suspension_argument_possibly_in_scope(C,E,D,A,G,H), - get_identifier_size(I), - functor(J,struct,I), - get_identifier_index(B,A,K), - arg(K,J,L), - F=(H,G=J,'chr sbag_del_element'(L,D,M),setarg(K,G,M)). -delete_constraint_body(type_indexed_identifier_store(A,B),C,D,E,F,G) :- - get_suspension_argument_possibly_in_scope(D,F,E,A,H,I), - type_indexed_identifier_structure(B,J), - get_type_indexed_identifier_index(B,C,A,K), - arg(K,J,L), - G=(I,H=J,'chr sbag_del_element'(L,E,M),setarg(K,H,M)). -generate_multi_inthash_delete_constraint_bodies([],_,_,true). -generate_multi_inthash_delete_constraint_bodies([A|B],C,D,(E,F)) :- - multi_hash_store_name(C,A,G), - multi_hash_key(C,A,D,H,I), - E=(H,nb_getval(G,J),delete_iht(J,I,D)), - generate_multi_inthash_delete_constraint_bodies(B,C,D,F). -generate_multi_hash_delete_constraint_bodies([],_,_,_,_,true). -generate_multi_hash_delete_constraint_bodies([A|B],C,D,E,F,(G,H)) :- - multi_hash_store_name(C,A,I), - multi_hash_key(C,D,A,E,F,J,K), - make_get_store_goal(I,L,M), - ( chr_pp_flag(ht_removal,on) -> - ht_prev_field(A,N), - get_dynamic_suspension_term_field(N,C,E,O,P), - set_dynamic_suspension_term_field(N,C,Q,_,R), - set_dynamic_suspension_term_field(N,C,Q,O,S), - G=(P,(var(O)->M,J,delete_first_ht(L,K,T),(T=[Q|_]->R;true);O=[_,_|T],setarg(2,O,T),(T=[Q|_]->S;true))) - ; - G=(J,M,delete_ht(L,K,E)) - ), - generate_multi_hash_delete_constraint_bodies(B,_,D,E,F,H). -generate_attach_code(A,B) :- - enumerate_stores_code(A,C), - append(C,D,B), - generate_attach_code(A,D,E), - module_initializers(F), - prolog_global_variables_code(G), - E=[('$chr_initialization':-F),(:-initialization '$chr_initialization')|G]. -generate_attach_code([],A,A). -generate_attach_code([A|B],C,D) :- - get_store_type(A,E), - generate_attach_code(E,A,C,F), - generate_attach_code(B,F,D). -generate_attach_code(default,A,B,C) :- - global_list_store_initialisation(A,B,C). -generate_attach_code(multi_inthash(A),B,C,D) :- - multi_inthash_store_initialisations(A,B,C,E), - multi_inthash_via_lookups(A,B,E,D). -generate_attach_code(multi_hash(A),B,C,D) :- - multi_hash_store_initialisations(A,B,C,E), - multi_hash_lookups(A,B,E,D). -generate_attach_code(atomic_constants(A,B,_),C,D,E) :- - constants_initializers(C,A,B), - atomic_constants_code(C,A,B,D,E). -generate_attach_code(ground_constants(A,B,_),C,D,E) :- - constants_initializers(C,A,B), - ground_constants_code(C,A,B,D,E). -generate_attach_code(global_ground,A,B,C) :- - global_ground_store_initialisation(A,B,C). -generate_attach_code(var_assoc_store(_,_),_,A,A) :- - use_auxiliary_module(chr_assoc_store). -generate_attach_code(global_singleton,A,B,C) :- - global_singleton_store_initialisation(A,B,C). -generate_attach_code(multi_store(A),B,C,D) :- - multi_store_generate_attach_code(A,B,C,D). -generate_attach_code(identifier_store(A),B,C,D) :- - get_identifier_index(B,A,E), - ( E==2 -> - get_identifier_size(F), - functor(G,struct,F), - G=..[_,H|I], - set_elems(I,[]), - J=new_identifier(H,G), - functor(K,struct,F), - arg(1,K,L), - M=(user:portray(K):-write(')), - functor(N,struct,F), - arg(1,N,O), - P=identifier_label(N,O), - C=[J,M,P|D] - ; - C=D - ). -generate_attach_code(type_indexed_identifier_store(A,B),C,D,E) :- - get_type_indexed_identifier_index(B,C,A,F), - ( F==2 -> - identifier_store_initialization(B,D,G), - get_type_indexed_identifier_size(B,_), - type_indexed_identifier_structure(B,H), - H=..[_,I|J], - set_elems(J,[]), - type_indexed_identifier_name(B,new_identifier,K), - L=..[K,I,H], - M=..[K,N,O], - type_indexed_identifier_structure(B,P), - P=..[_,N|Q], - set_elems(Q,[]), - R=(O=P), - S=user:goal_expansion(M,R), - type_indexed_identifier_structure(B,T), - arg(1,T,U), - V=(user:portray(T):-write(')), - type_indexed_identifier_structure(B,W), - arg(1,W,X), - type_indexed_identifier_name(B,identifier_label,Y), - Z=..[Y,W,X], - A1=..[Y,_,B1], - type_indexed_identifier_structure(B,C1), - arg(1,C1,B1), - D1=(_=C1), - E1=(user:goal_expansion(A1,D1):-writeln(expanding)), - identifier_store_name(B,F1), - lookup_identifier_atom(B,G1,H1,I1), - type_indexed_identifier_name(B,new_identifier,J1), - K1=..[J1,G1,H1], - L1=(I1:-nb_getval(F1,M1),(lookup_ht(M1,G1,[H1])->true;K1,insert_ht(M1,G1,H1))), - G=[(:-multifile goal_expansion/2),(:-dynamic goal_expansion/2),L,S,V,Z,E1,L1|E] - ; - D=E - ). -constants_initializers(A,B,C) :- - maplist(constant_initializer(A,B),C). -constant_initializer(A,B,C) :- - constants_store_name(A,B,C,D), - module_initializer(nb_setval(D,[])). -lookup_identifier_atom(A,B,C,D) :- - atom_concat(lookup_identifier_,A,E), - D=..[E,B,C]. -identifier_label_atom(A,B,C,D) :- - type_indexed_identifier_name(A,identifier_label,E), - D=..[E,B,C]. -multi_store_generate_attach_code([],_,A,A). -multi_store_generate_attach_code([A|B],C,D,E) :- - generate_attach_code(A,C,D,F), - multi_store_generate_attach_code(B,C,F,E). -multi_inthash_store_initialisations([],_,A,A). -multi_inthash_store_initialisations([A|B],C,D,E) :- - use_auxiliary_module(chr_integertable_store), - multi_hash_store_name(C,A,F), - module_initializer((new_iht(G),nb_setval(F,G))), - H=D, - multi_inthash_store_initialisations(B,C,H,E). -multi_hash_store_initialisations([],_,A,A). -multi_hash_store_initialisations([A|B],C,D,E) :- - use_auxiliary_module(chr_hashtable_store), - multi_hash_store_name(C,A,F), - prolog_global_variable(F), - make_init_store_goal(F,G,H), - module_initializer((new_ht(G),H)), - I=D, - multi_hash_store_initialisations(B,C,I,E). -global_list_store_initialisation(A,B,C) :- - ( is_stored(A) -> - global_list_store_name(A,D), - prolog_global_variable(D), - make_init_store_goal(D,[],E), - module_initializer(E) - ; - true - ), - B=C. -global_ground_store_initialisation(A,B,C) :- - global_ground_store_name(A,D), - prolog_global_variable(D), - make_init_store_goal(D,[],E), - module_initializer(E), - B=C. -global_singleton_store_initialisation(A,B,C) :- - global_singleton_store_name(A,D), - prolog_global_variable(D), - make_init_store_goal(D,[],E), - module_initializer(E), - B=C. -identifier_store_initialization(A,B,C) :- - use_auxiliary_module(chr_hashtable_store), - identifier_store_name(A,D), - prolog_global_variable(D), - make_init_store_goal(D,E,F), - module_initializer((new_ht(E),F)), - B=C. -multi_inthash_via_lookups([],_,A,A). -multi_inthash_via_lookups([A|B],C,D,E) :- - multi_hash_lookup_head(C,A,F,G,H), - multi_hash_lookup_body(C,inthash,A,F,G,I), - D=[(H:-I)|J], - multi_inthash_via_lookups(B,C,J,E). -multi_hash_lookups([],_,A,A). -multi_hash_lookups([A|B],C,D,E) :- - multi_hash_lookup_head(C,A,F,G,H), - multi_hash_lookup_body(C,hash,A,F,G,I), - D=[(H:-I)|J], - multi_hash_lookups(B,C,J,E). -multi_hash_lookup_head(A,B,C,D,E) :- - multi_hash_lookup_name(A,B,F), - E=..[F,C,D]. -multi_hash_lookup_body(A,B,C,D,E,F) :- - get_store_type(A,multi_store(G)), - ( memberchk(atomic_constants(C,H,_),G) -> - ( ground(D) -> - constants_store_name(A,C,D,I), - F=nb_getval(I,E) - ; - constants_store_index_name(A,C,J), - K=..[J,D,I], - F=(K,nb_getval(I,E)) - ) - ; - ( memberchk(ground_constants(C,H,_),G) -> - ( ground(D) -> - constants_store_name(A,C,D,I), - F=nb_getval(I,E) - ; - constants_store_index_name(A,C,J), - K=..[J,D,I], - F=(K,nb_getval(I,E)) - ) - ) - ; - ( memberchk(multi_hash([C]),G) -> - multi_hash_store_name(A,C,I), - make_get_store_goal(I,L,M), - ( B==hash, - specialized_hash_term_call(A,C,D,N,O) -> - F=(M,O,lookup_ht1(L,N,D,E)) - ; - lookup_hash_call(B,L,D,E,K), - F=(M,K) - ) - ) - ; - ( B==inthash -> - multi_hash_store_name(A,C,I), - make_get_store_goal(I,L,M), - lookup_hash_call(B,L,D,E,K), - F=(M,K) - ) - ). -lookup_hash_call(hash,A,B,C,lookup_ht(A,B,C)). -lookup_hash_call(inthash,A,B,C,lookup_iht(A,B,C)). -specialized_hash_term_call(A,B,C,D,E) :- - ( ground(C) -> - hash_term(C,D), - E=true - ; - ( B=[F], - get_constraint_type(A,G), - nth1(F,G,H), - unalias_type(H,I), - memberchk_eq(I,[int,natural]) -> - ( I==int -> - E=(D is abs(C)) - ; - D=C, - E=true - ) - ) - ; - nonvar(C), - specialize_hash_term(C,J), - J\==C, - E=hash_term(J,D) - ). -specialize_hash_term(A,B) :- - ( ground(A) -> - hash_term(A,B) - ; - ( var(A) -> - B=A - ) - ; - A=..[C|D], - maplist(specialize_hash_term,D,E), - B=..[C|E] - ). -multi_hash_lookup_goal(A,B,C,D,E,F) :- - ( atomic(D) -> - actual_atomic_multi_hash_keys(A,C,[D]) - ; - ( ground(D) -> - actual_ground_multi_hash_keys(A,C,[D]) - ) - ; - ( C=[G], - get_constraint_arg_type(A,G,H), - is_chr_constants_type(H,_,_) -> - true - ) - ; - actual_non_ground_multi_hash_key(A,C) - ), - delay_phase_end(validate_store_type_assumptions,multi_hash_lookup_body(A,B,C,D,E,F)). -multi_hash_lookup_name(A/B,C,D) :- - atom_concat_list(C,E), - atom_concat_list(['$via1_multi_hash_',A,'___',B,-,E],D). -multi_hash_store_name(A/B,C,D) :- - get_target_module(E), - atom_concat_list(C,F), - atom_concat_list(['$chr_store_multi_hash_',E,'____',A,'___',B,-,F],D). -multi_hash_key(A,B,C,D,E) :- - ( B=[F] -> - get_dynamic_suspension_term_field(argument(F),A,C,E,D) - ; - maplist(get_dynamic_suspension_term_field1(A,C),B,G,H), - E=..[k|G], - list2conj(H,D) - ). -get_dynamic_suspension_term_field1(A,B,C,D,E) :- - get_dynamic_suspension_term_field(argument(C),A,B,D,E). -multi_hash_key(_,A,B,C,D,E,F) :- - ( B=[G] -> - get_suspension_argument_possibly_in_scope(A,D,C,G,F,E) - ; - maplist(get_suspension_argument_possibly_in_scope(A,D,C),B,H,I), - F=..[k|H], - list2conj(I,E) - ). -get_suspension_argument_possibly_in_scope(A,B,C,D,E,F) :- - arg(D,A,G), - ( term_variables(G,H), - copy_term_nat(G-H,E-I), - translate(H,B,I) -> - F=true - ; - functor(A,J,K), - L=J/K, - get_dynamic_suspension_term_field(argument(D),L,C,E,F) - ). -multi_hash_key_direct(_,A,_,B,C) :- - ( A=[D] -> - C=[D-B] - ; - pairup(A,E,C), - B=..[k|E] - ). -multi_hash_key_args(A,B,C) :- - maplist(arg1(B),A,C). -atomic_constants_code(A,B,C,D,E) :- - constants_store_index_name(A,B,F), - maplist(atomic_constant_code(A,B,F),C,G), - append(G,E,D). -atomic_constant_code(A,B,C,D,E) :- - constants_store_name(A,B,D,F), - E=..[C,D,F]. -ground_constants_code(A,B,C,D,E) :- - constants_store_index_name(A,B,F), - maplist(constants_store_name(A,B),C,G), - length(C,H), - replicate(H,[],I), - trie_index([C|I],G,F,D,E). -constants_store_name(A/B,C,D,E) :- - get_target_module(F), - term_to_atom(D,G), - term_to_atom(C,H), - atom_concat_list(['$chr_store_constants_',F,'____',A,'___',B,'___',H,'___',G],E). -constants_store_index_name(A/B,C,D) :- - get_target_module(E), - term_to_atom(C,F), - atom_concat_list(['$chr_store_constants_',E,'____',A,'___',B,'___',F],D). -trie_index([A|B],C,D,E,F) :- - trie_step(A,D,D,B,C,E,F). -trie_step([],_,_,[],[],A,A) :- - !. -trie_step(A,B,C,D,E,F,G) :- - D=[H|_], - length(H,I), - aggregate_all(set(J/K),(member(L,A),functor(L,J,K)),M), - N is I+1, - trie_step_cases(M,N,A,D,E,B,C,F,G). -trie_step_cases([],_,_,_,_,_,_,A,A). -trie_step_cases([A|B],C,D,E,F,G,H,I,J) :- - trie_step_case(A,C,D,E,F,G,H,I,K), - trie_step_cases(B,C,D,E,F,G,H,K,J). -trie_step_case(A/B,C,D,E,F,G,H,[I|J],K) :- - I=(L:-M), - N is C+1, - functor(L,G,N), - arg(1,L,O), - L=..[_,_|P], - once(append(Q,[R],P)), - functor(O,A,B), - O=..[_|S], - append(S,P,T), - ( T==[R] -> - J=K, - M=true, - rec_cases(D,_,F,A/B,_,_,U), - U=[R] - ; - rec_cases(D,E,F,A/B,V,W,U), - ( W=[X] -> - J=K, - M=true, - append([V,X,U],T) - ; - pairup(V,W,Y), - common_pattern(Y,Z,A1,B1), - append(S,Q,[C1|D1]), - C1-D1=Z, - gensym(H,E1), - append(A1,[R],F1), - M=..[E1|F1], - maplist(head_tail,B1,G1,H1), - trie_step(G1,E1,H,H1,U,J,K) - ) - ). -head_tail([A|B],A,B). -rec_cases([],[],[],_,[],[],[]). -rec_cases([A|B],[C|D],[E|F],G/H,I,J,K) :- - ( functor(A,G,H), - A=..[_|L], - append(L,C,[M|N]) -> - I=[M|O], - J=[N|P], - K=[E|Q], - rec_cases(B,D,F,G/H,O,P,Q) - ; - rec_cases(B,D,F,G/H,I,J,K) - ). -common_pattern(A,B,C,D) :- - fold1(gct,A,B), - term_variables(B,C), - findall(C,member(B,A),D). -gct(A,B,C) :- - gct_(A,B,C,[],_). -gct_(A,B,C,D,E) :- - ( nonvar(A), - nonvar(B), - functor(A,F,G), - functor(B,H,I), - F==H, - G==I -> - functor(C,F,G), - A=..[_|J], - B=..[_|K], - C=..[_|L], - maplist_dcg(gct_,J,K,L,D,E) - ; - ( lookup_eq(D,A+B,C) -> - E=D - ) - ; - E=[A+B-C|D] - ). -fold1(A,[B|C],D) :- - fold(C,A,B,D). -fold([],_,A,A). -fold([A|B],C,D,E) :- - call(C,A,D,F), - fold(B,C,F,E). -maplist_dcg(A,B,C,D)-->maplist_dcg_(B,C,D,A). -maplist_dcg_([],[],[],_)-->[]. -maplist_dcg_([A|B],[C|D],[E|F],G)-->call(G,A,C,E),maplist_dcg_(B,D,F,G). -global_list_store_name(A/B,C) :- - get_target_module(D), - atom_concat_list(['$chr_store_global_list_',D,'____',A,'___',B],C). -global_ground_store_name(A/B,C) :- - get_target_module(D), - atom_concat_list(['$chr_store_global_ground_',D,'____',A,'___',B],C). -global_singleton_store_name(A/B,C) :- - get_target_module(D), - atom_concat_list(['$chr_store_global_singleton_',D,'____',A,'___',B],C). -identifier_store_name(A,B) :- - get_target_module(C), - atom_concat_list(['$chr_identifier_lookup_',C,'____',A],B). -prolog_global_variables_code(A) :- - prolog_global_variables(B), - ( B==[] -> - A=[] - ; - maplist(wrap_in_functor('$chr_prolog_global_variable'),B,C), - A=[(:-dynamic user:exception/3),(:-multifile user:exception/3),(user:exception(undefined_global_variable,D,retry):-'$chr_prolog_global_variable'(D),'$chr_initialization')|C] - ). -sbag_member_call(A,B,'chr sbag_member'(A,B)). -update_mutable_call(A,B,'chr update_mutable'(A,B)). -create_mutable_call(A,B,true) :- - B=mutable(A). -get_suspension_field(A,B,C,D,E) :- - get_dynamic_suspension_term_field(C,A,B,D,E). -update_suspension_field(A,B,C,D,E) :- - set_dynamic_suspension_term_field(C,A,B,D,E). -get_update_suspension_field(A,B,C,D,E,true,F,G) :- - get_dynamic_suspension_term_field(C,A,B,D,F), - set_dynamic_suspension_term_field(C,A,B,E,G). -create_static_suspension_field(A,B,C,D,true) :- - get_static_suspension_term_field(C,A,B,D). -get_static_suspension_field(A,B,C,D,true) :- - get_static_suspension_term_field(C,A,B,D). -get_update_static_suspension_field(A,B,C,D,E,F,true,G) :- - get_static_suspension_term_field(D,A,C,E), - set_dynamic_suspension_term_field(D,A,B,F,G). -enumerate_stores_code(A,[B|C]) :- - D='$enumerate_constraints'(E), - B=(D:-F), - enumerate_store_bodies(A,E,C), - ( C=[] -> - F=fail - ; - F=(nonvar(E)->functor(E,G,_),'$enumerate_constraints'(G,E);'$enumerate_constraints'(_,E)) - ). -enumerate_store_bodies([],_,[]). -enumerate_store_bodies([A|B],C,D) :- - ( is_stored(A) -> - get_store_type(A,E), - ( enumerate_store_body(E,A,F,G) -> - true - ; - chr_error(internal,'Could not generate enumeration code for constraint ~w. -',[A]) - ), - get_dynamic_suspension_term_field(arguments,A,F,H,I), - A=J/_, - K=..[J|H], - L='$enumerate_constraints'(J,C), - M=(G,I,C=K), - D=[(L:-M)|N] - ; - D=N - ), - enumerate_store_bodies(B,C,N). -enumerate_store_body(default,A,B,C) :- - global_list_store_name(A,D), - sbag_member_call(B,E,F), - make_get_store_goal(D,E,G), - C=(G,F). -enumerate_store_body(multi_inthash([A|_]),B,C,D) :- - multi_inthash_enumerate_store_body(A,B,C,D). -enumerate_store_body(multi_hash([A|_]),B,C,D) :- - multi_hash_enumerate_store_body(A,B,C,D). -enumerate_store_body(atomic_constants(A,B,C),D,E,F) :- - C==complete, - maplist(enumerate_constant_store_body(D,A,G),B,H), - list2disj(H,I), - F=(I,member(E,G)). -enumerate_constant_store_body(A,B,C,D,nb_getval(E,C)) :- - constants_store_name(A,B,D,E). -enumerate_store_body(ground_constants(A,B,C),D,E,F) :- - enumerate_store_body(atomic_constants(A,B,C),D,E,F). -enumerate_store_body(global_ground,A,B,C) :- - global_ground_store_name(A,D), - sbag_member_call(B,E,F), - make_get_store_goal(D,E,G), - C=(G,F). -enumerate_store_body(var_assoc_store(_,_),_,_,A) :- - A=fail. -enumerate_store_body(global_singleton,A,B,C) :- - global_singleton_store_name(A,D), - make_get_store_goal(D,B,E), - C=(E,B\==[]). -enumerate_store_body(multi_store(A),B,C,D) :- - ( memberchk(global_ground,A) -> - enumerate_store_body(global_ground,B,C,D) - ; - once((member(E,A),enumerate_store_body(E,B,C,D))) - ). -enumerate_store_body(identifier_store(_),_,_,A) :- - A=fail. -enumerate_store_body(type_indexed_identifier_store(_,_),_,_,A) :- - A=fail. -multi_inthash_enumerate_store_body(A,B,C,D) :- - multi_hash_store_name(B,A,E), - D=(nb_getval(E,F),value_iht(F,C)). -multi_hash_enumerate_store_body(A,B,C,D) :- - multi_hash_store_name(B,A,E), - make_get_store_goal(E,F,G), - D=(G,value_ht(F,C)). -guard_simplification :- - ( chr_pp_flag(guard_simplification,on) -> - precompute_head_matchings, - simplify_guards(1) - ; - true - ). -next_prev_rule(A,B,C) :- - ( find_min_q(A,_-D) -> - D=(-B), - normalize_heap(A,D,C) - ; - B=0, - C=A - ). -normalize_heap(A,B,C) :- - ( find_min_q(A,_-B) -> - delete_min_q(A,D,tuple(E,F,_)-_), - ( F>1 -> - G is F-1, - get_occurrence(E,G,H,_), - insert_q(D,tuple(E,G,H)-(-H),I) - ; - I=D - ), - normalize_heap(I,B,C) - ; - C=A - ). -head_types_modes_condition([],_,true). -head_types_modes_condition([A|B],C,(D,E)) :- - types_modes_condition(C,A,D), - head_types_modes_condition(B,C,E). -add_background_info(A,B) :- - get_bg_info(C), - add_background_info2(A,D), - append(C,D,B). -add_background_info2(A,[]) :- - var(A), - !. -add_background_info2([],[]) :- - !. -add_background_info2([A|B],C) :- - !, - add_background_info2(A,D), - add_background_info2(B,E), - append(D,E,C). -add_background_info2(A,B) :- - ( functor(A,_,C), - C>0 -> - A=..[_|D], - add_background_info2(D,E) - ; - E=[] - ), - get_bg_info(A,F), - append(F,E,B). -normalize_conj_list(A,B) :- - list2conj(A,C), - conj2list(C,B). -compute_derived_info([],_,_,_,_,_,_,_,[],[]). -compute_derived_info([A|B],C,D,E,F,G,H,I,[J|K],[L|M]) :- - copy_term(C-F,N), - variable_replacement(C-F,N,O), - append(A,O,P), - list2conj(C,Q), - negate_b(Q,R), - make_head_matchings_explicit_not_negated2(E,D,S), - list2conj(S,T), - term_variables(P,U), - term_variables(C-F-S,V), - new_vars(V,U,W), - append(P,W,X), - ( F==true -> - Y=R - ; - negate_b(F,Z), - Y=(R;T,Z) - ), - copy_with_variable_replacement(Y,J,X), - copy_with_variable_replacement(F,A1,X), - copy_with_variable_replacement(C,B1,X), - list2conj(B1,C1), - apply_guard_wrt_term(H,A1,D1), - apply_guard_wrt_term(D1,C1,L), - compute_derived_info(B,C,D,E,F,G,H,I,K,M). -simplify_guard(A,B,C,D,E) :- - conj2list(A,F), - guard_entailment:simplify_guards(C,B,F,G,E), - list2conj(G,D). -new_vars([],_,[]). -new_vars([A|B],C,D) :- - ( memberchk_eq(A,C) -> - new_vars(B,C,D) - ; - D=[A-E,E-A|F], - new_vars(B,C,F) - ). -head_subset(A,B,C) :- - head_subset(A,B,C,[],_). -head_subset([],A,B,B,A). -head_subset([A|B],C,D,E,F) :- - head_member(C,A,G,E,H), - head_subset(B,H,D,G,F). -head_member([A|B],C,D,E,F) :- - ( - variable_replacement(C,A,E,D), - F=B - ; - F=[A|G], - head_member(B,C,D,E,G) - ). -make_head_matchings_explicit(A,B,C) :- - make_head_matchings_explicit_memo_lookup(A,D,E), - copy_term_nat(D-E,B-C). -make_head_matchings_explicit_(A,B,C) :- - extract_arguments(A,D), - make_matchings_explicit(D,E,[],[],_,C), - substitute_arguments(A,E,B). -make_head_matchings_explicit_not_negated(A,B,C) :- - extract_arguments(A,D), - make_matchings_explicit_not_negated(D,E,C), - substitute_arguments(A,E,B). -make_head_matchings_explicit_not_negated2(A,B,C) :- - extract_arguments(A,D), - extract_arguments(B,E), - make_matchings_explicit_not_negated(D,E,C). -extract_arguments([],[]). -extract_arguments([A|B],C) :- - A=..[_|D], - append(D,E,C), - extract_arguments(B,E). -substitute_arguments([],[],[]). -substitute_arguments([A|B],C,[D|E]) :- - functor(A,F,G), - split_at(G,C,H,I), - D=..[F|H], - substitute_arguments(B,I,E). -make_matchings_explicit([],[],_,A,A,[]). -make_matchings_explicit([A|B],[C|D],E,F,G,H) :- - ( var(A) -> - ( memberchk_eq(A,E) -> - list2disj(F,I), - H=[(I;C==A)|J], - K=E - ; - H=J, - C=A, - K=[A|E] - ), - L=F - ; - functor(A,M,N), - A=..[M|O], - make_matchings_explicit(O,P,E,F,Q,R), - S=..[M|P], - ( R==[] -> - H=[functor(C,M,N)|J] - ; - list2conj(R,T), - list2disj(F,I), - U=(C\=S;I;T), - H=[functor(C,M,N),U|J] - ), - L=[C\=S|Q], - term_variables(B,V), - append(V,E,K) - ), - make_matchings_explicit(B,D,K,L,G,J). -make_matchings_explicit_not_negated([],[],[]). -make_matchings_explicit_not_negated([A|B],[C|D],E) :- - E=[C=A|F], - make_matchings_explicit_not_negated(B,D,F). -apply_guard_wrt_term([],_,[]). -apply_guard_wrt_term([A|B],C,[D|E]) :- - ( var(A) -> - apply_guard_wrt_variable(C,A,D) - ; - A=..[F|G], - apply_guard_wrt_term(G,C,H), - D=..[F|H] - ), - apply_guard_wrt_term(B,C,E). -apply_guard_wrt_variable((A,B),C,D) :- - !, - apply_guard_wrt_variable(A,C,E), - apply_guard_wrt_variable(B,E,D). -apply_guard_wrt_variable(A,B,C) :- - ( A=(D=E), - B==D -> - C=E - ; - ( A=functor(F,G,H), - B==F, - ground(G), - ground(H) -> - functor(C,G,H) - ) - ; - C=B - ). -replace_some_heads(A,B,_,[],A,B,_,_,[]) :- - !. -replace_some_heads([],[A|B],[C|D],[E|F],[],[G|H],I,J,K) :- - !, - ( C==E -> - G=E, - replace_some_heads([],B,D,F,[],H,I,J,K) - ; - ( E=functor(L,M,N), - C==L -> - length(O,N), - ( var(A) -> - P=[], - G=..[M|O] - ; - A=..[M|Q], - use_same_args(Q,O,R,I,J,P), - G=..[M|R] - ), - replace_some_heads([],B,D,F,[],H,I,J,S), - append(P,S,K) - ) - ; - G=A, - replace_some_heads([],B,D,[E|F],[],H,I,J,K) - ). -replace_some_heads([A|B],C,[D|E],[F|G],[H|I],J,K,L,M) :- - !, - ( D==F -> - H=F, - replace_some_heads(B,C,E,G,I,J,K,L,M) - ; - ( F=functor(N,O,P), - D==N -> - length(Q,P), - ( var(A) -> - R=[], - H=..[O|Q] - ; - A=..[O|S], - use_same_args(S,Q,T,K,L,R), - H=..[O|T] - ), - replace_some_heads(B,C,E,G,I,J,K,L,U), - append(R,U,M) - ) - ; - H=A, - replace_some_heads(B,C,E,[F|G],I,J,K,L,M) - ). -use_same_args([],[],[],_,_,[]). -use_same_args([A|B],[_|C],[D|E],F,G,H) :- - var(A), - !, - D=A, - use_same_args(B,C,E,F,G,H). -use_same_args([A|B],[C|D],[E|F],G,H,I) :- - nonvar(A), - !, - ( common_variables(A,H) -> - I=[C=A|J] - ; - I=J - ), - E=C, - use_same_args(B,D,F,G,H,J). -simplify_heads([],_,_,_,[],[]). -simplify_heads([A|B],C,D,E,F,G) :- - A=(H=I), - ( - ( - nonvar(I) - ; - common_variables(I,B-C) - ), - guard_entailment:entails_guard(C,H=I) -> - ( common_variables(I,D-B-C) -> - G=J, - F=K - ; - ( common_variables(I,E) -> - G=[H=I|J] - ; - G=J - ), - F=[H|K] - ) - ; - ( nonvar(I), - functor(I,L,M), - guard_entailment:entails_guard([functor(H,L,M)|C],H=I) -> - G=J, - ( common_variables(I,D-B-C) -> - F=K - ; - F=[functor(H,L,M)|K] - ) - ) - ; - F=K, - G=J - ), - simplify_heads(B,[A|C],D,E,K,J). -common_variables(A,B) :- - term_variables(A,C), - term_variables(B,D), - intersect_eq(C,D,E), - E\==[]. -add_failing_occ(A,B,C,D,E,F,_,G,H) :- - A=pragma(rule(_,_,I,_),ids(J,K),_,_,_), - append(K,J,L), - missing_partner_cond(B,C,L,D,M,N,G), - copy_term((N,B,C),(O,P,Q)), - variable_replacement((N,B,C),(O,P,Q),H), - copy_with_variable_replacement(I,R,H), - extract_explicit_matchings(R,S), - negate_b(S,T), - copy_with_variable_replacement(M,U,H), - ( subsumes(F,O) -> - E=[(T;U)] - ; - E=[chr_pp_void_info] - ). -missing_partner_cond([],[],[],_,fail,_,_). -missing_partner_cond([A|B],[_|C],[D|E],D,F,A,G) :- - !, - missing_partner_cond(B,C,E,D,F,A,G). -missing_partner_cond([A|B],[_|C],[_|D],E,F,G,H/I) :- - F=(chr_pp_not_in_store(A);J), - missing_partner_cond(B,C,D,E,J,G,H/I). -extract_explicit_matchings((A,B),C) :- - !, - ( extract_explicit_matchings(A) -> - extract_explicit_matchings(B,C) - ; - C=(A,D), - extract_explicit_matchings(B,D) - ). -extract_explicit_matchings(A,B) :- - !, - ( extract_explicit_matchings(A) -> - B=true - ; - B=A - ). -extract_explicit_matchings(A=B) :- - var(A), - var(B), - !, - A=B. -extract_explicit_matchings(A==B) :- - var(A), - var(B), - !, - A=B. -assert_constraint_type(A,B) :- - ( ground(B) -> - constraint_type(A,B) - ; - chr_error(type_error,'Declared argument types "~w" for constraint "~w" must be ground! -',[B,A]) - ). -get_type_definition_det(A,B) :- - ( get_type_definition(A,B) -> - true - ; - chr_error(type,'Could not find type definition for type `~w''. -',[A]) - ). -get_constraint_type_det(A,B) :- - ( get_constraint_type(A,B) -> - true - ; - A=_/C, - replicate(C,any,B) - ). -modes_condition([],[],true). -modes_condition([A|B],[C|D],E) :- - ( A== + -> - E=(ground(C),F) - ; - ( A== - -> - E=(var(C),F) - ) - ; - E=F - ), - modes_condition(B,D,F). -types_condition([],[],[],[],true). -types_condition([A|B],[C|D],[E|F],[G|H],(I,J)) :- - ( G== - -> - K=[true] - ; - get_type_definition_det(A,L), - type_condition(L,C,E,G,M), - ( G== + -> - K=M - ; - K=[\+ground(C)|M] - ) - ), - list2disj(K,I), - types_condition(B,D,F,H,J). -type_condition([],_,_,_,[]). -type_condition([A|B],C,D,E,[F|G]) :- - ( var(A) -> - chr_error(type,'Unexpected variable type in type definition! -',[]) - ; - ( atomic_builtin_type(A,C,F) -> - true - ) - ; - ( compound_builtin_type(A,C,F,_) -> - true - ) - ; - type_def_case_condition(A,C,D,E,F) - ), - type_condition(B,C,D,E,G). -atomic_builtin_type(any,_,true). -atomic_builtin_type(dense_int,A,(integer(A),A>=0)). -atomic_builtin_type(int,A,integer(A)). -atomic_builtin_type(number,A,number(A)). -atomic_builtin_type(float,A,float(A)). -atomic_builtin_type(natural,A,(integer(A),A>=0)). -atomic_builtin_type(chr_identifier,_,true). -compound_builtin_type(chr_constants(_),_,true,true). -compound_builtin_type(chr_constants(_,_),_,true,true). -compound_builtin_type(chr_identifier(_),_,true,true). -compound_builtin_type(chr_enum(A),B,(ground(B),memberchk(B,A)),once((member(C,A),unifiable(B,C,_)))). -is_chr_constants_type(chr_constants(A),A,no). -is_chr_constants_type(chr_constants(A,B),A,yes(B)). -type_def_case_condition(A,B,C,D,E) :- - ( nonvar(A) -> - functor(A,F,G), - ( G==0 -> - E=(B=A) - ; - ( var(C) -> - E=functor(B,F,G) - ) - ; - ( functor(C,F,G) -> - E=(functor(B,F,G),B=H,I), - A=..[_|J], - C=..[_|K], - functor(H,F,G), - H=..[_|L], - replicate(G,D,M), - types_condition(J,L,K,M,I) - ) - ; - E=functor(B,F,G) - ) - ; - chr_error(internal,'Illegal type definition (must be nonvar). -',[]) - ). -static_type_check_heads([]). -static_type_check_heads([A|B]) :- - static_type_check_head(A), - static_type_check_heads(B). -static_type_check_head(A) :- - functor(A,B,C), - get_constraint_type_det(B/C,D), - A=..[_|E], - maplist(static_type_check_term(head(A)),E,D). -static_type_check_body([]). -static_type_check_body([A|B]) :- - functor(A,C,D), - get_constraint_type_det(C/D,E), - A=..[_|F], - maplist(static_type_check_term(body(A)),F,E), - static_type_check_body(B). -format_src(head(A)) :- - format('head ~w',[A]). -format_src(body(A)) :- - format('body goal ~w',[A]). -generate_dynamic_type_check_clauses(A) :- - ( chr_pp_flag(debugable,on) -> - dynamic_type_check, - get_dynamic_type_check_clauses(B), - append(B,[('$dynamic_type_check'(C,D):-throw(error(type_error(C,D),context(_,'CHR Runtime Type Error'))))],A) - ; - A=[] - ). -dynamic_type_check_clause(A,B,C) :- - copy_term(A-B,D-E), - functor(E,F,G), - functor(H,F,G), - E=..[_|I], - H=..[_|J], - maplist(dynamic_type_check_call,I,J,K), - list2conj(K,L), - C=('$dynamic_type_check'(D,H):-L). -dynamic_type_check_alias_clause(A,B,C) :- - C=('$dynamic_type_check'(A,D):-'$dynamic_type_check'(B,D)). -dynamic_type_check_call(A,B,C) :- - ( A==any -> - C=true - ; - C=when(nonvar(B),once('$dynamic_type_check'(A,B))) - ). -atomic_types_suspended_constraint(A) :- - A=_/B, - get_constraint_type(A,C), - get_constraint_mode(A,D), - numlist(1,B,E), - maplist(atomic_types_suspended_constraint(A),C,D,E). -atomic_types_suspended_constraint(A,B,C,D) :- - ( is_indexed_argument(A,D) -> - ( C== ? -> - atomic_type(B) - ; - true - ) - ; - true - ). -storage_analysis(A) :- - ( chr_pp_flag(storage_analysis,on) -> - check_constraint_storages(A) - ; - true - ). -check_constraint_storages([]). -check_constraint_storages([A|B]) :- - check_constraint_storage(A), - check_constraint_storages(B). -check_constraint_storage(A) :- - get_max_occurrence(A,B), - check_occurrences_storage(A,1,B). -check_occurrences_storage(A,B,C) :- - ( B>C -> - stored_completing(A,1,0) - ; - check_occurrence_storage(A,B), - D is B+1, - check_occurrences_storage(A,D,C) - ). -check_occurrence_storage(A,B) :- - get_occurrence(A,B,C,D), - ( is_passive(C,D) -> - stored(A,B,maybe) - ; - get_rule(C,E), - E=pragma(rule(F,G,H,I),ids(J,K),_,_,_), - ( select2(D,L,J,F,_,_) -> - check_storage_head1(L,B,F,G,H) - ; - ( select2(D,M,K,G,_,_) -> - check_storage_head2(M,B,F,I) - ) - ) - ). -check_storage_head1(A,B,C,D,E) :- - functor(A,F,G), - H=F/G, - ( C==[A], - D==[], - guard_entailment:entails_guard([chr_pp_headvariables(A)],E), - A=..[_|I], - no_matching(I,[]) -> - stored(H,B,no) - ; - stored(H,B,maybe) - ). -no_matching([],_). -no_matching([A|B],C) :- - var(A), - \+memberchk_eq(A,C), - no_matching(B,[A|C]). -check_storage_head2(A,B,C,D) :- - functor(A,E,F), - G=E/F, - ( C\==[], - D==true -> - stored(G,B,maybe) - ; - stored(G,B,yes) - ). -constraints_code(A,B) :- - ( chr_pp_flag(reduced_indexing,on), - forall(C,A,chr_translate:only_ground_indexed_arguments(C)) -> - none_suspended_on_variables - ; - true - ), - constraints_code1(A,B,[]). -constraint_prelude(A/B,C) :- - vars_susp(B,D,E,F), - G=..[A|D], - make_suspension_continuation_goal(A/B,F,H), - build_head(A,B,[0],F,I), - ( chr_pp_flag(debugable,on) -> - insert_constraint_goal(A/B,E,D,J), - attach_constraint_atom(A/B,K,E,L), - delay_phase_end(validate_store_type_assumptions,chr_translate:update_suspension_field(A/B,E,state,inactive,M)), - insert_constraint_internal_constraint_goal(A/B,K,E,H,D,N), - ( get_constraint_type(A/B,O) -> - maplist(dynamic_type_check_call,O,D,P), - list2conj(P,Q) - ; - Q=true - ), - C=(G:-Q,N,J,L,M,'chr debug_event'(insert(G#E)),('chr debug_event'(call(E)),I;'chr debug_event'(fail(E)),!,fail),('chr debug_event'(exit(E));'chr debug_event'(redo(E)),fail)) - ; - ( get_allocation_occurrence(A/B,0) -> - gen_insert_constraint_internal_goal(A/B,R,F,D,E), - delay_phase_end(validate_store_type_assumptions,chr_translate:update_suspension_field(A/B,E,state,inactive,M)), - C=(G:-R,M,I) - ) - ; - C=(G:-I) - ). -make_suspension_continuation_goal(A/B,C,D) :- - ( may_trigger(A/B) -> - build_head(A,B,[0],C,E), - ( chr_pp_flag(debugable,off) -> - D=E - ; - get_target_module(F), - D=F:E - ) - ; - D=true - ). -gen_cond_attach_clause(A/B,C,D,E) :- - ( is_finally_stored(A/B) -> - get_allocation_occurrence(A/B,F), - get_max_occurrence(A/B,G), - ( chr_pp_flag(debugable,off), - G - ( only_ground_indexed_arguments(A/B) -> - gen_insert_constraint_internal_goal(A/B,H,I,J,K) - ; - gen_cond_attach_goal(A/B,H,I,J,K) - ) - ; - vars_susp(B,J,K,I), - gen_uncond_attach_goal(A/B,K,J,H,_) - ), - build_head(A,B,C,I,L), - M=(L:-H), - add_dummy_location(M,N), - D=[N|E] - ; - D=E - ). -gen_cond_attach_goal(A/B,C,D,E,F) :- - vars_susp(B,E,F,D), - make_suspension_continuation_goal(A/B,D,G), - ( get_store_type(A/B,var_assoc_store(_,_)) -> - H=true - ; - attach_constraint_atom(A/B,I,F,H) - ), - _=..[A|E], - insert_constraint_goal(A/B,F,E,J), - insert_constraint_internal_constraint_goal(A/B,I,F,G,E,K), - ( may_trigger(A/B) -> - activate_constraint_goal(A/B,(J,H),I,F,_,L), - C=(var(F)->K,J,H;L) - ; - C=(K,J,H) - ). -gen_insert_constraint_internal_goal(A/B,C,D,E,F) :- - vars_susp(B,E,F,D), - make_suspension_continuation_goal(A/B,D,G), - ( \+only_ground_indexed_arguments(A/B), - \+get_store_type(A/B,var_assoc_store(_,_)) -> - attach_constraint_atom(A/B,H,F,I) - ; - I=true - ), - _=..[A|E], - insert_constraint_goal(A/B,F,E,J), - insert_constraint_internal_constraint_goal(A/B,H,F,G,E,K), - ( only_ground_indexed_arguments(A/B), - chr_pp_flag(debugable,off) -> - C=(K,J) - ; - C=(K,J,I) - ). -gen_uncond_attach_goal(A,B,C,D,E) :- - ( \+only_ground_indexed_arguments(A), - \+get_store_type(A,var_assoc_store(_,_)) -> - attach_constraint_atom(A,F,B,G) - ; - G=true - ), - insert_constraint_goal(A,B,C,H), - ( chr_pp_flag(late_allocation,on) -> - activate_constraint_goal(A,(H,G),F,B,E,D) - ; - activate_constraint_goal(A,true,F,B,E,D) - ). -head1_code(A,B,C,D,E,F,G,H,I,J) :- - E=pragma(K,_,_,_,L), - K=rule(_,M,_,_), - ( M==[] -> - reorder_heads(L,A,C,D,N,O), - simplification_code(A,B,N,O,E,F,G,H,I,J) - ; - simpagation_head1_code(A,B,C,D,E,F,G,H,I,J) - ). -head2_code(A,B,C,D,E,F,G,H,I,J) :- - E=pragma(K,_,_,_,L), - K=rule(M,_,_,_), - ( M==[] -> - reorder_heads(L,A,C,D,N,O), - propagation_code(A,B,N,O,K,L,F,G,H,I,J) - ; - simpagation_head2_code(A,B,C,D,E,F,G,H,I,J) - ). -gen_alloc_inc_clause(A/B,C,D,E,F) :- - vars_susp(B,G,H,I), - build_head(A,B,D,I,J), - inc_id(D,K), - build_head(A,B,K,I,L), - gen_occ_allocation(A/B,C,G,H,M), - N=(J:-M,L), - add_dummy_location(N,O), - E=[O|F]. -gen_occ_allocation(A,B,C,D,E) :- - get_allocation_occurrence(A,F), - get_occurrence_code_id(A,F,G), - get_occurrence_code_id(A,B,H), - ( chr_pp_flag(debugable,off), - H==G -> - allocate_constraint_goal(A,D,C,I), - ( may_trigger(A) -> - E=(var(D)->I;true) - ; - E=I - ) - ; - E=true - ). -gen_occ_allocation_in_guard(A,B,C,D,E) :- - get_allocation_occurrence(A,F), - ( chr_pp_flag(debugable,off), - B - allocate_constraint_goal(A,D,C,G), - ( may_trigger(A) -> - E=(var(D)->G;true) - ; - E=G - ) - ; - E=true - ). -guard_via_reschedule_new(A,B,C,D,E,F) :- - ( chr_pp_flag(guard_via_reschedule,on) -> - guard_via_reschedule_main_new(A,B,C,D,E,G), - list2conj(G,F) - ; - length(A,H), - length(E,H), - length(B,I), - length(D,I), - append(E,D,J), - list2conj(J,F) - ). -guard_via_reschedule_main_new(A,B,C,D,E,F) :- - initialize_unit_dictionary(C,G), - maplist(wrap_in_functor(lookup),A,H), - maplist(wrap_in_functor(guard),B,I), - build_units(H,I,G,J), - dependency_reorder(J,K), - wrappedunits2lists(K,L,E,F), - sort(L,M), - snd_of_pairs(M,D). -wrappedunits2lists([],[],[],[]). -wrappedunits2lists([unit(A,B,_,_)|C],D,E,F) :- - F=[G|H], - ( B=lookup(I) -> - E=[G|J], - D=K - ; - ( B=guard(I) -> - D=[A-G|K], - E=J - ) - ), - wrappedunits2lists(C,K,J,H). -guard_splitting(A,B) :- - A=rule(C,D,E,_), - append(C,D,F), - conj2list(E,G), - term_variables(F,H), - split_off_simple_guard_new(G,H,I,J), - append(I,[K],B), - term_variables(J,L), - ground_vars(F,M), - list_difference_eq(H,M,N), - intersect_eq(N,L,O), - ( chr_pp_flag(guard_locks,on), - bagof('chr lock'(P)-'chr unlock'(P),lists:member(P,O),Q) -> - once(pairup(R,S,Q)) - ; - R=[], - S=[] - ), - list2conj(R,T), - list2conj(S,U), - list2conj(J,V), - K=(T,V,U). -guard_body_copies3(A,B,C,D,E) :- - A=rule(_,_,_,F), - my_term_copy(B,C,G,D), - my_term_copy(F,G,E). -split_off_simple_guard_new([],_,[],[]). -split_off_simple_guard_new([A|B],C,D,E) :- - ( simple_guard_new(A,C) -> - D=[A|F], - split_off_simple_guard_new(B,C,F,E) - ; - D=[], - E=[A|B] - ). -simple_guard_new(A,B) :- - builtin_binds_b(A,C), - \+ (member(D,C),memberchk_eq(D,B)). -dependency_reorder(A,B) :- - dependency_reorder(A,[],B). -dependency_reorder([],A,B) :- - reverse(A,B). -dependency_reorder([A|B],C,D) :- - A=unit(_,_,E,F), - ( E==fixed -> - G=[A|C] - ; - dependency_insert(C,A,F,G) - ), - dependency_reorder(B,G,D). -dependency_insert([],A,_,[A]). -dependency_insert([A|B],C,D,E) :- - A=unit(F,_,_,_), - ( memberchk(F,D) -> - E=[C,A|B] - ; - E=[A|G], - dependency_insert(B,C,D,G) - ). -build_units(A,B,C,D) :- - build_retrieval_units(A,1,E,C,F,D,G), - build_guard_units(B,E,F,G). -build_retrieval_units([],A,A,B,B,C,C). -build_retrieval_units([A|B],C,D,E,F,G,H) :- - term_variables(A,I), - update_unit_dictionary(I,C,E,J,[],K), - G=[unit(C,A,fixed,K)|L], - M is C+1, - build_retrieval_units(B,M,D,J,F,L,H). -initialize_unit_dictionary(A,B) :- - term_variables(A,C), - pair_all_with(C,0,B). -update_unit_dictionary([],_,A,A,B,B). -update_unit_dictionary([A|B],C,D,E,F,G) :- - ( lookup_eq(D,A,H) -> - ( - ( - H==C - ; - memberchk(H,F) - ) -> - I=F - ; - I=[H|F] - ), - J=D - ; - J=[A-C|D], - I=F - ), - update_unit_dictionary(B,C,J,E,I,G). -build_guard_units(A,B,C,D) :- - ( A=[E] -> - D=[unit(B,E,fixed,[])] - ; - ( A=[E|F] -> - term_variables(E,G), - update_unit_dictionary2(G,B,C,H,[],I), - D=[unit(B,E,movable,I)|J], - K is B+1, - build_guard_units(F,K,H,J) - ) - ). -update_unit_dictionary2([],_,A,A,B,B). -update_unit_dictionary2([A|B],C,D,E,F,G) :- - ( lookup_eq(D,A,H) -> - ( - ( - H==C - ; - memberchk(H,F) - ) -> - I=F - ; - I=[H|F] - ), - J=[A-C|D] - ; - J=[A-C|D], - I=F - ), - update_unit_dictionary2(B,C,J,E,I,G). -functional_dependency_analysis(A) :- - ( fail, - chr_pp_flag(functional_dependency_analysis,on) -> - functional_dependency_analysis_main(A) - ; - true - ). -functional_dependency_analysis_main([]). -functional_dependency_analysis_main([A|B]) :- - ( discover_unique_pattern(A,C,D,E,F) -> - functional_dependency(C,D,E,F) - ; - true - ), - functional_dependency_analysis_main(B). -discover_unique_pattern(A,B/C,D,E,F) :- - A=pragma(G,_,_,_,D), - G=rule(H,I,J,_), - ( H=[K], - I=[L] -> - true - ; - ( H=[K,L], - I==[] -> - true - ) - ), - check_unique_constraints(K,L,J,D,M), - term_variables(K,N), - \+ (member(O,N),lookup_eq(M,O,P),memberchk_eq(P,N)), - select_pragma_unique_variables(N,M,Q), - copy_term_nat(K-Q,E-F), - functor(K,B,C). -select_pragma_unique_variables([],_,[]). -select_pragma_unique_variables([A|B],C,D) :- - ( lookup_eq(C,A,_) -> - D=E - ; - D=[A|E] - ), - select_pragma_unique_variables(B,C,E). -set_semantics_rules(A) :- - ( fail, - chr_pp_flag(set_semantics_rule,on) -> - set_semantics_rules_main(A) - ; - true - ). -set_semantics_rules_main([]). -set_semantics_rules_main([A|B]) :- - set_semantics_rule_main(A), - set_semantics_rules_main(B). -set_semantics_rule_main(A) :- - A=pragma(B,C,_,_,D), - ( B=rule([E],[F],true,_), - C=ids([G],[H]), - \+is_passive(D,G), - functor(E,I,J), - get_functional_dependency(I/J,D,K,L), - copy_term_nat(K-L,E-M), - copy_term_nat(K-L,F-N), - M==N -> - passive(D,H) - ; - true - ). -check_unique_constraints(A,B,C,D,E) :- - \+any_passive_head(D), - variable_replacement(A-B,B-A,E), - copy_with_variable_replacement(C,F,E), - negate_b(C,G), - once(entails_b(G,F)). -symmetry_analysis(A) :- - ( chr_pp_flag(check_unnecessary_active,off) -> - true - ; - symmetry_analysis_main(A) - ). -symmetry_analysis_main([]). -symmetry_analysis_main([A|B]) :- - A=pragma(C,ids(D,E),_,_,F), - C=rule(G,H,_,_), - ( - ( - \+chr_pp_flag(check_unnecessary_active,simplification) - ; - H==[] - ), - G\==[] -> - symmetry_analysis_heads_simplification(G,D,[],[],C,F), - symmetry_analysis_heads_propagation(H,E,[],[],C,F) - ; - true - ), - symmetry_analysis_main(B). -symmetry_analysis_heads_simplification([],[],_,_,_,_). -symmetry_analysis_heads_simplification([A|B],[C|D],E,F,G,H) :- - ( \+is_passive(H,C), - member2(E,F,I-J), - \+is_passive(H,J), - variable_replacement(I,A,K), - copy_with_variable_replacement(G,L,K), - identical_guarded_rules(G,L) -> - passive(H,C) - ; - true - ), - symmetry_analysis_heads_simplification(B,D,[A|E],[C|F],G,H). -symmetry_analysis_heads_propagation([],[],_,_,_,_). -symmetry_analysis_heads_propagation([A|B],[C|D],E,F,G,H) :- - ( \+is_passive(H,C), - member2(E,F,I-J), - \+is_passive(H,J), - variable_replacement(I,A,K), - copy_with_variable_replacement(G,L,K), - identical_rules(G,L) -> - passive(H,C) - ; - true - ), - symmetry_analysis_heads_propagation(B,D,[A|E],[C|F],G,H). -simplification_code(A,B,C,D,E,F/G,H,I,J,K) :- - E=pragma(L,_,_,_,M), - head_info(A,G,_,N,O,P), - build_head(F,G,I,O,Q), - get_constraint_mode(F/G,R), - head_arg_matches(P,R,[],S,T,[],U), - guard_splitting(L,V), - ( is_stored_in_guard(F/G,M) -> - W=[_|V] - ; - W=V - ), - guard_via_reschedule_new(C,W,A,X,Y,Z), - rest_heads_retrieval_and_matching(C,D,A,Y,A1,T,B1,[],[],[],U,_), - guard_body_copies3(L,W,B1,X,C1), - ( is_stored_in_guard(F/G,M) -> - gen_occ_allocation_in_guard(F/G,H,D1,N,E1), - gen_uncond_attach_goal(F/G,N,D1,F1,_), - X=[G1|_], - G1=(E1,F1) - ; - true - ), - partner_constraint_detachments(A1,C,B1,H1), - active_constraint_detachment(I,N,A,B1,I1), - ( chr_pp_flag(debugable,on) -> - L=rule(_,_,J1,K1), - my_term_copy(J1-K1,B1,L1-M1), - sort_by_key([N|A1],[B|D],N1), - O1='chr debug_event'(try(N1,[],L1,M1)), - P1='chr debug_event'(apply(N1,[],L1,M1)), - instrument_goal(Q1,O1,P1,R1) - ; - R1=Q1 - ), - ( unconditional_occurrence(F/G,H), - chr_pp_flag(late_allocation,on) -> - Q1=true - ; - Q1=! - ), - S1=(Q:-S,Z,R1,H1,I1,C1), - add_location(S1,M,T1), - J=[T1|K]. -add_location(A,B,C) :- - ( chr_pp_flag(line_numbers,on) -> - get_chr_source_file(D), - get_line_number(B,E), - C='$source_location'(D,E):A - ; - C=A - ). -add_dummy_location(A,B) :- - ( chr_pp_flag(line_numbers,on) -> - get_chr_source_file(C), - B='$source_location'(C,1):A - ; - B=A - ). -head_arg_matches(A,B,C,D,E) :- - head_arg_matches(A,B,C,D,E,[],_). -head_arg_matches(A,B,C,D,E,F,G) :- - head_arg_matches_(A,B,C,F,H,E,G), - list2conj(H,D). -head_arg_matches_([],[],A,B,[],A,B). -head_arg_matches_([silent(A-_)|B],[C|D],E,F,G,H,I) :- - !, - ( C== + -> - term_variables(A,J,F), - head_arg_matches_(B,D,E,J,G,H,I) - ; - head_arg_matches_(B,D,E,F,G,H,I) - ). -head_arg_matches_([A-B|C],[D|E],F,G,H,I,J) :- - ( var(A) -> - ( lookup_eq(F,A,K) -> - ( D= + -> - ( memberchk_eq(A,G) -> - H=[B=K|L], - M=G - ; - H=[B==K|L], - M=[A|G] - ) - ; - H=[B==K|L], - M=G - ), - N=F - ; - N=[A-B|F], - H=L, - ( D= + -> - M=[A|G] - ; - M=G - ) - ), - O=C, - P=E - ; - ( ground(A), - A='$chr_identifier_match'(Q,R) -> - identifier_label_atom(R,B,Q,S), - H=[S|L], - F=N, - M=G, - O=C, - P=E - ) - ; - ( atomic(A) -> - ( D= + -> - H=[B=A|L] - ; - H=[B==A|L] - ), - F=N, - M=G, - O=C, - P=E - ) - ; - ( D== +, - is_ground(G,A) -> - copy_with_variable_replacement(A,T,F), - H=[B=T|L], - F=N, - M=G, - O=C, - P=E - ) - ; - ( D== ?, - is_ground(G,A) -> - copy_with_variable_replacement(A,T,F), - H=[B==T|L], - F=N, - M=G, - O=C, - P=E - ) - ; - A=..[_|U], - functor(A,V,W), - functor(X,V,W), - X=..[_|Y], - ( D= + -> - H=[B=X|L] - ; - H=[nonvar(B),B=X|L] - ), - pairup(U,Y,Z), - append(Z,C,O), - replicate(W,D,A1), - append(A1,E,P), - N=F, - M=G - ), - head_arg_matches_(O,P,N,M,L,I,J). -add_heads_types([],A,A). -add_heads_types([A|B],C,D) :- - add_head_types(A,C,E), - add_heads_types(B,E,D). -add_head_types(A,B,C) :- - functor(A,D,E), - get_constraint_type_det(D/E,F), - A=..[_|G], - add_args_types(G,F,B,C). -add_args_types([],[],A,A). -add_args_types([A|B],[C|D],E,F) :- - add_arg_types(A,C,E,G), - add_args_types(B,D,G,F). -add_arg_types(A,B,C,D) :- - ( var(A) -> - ( lookup_eq(C,A,_) -> - D=C - ; - D=[A-B|C] - ) - ; - ( ground(A) -> - D=C - ) - ; - term_variables(A,E), - length(E,F), - replicate(F,any,G), - add_args_types(E,G,C,D) - ). -add_heads_ground_variables([],A,A). -add_heads_ground_variables([A|B],C,D) :- - add_head_ground_variables(A,C,E), - add_heads_ground_variables(B,E,D). -add_head_ground_variables(A,B,C) :- - functor(A,D,E), - get_constraint_mode(D/E,F), - A=..[_|G], - add_arg_ground_variables(G,F,B,C). -add_arg_ground_variables([],[],A,A). -add_arg_ground_variables([A|B],[C|D],E,F) :- - ( C== + -> - term_variables(A,G), - add_var_ground_variables(G,E,H) - ; - E=H - ), - add_arg_ground_variables(B,D,H,F). -add_var_ground_variables([],A,A). -add_var_ground_variables([A|B],C,D) :- - ( memberchk_eq(A,C) -> - E=C - ; - E=[A|C] - ), - add_var_ground_variables(B,E,D). -is_ground(A,B) :- - ( ground(B) -> - true - ; - ( compound(B) -> - B=..[_|C], - maplist(is_ground(A),C) - ) - ; - memberchk_eq(B,A) - ). -check_ground(A,B,C) :- - term_variables(B,D), - check_ground_variables(D,A,C). -check_ground_variables([],_,true). -check_ground_variables([A|B],C,D) :- - ( memberchk_eq(A,C) -> - check_ground_variables(B,C,D) - ; - D=(ground(A),E), - check_ground_variables(B,C,E) - ). -rest_heads_retrieval_and_matching(A,B,C,D,E,F,G,H,I,J) :- - rest_heads_retrieval_and_matching(A,B,C,D,E,F,G,H,I,J,[],_). -rest_heads_retrieval_and_matching(A,B,C,D,E,F,G,H,I,J,K,L) :- - ( A=[_|_] -> - rest_heads_retrieval_and_matching_n(A,B,H,I,C,D,E,F,G,J,K,L) - ; - D=[], - E=[], - F=G, - K=L - ). -rest_heads_retrieval_and_matching_n([],_,_,_,_,[],[],A,A,_,B,B). -rest_heads_retrieval_and_matching_n([A|B],[_|C],D,E,F,[G|H],[I|J],K,L,_,M,N) :- - functor(A,O,P), - head_info(A,P,Q,_,_,R), - get_store_type(O/P,S), - ( S==default -> - passive_head_via(A,[F|D],K,T,U), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(O/P,V),get_static_suspension_term_field(arguments,O/P,V,Q),get_static_suspension_field(O/P,V,state,active,W))), - get_constraint_mode(O/P,X), - head_arg_matches(R,X,K,Y,Z,M,A1), - B1=R, - sbag_member_call(I,U,C1), - D1=(T,C1,I=V,W) - ; - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(O/P,V),get_static_suspension_term_field(arguments,O/P,V,Q))), - existential_lookup(S,A,[F|D],K,M,V,D1,I,R,B1), - get_constraint_mode(O/P,X), - E1=X, - head_arg_matches(B1,E1,K,Y,Z,M,A1) - ), - different_from_other_susps(A,I,D,E,F1), - filter_append(B1,Z,G1), - translate(A1,G1,H1), - translate(A1,Z,I1), - inline_matching_goal(Y,J1,H1,I1), - G=(D1,F1,J1), - rest_heads_retrieval_and_matching_n(B,C,[A|D],[I|E],F,H,J,Z,L,_,A1,N). -inline_matching_goal(A==B,true,C,D) :- - memberchk_eq(A,C), - memberchk_eq(B,D), - A=B, - !. -inline_matching_goal((A,B),(C,D),E,F) :- - !, - inline_matching_goal(A,C,E,F), - inline_matching_goal(B,D,E,F). -inline_matching_goal(A,A,_,_). -filter_mode([],_,_,[]). -filter_mode([A-B|C],[_-D|E],[F|G],H) :- - ( B==D -> - H=[F|I], - filter_mode(C,E,G,I) - ; - filter_mode([A-B|C],E,G,H) - ). -filter_append([],A,A). -filter_append([A|B],C,D) :- - ( A=silent(_) -> - filter_append(B,C,D) - ; - D=[A|E], - filter_append(B,C,E) - ). -check_unique_keys([],_). -check_unique_keys([A|B],C) :- - lookup_eq(C,A,_), - check_unique_keys(B,C). -different_from_other_susps(A,B,C,D,E) :- - different_from_other_susps_(C,D,A,B,F), - list2conj(F,E). -different_from_other_susps_(_,[],_,_,[]) :- - !. -different_from_other_susps_([A|B],[C|D],E,F,G) :- - ( functor(E,H,I), - functor(A,H,I), - copy_term_nat(A-E,J-K), - \+ \+J=K -> - G=[F\==C|L] - ; - G=L - ), - different_from_other_susps_(B,D,E,F,L). -passive_head_via(A,B,C,D,E) :- - functor(A,F,G), - get_constraint_index(F/G,_), - common_variables(A,B,H), - ground_vars([A],I), - list_difference_eq(H,I,J), - global_list_store_name(F/G,K), - L=nb_getval(K,E), - get_constraint_mode(F/G,M), - ( N==[] -> - D=L - ; - ( member(O,J), - nth1(P,M,-), - arg(P,A,Q), - Q==O -> - translate([O],C,[R]), - gen_get_mod_constraints(F/G,R,S,E), - D=S - ) - ; - translate(J,C,N), - add_heads_types(B,[],T), - my_term_copy(T,C,U), - gen_get_mod_constraints(F/G,N,U,V,S,E), - D=(V->S;L) - ). -common_variables(A,B,C) :- - term_variables(A,D), - term_variables(B,E), - intersect_eq(D,E,C). -gen_get_mod_constraints(A,B,C,D,E,F) :- - via_goal(B,C,D,G), - get_target_module(H), - E=(get_attr(G,H,I),J), - get_max_constraint_index(K), - ( K==1 -> - J=true, - F=I - ; - get_constraint_index(A,L), - get_suspensions(K,L,I,J,F) - ). -via_goal(A,B,C,D) :- - ( A=[] -> - C=fail - ; - ( A=[E] -> - lookup_eq(B,E,F), - ( atomic_type(F) -> - C=var(E), - E=D - ; - C='chr newvia_1'(E,D) - ) - ) - ; - ( A=[E,G] -> - C='chr newvia_2'(E,G,D) - ) - ; - C='chr newvia'(A,D) - ). -gen_get_mod_constraints(A,B,C,D) :- - get_target_module(E), - C=(get_attr(B,E,F),G), - get_max_constraint_index(H), - ( H==1 -> - G=true, - D=F - ; - get_constraint_index(A,I), - get_suspensions(H,I,F,G,D) - ). -guard_body_copies(A,B,C,D) :- - guard_body_copies2(A,B,E,D), - list2conj(E,C). -guard_body_copies2(A,B,C,D) :- - A=rule(_,E,F,G), - conj2list(F,H), - split_off_simple_guard(H,B,I,J), - my_term_copy(I-J,B,K,L-M), - append(L,[N],C), - term_variables(J,O), - term_variables(M,P), - ground_vars(E,Q), - list_difference_eq(O,Q,R), - ( chr_pp_flag(guard_locks,on), - bagof('chr lock'(S)-'chr unlock'(S),T^(lists:member(T,R),pairlist:lookup_eq(B,T,S),memberchk_eq(S,P)),U) -> - once(pairup(V,W,U)) - ; - V=[], - W=[] - ), - list2conj(V,X), - list2conj(W,Y), - list2conj(M,Z), - N=(X,Z,Y), - my_term_copy(G,K,D). -split_off_simple_guard([],_,[],[]). -split_off_simple_guard([A|B],C,D,E) :- - ( simple_guard(A,C) -> - D=[A|F], - split_off_simple_guard(B,C,F,E) - ; - D=[], - E=[A|B] - ). -simple_guard(A,B) :- - binds_b(A,C), - \+ (member(D,C),lookup_eq(B,D,_)). -active_constraint_detachment(A,B,C,D,E) :- - functor(C,F,G), - H=F/G, - ( is_stored(H) -> - ( - ( - A==[0], - chr_pp_flag(store_in_guards,off) - ; - get_allocation_occurrence(H,I), - get_max_occurrence(H,J), - J - E=true - ; - gen_uncond_susp_detachment(C,B,active,D,K), - ( chr_pp_flag(late_allocation,on) -> - E=(var(B)->true;K) - ; - E=K - ) - ) - ; - E=true - ). -partner_constraint_detachments([],[],_,true). -partner_constraint_detachments([A|B],[C|D],E,(F,G)) :- - gen_uncond_susp_detachment(C,A,partner,E,F), - partner_constraint_detachments(B,D,E,G). -gen_uncond_susp_detachment(A,B,C,D,E) :- - functor(A,F,G), - H=F/G, - ( is_stored(H) -> - E=(I,J), - ( chr_pp_flag(debugable,on) -> - I='chr debug_event'(remove(B)) - ; - I=true - ), - remove_constraint_goal(H,B,K,true,(L,M),C,J), - delete_constraint_goal(A,B,D,L), - ( \+only_ground_indexed_arguments(H), - \+get_store_type(H,var_assoc_store(_,_)) -> - detach_constraint_atom(H,K,B,M) - ; - M=true - ) - ; - E=true - ). -simpagation_head1_code(A,B,C,D,E,F/G,_,H,I,J) :- - E=pragma(K,ids(_,L),_,_,M), - K=rule(_,N,O,P), - head_info(A,G,Q,R,S,T), - get_constraint_mode(F/G,U), - head_arg_matches(T,U,[],V,W,[],X), - build_head(F,G,H,S,Y), - append(C,N,Z), - append(D,L,A1), - reorder_heads(M,A,Z,A1,B1,C1), - guard_splitting(K,D1), - ( is_stored_in_guard(F/G,M) -> - E1=[_|D1] - ; - E1=D1 - ), - guard_via_reschedule_new(B1,E1,A,F1,G1,H1), - rest_heads_retrieval_and_matching(B1,C1,A,G1,I1,W,J1,[],[],[],X,_), - split_by_ids(C1,I1,D,K1,L1,M1,N1), - guard_body_copies3(K,E1,J1,F1,O1), - ( is_stored_in_guard(F/G,M) -> - gen_uncond_attach_goal(F/G,R,Q,P1,_), - F1=[Q1|_], - Q1=P1 - ; - true - ), - sort_by_key(K1,L1,R1), - partner_constraint_detachments(R1,C,J1,S1), - active_constraint_detachment(H,R,A,J1,T1), - ( chr_pp_flag(debugable,on) -> - my_term_copy(O-P,J1,U1-V1), - sort_by_key([R|K1],[B|L1],W1), - sort_by_key(M1,N1,X1), - Y1='chr debug_event'(try(W1,X1,U1,V1)), - Z1='chr debug_event'(apply(W1,X1,U1,V1)), - instrument_goal(!,Y1,Z1,A2) - ; - A2=! - ), - B2=(Y:-V,H1,A2,S1,T1,O1), - add_location(B2,M,C2), - I=[C2|J]. -split_by_ids([],[],_,[],[]). -split_by_ids([A|B],[C|D],E,F,G) :- - ( memberchk_eq(A,E) -> - F=[C|H], - G=I - ; - F=H, - G=[C|I] - ), - split_by_ids(B,D,E,H,I). -split_by_ids([],[],_,[],[],[],[]). -split_by_ids([A|B],[C|D],E,F,G,H,I) :- - ( memberchk_eq(A,E) -> - F=[C|J], - G=[A|K], - H=L, - I=M - ; - F=J, - G=K, - H=[C|L], - I=[A|M] - ), - split_by_ids(B,D,E,J,K,L,M). -simpagation_head2_code(A,B,C,D,E,F,G,H,I,J) :- - E=pragma(K,ids(L,M),_,_,N), - K=rule(O,_,P,Q), - append(O,C,R), - append(L,D,S), - reorder_heads(N,A,R,S,[T|U],[V|W]), - simpagation_head2_prelude(A,T,[U,P,Q],F,G,H,I,X), - extend_id(H,Y), - ( memberchk_eq(V,M) -> - simpagation_universal_searches(U,W,M,[T,A],K,F,G,Z,A1,B1,Y,C1,X,D1) - ; - X=D1, - Y=C1, - Z=U, - A1=[T,A], - B1=W - ), - universal_search_iterator_end(A1,Z,K,F,G,C1,D1,E1), - simpagation_head2_worker(A1,Z,B1,B,E,F,G,C1,E1,J). -simpagation_universal_searches([],[],_,A,_,_,_,[],A,[],B,B,C,C). -simpagation_universal_searches(A,[B|C],D,E,F,G,H,I,J,K,L,M,N,O) :- - A=[P|Q], - inc_id(L,R), - universal_search_iterator_end(E,A,F,G,H,L,N,S), - universal_search_iterator(A,E,F,G,H,L,S,T), - ( memberchk_eq(B,D) -> - simpagation_universal_searches(Q,C,D,[P|E],F,G,H,I,J,K,R,M,T,O) - ; - M=R, - T=O, - I=Q, - J=[P|E], - C=K - ). -simpagation_head2_prelude(A,B,C,D/E,F,G,H,I) :- - head_info(A,E,J,K,L,M), - build_head(D,E,G,L,N), - get_constraint_mode(D/E,O), - head_arg_matches(M,O,[],P,Q,[],R), - lookup_passive_head(B,[A],Q,R,S,T), - gen_occ_allocation(D/E,F,J,K,U), - extend_id(G,V), - extra_active_delegate_variables(A,[B|C],Q,W), - append([T|L],W,X), - build_head(D,E,[F|V],X,Y), - Z=(N:-P,S,!,U,Y), - add_dummy_location(Z,A1), - H=[A1|I]. -extra_active_delegate_variables(A,B,C,D) :- - A=..[_|E], - delegate_variables(A,B,C,E,D). -passive_delegate_variables(A,B,C,D,E) :- - term_variables(B,F), - delegate_variables(A,C,D,F,E). -delegate_variables(A,B,C,D,E) :- - term_variables(A,F), - term_variables(B,G), - intersect_eq(F,G,H), - list_difference_eq(H,D,I), - translate(I,C,E). -simpagation_head2_worker([A|B],C,D,_,E,F/G,H,I,J,K) :- - E=pragma(L,ids(M,_),N,_,O), - L=rule(_,_,P,Q), - get_prop_inner_loop_vars(B,[A,C,P,Q],R,S,T,U,V), - gen_var(W), - gen_var(X), - functor(A,Y,Z), - gen_vars(Z,A1), - head_info(A,Z,A1,W,_,B1), - get_constraint_mode(Y/Z,C1), - head_arg_matches(B1,C1,S,D1,E1,[],_), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(Y/Z,F1),get_static_suspension_field(Y/Z,F1,state,active,G1),get_static_suspension_term_field(arguments,Y/Z,F1,A1))), - different_from_other_susps(A,W,B,V,H1), - I1=(W=F1,G1,H1,D1), - J1=[[W|X]|R], - build_head(F,G,[H|I],J1,K1), - guard_splitting(L,L1), - ( is_stored_in_guard(F/G,O) -> - M1=[_|L1] - ; - M1=L1 - ), - guard_via_reschedule_new(C,M1,[A|B],N1,O1,P1), - rest_heads_retrieval_and_matching(C,D,[A|B],O1,Q1,E1,R1,[A|B],[W|V],[]), - split_by_ids(D,Q1,M,S1,T1), - split_by_ids(D,C,M,U1,_), - partner_constraint_detachments([W|S1],[A|U1],R1,V1), - W1=[X|R], - build_head(F,G,[H|I],W1,X1), - Y1=[[]|R], - build_head(F,G,[H|I],Y1,Z1), - guard_body_copies3(L,M1,R1,N1,A2), - ( is_stored_in_guard(F/G,O) -> - N1=[B2|_] - ; - true - ), - ( is_observed(F/G,H) -> - gen_uncond_attach_goal(F/G,T,U,C2,D2), - gen_state_cond_call(T,F/G,X1,D2,E2), - gen_state_cond_call(T,F/G,Z1,D2,F2) - ; - C2=true, - E2=X1, - F2=Z1 - ), - ( chr_pp_flag(debugable,on) -> - my_term_copy(P-Q,S,G2-H2), - I2='chr debug_event'(try([W|S1],[T|T1],G2,H2)), - J2='chr debug_event'(apply([W|S1],[T|T1],G2,H2)) - ; - I2=true, - J2=true - ), - ( is_stored_in_guard(F/G,O) -> - B2=C2, - K2=true - ; - B2=true, - K2=C2 - ), - ( member(unique(_,L2),N), - check_unique_keys(L2,S) -> - M2=(K1:-I1->(P1,I2->J2,V1,K2,A2,F2;Z1);X1) - ; - M2=(K1:-I1,P1,I2->J2,V1,K2,A2,E2;X1) - ), - add_location(M2,O,N2), - J=[N2|K]. -gen_state_cond_call(A,B,C,D,E) :- - ( may_trigger(B) -> - does_use_field(B,generation), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(B,F),get_update_static_suspension_field(B,A,F,state,active,inactive,G,H),get_static_suspension_field(B,F,generation,D,I),get_static_suspension_term_field(arguments,B,F,J))) - ; - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(B,F),get_update_static_suspension_field(B,A,F,state,active,inactive,G,H),get_static_suspension_term_field(arguments,B,F,J))), - I=true - ), - E=(A=F,G,I->H,C;true). -propagation_code(A,B,C,D,E,F,G,H,I,J,K) :- - ( C==[] -> - propagation_single_headed(A,B,E,F,G,H,I,J,K) - ; - propagation_multi_headed(A,C,D,E,F,G,H,I,J,K) - ). -propagation_single_headed(A,_,B,C,D/E,F,G,H,I) :- - head_info(A,E,J,K,L,M), - build_head(D,E,G,L,N), - inc_id(G,O), - build_head(D,E,O,L,P), - get_constraint_mode(D/E,Q), - head_arg_matches(M,Q,[],R,S,[],_), - guard_body_copies(B,S,T,U), - V=P, - ( unconditional_occurrence(D/E,F), - chr_pp_flag(late_allocation,on) -> - W=true - ; - W=! - ), - B=rule(_,_,X,Y), - ( chr_pp_flag(debugable,on) -> - my_term_copy(X-Y,S,Z-A1), - B1='chr debug_event'(try([],[K],Z,A1)), - C1='chr debug_event'(apply([],[K],Z,A1)), - instrument_goal(W,B1,C1,D1) - ; - D1=W - ), - ( may_trigger(D/E), - \+has_no_history(C) -> - use_auxiliary_predicate(novel_production), - use_auxiliary_predicate(extend_history), - does_use_history(D/E,F), - gen_occ_allocation(D/E,F,J,K,E1), - ( named_history(C,F1,G1) -> - ( G1==[] -> - empty_named_history_novel_production(F1,H1), - empty_named_history_extend_history(F1,I1) - ; - J1=F1 - ) - ; - J1=C - ), - ( var(H1) -> - H1='$novel_production'(K,J1), - I1='$extend_history'(K,J1) - ; - true - ), - ( is_observed(D/E,F) -> - gen_uncond_attach_goal(D/E,K,J,K1,L1), - gen_state_cond_call(K,D/E,V,L1,M1) - ; - K1=true, - M1=V - ) - ; - E1=true, - H1=true, - I1=true, - ( is_observed(D/E,F) -> - get_allocation_occurrence(D/E,N1), - ( F==N1 -> - gen_insert_constraint_internal_goal(D/E,K1,L,J,K), - L1=0 - ; - K1=(O1,P1), - gen_occ_allocation(D/E,F,J,K,O1), - gen_uncond_attach_goal(D/E,K,J,P1,L1) - ), - gen_state_cond_call(K,D/E,V,L1,M1) - ; - gen_occ_allocation(D/E,F,J,K,K1), - M1=V - ) - ), - ( is_stored_in_guard(D/E,C) -> - Q1=K1, - R1=true - ; - Q1=true, - R1=K1 - ), - S1=(N:-R,E1,H1,Q1,T,D1,I1,R1,U,M1), - add_location(S1,C,T1), - H=[T1|I]. -propagation_multi_headed(A,B,C,D,E,F,G,H,I,J) :- - B=[K|L], - propagation_prelude(A,B,D,F,G,H,I,M), - extend_id(H,N), - propagation_nested_code(L,[K,A],C,D,E,F,G,N,M,J). -propagation_prelude(A,[B|C],D,E/F,G,H,I,J) :- - head_info(A,F,K,L,M,N), - build_head(E,F,H,M,O), - get_constraint_mode(E/F,P), - head_arg_matches(N,P,[],Q,R,[],S), - D=rule(_,_,T,U), - extra_active_delegate_variables(A,[B,C,T,U],R,V), - lookup_passive_head(B,[A],R,S,W,X), - gen_occ_allocation(E/F,G,K,L,Y), - extend_id(H,Z), - append([X|M],V,A1), - build_head(E,F,[G|Z],A1,B1), - C1=B1, - D1=(O:-Q,W,!,Y,C1), - add_dummy_location(D1,E1), - I=[E1|J]. -propagation_nested_code([],[A|B],C,D,E,F,G,H,I,J) :- - universal_search_iterator_end([A|B],[],D,F,G,H,I,K), - propagation_body(A,B,C,D,E,F,G,H,K,J). -propagation_nested_code([A|B],C,D,E,F,G,H,I,J,K) :- - universal_search_iterator_end(C,[A|B],E,G,H,I,J,L), - universal_search_iterator([A|B],C,E,G,H,I,L,M), - inc_id(I,N), - propagation_nested_code(B,[A|C],D,E,F,G,H,N,M,K). -check_fd_lookup_condition(A,B,_,_) :- - get_store_type(A/B,global_singleton), - !. -check_fd_lookup_condition(A,B,C,D) :- - \+may_trigger(A/B), - get_functional_dependency(A/B,1,E,F), - copy_term(E-F,C-G), - term_variables(D,H), - intersect_eq(G,H,G), - !. -propagation_body(A,B,C,D,E,F/G,H,I,J,K) :- - D=rule(_,L,M,N), - gen_var_susp_list_for_b(B,[A,M,N],O,P,Q,R,S), - flatten(P,T), - init(R,U), - last(R,V), - gen_var(W), - gen_var(X), - functor(A,Y,Z), - gen_vars(Z,A1), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(Y/Z,B1),get_static_suspension_field(Y/Z,B1,state,active,C1),get_static_suspension_term_field(arguments,Y/Z,B1,A1))), - D1=(W=B1,C1), - E1=[[W|X]|T], - build_head(F,G,[H|I],E1,F1), - ( check_fd_lookup_condition(Y,Z,A,B) -> - universal_search_iterator_failure_vars(B,I,P,Q,S,G1,H1), - I1=G1 - ; - I1=[X|T], - H1=I - ), - ( H1=[_] -> - J1=H1 - ; - J1=[H|H1] - ), - build_head(F,G,J1,I1,K1), - L1=K1, - A=..[_|M1], - pairup(M1,A1,N1), - get_constraint_mode(Y/Z,O1), - head_arg_matches(N1,O1,O,P1,Q1), - different_from_other_susps(A,W,B,U,R1), - guard_body_copies(D,Q1,S1,T1), - get_occurrence(F/G,H,_,U1), - ( is_observed(F/G,H) -> - init(Q,V1), - gen_uncond_attach_goal(F/G,V,V1,W1,X1), - gen_state_cond_call(V,F/G,L1,X1,Y1) - ; - W1=true, - Y1=L1 - ), - ( - ( - is_least_occurrence(E) - ; - has_no_history(E) - ) -> - Z1=true, - A2=true - ; - ( \+may_trigger(F/G), - maplist(is_passive(E),C) -> - Z1=true, - A2=true - ) - ; - get_occurrence(F/G,H,_,U1), - use_auxiliary_predicate(novel_production), - use_auxiliary_predicate(extend_history), - does_use_history(F/G,H), - ( named_history(E,B2,C2) -> - ( C2==[] -> - empty_named_history_novel_production(B2,Z1), - empty_named_history_extend_history(B2,A2) - ; - reverse([W|U],D2), - named_history_susps(C2,[U1|C],[V|D2],E2), - E2=[F2|_], - ( length(C2,1) -> - A2='$extend_history'(F2,B2), - Z1='$novel_production'(F2,B2) - ; - findall(G2,(member(H2,C2),get_occurrence_from_id(G2,_,E,H2)),I2), - J2=..[t,B2|E2] - ) - ) - ; - F2=V, - maplist(extract_symbol,L,I2), - sort([U1|C],C2), - history_susps(C,[W|U],V,U1,E2), - J2=..[t,E|E2] - ), - ( var(Z1) -> - novel_production_calls(I2,C2,E2,E,K2,L2), - A2='$extend_history'(F2,K2), - Z1=(K2=J2,L2) - ; - true - ) - ), - ( chr_pp_flag(debugable,on) -> - D=rule(_,_,M,N), - my_term_copy(M-N,Q1,M2-N2), - get_occurrence(F/G,H,_,U1), - sort_by_key([V,W|U],[U1|C],O2), - P2='chr debug_event'(try([],O2,M2,N2)), - Q2='chr debug_event'(apply([],O2,M2,N2)) - ; - P2=true, - Q2=true - ), - ( is_stored_in_guard(F/G,E) -> - R2=W1, - S2=true - ; - R2=true, - S2=W1 - ), - T2=(F1:-D1,R1,P1,Z1,R2,S1,P2->Q2,A2,S2,T1,Y1;L1), - add_location(T2,E,U2), - J=[U2|K]. -extract_symbol(A,B/C) :- - functor(A,B,C). -novel_production_calls([],[],[],_,_,true). -novel_production_calls([A|B],[C|D],[E|F],G,H,(I,J)) :- - get_occurrence_from_id(A,K,G,C), - delay_phase_end(validate_store_type_assumptions,novel_production_call(A,K,'$novel_production'(E,H),I)), - novel_production_calls(B,D,F,G,H,J). -history_susps(A,B,C,D,E) :- - reverse(B,F), - sort_by_key([C|F],[D|A],E). -named_history_susps([],_,_,[]). -named_history_susps([A|B],C,D,[E|F]) :- - select2(A,E,C,D,G,H), - !, - named_history_susps(B,G,H,F). -gen_var_susp_list_for([A],B,C,D,E,F) :- - !, - functor(A,G,H), - head_info(A,H,_,F,E,I), - get_constraint_mode(G/H,J), - head_arg_matches(I,J,[],_,C), - extra_active_delegate_variables(A,B,C,K), - append(E,K,D). -gen_var_susp_list_for([A|B],C,D,E,F,G) :- - gen_var_susp_list_for(B,[A|C],H,F,_,_), - functor(A,I,J), - gen_var(G), - head_info(A,J,_,K,_,L), - get_constraint_mode(I/J,M), - head_arg_matches(L,M,H,_,D), - passive_delegate_variables(A,B,C,D,N), - append(N,[K,G|F],E). -gen_var_susp_list_for_b([A],B,C,[D],E,[F],[]) :- - !, - functor(A,G,H), - head_info(A,H,_,F,E,I), - get_constraint_mode(G/H,J), - head_arg_matches(I,J,[],_,C), - extra_active_delegate_variables(A,B,C,K), - append(E,K,D). -gen_var_susp_list_for_b([A|B],C,D,[E|F],G,[H|I],[J|K]) :- - gen_var_susp_list_for_b(B,[A|C],L,F,G,I,K), - functor(A,M,N), - gen_var(J), - head_info(A,N,_,H,_,O), - get_constraint_mode(M/N,P), - head_arg_matches(O,P,L,_,D), - passive_delegate_variables(A,B,C,D,Q), - append(Q,[H,J],E). -get_prop_inner_loop_vars([A],B,C,D,E,F,[]) :- - !, - functor(A,G,H), - head_info(A,H,F,E,I,J), - get_constraint_mode(G/H,K), - head_arg_matches(J,K,[],_,D), - extra_active_delegate_variables(A,B,D,L), - append(I,L,C). -get_prop_inner_loop_vars([A|B],C,D,E,F,G,[H|I]) :- - get_prop_inner_loop_vars(B,[A|C],J,K,F,G,I), - functor(A,L,M), - gen_var(N), - head_info(A,M,_,H,_,O), - get_constraint_mode(L/M,P), - head_arg_matches(O,P,K,_,E), - passive_delegate_variables(A,B,C,E,Q), - append(Q,[H,N|J],D). -reorder_heads(A,B,C,D,E,F) :- - ( chr_pp_flag(reorder_heads,on), - length(C,G), - G=<6 -> - reorder_heads_main(A,B,C,D,E,F) - ; - E=C, - F=D - ). -reorder_heads_main(A,B,C,D,E,F) :- - term_variables(B,G), - H=entry([],[],G,C,D,A), - copy_term_nat(H,I), - a_star(I,J^(chr_translate:final_data(J)),K^L^M^(chr_translate:expand_data(K,L,M)),N), - I=H, - N=entry(O,P,_,_,_,_), - reverse(O,E), - reverse(P,F). -final_data(A) :- - A=entry(_,_,_,_,[],_). -expand_data(A,B,C) :- - A=entry(D,E,F,G,H,I), - select2(J,K,G,H,L,M), - term_variables([J|F],N), - B=entry([J|D],[K|E],N,L,M,I), - order_score(J,K,F,L,I,C). -order_score(A,B,C,D,E,F) :- - functor(A,G,H), - get_store_type(G/H,I), - order_score(I,A,B,C,D,E,99999,F). -order_score(default,A,_,B,C,_,D,E) :- - term_variables(A,F), - term_variables(C,G), - ground_vars([A],H), - list_difference_eq(F,H,I), - order_score_vars(I,B,G,J), - E is min(D,J). -order_score(multi_inthash(A),B,_,C,_,_,D,E) :- - ( D=<100 -> - E=D - ; - order_score_indexes(A,B,C,E) - ). -order_score(multi_hash(A),B,_,C,_,_,D,E) :- - ( D=<100 -> - E=D - ; - order_score_indexes(A,B,C,E) - ). -order_score(global_ground,A,_,B,C,_,D,E) :- - term_variables(A,F), - term_variables(C,G), - order_score_vars(F,B,G,H), - I is H*200, - E is min(D,I). -order_score(var_assoc_store(_,_),_,_,_,_,_,_,1). -order_score(global_singleton,_,_,_,_,_,_,A) :- - A=1. -order_score(multi_store(A),B,C,D,E,F,G,H) :- - multi_order_score(A,B,C,D,E,F,G,H). -multi_order_score([],_,_,_,_,_,A,A). -multi_order_score([A|B],C,D,E,F,G,H,I) :- - ( order_score(A,C,D,E,F,G,H,J) -> - true - ; - J=H - ), - multi_order_score(B,C,D,E,F,G,J,I). -order_score(identifier_store(_),_,_,_,_,_,A,B) :- - B is min(A,10). -order_score(type_indexed_identifier_store(_,_),_,_,_,_,_,A,B) :- - B is min(A,10). -order_score_indexes(A,B,C,D) :- - copy_term_nat(B+C,E+F), - numbervars(F,0,_), - order_score_indexes(A,E,D). -order_score_indexes([A|B],C,D) :- - multi_hash_key_args(A,C,E), - ( maplist(ground,E) -> - D=100 - ; - order_score_indexes(B,C,D) - ). -memberchk_eq_flip(A,B) :- - memberchk_eq(B,A). -order_score_vars(A,B,C,D) :- - order_score_count_vars(A,B,C,E-F-G), - ( E-F-G==0-0-0 -> - D=0 - ; - ( E>0 -> - D is max(10-E,0) - ) - ; - ( F>0 -> - D is max(10-F,1)*100 - ) - ; - D is max(10-G,1)*1000 - ). -order_score_count_vars([],_,_,0-0-0). -order_score_count_vars([A|B],C,D,E-F-G) :- - order_score_count_vars(B,C,D,H-I-J), - ( memberchk_eq(A,C) -> - E is H+1, - F=I, - G=J - ; - ( memberchk_eq(A,D) -> - F is I+1, - E=H, - G=J - ) - ; - G is J+1, - E=H, - F=I - ). -create_get_mutable_ref(A,B,C) :- - C=(B=mutable(A)). -create_get_mutable(A,B,C) :- - B=mutable(A), - C=true. -gen_var(_). -gen_vars(A,B) :- - length(B,A). -head_info(A,B,C,D,E,F) :- - vars_susp(B,C,D,E), - A=..[_|G], - pairup(G,C,F). -inc_id([A|B],[C|B]) :- - C is A+1. -dec_id([A|B],[C|B]) :- - C is A-1. -extend_id(A,[0|A]). -next_id([_,A|B],[C|B]) :- - C is A+1. -build_head(A,B,C,D,E) :- - buildName(A,B,C,F), - ( - ( - chr_pp_flag(debugable,on) - ; - is_stored(A/B), - ( - has_active_occurrence(A/B) - ; - chr_pp_flag(late_allocation,off) - ), - ( - may_trigger(A/B) - ; - get_allocation_occurrence(A/B,G), - get_max_occurrence(A/B,H), - H>=G - ) - ) -> - E=..[F|D] - ; - init(D,I), - E=..[F|I] - ). -buildName(A,B,C,D) :- - ( - ( - chr_pp_flag(debugable,on) - ; - once((is_stored(A/B),(has_active_occurrence(A/B);chr_pp_flag(late_allocation,off)),(may_trigger(A/B);get_allocation_occurrence(A/B,E),get_max_occurrence(A/B,F),F>=E);C\=[0])) - ) -> - atom_concat(A,'___',G), - atomic_concat(G,B,H), - buildName_(C,H,D) - ; - D=A - ). -buildName_([],A,A). -buildName_([A|B],C,D) :- - buildName_(B,C,E), - atom_concat(E,'__',F), - atomic_concat(F,A,D). -vars_susp(A,B,C,D) :- - length(B,A), - append(B,[C],D). -or_pattern(A,B) :- - C is A-1, - B is 1<true;D=[]). -singleton_attr(A,B,C,D) :- - chr_pp_flag(dynattr,off), - !, - or_pattern(C,E), - make_attr(A,E,F,D), - nth1(C,F,[B]), - chr_delete(F,[B],G), - set_elems(G,[]). -singleton_attr(_,A,B,C) :- - C=[B-[A]]. -add_attr(A,B,C,D,E,F) :- - chr_pp_flag(dynattr,off), - !, - make_attr(A,G,H,I), - or_pattern(C,J), - nth1(C,H,K), - substitute_eq(K,H,[B|K],L), - make_attr(A,G,L,M), - substitute_eq(K,H,[B],N), - make_attr(A,O,N,P), - E=(D=I,(G/\J=:=J->F=M;O is G\/J,F=P)), - !. -add_attr(_,A,B,C,D,E) :- - D=('chr select'(C,B-F,G)->E=[B-[A|F]|G];E=[B-[A]|C]). -rem_attr(A,B,C,D,E,F) :- - chr_pp_flag(dynattr,off), - !, - or_pattern(D,G), - and_pattern(D,H), - make_attr(A,I,J,K), - nth1(D,J,L), - substitute_eq(L,J,[],M), - make_attr(A,N,M,O), - substitute_eq(L,J,P,Q), - make_attr(A,I,Q,R), - get_target_module(S), - F=(E=K,(I/\G=:=G->'chr sbag_del_element'(L,C,P),(P==[]->N is I/\H,(N==0->del_attr(B,S);put_attr(B,S,O));put_attr(B,S,R));true)), - !. -rem_attr(_,A,B,C,D,E) :- - get_target_module(F), - E=('chr select'(D,C-G,H)->'chr sbag_del_element'(G,B,I),(I==[]->(H==[]->del_attr(A,F);put_attr(A,F,H));put_attr(A,F,[C-I|H]));true). -merge_attributes(A,B,C,D,E) :- - chr_pp_flag(dynattr,off), - !, - make_attr(A,F,G,H), - merge_attributes2(A,F,G,C,I,E), - D=(B=H,I). -merge_attributes(_,A,B,C,D) :- - C=(sort(A,E),sort(B,F),'chr new_merge_attributes'(E,F,D)). -merge_attributes2(A,B,C,D,E,F) :- - make_attr(A,G,H,I), - bagof(J,K^L^M^N^(member2(C,H,K-L),J=(sort(L,M),'chr merge_attributes'(K,M,N))),O), - list2conj(O,P), - bagof(Q,R^S^T^member((R,'chr merge_attributes'(S,T,Q)),O),U), - make_attr(A,V,U,F), - E=(D=I,P,V is B\/G). -lookup_passive_head(A,B,C,D,E) :- - functor(A,F,G), - get_store_type(F/G,H), - lookup_passive_head(H,A,B,C,[],D,E). -lookup_passive_head(A,B,C,D,E,F) :- - functor(A,G,H), - get_store_type(G/H,I), - lookup_passive_head(I,A,B,C,D,E,F). -lookup_passive_head(default,A,B,C,_,D,E) :- - functor(A,F,G), - passive_head_via(A,B,C,D,E), - update_store_type(F/G,default). -lookup_passive_head(multi_inthash(A),B,_,C,D,E,F) :- - hash_lookup_passive_head(inthash,A,B,C,D,E,F,_). -lookup_passive_head(multi_hash(A),B,_,C,D,E,F) :- - hash_lookup_passive_head(hash,A,B,C,D,E,F,_). -lookup_passive_head(global_ground,A,_,_,_,B,C) :- - functor(A,D,E), - global_ground_store_name(D/E,F), - make_get_store_goal(F,C,B), - update_store_type(D/E,global_ground). -lookup_passive_head(var_assoc_store(A,B),C,_,D,_,E,F) :- - arg(A,C,G), - arg(B,C,H), - translate([G,H],D,[I,J]), - get_target_module(K), - E=(get_attr(I,K,L),lookup_assoc_store(L,J,F)). -lookup_passive_head(global_singleton,A,_,_,_,B,C) :- - functor(A,D,E), - global_singleton_store_name(D/E,F), - make_get_store_goal(F,G,H), - B=(H,G\==[],C=[G]), - update_store_type(D/E,global_singleton). -lookup_passive_head(multi_store(A),B,C,D,E,F,G) :- - once((member(H,A),lookup_passive_head(H,B,C,D,E,F,G))). -lookup_passive_head(identifier_store(A),B,_,C,_,D,E) :- - functor(B,F,G), - arg(A,B,H), - translate([H],C,[I]), - delay_phase_end(validate_store_type_assumptions,identifier_lookup(F/G,A,E,I,D)), - update_store_type(F/G,identifier_store(A)), - get_identifier_index(F/G,A,_). -lookup_passive_head(type_indexed_identifier_store(A,B),C,_,D,_,E,F) :- - functor(C,G,H), - arg(A,C,I), - ( var(I) -> - translate([I],D,[J]), - E=K - ; - ( ground(I), - I='$chr_identifier_match'(L,_) -> - lookup_identifier_atom(B,L,J,M), - E=(M,K) - ) - ), - delay_phase_end(validate_store_type_assumptions,type_indexed_identifier_lookup(G/H,A,B,F,J,K)), - update_store_type(G/H,type_indexed_identifier_store(A,B)), - get_type_indexed_identifier_index(B,G/H,A,_). -identifier_lookup(A,B,C,D,E) :- - get_identifier_size(F), - functor(G,struct,F), - get_identifier_index(A,B,H), - arg(H,G,C), - E=(D=G). -type_indexed_identifier_lookup(A,B,C,D,E,F) :- - type_indexed_identifier_structure(C,G), - get_type_indexed_identifier_index(C,A,B,H), - arg(H,G,D), - F=(E=G). -hash_lookup_passive_head(A,B,C,D,E,F,G,H) :- - pick_hash_index(B,C,D,H,I,J), - ( J=[K] -> - true - ; - K=..[k|J] - ), - functor(C,L,M), - multi_hash_lookup_goal(L/M,A,H,K,G,N), - check_ground(E,I,O), - my_term_copy(O,D,P), - F=(P,N), - ( A==inthash -> - update_store_type(L/M,multi_inthash([H])) - ; - update_store_type(L/M,multi_hash([H])) - ). -pick_hash_index(A,B,C,D,E,F) :- - member(D,A), - multi_hash_key_args(D,B,E), - key_in_scope(E,C,F), - !. -key_in_scope([],_,[]). -key_in_scope([A|B],C,[D|E]) :- - term_variables(A,F), - translate(F,C,G), - copy_term(A/F,D/G), - key_in_scope(B,C,E). -existential_lookup(var_assoc_store(A,B),C,D,E,F,G,H,I,J,J) :- - !, - lookup_passive_head(var_assoc_store(A,B),C,D,E,F,K,L), - sbag_member_call(I,L,M), - functor(C,N,O), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(N/O,G),get_static_suspension_field(N/O,G,state,active,P))), - H=(K,M,I=G,P). -existential_lookup(global_singleton,A,_,_,_,B,C,D,E,E) :- - !, - functor(A,F,G), - global_singleton_store_name(F/G,H), - make_get_store_goal(H,D,I), - C=(I,D\==[],D=B), - update_store_type(F/G,global_singleton). -existential_lookup(multi_store(A),B,C,D,E,F,G,H,I,J) :- - !, - once((member(K,A),existential_lookup(K,B,C,D,E,F,G,H,I,J))). -existential_lookup(multi_inthash(A),B,_,C,D,E,F,G,H,I) :- - !, - existential_hash_lookup(inthash,A,B,C,D,E,F,G,H,I). -existential_lookup(multi_hash(A),B,_,C,D,E,F,G,H,I) :- - !, - existential_hash_lookup(hash,A,B,C,D,E,F,G,H,I). -existential_lookup(identifier_store(A),B,C,D,E,F,G,H,I,J) :- - !, - lookup_passive_head(identifier_store(A),B,C,D,E,K,L), - hash_index_filter(I,A,J), - functor(B,M,N), - ( check_fd_lookup_condition(M,N,B,_) -> - O=(L=[H]) - ; - sbag_member_call(H,L,O) - ), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(M/N,F),get_static_suspension_field(M/N,F,state,active,P))), - G=(K,O,H=F,P). -existential_lookup(type_indexed_identifier_store(A,B),C,D,E,F,G,H,I,J,K) :- - !, - lookup_passive_head(type_indexed_identifier_store(A,B),C,D,E,F,L,M), - hash_index_filter(J,A,K), - functor(C,N,O), - ( check_fd_lookup_condition(N,O,C,_) -> - P=(M=[I]) - ; - sbag_member_call(I,M,P) - ), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(N/O,G),get_static_suspension_field(N/O,G,state,active,Q))), - H=(L,P,I=G,Q). -existential_lookup(A,B,C,D,E,F,G,H,I,I) :- - lookup_passive_head(A,B,C,D,E,J,K), - sbag_member_call(H,K,L), - functor(B,M,N), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(M/N,F),get_static_suspension_field(M/N,F,state,active,O))), - G=(J,L,H=F,O). -existential_hash_lookup(A,B,C,D,E,F,G,H,I,J) :- - hash_lookup_passive_head(A,B,C,D,E,K,L,M), - hash_index_filter(I,M,J), - functor(C,N,O), - ( check_fd_lookup_condition(N,O,C,_) -> - P=(L=[H]) - ; - sbag_member_call(H,L,P) - ), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(N/O,F),get_static_suspension_field(N/O,F,state,active,Q))), - G=(K,P,H=F,Q). -hash_index_filter(A,B,C) :- - hash_index_filter(A,B,1,C). -hash_index_filter([],_,_,[]). -hash_index_filter([A|B],C,D,E) :- - ( C=[F|G] -> - H is D+1, - ( F>D -> - E=[A|I], - hash_index_filter(B,[F|G],H,I) - ; - ( F==D -> - E=[silent(A)|I], - hash_index_filter(B,G,H,I) - ) - ) - ; - E=[A|B] - ). -assume_constraint_stores([]). -assume_constraint_stores([A|B]) :- - ( chr_pp_flag(debugable,off), - ( - only_ground_indexed_arguments(A) - ; - chr_pp_flag(mixed_stores,on) - ), - is_stored(A), - get_store_type(A,default) -> - get_indexed_arguments(A,C), - get_constraint_mode(A,D), - aggregate_all(bag(E)-count,(member(E,C),nth1(E,D,+)),F-G), - ( G>10 -> - findall([E],member(E,F),H) - ; - findall(E,(sublist(E,F),E\==[]),I), - predsort(longer_list,I,H) - ), - ( get_functional_dependency(A,1,J,K), - all_distinct_var_args(J), - K==[] -> - assumed_store_type(A,global_singleton) - ; - ( - ( - only_ground_indexed_arguments(A) - ; - G>0 - ) -> - get_constraint_type_det(A,L), - partition_indexes(H,L,M,N,O,P), - ( N=[] -> - Q=R - ; - Q=[multi_inthash(N)|R] - ), - ( M=[] -> - R=S - ; - R=[multi_hash(M)|S] - ), - ( O=[] -> - S=T - ; - maplist(wrap_in_functor(identifier_store),O,U), - append(U,T,S) - ), - append(P,V,T), - ( only_ground_indexed_arguments(A) -> - V=[global_ground] - ; - V=[default] - ), - assumed_store_type(A,multi_store(Q)) - ) - ; - true - ) - ; - true - ), - assume_constraint_stores(B). -partition_indexes([],_,[],[],[],[]). -partition_indexes([A|B],C,D,E,F,G) :- - ( A=[H], - nth1(H,C,I), - unalias_type(I,J), - J==chr_identifier -> - F=[H|K], - E=L, - D=M, - G=N - ; - ( A=[H], - nth1(H,C,I), - unalias_type(I,J), - nonvar(J), - J=chr_identifier(O) -> - G=[type_indexed_identifier_store(H,O)|N], - F=K, - E=L, - D=M - ) - ; - ( A=[H], - nth1(H,C,I), - unalias_type(I,J), - J==dense_int -> - E=[A|L], - D=M, - F=K, - G=N - ) - ; - ( member(H,A), - nth1(H,C,I), - unalias_type(I,J), - nonvar(J), - J=chr_identifier(_) -> - E=L, - D=M, - F=K, - G=N - ) - ; - E=L, - D=[A|M], - F=K, - G=N - ), - partition_indexes(B,C,M,L,K,N). -longer_list(A,B,C) :- - length(B,D), - length(C,E), - compare(F,E,D), - ( F== = -> - compare(A,B,C) - ; - A=F - ). -all_distinct_var_args(A) :- - copy_term_nat(A,B), - functor(A,C,D), - functor(E,C,D), - E=@=B. -get_indexed_arguments(A,B) :- - A=_/C, - get_indexed_arguments(1,C,A,B). -get_indexed_arguments(A,B,C,D) :- - ( A>B -> - D=[] - ; - ( is_indexed_argument(C,A) -> - D=[A|E] - ; - D=E - ), - F is A+1, - get_indexed_arguments(F,B,C,E) - ). -validate_store_type_assumptions([]). -validate_store_type_assumptions([A|B]) :- - validate_store_type_assumption(A), - validate_store_type_assumptions(B). -universal_search_iterator_end([A|B],C,D,E/F,G,H,I,J) :- - D=rule(_,_,K,L), - gen_var_susp_list_for_b(B,[A,C,K,L],_,M,N,_,O), - universal_search_iterator_failure_vars(B,H,M,N,O,P,Q), - flatten(M,R), - S=[[]|R], - build_head(E,F,[G|H],S,T), - ( Q=[_] -> - get_success_continuation_code_id(E/F,G,U), - V=[U] - ; - V=[G|Q] - ), - build_head(E,F,V,P,W), - X=(T:-W), - add_dummy_location(X,Y), - I=[Y|J]. -universal_search_iterator_failure_vars(A,B,C,D,E,F,G) :- - ( B=[0|_] -> - next_id(B,G), - F=D - ; - C=[_|H], - dec_id(B,I), - ( A=[J|K], - functor(J,L,M), - check_fd_lookup_condition(L,M,J,K) -> - E=[_|N], - universal_search_iterator_failure_vars(K,I,H,D,N,F,G) - ; - G=I, - flatten(H,O), - E=[P|_], - F=[P|O] - ) - ). -universal_search_iterator([A|B],[C|D],E,F/G,H,I,J,K) :- - E=rule(_,_,L,M), - gen_var_susp_list_for_b(D,[C,A,B,L,M],N,O,P,Q,R), - init(Q,S), - flatten(O,T), - gen_var(U), - functor(C,V,W), - gen_vars(W,X), - head_info(C,W,X,Y,_,Z), - get_constraint_mode(V/W,A1), - head_arg_matches(Z,A1,N,B1,C1), - delay_phase_end(validate_store_type_assumptions,(static_suspension_term(V/W,D1),get_static_suspension_field(V/W,D1,state,active,E1),get_static_suspension_term_field(arguments,V/W,D1,X))), - different_from_other_susps(C,Y,D,S,F1), - G1=(Y=D1,E1,F1,B1), - add_heads_ground_variables([C|D],[],H1), - lookup_passive_head(A,[C|D],C1,H1,I1,J1), - inc_id(I,K1), - L1=[[Y|U]|T], - build_head(F,G,[H|I],L1,M1), - passive_delegate_variables(C,D,[A,B,L,M],C1,N1), - append([J1|N1],[Y,U|T],O1), - build_head(F,G,[H|K1],O1,P1), - ( check_fd_lookup_condition(V,W,C,D) -> - universal_search_iterator_failure_vars(D,I,O,P,R,Q1,R1), - S1=Q1 - ; - S1=[U|T], - R1=I - ), - ( R1=[_] -> - T1=R1 - ; - T1=[H|R1] - ), - build_head(F,G,T1,S1,U1), - V1=(M1:-G1,I1->P1;U1), - add_dummy_location(V1,W1), - J=[W1|K]. -ai_observation_analysis(A) :- - ( chr_pp_flag(ai_observation_analysis,on), - get_target_module(_), - '$chr_compiled_with_version'(3) -> - list_to_ord_set(A,B), - abstract_constraints(B), - ai_observation_schedule_initial_calls(B,B), - ai_observation_gather_results - ; - true - ). -ai_observation_schedule_initial_calls([],_). -ai_observation_schedule_initial_calls([A|B],C) :- - ai_observation_schedule_initial_call(A,C), - ai_observation_schedule_initial_calls(B,C). -ai_observation_schedule_initial_call(A,_) :- - ai_observation_top(A,B), - initial_call_pattern(B). -ai_observation_schedule_new_calls([],_). -ai_observation_schedule_new_calls([A|B],C) :- - C=odom(_,D), - initial_call_pattern(odom(A,D)), - ai_observation_schedule_new_calls(B,C). -ai_observation_lub(odom(A,B),odom(A,C),odom(A,D)) :- - ord_intersection(B,C,D). -ai_observation_bot(A,B,odom(A,B)). -ai_observation_top(A,odom(A,B)) :- - ord_empty(B). -ai_observation_leq(odom(A,B),odom(A,C)) :- - ord_subset(C,B). -ai_observation_observe_set(A,B,C) :- - ord_subtract(A,B,C). -ai_observation_abstract_constraint(A,B,C) :- - functor(A,D,E), - C=D/E, - memberchk(C,B). -ai_observation_abstract_constraints(A,B,C) :- - findall(D,(member(E,A),ai_observation_abstract_constraint(E,B,D)),C). -ai_observation_abstract_goal_(A,B,C,D,E,F) :- - term_variables((A,B,C),G), - append(A,B,H), - ground_vars(H,I), - list_difference_eq(G,I,J), - ai_observation_abstract_goal(D,E,F,[],J), - !. -ground_vars([],[]). -ground_vars([A|B],C) :- - functor(A,D,E), - get_constraint_mode(D/E,F), - head_info(A,E,_,_,_,G), - head_arg_matches(G,F,[],_,_,[],H), - ground_vars(B,I), - append(H,I,C). -ai_observation_abstract_goal((A,B),C,D,E,F) :- - !, - ai_observation_abstract_goal(A,C,D,G,F), - ai_observation_abstract_goal(B,C,G,E,F). -ai_observation_abstract_goal((A;B),C,[(D;E)|F],F,G) :- - !, - ai_observation_abstract_goal(A,C,D,[],G), - ai_observation_abstract_goal(B,C,E,[],G). -ai_observation_abstract_goal((A->B),C,D,E,F) :- - !, - ai_observation_abstract_goal(A,C,D,G,F), - ai_observation_abstract_goal(B,C,G,E,F). -ai_observation_abstract_goal(A,B,[C|D],D,_) :- - ai_observation_abstract_constraint(A,B,C), - !. -ai_observation_abstract_goal(true,_,A,A,_) :- - !. -ai_observation_abstract_goal(writeln(_),_,A,A,_) :- - !. -ai_observation_abstract_goal(A,_,B,B,C) :- - builtin_binds_b(A,D), - intersect_eq(D,C,[]), - !. -ai_observation_abstract_goal(_,_,[A|B],B,_) :- - A=builtin. -ai_observation_is_observed(odom(_,A),B) :- - \+ord_memberchk(B,A). -unconditional_occurrence(A,B) :- - get_occurrence(A,B,C,_), - get_rule(C,D), - D=pragma(E,_,_,_,_), - copy_term_nat(E,F), - F=rule(G,H,I,_), - guard_entailment:entails_guard([chr_pp_headvariables(G,H)],I), - once((G=[J],H==[];H=[J],G==[],\+may_trigger(A))), - all_distinct_var_args(J). -partial_wake_args([],_,_,_). -partial_wake_args([A|B],[C|D],E,F) :- - ( C\== + -> - ( nonvar(A) -> - no_partial_wake(F) - ; - ( memberchk_eq(A,E) -> - no_partial_wake(F) - ) - ; - true - ) - ; - true - ), - partial_wake_args(B,D,E,F). -generate_show_constraint(A,B,C,D) :- - ( chr_pp_flag(show,on) -> - B=['$show'/0|A], - generate_show_rules(A,D,[E|C]), - inc_rule_count(F), - E=pragma(rule(['$show'],[],true,true),ids([0],[]),[],no,F) - ; - B=A, - D=C - ). -generate_show_rules([],A,A). -generate_show_rules([A/B|C],[D|E],F) :- - functor(G,A,B), - inc_rule_count(H), - D=pragma(rule([],['$show',G],true,writeln(G)),ids([],[0,1]),[passive(1)],no,H), - generate_show_rules(C,E,F). -static_suspension_term(A/B,C) :- - suspension_term_base(A/B,D), - E is D+B, - functor(C,suspension,E). -has_suspension_field(A,B) :- - suspension_term_base_fields(A,C), - memberchk(B,C). -suspension_term_base(A,B) :- - suspension_term_base_fields(A,C), - length(C,B). -suspension_term_base_fields(A,B) :- - ( chr_pp_flag(debugable,on) -> - B=[id,state,history,generation,continuation,functor] - ; - ( uses_history(A) -> - B=[id,state,history|C] - ; - ( only_ground_indexed_arguments(A), - get_functional_dependency(A,1,_,_) -> - B=[state|C] - ) - ; - B=[id,state|C] - ), - ( only_ground_indexed_arguments(A) -> - get_store_type(A,D), - basic_store_types(D,E), - ( memberchk(global_ground,E) -> - C=[global_list_prev|F] - ; - C=F - ), - ( chr_pp_flag(ht_removal,on) -> - ht_prev_fields(E,F) - ; - F=[] - ) - ; - ( may_trigger(A) -> - ( uses_field(A,generation) -> - C=[generation,global_list_prev|F] - ; - C=[global_list_prev|F] - ), - ( chr_pp_flag(mixed_stores,on), - chr_pp_flag(ht_removal,on) -> - get_store_type(A,D), - basic_store_types(D,E), - ht_prev_fields(E,F) - ; - F=[] - ) - ) - ; - C=[global_list_prev|F], - ( chr_pp_flag(mixed_stores,on), - chr_pp_flag(ht_removal,on) -> - get_store_type(A,D), - basic_store_types(D,E), - ht_prev_fields(E,F) - ; - F=[] - ) - ) - ). -ht_prev_fields(A,B) :- - ht_prev_fields_int(A,C), - append(C,B). -ht_prev_fields_int([],[]). -ht_prev_fields_int([A|B],C) :- - ( A=multi_hash(D) -> - maplist(ht_prev_field,D,E), - C=[E|F] - ; - C=F - ), - ht_prev_fields_int(B,F). -ht_prev_field(A,B) :- - concat_atom(['multi_hash_prev-'|A],B). -get_static_suspension_term_field(A,B,C,D) :- - suspension_term_base_fields(B,E), - nth1(F,E,A), - !, - arg(F,C,D). -get_static_suspension_term_field(arguments,A,B,C) :- - !, - suspension_term_base(A,D), - B=..[_|E], - drop(D,E,C). -get_static_suspension_term_field(A,B,_,_) :- - chr_error(internal,'Trying to obtain field ~w of ~w, wich does not have it!',[A,B]). -get_dynamic_suspension_term_field(A,B,C,D,E) :- - suspension_term_base_fields(B,F), - nth1(G,F,A), - !, - E=arg(G,C,D). -get_dynamic_suspension_term_field(arguments,A,B,C,D) :- - !, - static_suspension_term(A,E), - get_static_suspension_term_field(arguments,A,E,C), - D=(B=E). -get_dynamic_suspension_term_field(argument(A),B,C,D,E) :- - !, - suspension_term_base(B,F), - G is A+F, - E=arg(G,C,D). -get_dynamic_suspension_term_field(A,B,_,_,_) :- - chr_error(internal,'Dynamic goal to get ~w of ~w, which does not have this field!',[A,B]). -set_dynamic_suspension_term_field(A,B,C,D,E) :- - suspension_term_base_fields(B,F), - nth1(G,F,A), - !, - E=setarg(G,C,D). -set_dynamic_suspension_term_field(A,B,_,_,_) :- - chr_error(internal,'Dynamic goal to set ~w of ~w, which does not have this field!',[A,B]). -basic_store_types(multi_store(A),A) :- - !. -basic_store_types(A,[A]). -generate_never_stored_rules(A,B) :- - ( chr_pp_flag(declare_stored_constraints,on) -> - never_stored_rules(A,B) - ; - B=[] - ). -check_storedness_assertions(A) :- - ( chr_pp_flag(storage_analysis,on), - chr_pp_flag(declare_stored_constraints,on) -> - forall(B,A,check_storedness_assertion(B)) - ; - true - ). -continuation_analysis(A) :- - maplist(analyse_continuations,A). -analyse_continuations(A) :- - continuation_analysis(A,1), - get_max_occurrence(A,B), - C is B+1, - bulk_propagation(A,1,C), - set_occurrence_code_id(A,1,0). -continuation_analysis(A,B) :- - get_max_occurrence(A,C), - ( B>C -> - true - ; - ( B==C -> - D is B+1, - continuation_occurrence(A,B,D) - ) - ; - constraint_continuation(A,B,C,D), - continuation_occurrence(A,B,D), - E is B+1, - continuation_analysis(A,E) - ). -constraint_continuation(A,B,C,D) :- - ( get_occurrence_head(A,B,E) -> - F is B+1, - ( between(F,C,D), - get_occurrence_head(A,D,G), - unifiable(E,G,_) -> - true - ; - D is C+1 - ) - ; - D=C - ). -get_occurrence_head(A,B,C) :- - get_occurrence(A,B,D,E), - \+is_passive(D,E), - get_rule(D,F), - F=pragma(rule(G,H,_,_),ids(I,J),_,_,_), - ( select2(E,C,I,G,_,_) -> - true - ; - select2(E,C,J,H,_,_) - ). -get_success_continuation_code_id(A,B,C) :- - get_success_continuation_occurrence(A,B,D), - get_occurrence_code_id(A,D,C). -collect_constants(A,B,C) :- - ( not_restarted -> - maplist(collect_rule_constants(B),A), - ( chr_pp_flag(verbose,on) -> - print_chr_constants - ; - true - ), - ( chr_pp_flag(experiment,on) -> - flattening_dictionary(B,D), - copy_term_nat(C,E), - flatten_clauses(E,D,F), - install_new_declarations_and_restart(F) - ; - true - ) - ; - true - ). -collect_rule_constants(A,B) :- - B=pragma(rule(C,D,_,E),_,_,_,_), - maplist(collect_head_constants,C), - maplist(collect_head_constants,D), - collect_body_constants(E,A). -collect_body_constants(A,B) :- - conj2list(A,C), - maplist(collect_goal_constants(B),C). -collect_goal_constants(A,B) :- - ( nonvar(B), - functor(B,C,D), - memberchk(C/D,A) -> - collect_head_constants(B) - ; - ( nonvar(B), - B=E:F, - get_target_module(G), - E==G, - nonvar(F), - functor(F,C,D), - memberchk(C/D,A) -> - collect_head_constants(F) - ) - ; - true - ). -collect_head_constants(A) :- - functor(A,B,C), - get_constraint_type_det(B/C,D), - A=..[_|E], - maplist(collect_arg_constants,E,D). -collect_arg_constants(A,B) :- - ( ground(A), - unalias_type(B,C), - is_chr_constants_type(C,D,_) -> - add_chr_constant(D,A) - ; - true - ). -flattening_dictionary([],[]). -flattening_dictionary([A|B],C) :- - ( flattening_dictionary_entry(A,D) -> - C=[D|E] - ; - C=E - ), - flattening_dictionary(B,E). -flattening_dictionary_entry(A,B) :- - get_constraint_arg_type(A,C,D), - ( is_chr_constants_type(D,E,F) -> - get_chr_constants(E,G) - ; - ( D=chr_enum(G) -> - F=no - ) - ), - B=A-C-H-F, - maplist(flat_spec(A,C),G,H). -flat_spec(A/B,C,D,E) :- - E=D-F, - term_to_atom(D,G), - atom_concat_list(['$flat_',A,/,B,'___',C,'___',G],F). -restart_after_flattening(A,A) :- - nb_setval('$chr_restart_after_flattening',started). -restart_after_flattening(_,A) :- - nb_getval('$chr_restart_after_flattening',restart(A)), - nb_setval('$chr_restart_after_flattening',restarted). -not_restarted :- - nb_getval('$chr_restart_after_flattening',started). -install_new_declarations_and_restart(A) :- - nb_setval('$chr_restart_after_flattening',restart(A)), - fail. -flatten_clauses(A,B,C) :- - flatten_readcontent(A,D,E,F,_,G,H), - flatten_clauses_(B,D,H,E,F,G,C). -flatten_clauses_(A,B,C,D,E,F,G) :- - auxiliary_constraints_declarations(A,E,F,H), - dispatching_rules(A,I), - declarations(D,A,E,F,J), - flatten_rules(B,A,K), - append([C,H,I,J,K],G). -declarations(A,B,C,D,E) :- - findall(F,(member(F,A),\+memberchk(F-_-_-_,B)),G), - maplist(declaration(C,D),G,H), - flatten(H,E). -declaration(A,B,C,[(:-chr_constraint C),(:-chr_option(mode,D)),(:-chr_option(type_declaration,E))]) :- - C=F/G, - functor(D,F,G), - ( memberchk(D,A) -> - true - ; - replicate(G,?,H), - D=..[_|H] - ), - functor(E,F,G), - ( memberchk(E,B) -> - true - ; - replicate(G,any,I), - E=..[_|I] - ). -flatten_readcontent([],[],[],[],[],[],[]). -flatten_readcontent([A|B],C,D,E,F,G,H) :- - ( A==end_of_file -> - C=[], - D=[], - E=[], - G=[], - F=[], - H=[] - ; - ( crude_is_rule(A) -> - C=[A|I], - flatten_readcontent(B,I,D,E,F,G,H) - ) - ; - ( pure_is_declaration(A,J,K,L) -> - append(J,M,D), - append(K,N,E), - append(L,O,G), - flatten_readcontent(B,C,M,N,F,O,H) - ) - ; - ( is_mode_declaration(A,P) -> - E=[P|N], - flatten_readcontent(B,C,D,N,F,G,H) - ) - ; - ( is_type_declaration(A,Q) -> - G=[Q|O], - flatten_readcontent(B,C,D,E,F,O,H) - ) - ; - ( is_type_definition(A,R) -> - H=[A|S], - F=[R|T], - flatten_readcontent(B,C,D,E,T,G,S) - ) - ; - ( A=(:-op(U,V,W)) -> - op(U,V,W) - ; - true - ), - H=[A|S], - flatten_readcontent(B,C,D,E,F,G,S) - ). -crude_is_rule((_@_)). -crude_is_rule((_ pragma _)). -crude_is_rule((_==>_)). -crude_is_rule((_<=>_)). -pure_is_declaration(A,B,C,D) :- - A=(:-E), - E=..[F,G], - F==chr_constraint, - conj2list(G,H), - pure_extract_type_mode(H,B,C,D). -pure_extract_type_mode([],[],[],[]). -pure_extract_type_mode([A/B|C],[A/B|D],E,F) :- - !, - pure_extract_type_mode(C,D,E,F). -pure_extract_type_mode([A|B],[C|D],[E|F],G) :- - functor(A,H,I), - C=H/I, - A=..[_|J], - extract_types_and_modes(J,K,L), - E=..[H|L], - ( forall(member(M,K),M==any) -> - G=N - ; - G=[O|N], - O=..[H|K] - ), - pure_extract_type_mode(B,D,F,N). -is_mode_declaration((:-chr_option(mode,A)),A). -is_type_declaration((:-chr_option(type_declaration,A)),A). -auxiliary_constraints_declarations(A,B,C,D) :- - findall(E,auxiliary_constraints_declaration(A,B,C,E),F), - flatten(F,D). -auxiliary_constraints_declaration(A,B,C,[(:-chr_constraint D),(:-chr_option(mode,E)),(:-chr_option(type_declaration,F))]) :- - member(G/H-I-J-_,A), - arg_modes(G,H,B,K), - specialize_modes(K,I,L), - arg_types(G,H,C,M), - specialize_types(M,I,N), - O is H-1, - member(_-P,J), - D=P/O, - E=..[P|L], - F=..[P|N]. -arg_modes(A,B,C,D) :- - functor(E,A,B), - ( memberchk(E,C) -> - E=..[_|D] - ; - replicate(B,?,D) - ). -specialize_modes(A,B,C) :- - split(A,B,D,_,E), - append(D,E,C). -arg_types(A,B,C,D) :- - functor(E,A,B), - ( memberchk(E,C) -> - E=..[_|D] - ; - replicate(B,any,D) - ). -specialize_types(A,B,C) :- - split(A,B,D,_,E), - append(D,E,C). -dispatching_rules([],[]). -dispatching_rules([A-B-C-D|E],F) :- - constraint_dispatching_rule(C,A,B,D,F,G), - dispatching_rules(E,G). -constraint_dispatching_rule(A,B/C,D,E,F,G) :- - ( D==1 -> - H=F, - I=B/C - ; - functor(J,B,C), - J=..[_|K], - split(K,D,L,M,N), - append([M|L],N,O), - atom_concat(B,'_$shuffled',P), - Q=..[P|O], - [(J:-Q)|H]=F, - I=P/C - ), - R=swap(B,D), - dispatching_rule_term_cases(A,I,E,R,H,G). -dispatching_rule_term_cases(A,B/C,D,E,F,G) :- - once(pairup(H,I,A)), - length(H,J), - replicate(J,[],K), - L is C-1, - maplist(wrap_in_functor(dispatching_action),I,M), - dispatch_trie_index([H|K],L,D,E,M,B,F,G). -dispatching_action(A,B,C) :- - C=..[A|B]. -dispatch_trie_index([A|B],C,D,E,F,G,H,I) :- - dispatch_trie_step(A,G,G,B,C,D,E,F,H,I). -dispatch_trie_step([],_,_,_,[],_,_,[],A,A) :- - !. -dispatch_trie_step(A,B,C,D,E,F,G,H,I,J) :- - D=[K|_], - length(K,L), - aggregate_all(set(M/N),(member(O,A),functor(O,M,N)),P), - Q is L+1, - dispatch_trie_step_cases(P,Q,A,D,E,F,G,H,B,C,I,J). -dispatch_trie_step_cases([],A,_,_,B,C,D,_,E,_,F,G) :- - ( C=yes(H) -> - F=[I|G], - I=(J:-K), - L is A+B, - functor(J,E,L), - reconstruct_original_term(D,J,M), - K=..[H,M] - ; - F=G - ). -dispatch_trie_step_cases([A|B],C,D,E,F,G,H,I,J,K,L,M) :- - dispatch_trie_step_case(A,C,D,E,F,G,H,I,J,K,L,N), - dispatch_trie_step_cases(B,C,D,E,F,G,H,I,J,K,N,M). -dispatch_trie_step_case(A/B,C,D,E,F,G,H,I,J,K,[L|M],N) :- - L=(O:-P,Q), - ( G=yes(_) -> - P=! - ; - P=true - ), - R is C+F, - functor(O,J,R), - arg(1,O,S), - O=..[_,_|T], - length(U,F), - once(append(V,U,T)), - functor(S,A,B), - W=index_functor(A,B,H), - S=..[_|X], - append(X,T,Y), - ( Y==U -> - M=N, - rec_cases(D,_,I,A/B,_,_,Z), - Z=[A1], - call(A1,U,Q) - ; - rec_cases(D,E,I,A/B,B1,C1,Z), - ( Z=[D1] -> - M=N, - call(D1,U,Q) - ; - pairup(B1,C1,E1), - common_pattern(E1,F1,G1,H1), - append(X,V,[I1|J1]), - I1-J1=F1, - K1=gct(V,W), - gensym(K,L1), - append(G1,U,M1), - Q=..[L1|M1], - findall(N1-O1,member([N1|O1],H1),P1), - once(pairup(Q1,R1,P1)), - dispatch_trie_step(Q1,L1,K,R1,F,G,K1,Z,M,N) - ) - ). -split([A|B],C,D,E,F) :- - ( C==1 -> - D=[], - E=A, - F=B - ; - G is C-1, - D=[A|H], - split(B,G,H,E,F) - ). -reconstruct_original_term(swap(A,B),C,D) :- - C=..[_,E|F], - G is B-1, - split_at(G,F,H,I), - append(H,[E|I],J), - D=..[A|J]. -reconstruct_original_term(index_functor(A,B,C),D,E) :- - D=..[F|G], - split_at(B,G,H,I), - J=..[A|H], - K=..[F,J|I], - reconstruct_original_term(C,K,E). -reconstruct_original_term(gct(A,B),C,D) :- - copy_term_nat(A,E), - term_variables(E,F), - C=..[G|H], - append(F,I,H), - append(E,I,J), - K=..[G|J], - reconstruct_original_term(B,K,D). -flatten_rules(A,B,C) :- - flatten_rules1(A,B,D), - flatten(D,C). -flatten_rules1([],_,[]). -flatten_rules1([A|B],C,[D|E]) :- - findall(F,flatten_rule(A,C,F),D), - flatten_rules1(B,C,E). -flatten_rule((A@B),C,(A@D)) :- - !, - flatten_rule(B,C,D). -flatten_rule((A pragma B),C,(D pragma B)) :- - !, - flatten_rule(A,C,D). -flatten_rule((A==>B),C,(D==>E)) :- - !, - flatten_heads(A,C,D), - flatten_body(B,C,E). -flatten_rule((A\B<=>C),D,(E\F<=>G)) :- - !, - flatten_heads((A,B),D,(E,F)), - flatten_body(C,D,G). -flatten_rule((A<=>B),C,(D<=>E)) :- - flatten_heads(A,C,D), - flatten_body(B,C,E). -flatten_heads((A,B),C,(D,E)) :- - !, - flatten_heads(A,C,D), - flatten_heads(B,C,E). -flatten_heads(A#B,C,D#B) :- - !, - flatten_heads(A,C,D). -flatten_heads(A,B,C) :- - ( functor(A,D,E), - memberchk(D/E-F-G-_,B) -> - A=..[_|H], - split(H,F,I,J,K), - member(L-M,G), - J=L, - append(I,K,N), - C=..[M|N] - ; - C=A - ). -flatten_body((A '|' B),C,(D '|' E)) :- - !, - conj2list(A,F), - maplist(flatten_goal(C),F,G), - list2conj(G,D), - conj2list(B,H), - maplist(flatten_goal(C),H,I), - list2conj(I,E). -flatten_body(A,B,C) :- - conj2list(A,D), - maplist(flatten_goal(B),D,E), - list2conj(E,C). -flatten_goal(_,A,B) :- - var(A), - !, - B=A. -flatten_goal(A,B,C) :- - ( is_specializable_goal(B,A,D) -> - specialize_goal(B,D,C) - ; - ( B=E:F, - get_target_module(G), - E==G, - nonvar(F), - is_specializable_goal(F,A,D) -> - specialize_goal(F,D,H), - C=E:H - ) - ; - ( partial_eval(B,C) -> - true - ) - ; - C=B - ). -is_specializable_goal(A,B,C) :- - functor(A,D,E), - memberchk(D/E-C-_-_,B), - arg(C,A,F), - ground(F). -specialize_goal(A,B,C) :- - functor(A,D,E), - A=..[_|F], - split(F,B,G,H,I), - append(G,I,J), - flat_spec(D/E,B,H,_-K), - C=..[K|J]. -partial_eval(append(A,B,C),D) :- - ( A==[] -> - D=(C=B) - ; - ( B==[] -> - D=(C=A) - ) - ). -partial_eval(flatten_path(A,B),C) :- - ( nonvar(A), - flatten(A,D), - D\==A -> - C=flatten_path(D,B) - ). -dump_code(A) :- - ( chr_pp_flag(dump,on) -> - maplist(portray_clause,A) - ; - true - ). -chr_banner :- - chr_info(banner,' The K.U.Leuven CHR System - Contributors: Tom Schrijvers, Jon Sneyers, Bart Demoen, - Jan Wielemaker - Copyright: K.U.Leuven, Belgium - URL: http://www.cs.kuleuven.be/~~toms/CHR/ -',[]). -:-use_module(chr(chr_runtime)). -:-use_module(chr(chr_hashtable_store)). -attach_generate_empty_named_history_initialisation___1([],_). -attach_generate_empty_named_history_initialisation___1([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\1=:=1 -> - Q=v(N,[C|D],E,F,G,H,I,J,K,L,M) - ; - O is N\/1, - Q=v(O,[C],E,F,G,H,I,J,K,L,M) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(1,[C],[],[],[],[],[],[],[],[],[])) - ), - attach_generate_empty_named_history_initialisation___1(B,C). -detach_generate_empty_named_history_initialisation___1([],_). -detach_generate_empty_named_history_initialisation___1([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\1=:=1 -> - 'chr sbag_del_element'(D,C,P), - ( P==[] -> - O is N/\ -2, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,[],E,F,G,H,I,J,K,L,M)) - ) - ; - put_attr(A,chr_translate,v(N,P,E,F,G,H,I,J,K,L,M)) - ) - ; - true - ) - ; - true - ), - detach_generate_empty_named_history_initialisation___1(B,C). -attach_background_info___2([],_). -attach_background_info___2([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\2=:=2 -> - Q=v(N,D,[C|E],F,G,H,I,J,K,L,M) - ; - O is N\/2, - Q=v(O,D,[C],F,G,H,I,J,K,L,M) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(2,[],[C],[],[],[],[],[],[],[],[])) - ), - attach_background_info___2(B,C). -detach_background_info___2([],_). -detach_background_info___2([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\2=:=2 -> - 'chr sbag_del_element'(E,C,P), - ( P==[] -> - O is N/\ -3, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,D,[],F,G,H,I,J,K,L,M)) - ) - ; - put_attr(A,chr_translate,v(N,D,P,F,G,H,I,J,K,L,M)) - ) - ; - true - ) - ; - true - ), - detach_background_info___2(B,C). -attach_get_bg_info___2([],_). -attach_get_bg_info___2([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\4=:=4 -> - Q=v(N,D,E,[C|F],G,H,I,J,K,L,M) - ; - O is N\/4, - Q=v(O,D,E,[C],G,H,I,J,K,L,M) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(4,[],[],[C],[],[],[],[],[],[],[])) - ), - attach_get_bg_info___2(B,C). -detach_get_bg_info___2([],_). -detach_get_bg_info___2([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\4=:=4 -> - 'chr sbag_del_element'(F,C,P), - ( P==[] -> - O is N/\ -5, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,D,E,[],G,H,I,J,K,L,M)) - ) - ; - put_attr(A,chr_translate,v(N,D,E,P,G,H,I,J,K,L,M)) - ) - ; - true - ) - ; - true - ), - detach_get_bg_info___2(B,C). -attach_type_definition___2([],_). -attach_type_definition___2([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\8=:=8 -> - Q=v(N,D,E,F,[C|G],H,I,J,K,L,M) - ; - O is N\/8, - Q=v(O,D,E,F,[C],H,I,J,K,L,M) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(8,[],[],[],[C],[],[],[],[],[],[])) - ), - attach_type_definition___2(B,C). -detach_type_definition___2([],_). -detach_type_definition___2([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\8=:=8 -> - 'chr sbag_del_element'(G,C,P), - ( P==[] -> - O is N/\ -9, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,D,E,F,[],H,I,J,K,L,M)) - ) - ; - put_attr(A,chr_translate,v(N,D,E,F,P,H,I,J,K,L,M)) - ) - ; - true - ) - ; - true - ), - detach_type_definition___2(B,C). -attach_type_alias___2([],_). -attach_type_alias___2([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\16=:=16 -> - Q=v(N,D,E,F,G,[C|H],I,J,K,L,M) - ; - O is N\/16, - Q=v(O,D,E,F,G,[C],I,J,K,L,M) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(16,[],[],[],[],[C],[],[],[],[],[])) - ), - attach_type_alias___2(B,C). -detach_type_alias___2([],_). -detach_type_alias___2([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\16=:=16 -> - 'chr sbag_del_element'(H,C,P), - ( P==[] -> - O is N/\ -17, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,D,E,F,G,[],I,J,K,L,M)) - ) - ; - put_attr(A,chr_translate,v(N,D,E,F,G,P,I,J,K,L,M)) - ) - ; - true - ) - ; - true - ), - detach_type_alias___2(B,C). -attach_unalias_type___2([],_). -attach_unalias_type___2([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\32=:=32 -> - Q=v(N,D,E,F,G,H,[C|I],J,K,L,M) - ; - O is N\/32, - Q=v(O,D,E,F,G,H,[C],J,K,L,M) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(32,[],[],[],[],[],[C],[],[],[],[])) - ), - attach_unalias_type___2(B,C). -detach_unalias_type___2([],_). -detach_unalias_type___2([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\32=:=32 -> - 'chr sbag_del_element'(I,C,P), - ( P==[] -> - O is N/\ -33, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,D,E,F,G,H,[],J,K,L,M)) - ) - ; - put_attr(A,chr_translate,v(N,D,E,F,G,H,P,J,K,L,M)) - ) - ; - true - ) - ; - true - ), - detach_unalias_type___2(B,C). -attach_static_type_check_var___3([],_). -attach_static_type_check_var___3([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\64=:=64 -> - Q=v(N,D,E,F,G,H,I,[C|J],K,L,M) - ; - O is N\/64, - Q=v(O,D,E,F,G,H,I,[C],K,L,M) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(64,[],[],[],[],[],[],[C],[],[],[])) - ), - attach_static_type_check_var___3(B,C). -detach_static_type_check_var___3([],_). -detach_static_type_check_var___3([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\64=:=64 -> - 'chr sbag_del_element'(J,C,P), - ( P==[] -> - O is N/\ -65, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,D,E,F,G,H,I,[],K,L,M)) - ) - ; - put_attr(A,chr_translate,v(N,D,E,F,G,H,I,P,K,L,M)) - ) - ; - true - ) - ; - true - ), - detach_static_type_check_var___3(B,C). -attach_static_atomic_builtin_type_check_var___3([],_). -attach_static_atomic_builtin_type_check_var___3([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\128=:=128 -> - Q=v(N,D,E,F,G,H,I,J,[C|K],L,M) - ; - O is N\/128, - Q=v(O,D,E,F,G,H,I,J,[C],L,M) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(128,[],[],[],[],[],[],[],[C],[],[])) - ), - attach_static_atomic_builtin_type_check_var___3(B,C). -detach_static_atomic_builtin_type_check_var___3([],_). -detach_static_atomic_builtin_type_check_var___3([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\128=:=128 -> - 'chr sbag_del_element'(K,C,P), - ( P==[] -> - O is N/\ -129, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,D,E,F,G,H,I,J,[],L,M)) - ) - ; - put_attr(A,chr_translate,v(N,D,E,F,G,H,I,J,P,L,M)) - ) - ; - true - ) - ; - true - ), - detach_static_atomic_builtin_type_check_var___3(B,C). -attach_atomic_type___1([],_). -attach_atomic_type___1([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\256=:=256 -> - Q=v(N,D,E,F,G,H,I,J,K,[C|L],M) - ; - O is N\/256, - Q=v(O,D,E,F,G,H,I,J,K,[C],M) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(256,[],[],[],[],[],[],[],[],[C],[])) - ), - attach_atomic_type___1(B,C). -detach_atomic_type___1([],_). -detach_atomic_type___1([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\256=:=256 -> - 'chr sbag_del_element'(L,C,P), - ( P==[] -> - O is N/\ -257, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,D,E,F,G,H,I,J,K,[],M)) - ) - ; - put_attr(A,chr_translate,v(N,D,E,F,G,H,I,J,K,P,M)) - ) - ; - true - ) - ; - true - ), - detach_atomic_type___1(B,C). -attach_enumerated_atomic_type___2([],_). -attach_enumerated_atomic_type___2([A|B],C) :- - ( get_attr(A,chr_translate,P) -> - P=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\512=:=512 -> - Q=v(N,D,E,F,G,H,I,J,K,L,[C|M]) - ; - O is N\/512, - Q=v(O,D,E,F,G,H,I,J,K,L,[C]) - ), - put_attr(A,chr_translate,Q) - ; - put_attr(A,chr_translate,v(512,[],[],[],[],[],[],[],[],[],[C])) - ), - attach_enumerated_atomic_type___2(B,C). -detach_enumerated_atomic_type___2([],_). -detach_enumerated_atomic_type___2([A|B],C) :- - ( get_attr(A,chr_translate,Q) -> - Q=v(N,D,E,F,G,H,I,J,K,L,M), - ( N/\512=:=512 -> - 'chr sbag_del_element'(M,C,P), - ( P==[] -> - O is N/\ -513, - ( O==0 -> - del_attr(A,chr_translate) - ; - put_attr(A,chr_translate,v(O,D,E,F,G,H,I,J,K,L,[])) - ) - ; - put_attr(A,chr_translate,v(N,D,E,F,G,H,I,J,K,L,P)) - ) - ; - true - ) - ; - true - ), - detach_enumerated_atomic_type___2(B,C). -attach_increment([],_). -attach_increment([B|C],A) :- - ( get_attr(B,chr_translate,U1) -> - A=v(N,D,E,F,G,H,I,J,K,L,M), - U1=v(Y,O,P,Q,R,S,T,U,V,W,X), - sort(O,Z), - 'chr merge_attributes'(D,Z,A1), - sort(P,B1), - 'chr merge_attributes'(E,B1,C1), - sort(Q,D1), - 'chr merge_attributes'(F,D1,E1), - sort(R,F1), - 'chr merge_attributes'(G,F1,G1), - sort(S,H1), - 'chr merge_attributes'(H,H1,I1), - sort(T,J1), - 'chr merge_attributes'(I,J1,K1), - sort(U,L1), - 'chr merge_attributes'(J,L1,M1), - sort(V,N1), - 'chr merge_attributes'(K,N1,O1), - sort(W,P1), - 'chr merge_attributes'(L,P1,Q1), - sort(X,R1), - 'chr merge_attributes'(M,R1,S1), - T1 is N\/Y, - put_attr(B,chr_translate,v(T1,A1,C1,E1,G1,I1,K1,M1,O1,Q1,S1)) - ; - put_attr(B,chr_translate,A) - ), - attach_increment(C,A). -attr_unify_hook(v(L,B,C,D,E,F,G,H,I,J,K),A) :- - sort(B,M), - sort(C,N), - sort(D,O), - sort(E,P), - sort(F,Q), - sort(G,R), - sort(H,S), - sort(I,T), - sort(J,U), - sort(K,V), - ( var(A) -> - ( get_attr(A,chr_translate,C2) -> - C2=v(G1,W,X,Y,Z,A1,B1,C1,D1,E1,F1), - sort(W,H1), - 'chr merge_attributes'(M,H1,I1), - sort(X,J1), - 'chr merge_attributes'(N,J1,K1), - sort(Y,L1), - 'chr merge_attributes'(O,L1,M1), - sort(Z,N1), - 'chr merge_attributes'(P,N1,O1), - sort(A1,P1), - 'chr merge_attributes'(Q,P1,Q1), - sort(B1,R1), - 'chr merge_attributes'(R,R1,S1), - sort(C1,T1), - 'chr merge_attributes'(S,T1,U1), - sort(D1,V1), - 'chr merge_attributes'(T,V1,W1), - sort(E1,X1), - 'chr merge_attributes'(U,X1,Y1), - sort(F1,Z1), - 'chr merge_attributes'(V,Z1,A2), - B2 is L\/G1, - put_attr(A,chr_translate,v(B2,I1,K1,M1,O1,Q1,S1,U1,W1,Y1,A2)), - '$run_suspensions_generate_empty_named_history_initialisation___1'(M), - '$run_suspensions_background_info___2'(K1), - '$run_suspensions_get_bg_info___2'(M1), - '$run_suspensions_type_definition___2'(O1), - '$run_suspensions_type_alias___2'(Q1), - '$run_suspensions_unalias_type___2'(S1), - '$run_suspensions_static_type_check_var___3'(U1), - '$run_suspensions_static_atomic_builtin_type_check_var___3'(W1), - '$run_suspensions_atomic_type___1'(Y1), - '$run_suspensions_enumerated_atomic_type___2'(A2) - ; - put_attr(A,chr_translate,v(L,M,N,O,P,Q,R,S,T,U,V)), - '$run_suspensions_generate_empty_named_history_initialisation___1'(M), - '$run_suspensions_background_info___2'(N), - '$run_suspensions_get_bg_info___2'(O), - '$run_suspensions_type_definition___2'(P), - '$run_suspensions_type_alias___2'(Q), - '$run_suspensions_unalias_type___2'(R), - '$run_suspensions_static_type_check_var___3'(S), - '$run_suspensions_static_atomic_builtin_type_check_var___3'(T), - '$run_suspensions_atomic_type___1'(U), - '$run_suspensions_enumerated_atomic_type___2'(V) - ) - ; - ( compound(A) -> - term_variables(A,D2), - attach_increment(D2,v(L,M,N,O,P,Q,R,S,T,U,V)) - ; - true - ), - '$run_suspensions_generate_empty_named_history_initialisation___1'(M), - '$run_suspensions_background_info___2'(N), - '$run_suspensions_get_bg_info___2'(O), - '$run_suspensions_type_definition___2'(P), - '$run_suspensions_type_alias___2'(Q), - '$run_suspensions_unalias_type___2'(R), - '$run_suspensions_static_type_check_var___3'(S), - '$run_suspensions_static_atomic_builtin_type_check_var___3'(T), - '$run_suspensions_atomic_type___1'(U), - '$run_suspensions_enumerated_atomic_type___2'(V) - ). -'$novel_production'(A,B) :- - arg(3,A,C), - ( hprolog:get_ds(B,C,_) -> - fail - ; - true - ). -'$extend_history'(A,B) :- - arg(3,A,C), - hprolog:put_ds(B,C,x,D), - setarg(3,A,D). -'$run_suspensions_generate_empty_named_history_initialisation___1'([]). -'$run_suspensions_generate_empty_named_history_initialisation___1'([A|B]) :- - A=suspension(_,C,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(3,A,F), - generate_empty_named_history_initialisation___1__0(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_generate_empty_named_history_initialisation___1'(B). -'$run_suspensions_background_info___2'([]). -'$run_suspensions_background_info___2'([A|B]) :- - A=suspension(_,C,_,D,_,E,F), - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - background_info___2__0(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ), - '$run_suspensions_background_info___2'(B). -'$run_suspensions_get_bg_info___2'([]). -'$run_suspensions_get_bg_info___2'([A|B]) :- - A=suspension(_,C,_,D,_,E,F), - ( C==active -> - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - get_bg_info___2__0(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_get_bg_info___2'(B). -'$run_suspensions_type_definition___2'([]). -'$run_suspensions_type_definition___2'([A|B]) :- - A=suspension(_,C,_,D,_,E,F), - ( C==active -> - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - type_definition___2__0(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_type_definition___2'(B). -'$run_suspensions_type_alias___2'([]). -'$run_suspensions_type_alias___2'([A|B]) :- - A=suspension(_,C,_,D,_,E,F), - ( C==active -> - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - type_alias___2__0(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_type_alias___2'(B). -'$run_suspensions_unalias_type___2'([]). -'$run_suspensions_unalias_type___2'([A|B]) :- - A=suspension(_,C,_,D,E), - ( C==active -> - setarg(2,A,triggered), - unalias_type___2__0(D,E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_unalias_type___2'(B). -'$run_suspensions_static_type_check_var___3'([]). -'$run_suspensions_static_type_check_var___3'([A|B]) :- - A=suspension(_,C,_,D,E,F), - ( C==active -> - setarg(2,A,triggered), - static_type_check_var___3__0(D,E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_static_type_check_var___3'(B). -'$run_suspensions_static_atomic_builtin_type_check_var___3'([]). -'$run_suspensions_static_atomic_builtin_type_check_var___3'([A|B]) :- - A=suspension(_,C,_,D,E,F), - ( C==active -> - setarg(2,A,triggered), - static_atomic_builtin_type_check_var___3__0(D,E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_static_atomic_builtin_type_check_var___3'(B). -'$run_suspensions_atomic_type___1'([]). -'$run_suspensions_atomic_type___1'([A|B]) :- - A=suspension(_,C,_,D), - ( C==active -> - setarg(2,A,triggered), - atomic_type___1__0(D,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_atomic_type___1'(B). -'$run_suspensions_enumerated_atomic_type___2'([]). -'$run_suspensions_enumerated_atomic_type___2'([A|B]) :- - A=suspension(_,C,_,D,E), - ( C==active -> - setarg(2,A,triggered), - enumerated_atomic_type___2__0(D,E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_enumerated_atomic_type___2'(B). -'$enumerate_constraints'(A) :- - ( nonvar(A) -> - functor(A,B,_), - '$enumerate_constraints'(B,A) - ; - '$enumerate_constraints'(_,A) - ). -'$enumerate_constraints'(chr_source_file,A) :- - nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=chr_source_file(D). -'$enumerate_constraints'(target_module,A) :- - nb_getval('$chr_store_global_ground_chr_translate____target_module___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=target_module(D). -'$enumerate_constraints'(line_number,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____line_number___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=line_number(D,E). -'$enumerate_constraints'(indexed_argument,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=indexed_argument(D,E). -'$enumerate_constraints'(constraint_mode,A) :- - nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D,E), - A=constraint_mode(D,E). -'$enumerate_constraints'(none_suspended_on_variables,A) :- - nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_), - A=none_suspended_on_variables. -'$enumerate_constraints'(store_type,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=store_type(D,E). -'$enumerate_constraints'(actual_store_types,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=actual_store_types(D,E). -'$enumerate_constraints'(assumed_store_type,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=assumed_store_type(D,E). -'$enumerate_constraints'(validate_store_type_assumption,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',B), - value_ht(B,C), - C=suspension(_,_,D), - A=validate_store_type_assumption(D). -'$enumerate_constraints'(rule_count,A) :- - nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=rule_count(D). -'$enumerate_constraints'(passive,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',B), - value_ht(B,C), - C=suspension(_,_,_,D,E), - A=passive(D,E). -'$enumerate_constraints'(occurrence,A) :- - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D,E,F,G,H), - A=occurrence(D,E,F,G,H). -'$enumerate_constraints'(max_occurrence,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',B), - value_ht(B,C), - C=suspension(_,_,_,D,E), - A=max_occurrence(D,E). -'$enumerate_constraints'(allocation_occurrence,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',B), - value_ht(B,C), - C=suspension(_,_,_,D,E), - A=allocation_occurrence(D,E). -'$enumerate_constraints'(rule,A) :- - nb_getval('$chr_store_global_ground_chr_translate____rule___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D,E), - A=rule(D,E). -'$enumerate_constraints'(least_occurrence,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=least_occurrence(D,E). -'$enumerate_constraints'(constraint_index,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=constraint_index(D,E). -'$enumerate_constraints'(max_constraint_index,A) :- - nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=max_constraint_index(D). -'$enumerate_constraints'(identifier_size,A) :- - nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=identifier_size(D). -'$enumerate_constraints'(identifier_index,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=identifier_index(D,E,F). -'$enumerate_constraints'(type_indexed_identifier_size,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=type_indexed_identifier_size(D,E). -'$enumerate_constraints'(type_indexed_identifier_index,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',B), - value_ht(B,C), - C=suspension(_,_,D,E,F,G), - A=type_indexed_identifier_index(D,E,F,G). -'$enumerate_constraints'(no_history,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1',B), - value_ht(B,C), - C=suspension(_,_,D), - A=no_history(D). -'$enumerate_constraints'(history,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',B), - value_ht(B,C), - C=suspension(_,_,_,D,E,F), - A=history(D,E,F). -'$enumerate_constraints'(indexing_spec,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=indexing_spec(D,E). -'$enumerate_constraints'(observation_analysis,A) :- - nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=observation_analysis(D). -'$enumerate_constraints'(spawns,A) :- - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D,E,F), - A=spawns(D,E,F). -'$enumerate_constraints'(spawns_all,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=spawns_all(D,E). -'$enumerate_constraints'(spawns_all_triggers,A) :- - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D,E), - A=spawns_all_triggers(D,E). -'$enumerate_constraints'(spawns_all_triggers_implies_spawns_all,A) :- - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_), - A=spawns_all_triggers_implies_spawns_all. -'$enumerate_constraints'(empty_named_history_initialisations,A) :- - nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E), - A=empty_named_history_initialisations(D,E). -'$enumerate_constraints'(generate_empty_named_history_initialisation,A) :- - nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D), - A=generate_empty_named_history_initialisation(D). -'$enumerate_constraints'(find_empty_named_histories,A) :- - nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_), - A=find_empty_named_histories. -'$enumerate_constraints'(module_initializer,A) :- - nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=module_initializer(D). -'$enumerate_constraints'(actual_atomic_multi_hash_keys,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=actual_atomic_multi_hash_keys(D,E,F). -'$enumerate_constraints'(actual_ground_multi_hash_keys,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=actual_ground_multi_hash_keys(D,E,F). -'$enumerate_constraints'(actual_non_ground_multi_hash_key,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=actual_non_ground_multi_hash_key(D,E). -'$enumerate_constraints'(prolog_global_variable,A) :- - nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=prolog_global_variable(D). -'$enumerate_constraints'(background_info,A) :- - nb_getval('$chr_store_global_ground_chr_translate____background_info___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=background_info(D). -'$enumerate_constraints'(background_info,A) :- - nb_getval('$chr_store_global_list_chr_translate____background_info___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D,E), - A=background_info(D,E). -'$enumerate_constraints'(get_bg_info,A) :- - nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D,E), - A=get_bg_info(D,E). -'$enumerate_constraints'(get_bg_info_answer,A) :- - nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=get_bg_info_answer(D). -'$enumerate_constraints'(prev_guard_list,A) :- - nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D,E,F,G,H,I), - A=prev_guard_list(D,E,F,G,H,I). -'$enumerate_constraints'(set_all_passive,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',B), - value_ht(B,C), - C=suspension(_,_,_,D), - A=set_all_passive(D). -'$enumerate_constraints'(precompute_head_matchings,A) :- - nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_), - A=precompute_head_matchings. -'$enumerate_constraints'(make_head_matchings_explicit_memo_table,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=make_head_matchings_explicit_memo_table(D,E,F). -'$enumerate_constraints'(multiple_occ_constraints_checked,A) :- - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=multiple_occ_constraints_checked(D). -'$enumerate_constraints'(type_definition,A) :- - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D,E), - A=type_definition(D,E). -'$enumerate_constraints'(type_alias,A) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D,E), - A=type_alias(D,E). -'$enumerate_constraints'(constraint_type,A) :- - nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E), - A=constraint_type(D,E). -'$enumerate_constraints'(unalias_type,A) :- - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E), - A=unalias_type(D,E). -'$enumerate_constraints'(types_modes_condition,A) :- - nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E,F), - A=types_modes_condition(D,E,F). -'$enumerate_constraints'(static_type_check,A) :- - nb_getval('$chr_store_global_ground_chr_translate____static_type_check___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_), - A=static_type_check. -'$enumerate_constraints'(static_type_check_var,A) :- - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E,F), - A=static_type_check_var(D,E,F). -'$enumerate_constraints'(static_atomic_builtin_type_check_var,A) :- - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E,F), - A=static_atomic_builtin_type_check_var(D,E,F). -'$enumerate_constraints'(dynamic_type_check,A) :- - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_), - A=dynamic_type_check. -'$enumerate_constraints'(dynamic_type_check_clauses,A) :- - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=dynamic_type_check_clauses(D). -'$enumerate_constraints'(atomic_type,A) :- - nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=atomic_type(D). -'$enumerate_constraints'(enumerated_atomic_type,A) :- - nb_getval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E), - A=enumerated_atomic_type(D,E). -'$enumerate_constraints'(stored,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-1',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=stored(D,E,F). -'$enumerate_constraints'(stored_complete,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',B), - value_ht(B,C), - C=suspension(_,_,_,D,E,F), - A=stored_complete(D,E,F). -'$enumerate_constraints'(check_all_passive,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=check_all_passive(D,E). -'$enumerate_constraints'(constraints_code1,A) :- - nb_getval('$chr_store_global_ground_chr_translate____constraints_code1___3',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E,F), - A=constraints_code1(D,E,F). -'$enumerate_constraints'(memo_has_active_occurrence,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',B), - value_ht(B,C), - C=suspension(_,_,D), - A=memo_has_active_occurrence(D). -'$enumerate_constraints'(use_auxiliary_predicate,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',B), - value_ht(B,C), - C=suspension(_,_,D), - A=use_auxiliary_predicate(D). -'$enumerate_constraints'(use_auxiliary_predicate,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=use_auxiliary_predicate(D,E). -'$enumerate_constraints'(use_auxiliary_module,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',B), - value_ht(B,C), - C=suspension(_,_,D), - A=use_auxiliary_module(D). -'$enumerate_constraints'(functional_dependency,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',B), - value_ht(B,C), - C=suspension(_,_,D,E,F,G), - A=functional_dependency(D,E,F,G). -'$enumerate_constraints'(initial_call_pattern,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',B), - value_ht(B,C), - C=suspension(_,_,_,D), - A=initial_call_pattern(D). -'$enumerate_constraints'(call_pattern,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',B), - value_ht(B,C), - C=suspension(_,_,D), - A=call_pattern(D). -'$enumerate_constraints'(final_answer_pattern,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',B), - value_ht(B,C), - C=suspension(_,_,_,D,E), - A=final_answer_pattern(D,E). -'$enumerate_constraints'(abstract_constraints,A) :- - nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=abstract_constraints(D). -'$enumerate_constraints'(depends_on,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',B), - value_ht(B,C), - C=suspension(_,_,_,D,E), - A=depends_on(D,E). -'$enumerate_constraints'(depends_on_ap,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',B), - value_ht(B,C), - C=suspension(_,_,_,D,E,F,G), - A=depends_on_ap(D,E,F,G). -'$enumerate_constraints'(depends_on_goal,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',B), - value_ht(B,C), - C=suspension(_,_,_,D,E), - A=depends_on_goal(D,E). -'$enumerate_constraints'(ai_observed_internal,A) :- - nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E), - A=ai_observed_internal(D,E). -'$enumerate_constraints'(ai_not_observed_internal,A) :- - nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E), - A=ai_not_observed_internal(D,E). -'$enumerate_constraints'(ai_not_observed,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=ai_not_observed(D,E). -'$enumerate_constraints'(depends_on_as,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',B), - value_ht(B,C), - C=suspension(_,_,_,D,E,F), - A=depends_on_as(D,E,F). -'$enumerate_constraints'(ai_observation_gather_results,A) :- - nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_), - A=ai_observation_gather_results. -'$enumerate_constraints'(ai_observation_memoed_simplification_rest_heads,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=ai_observation_memoed_simplification_rest_heads(D,E,F). -'$enumerate_constraints'(ai_observation_memoed_propagation_rest_heads,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=ai_observation_memoed_propagation_rest_heads(D,E,F). -'$enumerate_constraints'(ai_observation_memoed_abstract_goal,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=ai_observation_memoed_abstract_goal(D,E). -'$enumerate_constraints'(ai_observation_memo_abstract_goal,A) :- - nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E), - A=ai_observation_memo_abstract_goal(D,E). -'$enumerate_constraints'(partial_wake_analysis,A) :- - nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_), - A=partial_wake_analysis. -'$enumerate_constraints'(no_partial_wake,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',B), - value_ht(B,C), - C=suspension(_,_,D), - A=no_partial_wake(D). -'$enumerate_constraints'(phase_end,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',B), - value_ht(B,C), - C=suspension(_,_,D), - A=phase_end(D). -'$enumerate_constraints'(delay_phase_end,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=delay_phase_end(D,E). -'$enumerate_constraints'(does_use_history,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=does_use_history(D,E). -'$enumerate_constraints'(does_use_field,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=does_use_field(D,E). -'$enumerate_constraints'(uses_state,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=uses_state(D,E). -'$enumerate_constraints'(if_used_state,A) :- - nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E,F,G,H), - A=if_used_state(D,E,F,G,H). -'$enumerate_constraints'(used_states_known,A) :- - nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_), - A=used_states_known. -'$enumerate_constraints'(stored_assertion,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',B), - value_ht(B,C), - C=suspension(_,_,D), - A=stored_assertion(D). -'$enumerate_constraints'(never_stored_default,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',B), - value_ht(B,C), - C=suspension(_,_,D,E), - A=never_stored_default(D,E). -'$enumerate_constraints'(never_stored_rules,A) :- - nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E), - A=never_stored_rules(D,E). -'$enumerate_constraints'(continuation_occurrence,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=continuation_occurrence(D,E,F). -'$enumerate_constraints'(skip_to_next_id,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',B), - value_ht(B,C), - C=suspension(_,_,_,D,E), - A=skip_to_next_id(D,E). -'$enumerate_constraints'(set_occurrence_code_id,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=set_occurrence_code_id(D,E,F). -'$enumerate_constraints'(occurrence_code_id,A) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',B), - value_ht(B,C), - C=suspension(_,_,D,E,F), - A=occurrence_code_id(D,E,F). -'$enumerate_constraints'(chr_constants,A) :- - nb_getval('$chr_store_global_ground_chr_translate____chr_constants___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D,E), - A=chr_constants(D,E). -'$enumerate_constraints'(print_chr_constants,A) :- - nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_), - A=print_chr_constants. -'$via1_multi_hash_line_number___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____line_number___2-1',C), - lookup_ht1(C,A,A,B). -'$via1_multi_hash_indexed_argument___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_indexed_argument___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_constraint_mode___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_store_type___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_actual_store_types___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_assumed_store_type___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_validate_store_type_assumption___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_passive___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_passive___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_occurrence___5-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_occurrence___5-3'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',C), - lookup_ht1(C,A,A,B). -'$via1_multi_hash_occurrence___5-34'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',C), - lookup_ht(C,A,B). -'$via1_multi_hash_occurrence___5-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_max_occurrence___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_allocation_occurrence___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_allocation_occurrence___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_rule___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',C), - lookup_ht1(C,A,A,B). -'$via1_multi_hash_least_occurrence___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_least_occurrence___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_constraint_index___2-2'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',C), - D is abs(A), - lookup_ht1(C,D,A,B). -'$via1_multi_hash_constraint_index___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_identifier_index___3-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_type_indexed_identifier_size___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_type_indexed_identifier_index___4-123'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',C), - lookup_ht(C,A,B). -'$via1_multi_hash_type_indexed_identifier_index___4-23'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',C), - lookup_ht(C,A,B). -'$via1_multi_hash_no_history___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1',C), - D is abs(A), - lookup_ht1(C,D,A,B). -'$chr_store_constants_chr_translate____history___3___[3]'([],'$chr_store_constants_chr_translate____history___3___[3]___[]'). -'$via1_multi_hash_history___3-2'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',C), - lookup_ht(C,A,B). -'$via1_multi_hash_history___3-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_indexing_spec___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_spawns___3-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_spawns___3-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_spawns___3-3'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',C), - lookup_ht(C,A,B). -'$via1_multi_hash_spawns___3-123'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',C), - lookup_ht(C,A,B). -'$via1_multi_hash_spawns_all___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_spawns_all___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_spawns_all_triggers___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_spawns_all_triggers___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_actual_atomic_multi_hash_keys___3-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_actual_atomic_multi_hash_keys___3-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_actual_ground_multi_hash_keys___3-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_actual_ground_multi_hash_keys___3-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_actual_non_ground_multi_hash_key___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_prolog_global_variable___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_prev_guard_list___6-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_set_all_passive___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_make_head_matchings_explicit_memo_table___3-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_constraint_type___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_stored___3-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_stored___3-123'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',C), - lookup_ht(C,A,B). -'$via1_multi_hash_stored_complete___3-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_check_all_passive___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_check_all_passive___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_memo_has_active_occurrence___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_use_auxiliary_predicate___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_use_auxiliary_predicate___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_use_auxiliary_predicate___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_use_auxiliary_module___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_functional_dependency___4-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_functional_dependency___4-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_initial_call_pattern___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_call_pattern___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_final_answer_pattern___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_depends_on___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_depends_on___2-2'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',C), - lookup_ht(C,A,B). -'$via1_multi_hash_depends_on_ap___4-2'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',C), - lookup_ht(C,A,B). -'$via1_multi_hash_depends_on_ap___4-3'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',C), - lookup_ht(C,A,B). -'$via1_multi_hash_depends_on_goal___2-2'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',C), - lookup_ht(C,A,B). -'$via1_multi_hash_ai_observed_internal___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_ai_not_observed_internal___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_ai_not_observed___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_depends_on_as___3-3'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',C), - lookup_ht(C,A,B). -'$via1_multi_hash_depends_on_as___3-2'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',C), - lookup_ht(C,A,B). -'$via1_multi_hash_ai_observation_memoed_simplification_rest_heads___3-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_ai_observation_memoed_propagation_rest_heads___3-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_ai_observation_memoed_abstract_goal___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_no_partial_wake___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_phase_end___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_delay_phase_end___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_does_use_history___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_does_use_history___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_does_use_field___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_uses_state___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_if_used_state___5-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_stored_assertion___1-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_never_stored_default___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',C), - lookup_ht(C,A,B). -'$via1_multi_hash_continuation_occurrence___3-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_skip_to_next_id___2-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_set_occurrence_code_id___3-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_occurrence_code_id___3-12'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',C), - lookup_ht(C,A,B). -'$via1_multi_hash_chr_constants___2-1'(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____chr_constants___2-1',C), - lookup_ht(C,A,B). -'$chr_initialization' :- - nb_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',[]), - new_ht(M3), - nb_setval('$chr_store_multi_hash_chr_translate____chr_constants___2-1',M3), - nb_setval('$chr_store_global_ground_chr_translate____chr_constants___2',[]), - new_ht(L3), - nb_setval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',L3), - new_ht(K3), - nb_setval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',K3), - new_ht(J3), - nb_setval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',J3), - new_ht(I3), - nb_setval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',I3), - nb_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',[]), - new_ht(H3), - nb_setval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',H3), - new_ht(G3), - nb_setval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',G3), - nb_setval('$chr_store_global_ground_chr_translate____used_states_known___0',[]), - new_ht(F3), - nb_setval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',F3), - nb_setval('$chr_store_global_ground_chr_translate____if_used_state___5',[]), - new_ht(E3), - nb_setval('$chr_store_multi_hash_chr_translate____uses_state___2-12',E3), - new_ht(D3), - nb_setval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',D3), - new_ht(C3), - nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',C3), - new_ht(B3), - nb_setval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',B3), - new_ht(A3), - nb_setval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',A3), - new_ht(Z2), - nb_setval('$chr_store_multi_hash_chr_translate____phase_end___1-1',Z2), - new_ht(Y2), - nb_setval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',Y2), - nb_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',[]), - nb_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',[]), - new_ht(X2), - nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',X2), - new_ht(W2), - nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',W2), - new_ht(V2), - nb_setval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',V2), - nb_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',[]), - new_ht(U2), - nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',U2), - new_ht(T2), - nb_setval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',T2), - new_ht(S2), - nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',S2), - new_ht(R2), - nb_setval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',R2), - nb_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',[]), - new_ht(Q2), - nb_setval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',Q2), - nb_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',[]), - new_ht(P2), - nb_setval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',P2), - new_ht(O2), - nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',O2), - new_ht(N2), - nb_setval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',N2), - new_ht(M2), - nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-2',M2), - new_ht(L2), - nb_setval('$chr_store_multi_hash_chr_translate____depends_on___2-1',L2), - nb_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',[]), - new_ht(K2), - nb_setval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',K2), - new_ht(J2), - nb_setval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',J2), - new_ht(I2), - nb_setval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',I2), - new_ht(H2), - nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',H2), - new_ht(G2), - nb_setval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',G2), - new_ht(F2), - nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',F2), - new_ht(E2), - nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',E2), - new_ht(D2), - nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',D2), - new_ht(C2), - nb_setval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',C2), - new_ht(B2), - nb_setval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',B2), - nb_setval('$chr_store_global_ground_chr_translate____constraints_code1___3',[]), - new_ht(A2), - nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',A2), - new_ht(Z1), - nb_setval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',Z1), - new_ht(Y1), - nb_setval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',Y1), - new_ht(X1), - nb_setval('$chr_store_multi_hash_chr_translate____stored___3-123',X1), - new_ht(W1), - nb_setval('$chr_store_multi_hash_chr_translate____stored___3-1',W1), - nb_setval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',[]), - nb_setval('$chr_store_global_list_chr_translate____atomic_type___1',[]), - nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',[]), - nb_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',[]), - nb_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',[]), - nb_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',[]), - nb_setval('$chr_store_global_ground_chr_translate____static_type_check___0',[]), - nb_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',[]), - nb_setval('$chr_store_global_list_chr_translate____unalias_type___2',[]), - new_ht(V1), - nb_setval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',V1), - nb_setval('$chr_store_global_ground_chr_translate____constraint_type___2',[]), - nb_setval('$chr_store_global_list_chr_translate____type_alias___2',[]), - nb_setval('$chr_store_global_list_chr_translate____type_definition___2',[]), - nb_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',[]), - new_ht(U1), - nb_setval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',U1), - nb_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',[]), - new_ht(T1), - nb_setval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',T1), - new_ht(S1), - nb_setval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',S1), - nb_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',[]), - nb_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',[]), - nb_setval('$chr_store_global_list_chr_translate____get_bg_info___2',[]), - nb_setval('$chr_store_global_list_chr_translate____background_info___2',[]), - nb_setval('$chr_store_global_ground_chr_translate____background_info___1',[]), - new_ht(R1), - nb_setval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',R1), - nb_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',[]), - new_ht(Q1), - nb_setval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',Q1), - new_ht(P1), - nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',P1), - new_ht(O1), - nb_setval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',O1), - new_ht(N1), - nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',N1), - new_ht(M1), - nb_setval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',M1), - nb_setval('$chr_store_global_ground_chr_translate____module_initializer___1',[]), - nb_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',[]), - nb_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',[]), - nb_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',[]), - nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',[]), - new_ht(L1), - nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',L1), - new_ht(K1), - nb_setval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',K1), - nb_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',[]), - new_ht(J1), - nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',J1), - new_ht(I1), - nb_setval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',I1), - new_ht(H1), - nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-123',H1), - new_ht(G1), - nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-3',G1), - new_ht(F1), - nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-1',F1), - new_ht(E1), - nb_setval('$chr_store_multi_hash_chr_translate____spawns___3-12',E1), - nb_setval('$chr_store_global_ground_chr_translate____spawns___3',[]), - nb_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',[]), - new_ht(D1), - nb_setval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',D1), - new_ht(C1), - nb_setval('$chr_store_multi_hash_chr_translate____history___3-1',C1), - new_ht(B1), - nb_setval('$chr_store_multi_hash_chr_translate____history___3-2',B1), - nb_setval('$chr_store_constants_chr_translate____history___3___[3]___[]',[]), - new_ht(A1), - nb_setval('$chr_store_multi_hash_chr_translate____no_history___1-1',A1), - new_ht(Z), - nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',Z), - new_ht(Y), - nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',Y), - new_ht(X), - nb_setval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',X), - new_ht(W), - nb_setval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',W), - nb_setval('$chr_store_global_ground_chr_translate____identifier_size___1',[]), - nb_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',[]), - new_ht(V), - nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',V), - new_ht(U), - nb_setval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',U), - new_ht(T), - nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',T), - new_ht(S), - nb_setval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',S), - new_ht(R), - nb_setval('$chr_store_multi_hash_chr_translate____rule___2-1',R), - nb_setval('$chr_store_global_ground_chr_translate____rule___2',[]), - new_ht(Q), - nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',Q), - new_ht(P), - nb_setval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',P), - new_ht(O), - nb_setval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',O), - new_ht(N), - nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-1',N), - new_ht(M), - nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-34',M), - new_ht(L), - nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-3',L), - new_ht(K), - nb_setval('$chr_store_multi_hash_chr_translate____occurrence___5-12',K), - nb_setval('$chr_store_global_ground_chr_translate____occurrence___5',[]), - new_ht(J), - nb_setval('$chr_store_multi_hash_chr_translate____passive___2-12',J), - new_ht(I), - nb_setval('$chr_store_multi_hash_chr_translate____passive___2-1',I), - nb_setval('$chr_store_global_ground_chr_translate____rule_count___1',[]), - new_ht(H), - nb_setval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',H), - new_ht(G), - nb_setval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',G), - new_ht(F), - nb_setval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',F), - new_ht(E), - nb_setval('$chr_store_multi_hash_chr_translate____store_type___2-1',E), - nb_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',[]), - new_ht(D), - nb_setval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',D), - nb_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',[]), - new_ht(C), - nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',C), - new_ht(B), - nb_setval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',B), - new_ht(A), - nb_setval('$chr_store_multi_hash_chr_translate____line_number___2-1',A), - nb_setval('$chr_store_global_ground_chr_translate____target_module___1',[]), - nb_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',[]). -:-initialization '$chr_initialization'. -:-dynamic user:exception/3. -:-multifile user:exception/3. -user:exception(undefined_global_variable,A,retry) :- - '$chr_prolog_global_variable'(A), - '$chr_initialization'. -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____print_chr_constants___0'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____chr_constants___2-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_constants___2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____never_stored_rules___2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____never_stored_default___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_assertion___1-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____used_states_known___0'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____if_used_state___5-12'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____if_used_state___5'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____uses_state___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_field___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____does_use_history___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____phase_end___1-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____partial_wake_analysis___0'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_as___3-3'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____ai_observed_internal___2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____depends_on___2-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____abstract_constraints___1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____call_pattern___1-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____functional_dependency___4-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraints_code1___3'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____check_all_passive___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored_complete___3-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-123'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____stored___3-1'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____enumerated_atomic_type___2'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____atomic_type___1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____dynamic_type_check___0'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____static_type_check_var___3'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____static_type_check___0'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____types_modes_condition___3'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____unalias_type___2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_type___2-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_type___2'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_alias___2'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____type_definition___2'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____precompute_head_matchings___0'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____set_all_passive___1-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prev_guard_list___6'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____get_bg_info_answer___1'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____get_bg_info___2'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____background_info___2'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____background_info___1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____prolog_global_variable___1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____module_initializer___1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____find_empty_named_histories___0'). -'$chr_prolog_global_variable'('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns_all_triggers___2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns_all___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-123'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-3'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____spawns___3-12'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____spawns___3'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____observation_analysis___1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexing_spec___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____history___3-2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____no_history___1-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____identifier_index___3-12'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____identifier_size___1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____max_constraint_index___1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_index___2-2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____least_occurrence___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____rule___2-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule___2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____max_occurrence___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-34'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-3'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____occurrence___5-12'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____occurrence___5'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____passive___2-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____rule_count___1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____actual_store_types___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____store_type___2-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____constraint_mode___2-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____constraint_mode___2'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-12'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____indexed_argument___2-1'). -'$chr_prolog_global_variable'('$chr_store_multi_hash_chr_translate____line_number___2-1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____target_module___1'). -'$chr_prolog_global_variable'('$chr_store_global_ground_chr_translate____chr_source_file___1'). -chr_source_file(A) :- - nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',C), - ( - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - ! - ; - !, - chr_source_file___1__0__0__2(C,A) - ). -chr_source_file___1__0__0__2([],A) :- - chr_source_file___1__1(A). -chr_source_file___1__0__0__2([B|C],A) :- - ( B=suspension(_,active,_,_) -> - setarg(2,B,removed), - arg(3,B,D), - ( var(D) -> - nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',E), - E=[_|F], - b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - chr_source_file___1__0__0__2(C,A) - ; - chr_source_file___1__0__0__2(C,A) - ). -chr_source_file(A) :- - chr_source_file___1__1(A). -chr_source_file___1__1(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____chr_source_file___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -get_chr_source_file(A) :- - nb_getval('$chr_store_global_ground_chr_translate____chr_source_file___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - A=C. -get_chr_source_file(user). -target_module(A) :- - nb_getval('$chr_store_global_ground_chr_translate____target_module___1',C), - ( - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - ! - ; - !, - target_module___1__0__0__2(C,A) - ). -target_module___1__0__0__2([],A) :- - target_module___1__1(A). -target_module___1__0__0__2([B|C],A) :- - ( B=suspension(_,active,_,_) -> - setarg(2,B,removed), - arg(3,B,D), - ( var(D) -> - nb_getval('$chr_store_global_ground_chr_translate____target_module___1',E), - E=[_|F], - b_setval('$chr_store_global_ground_chr_translate____target_module___1',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - target_module___1__0__0__2(C,A) - ; - target_module___1__0__0__2(C,A) - ). -target_module(A) :- - target_module___1__1(A). -target_module___1__1(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____target_module___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____target_module___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -get_target_module(A) :- - nb_getval('$chr_store_global_ground_chr_translate____target_module___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - A=C. -get_target_module(user). -line_number(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____line_number___2-1',E), - lookup_ht1(E,A,A,D), - ( - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - ! - ; - !, - line_number___2__0__0__2(D,A,B) - ). -line_number___2__0__0__2([],A,B) :- - line_number___2__1(A,B). -line_number___2__0__0__2([D|E],A,B) :- - ( D=suspension(_,active,C,_), - C==A -> - setarg(2,D,removed), - nb_getval('$chr_store_multi_hash_chr_translate____line_number___2-1',F), - delete_ht(F,A,D), - line_number___2__0__0__2(E,A,B) - ; - line_number___2__0__0__2(E,A,B) - ). -line_number(A,B) :- - line_number___2__1(A,B). -line_number___2__1(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____line_number___2-1',E), - insert_ht(E,A,C). -get_line_number(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____line_number___2-1',F), - lookup_ht1(F,A,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - !, - B=D. -get_line_number(_,0). -indexed_argument(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -indexed_argument(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',E), - insert_ht(E,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',F), - insert_ht(F,k(A,B),C). -is_indexed_argument(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -is_indexed_argument(_,_) :- - fail. -constraint_mode(A,B) :- - constraint_mode___2__0(A,B,_). -constraint_mode___2__0(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',F), - lookup_ht(F,A,E), - ( - 'chr sbag_member'(D,E), - D=suspension(_,active,_,_,_,_), - ! - ; - !, - constraint_mode___2__0__0__2(E,A,B,C) - ). -constraint_mode___2__0__0__2([],B,C,A) :- - constraint_mode___2__1(B,C,A). -constraint_mode___2__0__0__2([E|F],A,B,C) :- - ( E=suspension(_,active,_,_,D,_), - D==A -> - setarg(2,E,removed), - arg(4,E,G), - ( var(G) -> - nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',H), - H=[_|I], - b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',I), - ( I=[J|_] -> - setarg(4,J,_) - ; - true - ) - ; - G=[_,_|I], - setarg(2,G,I), - ( I=[J|_] -> - setarg(4,J,G) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',K), - delete_ht(K,A,E), - constraint_mode___2__0__0__2(F,A,B,C) - ; - constraint_mode___2__0__0__2(F,A,B,C) - ). -constraint_mode___2__0(A,B,C) :- - constraint_mode___2__1(A,B,C). -constraint_mode___2__1(A,B,C) :- - A=D/E, - nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',F), - !, - C=suspension(G,not_stored_yet,t,_,A,B), - 'chr gen_id'(G), - constraint_mode___2__1__0__7(F,A,B,C,D,E). -constraint_mode___2__1__0__7([],B,C,A,_,_) :- - constraint_mode___2__2(B,C,A). -constraint_mode___2__1__0__7([I|N],A,B,C,D,E) :- - ( I=suspension(_,active,_,F,G,H), - F=[J|K], - G=[L|M], - functor(J,D,E) -> - setarg(2,I,removed), - arg(3,I,Z), - ( var(Z) -> - nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',A1), - A1=[_|B1], - b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',B1), - ( B1=[C1|_] -> - setarg(3,C1,_) - ; - true - ) - ; - Z=[_,_|B1], - setarg(2,Z,B1), - ( B1=[C1|_] -> - setarg(3,C1,Z) - ; - true - ) - ), - arg(2,C,U), - setarg(2,C,active), - ( U==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',V), - W=[C|V], - b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',W), - ( V=[X|_] -> - setarg(4,X,W) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',Y), - insert_ht(Y,A,C) - ; - true - ), - J=..[_|O], - H=(P,Q,R), - modes_condition(B,O,P), - get_constraint_type_det(D/E,S), - L=..[_|T], - types_condition(S,O,T,B,Q), - types_modes_condition(K,M,R), - ( C=suspension(_,active,_,_,_,_) -> - setarg(2,C,inactive), - constraint_mode___2__1__0__7(N,A,B,C,D,E) - ; - true - ) - ; - constraint_mode___2__1__0__7(N,A,B,C,D,E) - ). -constraint_mode___2__1(A,B,C) :- - C=suspension(D,not_stored_yet,t,_,A,B), - 'chr gen_id'(D), - constraint_mode___2__2(A,B,C). -constraint_mode___2__2(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',E), - lookup_ht(E,A,D), - !, - constraint_mode___2__2__0__8(D,A,B,C). -constraint_mode___2__2__0__8([],B,C,A) :- - constraint_mode___2__3(B,C,A). -constraint_mode___2__2__0__8([H|J],B,C,A) :- - ( H=suspension(_,active,_,_,D,_,E,F,G), - D==B, - nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',I) -> - constraint_mode___2__2__1__8(I,E,F,G,H,J,B,C,A) - ; - constraint_mode___2__2__0__8(J,B,C,A) - ). -constraint_mode___2__2__1__8([],_,_,_,_,A,C,D,B) :- - constraint_mode___2__2__0__8(A,C,D,B). -constraint_mode___2__2__1__8([I|K],F,G,H,A,B,D,E,C) :- - ( I=suspension(_,active,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',L), - lookup_ht1(L,F,F,J) -> - constraint_mode___2__2__2__8(J,I,K,F,G,H,A,B,D,E,C) - ; - constraint_mode___2__2__1__8(K,F,G,H,A,B,D,E,C) - ). -constraint_mode___2__2__2__8([],_,A,G,H,I,B,C,E,F,D) :- - constraint_mode___2__2__1__8(A,G,H,I,B,C,E,F,D). -constraint_mode___2__2__2__8([M|N],A,B,H,I,J,C,D,F,G,E) :- - ( M=suspension(_,active,_,_,K,L), - K==H, - U=t(325,A,C,M,E), - '$novel_production'(A,U), - '$novel_production'(C,U), - '$novel_production'(M,U), - '$novel_production'(E,U) -> - '$extend_history'(E,U), - arg(2,E,V), - setarg(2,E,active), - ( V==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',W), - X=[E|W], - b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',X), - ( W=[Y|_] -> - setarg(4,Y,X) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',Z), - insert_ht(Z,F,E) - ; - true - ), - L=pragma(rule(O,P,Q,_),_,_,_,_), - ( is_passive(H,I) -> - true - ; - ( J==simplification -> - select(R,O,_), - R=..[_|S], - term_variables(Q,T), - partial_wake_args(S,G,T,F) - ) - ; - select(R,P,_), - R=..[_|S], - term_variables(Q,T), - partial_wake_args(S,G,T,F) - ), - ( E=suspension(_,active,_,_,_,_) -> - setarg(2,E,inactive), - constraint_mode___2__2__2__8(N,A,B,H,I,J,C,D,F,G,E) - ; - true - ) - ; - constraint_mode___2__2__2__8(N,A,B,H,I,J,C,D,F,G,E) - ). -constraint_mode___2__2(A,B,C) :- - constraint_mode___2__3(A,B,C). -constraint_mode___2__3(A,_,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____constraint_mode___2',E), - ( D=[F|_] -> - setarg(4,F,E) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',G), - insert_ht(G,A,B) - ; - true - ). -get_constraint_mode(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - !, - B=D. -get_constraint_mode(_/B,A) :- - replicate(B,?,A). -may_trigger(A) :- - \+has_active_occurrence(A), - !, - fail. -may_trigger(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',J), - lookup_ht(J,A,D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,_,C), - nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',I), - lookup_ht(I,A,G), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,F), - nth1(F,C,H), - H\== +, - !, - is_stored(A). -may_trigger(_) :- - chr_pp_flag(debugable,on). -only_ground_indexed_arguments(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',J), - lookup_ht(J,A,D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,_,C), - nb_getval('$chr_store_multi_hash_chr_translate____indexed_argument___2-1',I), - lookup_ht(I,A,G), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,F), - nth1(F,C,H), - H\== +, - !, - fail. -only_ground_indexed_arguments(_). -none_suspended_on_variables :- - nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -none_suspended_on_variables :- - A=suspension(B,active,_), - 'chr gen_id'(B), - nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',C), - D=[A|C], - b_setval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',D), - ( C=[E|_] -> - setarg(3,E,D) - ; - true - ). -are_none_suspended_on_variables :- - nb_getval('$chr_store_global_ground_chr_translate____none_suspended_on_variables___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -are_none_suspended_on_variables :- - fail. -store_type(A,B) :- - store_type___2__0(A,B,_). -store_type___2__0(A,B,C) :- - chr_pp_flag(verbose,on), - !, - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',E), - insert_ht(E,A,C), - format('The indexes for ~w are: -',[A]), - format_storetype(B), - ( C=suspension(_,active,_,_) -> - setarg(2,C,inactive), - store_type___2__1(A,B,C) - ; - true - ). -store_type___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,A,B), - 'chr gen_id'(D), - store_type___2__1(A,B,C). -store_type___2__1(A,_,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',M), - lookup_ht(M,A,D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',L), - lookup_ht(L,A,G), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,F), - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',K), - delete_ht(K,A,C), - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',J), - delete_ht(J,A,E), - ( var(B) -> - true - ; - arg(2,B,I), - setarg(2,B,removed), - ( I==not_stored_yet -> - true - ; - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',H), - delete_ht(H,A,B) - ) - ), - store_type(A,multi_store(F)). -store_type___2__1(A,_,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',D), - insert_ht(D,A,B) - ; - true - ). -get_store_type(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - !, - B=D. -get_store_type(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - !, - B=D. -get_store_type(_,default). -update_store_type(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',G), - lookup_ht(G,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - ( - memberchk(B,D), - ! - ; - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',F), - delete_ht(F,A,C), - actual_store_types(A,[B|D]) - ). -update_store_type(A,B) :- - actual_store_types(A,[B]). -actual_store_types(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',R), - lookup_ht(R,A,F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,D,E), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',Q), - lookup_ht(Q,A,H), - 'chr sbag_member'(G,H), - G=suspension(_,active,_), - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',O), - delete_ht(O,k(A,D),C), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',P), - delete_ht(P,A,C), - delete(B,multi_hash([D]),I), - D=[J], - ( get_constraint_arg_type(A,J,K), - enumerated_atomic_type(K,L) -> - M=L, - N=complete - ; - M=E, - N=incomplete - ), - actual_store_types(A,[atomic_constants(D,M,N)|I]). -actual_store_types(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',R), - lookup_ht(R,A,F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,D,E), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',Q), - lookup_ht(Q,A,H), - 'chr sbag_member'(G,H), - G=suspension(_,active,_), - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',O), - delete_ht(O,k(A,D),C), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',P), - delete_ht(P,A,C), - ( D=[I], - get_constraint_arg_type(A,I,J), - ( is_chr_constants_type(J,K,_) -> - get_chr_constants(K,L) - ; - ( J=chr_enum(L) -> - true - ) - ) -> - M=complete - ; - L=E, - M=incomplete - ), - delete(B,multi_hash([D]),N), - actual_store_types(A,[ground_constants(D,L,M)|N]). -actual_store_types(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',V), - lookup_ht(V,A,D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_), - ( - ( - memberchk(multi_hash([[E]]),B), - ( - get_constraint_type(A,F), - nth1(E,F,G), - enumerated_atomic_type(G,H), - !, - delete(B,multi_hash([[E]]),I), - actual_store_types(A,[atomic_constants([E],H,complete)|I]) - ; - get_constraint_arg_type(A,E,J), - ( J=chr_enum(K) -> - true - ; - ( is_chr_constants_type(J,L,_) -> - get_chr_constants(L,K) - ) - ), - !, - delete(B,multi_hash([[E]]),M), - actual_store_types(A,[ground_constants([E],K,complete)|M]) - ) - ; - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',Y), - lookup_ht(Y,A,O), - 'chr sbag_member'(N,O), - N=suspension(_,active,_,_), - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',X), - delete_ht(X,A,C), - setarg(2,N,removed), - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',W), - delete_ht(W,A,N), - ( maplist(partial_store,B) -> - P=[global_ground|B] - ; - P=B - ), - store_type(A,multi_store(P)) - ) - ; - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',U), - lookup_ht(U,A,R), - 'chr sbag_member'(Q,R), - Q=suspension(_,active,_,_), - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',T), - delete_ht(T,A,C), - setarg(2,Q,removed), - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',S), - delete_ht(S,A,Q), - store_type(A,multi_store(B)) - ). -actual_store_types(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',E), - insert_ht(E,A,C). -assumed_store_type(A,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',I), - lookup_ht(I,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - ( - ( - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',M), - lookup_ht(M,A,F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,E), - !, - setarg(2,B,removed), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',L), - delete_ht(L,A,B), - setarg(2,D,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',K), - delete_ht(K,A,D), - ( maplist(partial_store,E) -> - G=[global_ground|E] - ; - G=E - ), - store_type(A,multi_store(G)) - ; - chr_pp_flag(debugable,on), - !, - setarg(2,B,removed), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',J), - delete_ht(J,A,B), - store_type(A,default) - ) - ; - !, - setarg(2,B,removed), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',H), - delete_ht(H,A,B), - store_type(A,global_ground) - ). -assumed_store_type(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',E), - insert_ht(E,A,C). -validate_store_type_assumption(A) :- - validate_store_type_assumption___1__0(A,_). -validate_store_type_assumption___1__0(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',E), - lookup_ht(E,A,C), - !, - B=suspension(D,not_stored_yet,A), - 'chr gen_id'(D), - validate_store_type_assumption___1__0__0__1(C,A,B). -validate_store_type_assumption___1__0__0__1([],B,A) :- - validate_store_type_assumption___1__1(B,A). -validate_store_type_assumption___1__0__0__1([E|F],A,B) :- - ( E=suspension(_,active,C,D), - C==A, - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',V), - lookup_ht(V,A,J), - 'chr sbag_member'(G,J), - G=suspension(_,active,_,H,I) -> - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',U), - delete_ht(U,A,E), - setarg(2,G,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',S), - delete_ht(S,k(A,H),G), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',T), - delete_ht(T,A,G), - arg(2,B,Q), - setarg(2,B,active), - ( Q==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',R), - insert_ht(R,A,B) - ; - true - ), - delete(D,multi_hash([H]),K), - H=[L], - ( get_constraint_arg_type(A,L,M), - enumerated_atomic_type(M,N) -> - O=N, - P=complete - ; - O=I, - P=incomplete - ), - actual_store_types(A,[atomic_constants(H,O,P)|K]), - ( B=suspension(_,active,_) -> - setarg(2,B,inactive), - validate_store_type_assumption___1__0__0__1(F,A,B) - ; - true - ) - ; - validate_store_type_assumption___1__0__0__1(F,A,B) - ). -validate_store_type_assumption___1__0(A,B) :- - B=suspension(C,not_stored_yet,A), - 'chr gen_id'(C), - validate_store_type_assumption___1__1(A,B). -validate_store_type_assumption___1__1(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',D), - lookup_ht(D,A,C), - !, - validate_store_type_assumption___1__1__0__2(C,A,B). -validate_store_type_assumption___1__1__0__2([],B,A) :- - validate_store_type_assumption___1__2(B,A). -validate_store_type_assumption___1__1__0__2([E|F],A,B) :- - ( E=suspension(_,active,C,D), - C==A, - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',V), - lookup_ht(V,A,J), - 'chr sbag_member'(G,J), - G=suspension(_,active,_,H,I) -> - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',U), - delete_ht(U,A,E), - setarg(2,G,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',S), - delete_ht(S,k(A,H),G), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',T), - delete_ht(T,A,G), - arg(2,B,Q), - setarg(2,B,active), - ( Q==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',R), - insert_ht(R,A,B) - ; - true - ), - ( H=[K], - get_constraint_arg_type(A,K,L), - ( is_chr_constants_type(L,M,_) -> - get_chr_constants(M,N) - ; - ( L=chr_enum(N) -> - true - ) - ) -> - O=complete - ; - N=I, - O=incomplete - ), - delete(D,multi_hash([H]),P), - actual_store_types(A,[ground_constants(H,N,O)|P]), - ( B=suspension(_,active,_) -> - setarg(2,B,inactive), - validate_store_type_assumption___1__1__0__2(F,A,B) - ; - true - ) - ; - validate_store_type_assumption___1__1__0__2(F,A,B) - ). -validate_store_type_assumption___1__1(A,B) :- - validate_store_type_assumption___1__2(A,B). -validate_store_type_assumption___1__2(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',D), - lookup_ht(D,A,C), - !, - validate_store_type_assumption___1__2__0__3(C,A,B). -validate_store_type_assumption___1__2__0__3([],B,A) :- - validate_store_type_assumption___1__3(B,A). -validate_store_type_assumption___1__2__0__3([E|F],A,B) :- - ( E=suspension(_,active,C,D), - C==A, - memberchk(multi_hash([[G]]),D), - get_constraint_type(A,H), - nth1(G,H,I), - enumerated_atomic_type(I,J) -> - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',N), - delete_ht(N,A,E), - arg(2,B,L), - setarg(2,B,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',M), - insert_ht(M,A,B) - ; - true - ), - delete(D,multi_hash([[G]]),K), - actual_store_types(A,[atomic_constants([G],J,complete)|K]), - ( B=suspension(_,active,_) -> - setarg(2,B,inactive), - validate_store_type_assumption___1__2__0__3(F,A,B) - ; - true - ) - ; - validate_store_type_assumption___1__2__0__3(F,A,B) - ). -validate_store_type_assumption___1__2(A,B) :- - validate_store_type_assumption___1__3(A,B). -validate_store_type_assumption___1__3(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',D), - lookup_ht(D,A,C), - !, - validate_store_type_assumption___1__3__0__4(C,A,B). -validate_store_type_assumption___1__3__0__4([],B,A) :- - validate_store_type_assumption___1__4(B,A). -validate_store_type_assumption___1__3__0__4([E|F],A,B) :- - ( E=suspension(_,active,C,D), - C==A, - memberchk(multi_hash([[G]]),D), - get_constraint_arg_type(A,G,H), - ( H=chr_enum(I) -> - true - ; - ( is_chr_constants_type(H,J,_) -> - get_chr_constants(J,I) - ) - ) -> - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',N), - delete_ht(N,A,E), - arg(2,B,L), - setarg(2,B,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',M), - insert_ht(M,A,B) - ; - true - ), - delete(D,multi_hash([[G]]),K), - actual_store_types(A,[ground_constants([G],I,complete)|K]), - ( B=suspension(_,active,_) -> - setarg(2,B,inactive), - validate_store_type_assumption___1__3__0__4(F,A,B) - ; - true - ) - ; - validate_store_type_assumption___1__3__0__4(F,A,B) - ). -validate_store_type_assumption___1__3(A,B) :- - validate_store_type_assumption___1__4(A,B). -validate_store_type_assumption___1__4(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',P), - lookup_ht(P,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - ( - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',U), - lookup_ht(U,A,G), - 'chr sbag_member'(F,G), - F=suspension(_,active,_,_), - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',T), - delete_ht(T,A,C), - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',S), - delete_ht(S,A,F), - ( var(B) -> - true - ; - arg(2,B,R), - setarg(2,B,removed), - ( R==not_stored_yet -> - true - ; - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',Q), - delete_ht(Q,A,B) - ) - ), - ( maplist(partial_store,D) -> - H=[global_ground|D] - ; - H=D - ), - store_type(A,multi_store(H)) - ; - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',O), - lookup_ht(O,A,J), - 'chr sbag_member'(I,J), - I=suspension(_,active,_,_), - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',N), - delete_ht(N,A,C), - setarg(2,I,removed), - nb_getval('$chr_store_multi_hash_chr_translate____store_type___2-1',M), - delete_ht(M,A,I), - ( var(B) -> - true - ; - arg(2,B,L), - setarg(2,B,removed), - ( L==not_stored_yet -> - true - ; - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',K), - delete_ht(K,A,B) - ) - ), - store_type(A,multi_store(D)) - ). -validate_store_type_assumption___1__4(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',H), - lookup_ht(H,A,D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - ( - chr_pp_flag(debugable,on), - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',K), - delete_ht(K,A,C), - ( var(B) -> - true - ; - arg(2,B,J), - setarg(2,B,removed), - ( J==not_stored_yet -> - true - ; - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',I), - delete_ht(I,A,B) - ) - ), - store_type(A,default) - ; - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____assumed_store_type___2-1',G), - delete_ht(G,A,C), - ( var(B) -> - true - ; - arg(2,B,F), - setarg(2,B,removed), - ( F==not_stored_yet -> - true - ; - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',E), - delete_ht(E,A,B) - ) - ), - store_type(A,global_ground) - ). -validate_store_type_assumption___1__4(A,B) :- - ( var(B) -> - true - ; - arg(2,B,D), - setarg(2,B,removed), - ( D==not_stored_yet -> - true - ; - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',C), - delete_ht(C,A,B) - ) - ). -rule_count(A) :- - nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',C), - ( - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - ! - ; - !, - rule_count___1__0__0__2(C,A) - ). -rule_count___1__0__0__2([],A) :- - rule_count___1__1(A). -rule_count___1__0__0__2([B|C],A) :- - ( B=suspension(_,active,_,_) -> - setarg(2,B,removed), - arg(3,B,D), - ( var(D) -> - nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',E), - E=[_|F], - b_setval('$chr_store_global_ground_chr_translate____rule_count___1',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - rule_count___1__0__0__2(C,A) - ; - rule_count___1__0__0__2(C,A) - ). -rule_count(A) :- - rule_count___1__1(A). -rule_count___1__1(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____rule_count___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -inc_rule_count(A) :- - nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - setarg(2,B,removed), - arg(3,B,E), - ( var(E) -> - nb_getval('$chr_store_global_ground_chr_translate____rule_count___1',F), - F=[_|G], - b_setval('$chr_store_global_ground_chr_translate____rule_count___1',G), - ( G=[H|_] -> - setarg(3,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(3,H,E) - ; - true - ) - ), - A is C+1, - rule_count(A). -inc_rule_count(1) :- - rule_count(1). -passive(A,B) :- - passive___2__0(A,B,_). -passive___2__0(A,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_,_), - !. -passive___2__0(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',F), - lookup_ht(F,A,D), - !, - C=suspension(E,not_stored_yet,t,A,B), - 'chr gen_id'(E), - passive___2__0__0__6(D,A,B,C). -passive___2__0__0__6([],B,C,A) :- - passive___2__1(B,C,A). -passive___2__0__0__6([F|I],A,B,C) :- - ( F=suspension(_,active,D,E), - D==A, - E=[G|H], - G==B, - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',Q), - lookup_ht1(Q,A,A,K), - 'chr sbag_member'(J,K), - J=suspension(_,active,_,_,_,_) -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',O), - delete_ht(O,k(A,[B|H]),F), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',P), - delete_ht(P,A,F), - arg(2,C,L), - setarg(2,C,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',M), - insert_ht(M,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',N), - insert_ht(N,k(A,B),C) - ; - true - ), - least_occurrence(A,H), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - passive___2__0__0__6(I,A,B,C) - ; - true - ) - ; - passive___2__0__0__6(I,A,B,C) - ). -passive___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,t,A,B), - 'chr gen_id'(D), - passive___2__1(A,B,C). -passive___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',E), - lookup_ht(E,k(A,B),D), - !, - passive___2__1__0__8(D,A,B,C). -passive___2__1__0__8([],B,C,A) :- - passive___2__2(B,C,A). -passive___2__1__0__8([H|J],B,C,A) :- - ( H=suspension(_,active,_,_,D,E,F,G,_), - F==B, - G==C, - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',K), - lookup_ht(K,D,I) -> - passive___2__1__1__8(I,D,E,H,J,B,C,A) - ; - passive___2__1__0__8(J,B,C,A) - ). -passive___2__1__1__8([],_,_,_,A,C,D,B) :- - passive___2__1__0__8(A,C,D,B). -passive___2__1__1__8([K|L],E,F,A,G,B,C,D) :- - ( K=suspension(_,active,_,H,I,J), - H==E, - F - setarg(2,K,removed), - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',U), - delete_ht(U,E,K), - setarg(2,M,removed), - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-1',S), - delete_ht(S,E,M), - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',T), - delete_ht(T,k(E,F,yes),M), - arg(2,D,P), - setarg(2,D,active), - ( P==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',Q), - insert_ht(Q,B,D), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',R), - insert_ht(R,k(B,C),D) - ; - true - ), - O is J-1, - stored(E,F,maybe), - stored_complete(E,I,O), - ( D=suspension(_,active,_,_,_) -> - setarg(2,D,inactive), - passive___2__1__1__8(L,E,F,A,G,B,C,D) - ; - true - ) - ; - passive___2__1__1__8(L,E,F,A,G,B,C,D) - ). -passive___2__1(A,B,C) :- - passive___2__2(A,B,C). -passive___2__2(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',E), - lookup_ht1(E,A,A,D), - !, - passive___2__2__0__9(D,A,B,C). -passive___2__2__0__9([],B,C,A) :- - passive___2__3(B,C,A). -passive___2__2__0__9([F|G],B,C,A) :- - ( F=suspension(_,active,_,_,D,E), - D==B, - K=t(246,F,A), - '$novel_production'(F,K), - '$novel_production'(A,K), - E=pragma(rule(_,_,_,_),ids([C|I],H),_,_,B) -> - '$extend_history'(A,K), - arg(2,A,L), - setarg(2,A,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',M), - insert_ht(M,B,A), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',N), - insert_ht(N,k(B,C),A) - ; - true - ), - append(I,H,J), - check_all_passive(B,J), - ( A=suspension(_,active,_,_,_) -> - setarg(2,A,inactive), - passive___2__2__0__9(G,B,C,A) - ; - true - ) - ; - passive___2__2__0__9(G,B,C,A) - ). -passive___2__2(A,B,C) :- - passive___2__3(A,B,C). -passive___2__3(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',E), - lookup_ht1(E,A,A,D), - !, - passive___2__3__0__10(D,A,B,C). -passive___2__3__0__10([],B,C,A) :- - passive___2__4(B,C,A). -passive___2__3__0__10([F|G],B,C,A) :- - ( F=suspension(_,active,_,_,D,E), - D==B, - I=t(247,F,A), - '$novel_production'(F,I), - '$novel_production'(A,I), - E=pragma(rule(_,_,_,_),ids([],[C|H]),_,_,B) -> - '$extend_history'(A,I), - arg(2,A,J), - setarg(2,A,active), - ( J==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',K), - insert_ht(K,B,A), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',L), - insert_ht(L,k(B,C),A) - ; - true - ), - check_all_passive(B,H), - ( A=suspension(_,active,_,_,_) -> - setarg(2,A,inactive), - passive___2__3__0__10(G,B,C,A) - ; - true - ) - ; - passive___2__3__0__10(G,B,C,A) - ). -passive___2__3(A,B,C) :- - passive___2__4(A,B,C). -passive___2__4(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',E), - lookup_ht(E,A,D), - !, - passive___2__4__0__11(D,A,B,C). -passive___2__4__0__11([],B,C,A) :- - passive___2__5(B,C,A). -passive___2__4__0__11([F|I],A,B,C) :- - ( F=suspension(_,active,D,E), - D==A, - E=[G|H], - G==B -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',M), - delete_ht(M,k(A,[B|H]),F), - nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',N), - delete_ht(N,A,F), - arg(2,C,J), - setarg(2,C,active), - ( J==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',K), - insert_ht(K,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',L), - insert_ht(L,k(A,B),C) - ; - true - ), - check_all_passive(A,H), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - passive___2__4__0__11(I,A,B,C) - ; - true - ) - ; - passive___2__4__0__11(I,A,B,C) - ). -passive___2__4(A,B,C) :- - passive___2__5(A,B,C). -passive___2__5(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',E), - lookup_ht(E,k(A,B),D), - !, - passive___2__5__0__14(D,A,B,C). -passive___2__5__0__14([],B,C,A) :- - passive___2__6(B,C,A). -passive___2__5__0__14([H|J],B,C,A) :- - ( H=suspension(_,active,_,_,D,E,F,G,_), - F==B, - G==C, - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',K), - lookup_ht(K,k(D,E),I) -> - passive___2__5__1__14(I,D,E,H,J,B,C,A) - ; - passive___2__5__0__14(J,B,C,A) - ). -passive___2__5__1__14([],_,_,_,A,C,D,B) :- - passive___2__5__0__14(A,C,D,B). -passive___2__5__1__14([J|K],F,G,A,B,D,E,C) :- - ( J=suspension(_,active,_,H,I), - H==F, - I==G, - M=t(357,A,C,J), - '$novel_production'(A,M), - '$novel_production'(C,M), - '$novel_production'(J,M), - G>1 -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',O), - insert_ht(O,D,C), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',P), - insert_ht(P,k(D,E),C) - ; - true - ), - L is G-1, - skip_to_next_id(F,L), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - passive___2__5__1__14(K,F,G,A,B,D,E,C) - ; - true - ) - ; - passive___2__5__1__14(K,F,G,A,B,D,E,C) - ). -passive___2__5(A,B,C) :- - passive___2__6(A,B,C). -passive___2__6(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',E), - lookup_ht(E,k(A,B),D), - !, - passive___2__6__0__15(D,A,B,C). -passive___2__6__0__15([],B,C,A) :- - passive___2__7(B,C,A). -passive___2__6__0__15([H|J],B,C,A) :- - ( H=suspension(_,active,_,_,D,E,F,G,_), - F==B, - G==C, - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',K), - lookup_ht(K,k(D,E),I) -> - passive___2__6__1__15(I,D,E,H,J,B,C,A) - ; - passive___2__6__0__15(J,B,C,A) - ). -passive___2__6__1__15([],_,_,_,A,C,D,B) :- - passive___2__6__0__15(A,C,D,B). -passive___2__6__1__15([K|L],E,F,A,G,B,C,D) :- - ( K=suspension(_,active,H,I,J), - H==E, - I==F -> - setarg(2,K,removed), - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',Q), - delete_ht(Q,k(E,F),K), - arg(2,D,N), - setarg(2,D,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',O), - insert_ht(O,B,D), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',P), - insert_ht(P,k(B,C),D) - ; - true - ), - occurrence_code_id(E,F,J), - M is F+1, - set_occurrence_code_id(E,M,J), - ( D=suspension(_,active,_,_,_) -> - setarg(2,D,inactive), - passive___2__6__1__15(L,E,F,A,G,B,C,D) - ; - true - ) - ; - passive___2__6__1__15(L,E,F,A,G,B,C,D) - ). -passive___2__6(A,B,C) :- - passive___2__7(A,B,C). -passive___2__7(A,B,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',E), - insert_ht(E,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',F), - insert_ht(F,k(A,B),C) - ; - true - ). -is_passive(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_,_), - !. -is_passive(_,_) :- - fail. -any_passive_head(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_,_), - !. -any_passive_head(_) :- - fail. -new_occurrence(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',J), - lookup_ht(J,A,G), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,_,F), - !, - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',I), - delete_ht(I,A,E), - H is F+1, - occurrence(A,H,B,C,D), - max_occurrence(A,H). -new_occurrence(A,B,_,_) :- - chr_error(internal,'new_occurrence: missing max_occurrence for ~w in rule ~w -',[A,B]). -occurrence(A,B,C,D,E) :- - occurrence___5__0(A,B,C,D,E,_). -occurrence___5__0(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',I), - lookup_ht1(I,C,C,G), - !, - F=suspension(H,not_stored_yet,t,_,A,B,C,D,E), - 'chr gen_id'(H), - occurrence___5__0__0__3(G,A,B,C,D,E,F). -occurrence___5__0__0__3([],B,C,D,E,F,A) :- - occurrence___5__1(B,C,D,E,F,A). -occurrence___5__0__0__3([I|K],B,C,D,E,F,A) :- - ( I=suspension(_,active,_,_,G,H), - G==D, - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',L), - lookup_ht(L,k(B,C),J) -> - occurrence___5__0__1__3(J,H,I,K,B,C,D,E,F,A) - ; - occurrence___5__0__0__3(K,B,C,D,E,F,A) - ). -occurrence___5__0__1__3([],_,_,A,C,D,E,F,G,B) :- - occurrence___5__0__0__3(A,C,D,E,F,G,B). -occurrence___5__0__1__3([L|M],I,A,B,D,E,F,G,H,C) :- - ( L=suspension(_,active,_,J,K), - J==D, - K==E, - N=t(58,A,C,L), - '$novel_production'(A,N), - '$novel_production'(C,N), - '$novel_production'(L,N) -> - '$extend_history'(C,N), - arg(2,C,O), - setarg(2,C,active), - ( O==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',P), - Q=[C|P], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',Q), - ( P=[R|_] -> - setarg(4,R,Q) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',S), - insert_ht(S,k(D,E),C), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',T), - insert_ht(T,F,C), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',U), - insert_ht(U,k(F,G),C), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',V), - insert_ht(V,D,C) - ; - true - ), - \+is_passive(F,G), - H==propagation, - ( stored_in_guard_before_next_kept_occurrence(D,E) -> - true - ; - ( I=pragma(rule([_|_],_,_,_),_,_,_,_) -> - is_observed(D,E) - ) - ; - ( is_least_occurrence(F) -> - is_observed(D,E) - ) - ; - true - ), - ( C=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,C,inactive), - occurrence___5__0__1__3(M,I,A,B,D,E,F,G,H,C) - ; - true - ) - ; - occurrence___5__0__1__3(M,I,A,B,D,E,F,G,H,C) - ). -occurrence___5__0(A,B,C,D,E,F) :- - F=suspension(G,not_stored_yet,t,_,A,B,C,D,E), - 'chr gen_id'(G), - occurrence___5__1(A,B,C,D,E,F). -occurrence___5__1(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',H), - lookup_ht(H,C,G), - !, - occurrence___5__1__0__6(G,A,B,C,D,E,F). -occurrence___5__1__0__6([],B,C,D,E,F,A) :- - occurrence___5__2(B,C,D,E,F,A). -occurrence___5__1__0__6([I|L],A,B,C,D,E,F) :- - ( I=suspension(_,active,G,H), - G==C, - H=[J|K], - J==D, - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',C1), - lookup_ht(C1,A,O), - 'chr sbag_member'(M,O), - M=suspension(_,active,_,_,N), - N>=B, - ground(C), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',B1), - lookup_ht1(B1,C,C,Q), - 'chr sbag_member'(P,Q), - P=suspension(_,active,_,_,_,_), - \+may_trigger(A) -> - setarg(2,I,removed), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',Z), - delete_ht(Z,k(C,[D|K]),I), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',A1), - delete_ht(A1,C,I), - arg(2,F,R), - setarg(2,F,active), - ( R==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',S), - T=[F|S], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',T), - ( S=[U|_] -> - setarg(4,U,T) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',V), - insert_ht(V,k(A,B),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',W), - insert_ht(W,C,F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',X), - insert_ht(X,k(C,D),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',Y), - insert_ht(Y,A,F) - ; - true - ), - least_occurrence(C,K), - ( F=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,F,inactive), - occurrence___5__1__0__6(L,A,B,C,D,E,F) - ; - true - ) - ; - occurrence___5__1__0__6(L,A,B,C,D,E,F) - ). -occurrence___5__1(A,B,C,D,E,F) :- - occurrence___5__2(A,B,C,D,E,F). -occurrence___5__2(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',H), - lookup_ht(H,C,G), - !, - occurrence___5__2__0__28(G,A,B,C,D,E,F). -occurrence___5__2__0__28([],B,C,D,E,F,A) :- - occurrence___5__3(B,C,D,E,F,A). -occurrence___5__2__0__28([H|I],B,C,D,E,F,A) :- - ( H=suspension(_,active,_,G), - G==D, - J=t(176,H,A), - '$novel_production'(H,J), - '$novel_production'(A,J) -> - '$extend_history'(A,J), - arg(2,A,K), - setarg(2,A,active), - ( K==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',L), - M=[A|L], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',M), - ( L=[N|_] -> - setarg(4,N,M) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',O), - insert_ht(O,k(B,C),A), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',P), - insert_ht(P,D,A), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',Q), - insert_ht(Q,k(D,E),A), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',R), - insert_ht(R,B,A) - ; - true - ), - passive(D,E), - ( A=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,A,inactive), - occurrence___5__2__0__28(I,B,C,D,E,F,A) - ; - true - ) - ; - occurrence___5__2__0__28(I,B,C,D,E,F,A) - ). -occurrence___5__2(A,B,C,D,E,F) :- - occurrence___5__3(A,B,C,D,E,F). -occurrence___5__3(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',H), - lookup_ht1(H,C,C,G), - !, - occurrence___5__3__0__29(G,A,B,C,D,E,F). -occurrence___5__3__0__29([],B,C,D,E,F,A) :- - occurrence___5__4(B,C,D,E,F,A). -occurrence___5__3__0__29([I|K],B,C,D,E,F,A) :- - ( I=suspension(_,active,_,_,G,H), - G==D, - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',L), - lookup_ht(L,B,J) -> - occurrence___5__3__1__29(J,H,I,K,B,C,D,E,F,A) - ; - occurrence___5__3__0__29(K,B,C,D,E,F,A) - ). -occurrence___5__3__1__29([],_,_,A,C,D,E,F,G,B) :- - occurrence___5__3__0__29(A,C,D,E,F,G,B). -occurrence___5__3__1__29([M|O],I,A,B,D,E,F,G,H,C) :- - ( M=suspension(_,active,_,_,J,K,L,_,_), - J==D, - L==F, - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',P), - lookup_ht(P,F,N) -> - occurrence___5__3__2__29(N,K,M,O,I,A,B,D,E,F,G,H,C) - ; - occurrence___5__3__1__29(O,I,A,B,D,E,F,G,H,C) - ). -occurrence___5__3__2__29([],_,_,A,J,B,C,E,F,G,H,I,D) :- - occurrence___5__3__1__29(A,J,B,C,E,F,G,H,I,D). -occurrence___5__3__2__29([N|P],L,A,B,K,C,D,F,G,H,I,J,E) :- - ( N=suspension(_,active,_,_,M,_,_,_,_,_), - M==H, - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',O) -> - occurrence___5__3__3__29(O,N,P,L,A,B,K,C,D,F,G,H,I,J,E) - ; - occurrence___5__3__2__29(P,L,A,B,K,C,D,F,G,H,I,J,E) - ). -occurrence___5__3__3__29([],_,A,M,B,C,L,D,E,G,H,I,J,K,F) :- - occurrence___5__3__2__29(A,M,B,C,L,D,E,G,H,I,J,K,F). -occurrence___5__3__3__29([P|Q],A,N,L,B,M,J,C,K,D,E,F,G,H,I) :- - ( P=suspension(_,active,_,O), - E - setarg(2,P,removed), - arg(3,P,B1), - ( var(B1) -> - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',C1), - C1=[_|D1], - b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',D1), - ( D1=[E1|_] -> - setarg(3,E1,_) - ; - true - ) - ; - B1=[_,_|D1], - setarg(2,B1,D1), - ( D1=[E1|_] -> - setarg(3,E1,B1) - ; - true - ) - ), - arg(2,I,T), - setarg(2,I,active), - ( T==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',U), - V=[I|U], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',V), - ( U=[W|_] -> - setarg(4,W,V) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',X), - insert_ht(X,k(D,E),I), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',Y), - insert_ht(Y,F,I), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',Z), - insert_ht(Z,k(F,G),I), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',A1), - insert_ht(A1,D,I) - ; - true - ), - first_occ_in_rule(F,D,E,G), - tree_set_add(O,D,S), - multiple_occ_constraints_checked(S), - ( I=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,I,inactive), - occurrence___5__3__3__29(Q,A,N,L,B,M,J,C,K,D,E,F,G,H,I) - ; - true - ) - ; - occurrence___5__3__3__29(Q,A,N,L,B,M,J,C,K,D,E,F,G,H,I) - ). -occurrence___5__3(A,B,C,D,E,F) :- - occurrence___5__4(A,B,C,D,E,F). -occurrence___5__4(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',H), - lookup_ht1(H,C,C,G), - !, - occurrence___5__4__0__30(G,A,B,C,D,E,F). -occurrence___5__4__0__30([],B,C,D,E,F,A) :- - occurrence___5__5(B,C,D,E,F,A). -occurrence___5__4__0__30([I|K],B,C,D,E,F,A) :- - ( I=suspension(_,active,_,_,G,H), - G==D, - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',L), - lookup_ht(L,B,J) -> - occurrence___5__4__1__30(J,H,I,K,B,C,D,E,F,A) - ; - occurrence___5__4__0__30(K,B,C,D,E,F,A) - ). -occurrence___5__4__1__30([],_,_,A,C,D,E,F,G,B) :- - occurrence___5__4__0__30(A,C,D,E,F,G,B). -occurrence___5__4__1__30([N|P],I,A,B,D,E,F,G,H,C) :- - ( N=suspension(_,active,_,_,J,K,L,M,_), - J==D, - L==F, - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',Q), - lookup_ht(Q,F,O) -> - occurrence___5__4__2__30(O,K,M,N,P,I,A,B,D,E,F,G,H,C) - ; - occurrence___5__4__1__30(P,I,A,B,D,E,F,G,H,C) - ). -occurrence___5__4__2__30([],_,_,_,A,J,B,C,E,F,G,H,I,D) :- - occurrence___5__4__1__30(A,J,B,C,E,F,G,H,I,D). -occurrence___5__4__2__30([O|Q],L,M,A,B,K,C,D,F,G,H,I,J,E) :- - ( O=suspension(_,active,_,_,N,_,_,_,_,_), - N==H, - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',P) -> - occurrence___5__4__3__30(P,O,Q,L,M,A,B,K,C,D,F,G,H,I,J,E) - ; - occurrence___5__4__2__30(Q,L,M,A,B,K,C,D,F,G,H,I,J,E) - ). -occurrence___5__4__3__30([],_,A,M,N,B,C,L,D,E,G,H,I,J,K,F) :- - occurrence___5__4__2__30(A,M,N,B,C,L,D,E,G,H,I,J,K,F). -occurrence___5__4__3__30([Q|R],A,O,L,M,B,N,J,C,K,D,E,F,G,H,I) :- - ( Q=suspension(_,active,_,P), - L - setarg(2,Q,removed), - arg(3,Q,C1), - ( var(C1) -> - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',D1), - D1=[_|E1], - b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',E1), - ( E1=[F1|_] -> - setarg(3,F1,_) - ; - true - ) - ; - C1=[_,_|E1], - setarg(2,C1,E1), - ( E1=[F1|_] -> - setarg(3,F1,C1) - ; - true - ) - ), - arg(2,I,U), - setarg(2,I,active), - ( U==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',V), - W=[I|V], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',W), - ( V=[X|_] -> - setarg(4,X,W) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',Y), - insert_ht(Y,k(D,E),I), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',Z), - insert_ht(Z,F,I), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',A1), - insert_ht(A1,k(F,G),I), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',B1), - insert_ht(B1,D,I) - ; - true - ), - first_occ_in_rule(F,D,L,M), - tree_set_add(P,D,T), - multiple_occ_constraints_checked(T), - ( I=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,I,inactive), - occurrence___5__4__3__30(R,A,O,L,M,B,N,J,C,K,D,E,F,G,H,I) - ; - true - ) - ; - occurrence___5__4__3__30(R,A,O,L,M,B,N,J,C,K,D,E,F,G,H,I) - ). -occurrence___5__4(A,B,C,D,E,F) :- - occurrence___5__5(A,B,C,D,E,F). -occurrence___5__5(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',H), - hash_term(k(A,B,1887087),I), - lookup_ht1(H,I,k(A,B,yes),G), - !, - occurrence___5__5__0__34(G,A,B,C,D,E,F). -occurrence___5__5__0__34([],B,C,D,E,F,A) :- - occurrence___5__6(B,C,D,E,F,A). -occurrence___5__5__0__34([J|K],A,B,C,D,E,F) :- - ( J=suspension(_,active,G,H,I), - G==A, - H==B, - I=yes, - ground(C), - ground(D), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',E1), - lookup_ht(E1,k(C,D),M), - 'chr sbag_member'(L,M), - L=suspension(_,active,_,_,_), - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',D1), - lookup_ht(D1,A,Q), - 'chr sbag_member'(N,Q), - N=suspension(_,active,_,_,O,P), - B - setarg(2,J,removed), - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-1',B1), - delete_ht(B1,A,J), - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',C1), - delete_ht(C1,k(A,B,yes),J), - setarg(2,N,removed), - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',A1), - delete_ht(A1,A,N), - arg(2,F,S), - setarg(2,F,active), - ( S==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',T), - U=[F|T], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',U), - ( T=[V|_] -> - setarg(4,V,U) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',W), - insert_ht(W,k(A,B),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',X), - insert_ht(X,C,F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',Y), - insert_ht(Y,k(C,D),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',Z), - insert_ht(Z,A,F) - ; - true - ), - R is P-1, - stored(A,B,maybe), - stored_complete(A,O,R), - ( F=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,F,inactive), - occurrence___5__5__0__34(K,A,B,C,D,E,F) - ; - true - ) - ; - occurrence___5__5__0__34(K,A,B,C,D,E,F) - ). -occurrence___5__5(A,B,C,D,E,F) :- - occurrence___5__6(A,B,C,D,E,F). -occurrence___5__6(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',H), - lookup_ht1(H,C,C,G), - !, - occurrence___5__6__0__35(G,A,B,C,D,E,F). -occurrence___5__6__0__35([],B,C,D,E,F,A) :- - occurrence___5__7(B,C,D,E,F,A). -occurrence___5__6__0__35([I|K],B,C,D,E,F,A) :- - ( I=suspension(_,active,_,_,G,_,H,_,_), - H==D, - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',L), - lookup_ht(L,G,J) -> - occurrence___5__6__1__35(J,G,I,K,B,C,D,E,F,A) - ; - occurrence___5__6__0__35(K,B,C,D,E,F,A) - ). -occurrence___5__6__1__35([],_,_,A,C,D,E,F,G,B) :- - occurrence___5__6__0__35(A,C,D,E,F,G,B). -occurrence___5__6__1__35([L|N],I,A,B,D,E,F,G,H,C) :- - ( L=suspension(_,active,_,J,K), - J==I, - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',O), - lookup_ht(O,I,M) -> - occurrence___5__6__2__35(M,K,L,N,I,A,B,D,E,F,G,H,C) - ; - occurrence___5__6__1__35(N,I,A,B,D,E,F,G,H,C) - ). -occurrence___5__6__2__35([],_,_,A,J,B,C,E,F,G,H,I,D) :- - occurrence___5__6__1__35(A,J,B,C,E,F,G,H,I,D). -occurrence___5__6__2__35([P|Q],L,A,B,K,C,D,F,G,H,I,J,E) :- - ( P=suspension(_,active,_,M,N,O), - M==K, - O=0, - R=t(245,E,C,P,A), - '$novel_production'(E,R), - '$novel_production'(C,R), - '$novel_production'(P,R), - '$novel_production'(A,R), - N= - '$extend_history'(E,R), - arg(2,E,S), - setarg(2,E,active), - ( S==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',T), - U=[E|T], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',U), - ( T=[V|_] -> - setarg(4,V,U) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',W), - insert_ht(W,k(F,G),E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',X), - insert_ht(X,H,E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',Y), - insert_ht(Y,k(H,I),E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',Z), - insert_ht(Z,F,E) - ; - true - ), - passive(H,I), - ( E=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,E,inactive), - occurrence___5__6__2__35(Q,L,A,B,K,C,D,F,G,H,I,J,E) - ; - true - ) - ; - occurrence___5__6__2__35(Q,L,A,B,K,C,D,F,G,H,I,J,E) - ). -occurrence___5__6(A,B,C,D,E,F) :- - occurrence___5__7(A,B,C,D,E,F). -occurrence___5__7(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',H), - lookup_ht1(H,C,C,G), - !, - occurrence___5__7__0__36(G,A,B,C,D,E,F). -occurrence___5__7__0__36([],B,C,D,E,F,A) :- - occurrence___5__8(B,C,D,E,F,A). -occurrence___5__7__0__36([I|K],B,C,D,E,F,A) :- - ( I=suspension(_,active,_,_,_,_,G,H,_), - G==D, - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',L), - lookup_ht(L,B,J) -> - occurrence___5__7__1__36(J,H,I,K,B,C,D,E,F,A) - ; - occurrence___5__7__0__36(K,B,C,D,E,F,A) - ). -occurrence___5__7__1__36([],_,_,A,C,D,E,F,G,B) :- - occurrence___5__7__0__36(A,C,D,E,F,G,B). -occurrence___5__7__1__36([L|N],I,A,B,D,E,F,G,H,C) :- - ( L=suspension(_,active,_,J,K), - J==D, - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',O), - lookup_ht(O,D,M) -> - occurrence___5__7__2__36(M,K,L,N,I,A,B,D,E,F,G,H,C) - ; - occurrence___5__7__1__36(N,I,A,B,D,E,F,G,H,C) - ). -occurrence___5__7__2__36([],_,_,A,J,B,C,E,F,G,H,I,D) :- - occurrence___5__7__1__36(A,J,B,C,E,F,G,H,I,D). -occurrence___5__7__2__36([P|Q],L,A,B,K,C,D,F,G,H,I,J,E) :- - ( P=suspension(_,active,_,M,N,O), - M==F, - O=0, - R=t(245,C,E,P,A), - '$novel_production'(C,R), - '$novel_production'(E,R), - '$novel_production'(P,R), - '$novel_production'(A,R), - N= - '$extend_history'(E,R), - arg(2,E,S), - setarg(2,E,active), - ( S==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',T), - U=[E|T], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',U), - ( T=[V|_] -> - setarg(4,V,U) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',W), - insert_ht(W,k(F,G),E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',X), - insert_ht(X,H,E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',Y), - insert_ht(Y,k(H,I),E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',Z), - insert_ht(Z,F,E) - ; - true - ), - passive(H,K), - ( E=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,E,inactive), - occurrence___5__7__2__36(Q,L,A,B,K,C,D,F,G,H,I,J,E) - ; - true - ) - ; - occurrence___5__7__2__36(Q,L,A,B,K,C,D,F,G,H,I,J,E) - ). -occurrence___5__7(A,B,C,D,E,F) :- - occurrence___5__8(A,B,C,D,E,F). -occurrence___5__8(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',H), - lookup_ht(H,A,G), - !, - occurrence___5__8__0__37(G,A,B,C,D,E,F). -occurrence___5__8__0__37([],B,C,D,E,F,A) :- - occurrence___5__9(B,C,D,E,F,A). -occurrence___5__8__0__37([I|J],B,C,D,E,F,A) :- - ( I=suspension(_,active,_,G,H,_), - G==B, - K=t(254,I,A), - '$novel_production'(I,K), - '$novel_production'(A,K), - C>H -> - '$extend_history'(A,K), - arg(2,A,L), - setarg(2,A,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',M), - N=[A|M], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',N), - ( M=[O|_] -> - setarg(4,O,N) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',P), - insert_ht(P,k(B,C),A), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',Q), - insert_ht(Q,D,A), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',R), - insert_ht(R,k(D,E),A), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',S), - insert_ht(S,B,A) - ; - true - ), - passive(D,E), - ( A=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,A,inactive), - occurrence___5__8__0__37(J,B,C,D,E,F,A) - ; - true - ) - ; - occurrence___5__8__0__37(J,B,C,D,E,F,A) - ). -occurrence___5__8(A,B,C,D,E,F) :- - occurrence___5__9(A,B,C,D,E,F). -occurrence___5__9(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',H), - lookup_ht(H,k(A,C),G), - !, - occurrence___5__9__0__41(G,A,B,C,D,E,F). -occurrence___5__9__0__41([],B,C,D,E,F,A) :- - occurrence___5__10(B,C,D,E,F,A). -occurrence___5__9__0__41([K|L],A,B,C,D,E,F) :- - ( K=suspension(_,active,G,H,I,J), - G==A, - H==C, - C>1, - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',Z), - lookup_ht(Z,A,O), - 'chr sbag_member'(M,O), - M=suspension(_,active,_,_,N), - N>B -> - setarg(2,K,removed), - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',X), - delete_ht(X,A,K), - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',Y), - delete_ht(Y,k(A,C),K), - arg(2,F,P), - setarg(2,F,active), - ( P==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',Q), - R=[F|Q], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',R), - ( Q=[S|_] -> - setarg(4,S,R) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',T), - insert_ht(T,k(A,B),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',U), - insert_ht(U,C,F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',V), - insert_ht(V,k(C,D),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',W), - insert_ht(W,A,F) - ; - true - ), - functional_dependency(A,1,I,J), - ( F=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,F,inactive), - occurrence___5__9__0__41(L,A,B,C,D,E,F) - ; - true - ) - ; - occurrence___5__9__0__41(L,A,B,C,D,E,F) - ). -occurrence___5__9(A,B,C,D,E,F) :- - occurrence___5__10(A,B,C,D,E,F). -occurrence___5__10(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',H), - lookup_ht(H,A,G), - !, - occurrence___5__10__0__47(G,A,B,C,D,E,F). -occurrence___5__10__0__47([],B,C,D,E,F,A) :- - occurrence___5__11(B,C,D,E,F,A). -occurrence___5__10__0__47([I|K],B,C,D,E,F,A) :- - ( I=suspension(_,active,_,_,G,H), - G==B, - nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',J) -> - occurrence___5__10__1__47(J,H,I,K,B,C,D,E,F,A) - ; - occurrence___5__10__0__47(K,B,C,D,E,F,A) - ). -occurrence___5__10__1__47([],_,_,A,C,D,E,F,G,B) :- - occurrence___5__10__0__47(A,C,D,E,F,G,B). -occurrence___5__10__1__47([J|L],I,A,B,D,E,F,G,H,C) :- - ( J=suspension(_,active,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',M), - lookup_ht1(M,F,F,K) -> - occurrence___5__10__2__47(K,J,L,I,A,B,D,E,F,G,H,C) - ; - occurrence___5__10__1__47(L,I,A,B,D,E,F,G,H,C) - ). -occurrence___5__10__2__47([],_,A,J,B,C,E,F,G,H,I,D) :- - occurrence___5__10__1__47(A,J,B,C,E,F,G,H,I,D). -occurrence___5__10__2__47([N|O],A,B,K,C,D,F,G,H,I,J,E) :- - ( N=suspension(_,active,_,_,L,M), - L==H, - V=t(325,A,E,N,C), - '$novel_production'(A,V), - '$novel_production'(E,V), - '$novel_production'(N,V), - '$novel_production'(C,V) -> - '$extend_history'(E,V), - arg(2,E,W), - setarg(2,E,active), - ( W==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',X), - Y=[E|X], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',Y), - ( X=[Z|_] -> - setarg(4,Z,Y) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',A1), - insert_ht(A1,k(F,G),E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',B1), - insert_ht(B1,H,E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',C1), - insert_ht(C1,k(H,I),E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',D1), - insert_ht(D1,F,E) - ; - true - ), - M=pragma(rule(P,Q,R,_),_,_,_,_), - ( is_passive(H,I) -> - true - ; - ( J==simplification -> - select(S,P,_), - S=..[_|T], - term_variables(R,U), - partial_wake_args(T,K,U,F) - ) - ; - select(S,Q,_), - S=..[_|T], - term_variables(R,U), - partial_wake_args(T,K,U,F) - ), - ( E=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,E,inactive), - occurrence___5__10__2__47(O,A,B,K,C,D,F,G,H,I,J,E) - ; - true - ) - ; - occurrence___5__10__2__47(O,A,B,K,C,D,F,G,H,I,J,E) - ). -occurrence___5__10(A,B,C,D,E,F) :- - occurrence___5__11(A,B,C,D,E,F). -occurrence___5__11(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',H), - lookup_ht(H,k(C,D),G), - !, - occurrence___5__11__0__49(G,A,B,C,D,E,F). -occurrence___5__11__0__49([],B,C,D,E,F,A) :- - occurrence___5__12(B,C,D,E,F,A). -occurrence___5__11__0__49([I|K],B,C,D,E,F,A) :- - ( I=suspension(_,active,_,G,H), - G==D, - H==E, - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',L), - lookup_ht(L,k(B,C),J) -> - occurrence___5__11__1__49(J,I,K,B,C,D,E,F,A) - ; - occurrence___5__11__0__49(K,B,C,D,E,F,A) - ). -occurrence___5__11__1__49([],_,A,C,D,E,F,G,B) :- - occurrence___5__11__0__49(A,C,D,E,F,G,B). -occurrence___5__11__1__49([K|L],A,B,D,E,F,G,H,C) :- - ( K=suspension(_,active,_,I,J), - I==D, - J==E, - N=t(357,C,A,K), - '$novel_production'(C,N), - '$novel_production'(A,N), - '$novel_production'(K,N), - E>1 -> - '$extend_history'(C,N), - arg(2,C,O), - setarg(2,C,active), - ( O==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',P), - Q=[C|P], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',Q), - ( P=[R|_] -> - setarg(4,R,Q) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',S), - insert_ht(S,k(D,E),C), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',T), - insert_ht(T,F,C), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',U), - insert_ht(U,k(F,G),C), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',V), - insert_ht(V,D,C) - ; - true - ), - M is E-1, - skip_to_next_id(D,M), - ( C=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,C,inactive), - occurrence___5__11__1__49(L,A,B,D,E,F,G,H,C) - ; - true - ) - ; - occurrence___5__11__1__49(L,A,B,D,E,F,G,H,C) - ). -occurrence___5__11(A,B,C,D,E,F) :- - occurrence___5__12(A,B,C,D,E,F). -occurrence___5__12(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',H), - lookup_ht(H,k(A,B),G), - !, - occurrence___5__12__0__50(G,A,B,C,D,E,F). -occurrence___5__12__0__50([],B,C,D,E,F,A) :- - occurrence___5__13(B,C,D,E,F,A). -occurrence___5__12__0__50([J|K],A,B,C,D,E,F) :- - ( J=suspension(_,active,G,H,I), - G==A, - H==B, - ground(C), - ground(D), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',X), - lookup_ht(X,k(C,D),M), - 'chr sbag_member'(L,M), - L=suspension(_,active,_,_,_) -> - setarg(2,J,removed), - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',W), - delete_ht(W,k(A,B),J), - arg(2,F,O), - setarg(2,F,active), - ( O==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',P), - Q=[F|P], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',Q), - ( P=[R|_] -> - setarg(4,R,Q) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',S), - insert_ht(S,k(A,B),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',T), - insert_ht(T,C,F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',U), - insert_ht(U,k(C,D),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',V), - insert_ht(V,A,F) - ; - true - ), - occurrence_code_id(A,B,I), - N is B+1, - set_occurrence_code_id(A,N,I), - ( F=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,F,inactive), - occurrence___5__12__0__50(K,A,B,C,D,E,F) - ; - true - ) - ; - occurrence___5__12__0__50(K,A,B,C,D,E,F) - ). -occurrence___5__12(A,B,C,D,E,F) :- - occurrence___5__13(A,B,C,D,E,F). -occurrence___5__13(A,B,C,D,simplification,E) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',G), - lookup_ht(G,k(A,B),F), - !, - occurrence___5__13__0__51(F,A,B,C,D,simplification,E). -occurrence___5__13__0__51([],B,C,D,E,F,A) :- - occurrence___5__15(B,C,D,E,F,A). -occurrence___5__13__0__51([J|K],A,B,C,D,E,F) :- - ( J=suspension(_,active,G,H,I), - G==A, - H==B -> - setarg(2,J,removed), - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',U), - delete_ht(U,k(A,B),J), - arg(2,F,M), - setarg(2,F,active), - ( M==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',N), - O=[F|N], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',O), - ( N=[P|_] -> - setarg(4,P,O) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',Q), - insert_ht(Q,k(A,B),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',R), - insert_ht(R,C,F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',S), - insert_ht(S,k(C,D),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',T), - insert_ht(T,A,F) - ; - true - ), - occurrence_code_id(A,B,I), - L is B+1, - set_occurrence_code_id(A,L,I), - ( F=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,F,inactive), - occurrence___5__13__0__51(K,A,B,C,D,E,F) - ; - true - ) - ; - occurrence___5__13__0__51(K,A,B,C,D,E,F) - ). -occurrence___5__13(A,B,C,D,propagation,E) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',G), - lookup_ht(G,k(A,B),F), - !, - occurrence___5__13__0__52(F,A,B,C,D,propagation,E). -occurrence___5__13__0__52([],B,C,D,E,F,A) :- - occurrence___5__14(B,C,D,E,F,A). -occurrence___5__13__0__52([J|K],A,B,C,D,E,F) :- - ( J=suspension(_,active,G,H,I), - G==A, - H==B, - ground(A), - ground(B), - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',Y), - lookup_ht(Y,k(A,B),M), - 'chr sbag_member'(L,M), - L=suspension(_,active,_,_,_) -> - setarg(2,J,removed), - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',X), - delete_ht(X,k(A,B),J), - arg(2,F,P), - setarg(2,F,active), - ( P==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',Q), - R=[F|Q], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',R), - ( Q=[S|_] -> - setarg(4,S,R) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',T), - insert_ht(T,k(A,B),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',U), - insert_ht(U,C,F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',V), - insert_ht(V,k(C,D),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',W), - insert_ht(W,A,F) - ; - true - ), - occurrence_code_id(A,B,I), - N is B+1, - O is I+1, - set_occurrence_code_id(A,N,O), - ( F=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,F,inactive), - occurrence___5__13__0__52(K,A,B,C,D,E,F) - ; - true - ) - ; - occurrence___5__13__0__52(K,A,B,C,D,E,F) - ). -occurrence___5__13(A,B,C,D,E,F) :- - occurrence___5__14(A,B,C,D,E,F). -occurrence___5__14(A,B,C,D,propagation,E) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',G), - lookup_ht(G,k(A,B),F), - !, - occurrence___5__14__0__53(F,A,B,C,D,propagation,E). -occurrence___5__14__0__53([],B,C,D,E,F,A) :- - occurrence___5__15(B,C,D,E,F,A). -occurrence___5__14__0__53([J|K],A,B,C,D,E,F) :- - ( J=suspension(_,active,G,H,I), - G==A, - H==B -> - setarg(2,J,removed), - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',U), - delete_ht(U,k(A,B),J), - arg(2,F,M), - setarg(2,F,active), - ( M==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',N), - O=[F|N], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',O), - ( N=[P|_] -> - setarg(4,P,O) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',Q), - insert_ht(Q,k(A,B),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',R), - insert_ht(R,C,F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',S), - insert_ht(S,k(C,D),F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',T), - insert_ht(T,A,F) - ; - true - ), - occurrence_code_id(A,B,I), - L is B+1, - set_occurrence_code_id(A,L,I), - ( F=suspension(_,active,_,_,_,_,_,_,_) -> - setarg(2,F,inactive), - occurrence___5__14__0__53(K,A,B,C,D,E,F) - ; - true - ) - ; - occurrence___5__14__0__53(K,A,B,C,D,E,F) - ). -occurrence___5__14(A,B,C,D,E,F) :- - occurrence___5__15(A,B,C,D,E,F). -occurrence___5__15(A,B,C,D,_,E) :- - arg(2,E,F), - setarg(2,E,active), - ( F==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',G), - H=[E|G], - b_setval('$chr_store_global_ground_chr_translate____occurrence___5',H), - ( G=[I|_] -> - setarg(4,I,H) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',J), - insert_ht(J,k(A,B),E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',K), - insert_ht(K,C,E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',L), - insert_ht(L,k(C,D),E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',M), - insert_ht(M,A,E) - ; - true - ). -get_occurrence(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',I), - lookup_ht(I,k(A,B),H), - 'chr sbag_member'(E,H), - E=suspension(_,active,_,_,_,_,F,G,_), - !, - F=C, - G=D. -get_occurrence(A,B,_,_) :- - chr_error(internal,'get_occurrence: missing occurrence ~w:~w -',[A,B]). -get_occurrence_from_id(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',I), - lookup_ht(I,k(C,D),H), - 'chr sbag_member'(E,H), - E=suspension(_,active,_,_,F,G,_,_,_), - !, - A=F, - B=G. -get_occurrence_from_id(_,_,_,_) :- - chr_error(internal,'get_occurrence_from_id: missing occurrence ~w:~w -',[]). -max_occurrence(A,B) :- - max_occurrence___2__0(A,B,_). -max_occurrence___2__0(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',G), - lookup_ht(G,A,F), - ( - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - E>=B, - ! - ; - !, - max_occurrence___2__0__0__2(F,A,B,C) - ). -max_occurrence___2__0__0__2([],B,C,A) :- - max_occurrence___2__1(B,C,A). -max_occurrence___2__0__0__2([F|G],A,B,C) :- - ( F=suspension(_,active,_,D,E), - D==A, - B>=E -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',H), - delete_ht(H,A,F), - max_occurrence___2__0__0__2(G,A,B,C) - ; - max_occurrence___2__0__0__2(G,A,B,C) - ). -max_occurrence___2__0(A,B,C) :- - max_occurrence___2__1(A,B,C). -max_occurrence___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',F), - lookup_ht(F,A,D), - !, - C=suspension(E,not_stored_yet,t,A,B), - 'chr gen_id'(E), - max_occurrence___2__1__0__5(D,A,B,C). -max_occurrence___2__1__0__5([],B,C,A) :- - max_occurrence___2__2(B,C,A). -max_occurrence___2__1__0__5([G|I],B,C,A) :- - ( G=suspension(_,active,_,D,E,F), - D==B, - F=0, - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',J), - lookup_ht(J,B,H) -> - max_occurrence___2__1__1__5(H,E,G,I,B,C,A) - ; - max_occurrence___2__1__0__5(I,B,C,A) - ). -max_occurrence___2__1__1__5([],_,_,A,C,D,B) :- - max_occurrence___2__1__0__5(A,C,D,B). -max_occurrence___2__1__1__5([I|K],F,A,B,D,E,C) :- - ( I=suspension(_,active,_,_,G,_,H,_,_), - G==D, - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',L), - lookup_ht1(L,H,H,J) -> - max_occurrence___2__1__2__5(J,H,I,K,F,A,B,D,E,C) - ; - max_occurrence___2__1__1__5(K,F,A,B,D,E,C) - ). -max_occurrence___2__1__2__5([],_,_,A,G,B,C,E,F,D) :- - max_occurrence___2__1__1__5(A,G,B,C,E,F,D). -max_occurrence___2__1__2__5([L|M],I,A,B,H,C,D,F,G,E) :- - ( L=suspension(_,active,_,_,_,_,J,K,_), - L\==A, - J==I, - N=t(245,L,A,C,E), - '$novel_production'(L,N), - '$novel_production'(A,N), - '$novel_production'(C,N), - '$novel_production'(E,N), - H= - '$extend_history'(E,N), - arg(2,E,O), - setarg(2,E,active), - ( O==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',P), - insert_ht(P,F,E) - ; - true - ), - passive(I,K), - ( E=suspension(_,active,_,_,_) -> - setarg(2,E,inactive), - max_occurrence___2__1__2__5(M,I,A,B,H,C,D,F,G,E) - ; - true - ) - ; - max_occurrence___2__1__2__5(M,I,A,B,H,C,D,F,G,E) - ). -max_occurrence___2__1(A,B,C) :- - C=suspension(D,not_stored_yet,t,A,B), - 'chr gen_id'(D), - max_occurrence___2__2(A,B,C). -max_occurrence___2__2(A,_,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',D), - insert_ht(D,A,B) - ; - true - ). -get_max_occurrence(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - !, - B=D. -get_max_occurrence(A,_) :- - chr_error(internal,'get_max_occurrence: missing max occurrence for ~w -',[A]). -allocation_occurrence(A,B) :- - allocation_occurrence___2__0(A,B,_). -allocation_occurrence___2__0(A,0,B) :- - !, - B=suspension(C,active,t,A,0), - 'chr gen_id'(C), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',D), - insert_ht(D,A,B), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',E), - insert_ht(E,k(A,0),B), - stored_in_guard_before_next_kept_occurrence(A,0), - ( B=suspension(_,active,_,_,_) -> - setarg(2,B,inactive), - allocation_occurrence___2__1(A,0,B) - ; - true - ). -allocation_occurrence___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,t,A,B), - 'chr gen_id'(D), - allocation_occurrence___2__1(A,B,C). -allocation_occurrence___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',E), - lookup_ht(E,k(A,B),D), - !, - allocation_occurrence___2__1__0__2(D,A,B,C). -allocation_occurrence___2__1__0__2([],B,C,A) :- - allocation_occurrence___2__2(B,C,A). -allocation_occurrence___2__1__0__2([I|K],B,C,A) :- - ( I=suspension(_,active,_,_,D,E,F,G,H), - D==B, - E==C, - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',L), - lookup_ht1(L,F,F,J) -> - allocation_occurrence___2__1__1__2(J,F,G,H,I,K,B,C,A) - ; - allocation_occurrence___2__1__0__2(K,B,C,A) - ). -allocation_occurrence___2__1__1__2([],_,_,_,_,A,C,D,B) :- - allocation_occurrence___2__1__0__2(A,C,D,B). -allocation_occurrence___2__1__1__2([K|L],F,G,H,A,B,D,E,C) :- - ( K=suspension(_,active,_,_,I,J), - I==F, - M=t(58,K,A,C), - '$novel_production'(K,M), - '$novel_production'(A,M), - '$novel_production'(C,M) -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',O), - insert_ht(O,D,C), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',P), - insert_ht(P,k(D,E),C) - ; - true - ), - \+is_passive(F,G), - H==propagation, - ( stored_in_guard_before_next_kept_occurrence(D,E) -> - true - ; - ( J=pragma(rule([_|_],_,_,_),_,_,_,_) -> - is_observed(D,E) - ) - ; - ( is_least_occurrence(F) -> - is_observed(D,E) - ) - ; - true - ), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - allocation_occurrence___2__1__1__2(L,F,G,H,A,B,D,E,C) - ; - true - ) - ; - allocation_occurrence___2__1__1__2(L,F,G,H,A,B,D,E,C) - ). -allocation_occurrence___2__1(A,B,C) :- - allocation_occurrence___2__2(A,B,C). -allocation_occurrence___2__2(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',E), - lookup_ht(E,A,D), - !, - allocation_occurrence___2__2__0__3(D,A,B,C). -allocation_occurrence___2__2__0__3([],B,C,A) :- - allocation_occurrence___2__3(B,C,A). -allocation_occurrence___2__2__0__3([H|J],B,C,A) :- - ( H=suspension(_,active,_,_,D,E,F,G,_), - D==B, - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',K), - lookup_ht(K,F,I) -> - allocation_occurrence___2__2__1__3(I,E,F,G,H,J,B,C,A) - ; - allocation_occurrence___2__2__0__3(J,B,C,A) - ). -allocation_occurrence___2__2__1__3([],_,_,_,_,A,C,D,B) :- - allocation_occurrence___2__2__0__3(A,C,D,B). -allocation_occurrence___2__2__1__3([K|N],E,F,G,A,H,B,C,D) :- - ( K=suspension(_,active,I,J), - I==F, - J=[L|M], - L==G, - C>=E, - ground(F), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',V), - lookup_ht1(V,F,F,P), - 'chr sbag_member'(O,P), - O=suspension(_,active,_,_,_,_), - \+may_trigger(B) -> - setarg(2,K,removed), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',T), - delete_ht(T,k(F,[G|M]),K), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',U), - delete_ht(U,F,K), - arg(2,D,Q), - setarg(2,D,active), - ( Q==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',R), - insert_ht(R,B,D), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',S), - insert_ht(S,k(B,C),D) - ; - true - ), - least_occurrence(F,M), - ( D=suspension(_,active,_,_,_) -> - setarg(2,D,inactive), - allocation_occurrence___2__2__1__3(N,E,F,G,A,H,B,C,D) - ; - true - ) - ; - allocation_occurrence___2__2__1__3(N,E,F,G,A,H,B,C,D) - ). -allocation_occurrence___2__2(A,B,C) :- - allocation_occurrence___2__3(A,B,C). -allocation_occurrence___2__3(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',E), - lookup_ht(E,A,D), - !, - allocation_occurrence___2__3__0__5(D,A,B,C). -allocation_occurrence___2__3__0__5([],B,C,A) :- - allocation_occurrence___2__4(B,C,A). -allocation_occurrence___2__3__0__5([H|I],A,B,C) :- - ( H=suspension(_,active,D,E,F,G), - D==A, - E>1, - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',R), - lookup_ht(R,A,L), - 'chr sbag_member'(J,L), - J=suspension(_,active,_,_,_,K,E,_,_), - B>K -> - setarg(2,H,removed), - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',P), - delete_ht(P,A,H), - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',Q), - delete_ht(Q,k(A,E),H), - arg(2,C,M), - setarg(2,C,active), - ( M==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',N), - insert_ht(N,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',O), - insert_ht(O,k(A,B),C) - ; - true - ), - functional_dependency(A,1,F,G), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - allocation_occurrence___2__3__0__5(I,A,B,C) - ; - true - ) - ; - allocation_occurrence___2__3__0__5(I,A,B,C) - ). -allocation_occurrence___2__3(A,B,C) :- - allocation_occurrence___2__4(A,B,C). -allocation_occurrence___2__4(A,B,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',E), - insert_ht(E,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',F), - insert_ht(F,k(A,B),C) - ; - true - ). -get_allocation_occurrence(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - !, - B=D. -get_allocation_occurrence(_,A) :- - chr_pp_flag(late_allocation,off), - A=0. -rule(A,B) :- - rule___2__0(A,B,_). -rule___2__0(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',F), - lookup_ht1(F,A,A,D), - !, - C=suspension(E,not_stored_yet,t,_,A,B), - 'chr gen_id'(E), - rule___2__0__0__1(D,A,B,C). -rule___2__0__0__1([],B,C,A) :- - rule___2__1(B,C,A). -rule___2__0__0__1([I|K],B,C,A) :- - ( I=suspension(_,active,_,_,D,E,F,G,H), - F==B, - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-12',L), - lookup_ht(L,k(D,E),J) -> - rule___2__0__1__1(J,D,E,G,H,I,K,B,C,A) - ; - rule___2__0__0__1(K,B,C,A) - ). -rule___2__0__1__1([],_,_,_,_,_,A,C,D,B) :- - rule___2__0__0__1(A,C,D,B). -rule___2__0__1__1([L|M],F,G,H,I,A,B,D,E,C) :- - ( L=suspension(_,active,_,J,K), - J==F, - K==G, - N=t(58,C,A,L), - '$novel_production'(C,N), - '$novel_production'(A,N), - '$novel_production'(L,N) -> - '$extend_history'(C,N), - arg(2,C,O), - setarg(2,C,active), - ( O==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',P), - Q=[C|P], - b_setval('$chr_store_global_ground_chr_translate____rule___2',Q), - ( P=[R|_] -> - setarg(4,R,Q) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',S), - insert_ht(S,D,C) - ; - true - ), - \+is_passive(D,H), - I==propagation, - ( stored_in_guard_before_next_kept_occurrence(F,G) -> - true - ; - ( E=pragma(rule([_|_],_,_,_),_,_,_,_) -> - is_observed(F,G) - ) - ; - ( is_least_occurrence(D) -> - is_observed(F,G) - ) - ; - true - ), - ( C=suspension(_,active,_,_,_,_) -> - setarg(2,C,inactive), - rule___2__0__1__1(M,F,G,H,I,A,B,D,E,C) - ; - true - ) - ; - rule___2__0__1__1(M,F,G,H,I,A,B,D,E,C) - ). -rule___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,t,_,A,B), - 'chr gen_id'(D), - rule___2__1(A,B,C). -rule___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',E), - lookup_ht(E,A,D), - !, - rule___2__1__0__2(D,A,B,C). -rule___2__1__0__2([],B,C,A) :- - rule___2__2(B,C,A). -rule___2__1__0__2([F|I],A,B,C) :- - ( F=suspension(_,active,D,E), - D==A, - E=[G|H], - ground(A), - ground(G), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',Y), - lookup_ht(Y,k(A,G),M), - 'chr sbag_member'(J,M), - J=suspension(_,active,_,_,K,L,_,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',X), - lookup_ht(X,K,P), - 'chr sbag_member'(N,P), - N=suspension(_,active,_,_,O), - O>=L, - \+may_trigger(K) -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',V), - delete_ht(V,k(A,[G|H]),F), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',W), - delete_ht(W,A,F), - arg(2,C,Q), - setarg(2,C,active), - ( Q==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',R), - S=[C|R], - b_setval('$chr_store_global_ground_chr_translate____rule___2',S), - ( R=[T|_] -> - setarg(4,T,S) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',U), - insert_ht(U,A,C) - ; - true - ), - least_occurrence(A,H), - ( C=suspension(_,active,_,_,_,_) -> - setarg(2,C,inactive), - rule___2__1__0__2(I,A,B,C) - ; - true - ) - ; - rule___2__1__0__2(I,A,B,C) - ). -rule___2__1(A,B,C) :- - rule___2__2(A,B,C). -rule___2__2(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',E), - lookup_ht(E,A,D), - !, - rule___2__2__0__3(D,A,B,C). -rule___2__2__0__3([],B,C,A) :- - rule___2__3(B,C,A). -rule___2__2__0__3([F|I],A,B,C) :- - ( F=suspension(_,active,D,E), - D==A, - E=[G|H], - ground(A), - ground(G), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',S), - lookup_ht(S,k(A,G),K), - 'chr sbag_member'(J,K), - J=suspension(_,active,_,_,_) -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',Q), - delete_ht(Q,k(A,[G|H]),F), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',R), - delete_ht(R,A,F), - arg(2,C,L), - setarg(2,C,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',M), - N=[C|M], - b_setval('$chr_store_global_ground_chr_translate____rule___2',N), - ( M=[O|_] -> - setarg(4,O,N) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',P), - insert_ht(P,A,C) - ; - true - ), - least_occurrence(A,H), - ( C=suspension(_,active,_,_,_,_) -> - setarg(2,C,inactive), - rule___2__2__0__3(I,A,B,C) - ; - true - ) - ; - rule___2__2__0__3(I,A,B,C) - ). -rule___2__2(A,B,C) :- - rule___2__3(A,B,C). -rule___2__3(A,B,C) :- - B=pragma(rule([],_,_,_),ids([],D),_,_,_), - !, - arg(2,C,E), - setarg(2,C,active), - ( E==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',F), - G=[C|F], - b_setval('$chr_store_global_ground_chr_translate____rule___2',G), - ( F=[H|_] -> - setarg(4,H,G) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',I), - insert_ht(I,A,C) - ; - true - ), - least_occurrence(A,D), - ( C=suspension(_,active,_,_,_,_) -> - setarg(2,C,inactive), - rule___2__4(A,B,C) - ; - true - ). -rule___2__3(A,B,C) :- - rule___2__4(A,B,C). -rule___2__4(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',F1), - lookup_ht(F1,A,I), - 'chr sbag_member'(D,I), - D=suspension(_,active,_,_,_,E,F,G,H,_), - B=pragma(rule(M,N,F,O),J,K,L,A), - F\==true, - append(H,G,P), - ( conj2list(F,Q), - append(P,Q,R), - guard_entailment:entails_guard(R,fail) -> - S=fail - ; - simplify_guard(F,O,P,S,T) - ), - F\==S, - !, - setarg(2,D,removed), - arg(4,D,A1), - ( var(A1) -> - nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',B1), - B1=[_|C1], - b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',C1), - ( C1=[D1|_] -> - setarg(4,D1,_) - ; - true - ) - ; - A1=[_,_|C1], - setarg(2,A1,C1), - ( C1=[D1|_] -> - setarg(4,D1,A1) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',E1), - delete_ht(E1,A,D), - ( var(C) -> - true - ; - arg(2,C,Z), - setarg(2,C,removed), - ( Z==not_stored_yet -> - true - ; - arg(4,C,U), - ( var(U) -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',V), - V=[_|W], - b_setval('$chr_store_global_ground_chr_translate____rule___2',W), - ( W=[X|_] -> - setarg(4,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(4,X,U) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',Y), - delete_ht(Y,A,C) - ) - ), - rule(A,pragma(rule(M,N,S,T),J,K,L,A)), - prev_guard_list(A,E,S,G,H,[]). -rule___2__4(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',D), - !, - rule___2__4__0__10(D,A,B,C). -rule___2__4__0__10([],B,C,A) :- - rule___2__5(B,C,A). -rule___2__4__0__10([D|E],B,C,A) :- - ( D=suspension(_,active,_,_), - M=t(170,A,D), - '$novel_production'(A,M), - '$novel_production'(D,M) -> - '$extend_history'(A,M), - arg(2,A,N), - setarg(2,A,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',O), - P=[A|O], - b_setval('$chr_store_global_ground_chr_translate____rule___2',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',R), - insert_ht(R,B,A) - ; - true - ), - C=pragma(rule(F,G,_,_),_,_,_,_), - append(F,G,H), - make_head_matchings_explicit_(H,I,J), - copy_term_nat(I-J,K-L), - make_head_matchings_explicit_memo_table(B,K,L), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - rule___2__4__0__10(E,B,C,A) - ; - true - ) - ; - rule___2__4__0__10(E,B,C,A) - ). -rule___2__4(A,B,C) :- - rule___2__5(A,B,C). -rule___2__5(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',E), - lookup_ht(E,A,D), - !, - rule___2__5__0__11(D,A,B,C). -rule___2__5__0__11([],B,C,A) :- - rule___2__6(B,C,A). -rule___2__5__0__11([H|I],B,C,A) :- - ( H=suspension(_,active,_,_,D,_,E,F,G,_), - D==B, - M=t(174,H,A), - '$novel_production'(H,M), - '$novel_production'(A,M), - chr_pp_flag(check_impossible_rules,on), - C=pragma(rule(_,_,E,_),_,_,_,B), - conj2list(E,J), - append(G,F,K), - append(K,J,L), - guard_entailment:entails_guard(L,fail) -> - '$extend_history'(A,M), - arg(2,A,N), - setarg(2,A,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',O), - P=[A|O], - b_setval('$chr_store_global_ground_chr_translate____rule___2',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',R), - insert_ht(R,B,A) - ; - true - ), - chr_warning(weird_program,'Heads will never match or guard will always fail in ~@. - This rule will never fire! -',[format_rule(C)]), - set_all_passive(B), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - rule___2__5__0__11(I,B,C,A) - ; - true - ) - ; - rule___2__5__0__11(I,B,C,A) - ). -rule___2__5(A,B,C) :- - rule___2__6(A,B,C). -rule___2__6(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',I1), - lookup_ht(I1,A,I), - 'chr sbag_member'(D,I), - D=suspension(_,active,_,_,_,E,F,G,H,_), - B=pragma(rule(M,N,F,O),J,K,L,A), - simplify_heads(H,G,F,O,P,Q), - P\==[], - extract_arguments(M,R), - extract_arguments(N,S), - extract_arguments(E,T), - replace_some_heads(R,S,T,P,U,V,F,O,W), - substitute_arguments(M,U,X), - substitute_arguments(N,V,Y), - append(Q,W,Z), - list2conj(Z,A1), - B1=pragma(rule(X,Y,F,(A1,O)),J,K,L,A), - ( - M\==X - ; - N\==Y - ), - !, - ( var(C) -> - true - ; - arg(2,C,H1), - setarg(2,C,removed), - ( H1==not_stored_yet -> - true - ; - arg(4,C,C1), - ( var(C1) -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',D1), - D1=[_|E1], - b_setval('$chr_store_global_ground_chr_translate____rule___2',E1), - ( E1=[F1|_] -> - setarg(4,F1,_) - ; - true - ) - ; - C1=[_,_|E1], - setarg(2,C1,E1), - ( E1=[F1|_] -> - setarg(4,F1,C1) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',G1), - delete_ht(G1,A,C) - ) - ), - rule(A,B1). -rule___2__6(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',E), - lookup_ht1(E,A,A,D), - !, - rule___2__6__0__13(D,A,B,C). -rule___2__6__0__13([],B,C,A) :- - rule___2__7(B,C,A). -rule___2__6__0__13([G|I],B,C,A) :- - ( G=suspension(_,active,_,_,D,E,F,_,_), - F==B, - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',J), - lookup_ht(J,D,H) -> - rule___2__6__1__13(H,D,E,G,I,B,C,A) - ; - rule___2__6__0__13(I,B,C,A) - ). -rule___2__6__1__13([],_,_,_,A,C,D,B) :- - rule___2__6__0__13(A,C,D,B). -rule___2__6__1__13([L|N],F,G,A,B,D,E,C) :- - ( L=suspension(_,active,_,_,H,I,J,K,_), - L\==A, - H==F, - J==D, - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',O), - lookup_ht(O,D,M) -> - rule___2__6__2__13(M,I,K,L,N,F,G,A,B,D,E,C) - ; - rule___2__6__1__13(N,F,G,A,B,D,E,C) - ). -rule___2__6__2__13([],_,_,_,A,G,H,B,C,E,F,D) :- - rule___2__6__1__13(A,G,H,B,C,E,F,D). -rule___2__6__2__13([M|O],J,K,A,B,H,I,C,D,F,G,E) :- - ( M=suspension(_,active,_,_,L,_,_,_,_,_), - L==F, - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',N) -> - rule___2__6__3__13(N,M,O,J,K,A,B,H,I,C,D,F,G,E) - ; - rule___2__6__2__13(O,J,K,A,B,H,I,C,D,F,G,E) - ). -rule___2__6__3__13([],_,A,K,L,B,C,I,J,D,E,G,H,F) :- - rule___2__6__2__13(A,K,L,B,C,I,J,D,E,G,H,F). -rule___2__6__3__13([O|P],A,M,J,K,B,L,G,H,C,I,D,E,F) :- - ( O=suspension(_,active,_,N), - J - setarg(2,O,removed), - arg(3,O,X), - ( var(X) -> - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',Y), - Y=[_|Z], - b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',Z), - ( Z=[A1|_] -> - setarg(3,A1,_) - ; - true - ) - ; - X=[_,_|Z], - setarg(2,X,Z), - ( Z=[A1|_] -> - setarg(3,A1,X) - ; - true - ) - ), - arg(2,F,S), - setarg(2,F,active), - ( S==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',T), - U=[F|T], - b_setval('$chr_store_global_ground_chr_translate____rule___2',U), - ( T=[V|_] -> - setarg(4,V,U) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',W), - insert_ht(W,D,F) - ; - true - ), - first_occ_in_rule(D,G,J,K), - tree_set_add(N,G,R), - multiple_occ_constraints_checked(R), - ( F=suspension(_,active,_,_,_,_) -> - setarg(2,F,inactive), - rule___2__6__3__13(P,A,M,J,K,B,L,G,H,C,I,D,E,F) - ; - true - ) - ; - rule___2__6__3__13(P,A,M,J,K,B,L,G,H,C,I,D,E,F) - ). -rule___2__6(A,B,C) :- - rule___2__7(A,B,C). -rule___2__7(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____static_type_check___0',D), - !, - rule___2__7__0__15(D,A,B,C). -rule___2__7__0__15([],B,C,A) :- - rule___2__8(B,C,A). -rule___2__7__0__15([D|E],B,C,A) :- - ( D=suspension(_,active,_,_), - T=t(209,A,D), - '$novel_production'(A,T), - '$novel_production'(D,T) -> - '$extend_history'(A,T), - arg(2,A,U), - setarg(2,A,active), - ( U==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',V), - W=[A|V], - b_setval('$chr_store_global_ground_chr_translate____rule___2',W), - ( V=[X|_] -> - setarg(4,X,W) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',Y), - insert_ht(Y,B,A) - ; - true - ), - copy_term_nat(C,F), - F=pragma(rule(G,H,_,I),ids(_,_),_,_,_), - ( - catch((static_type_check_heads(G),static_type_check_heads(H),conj2list(I,J),static_type_check_body(J)),type_error(K),(K=invalid_functor(L,M,N)->chr_error(type_error,'Invalid functor in ~@ of ~@: - found `~w'', - expected type `~w''! -',[chr_translate:format_src(L),format_rule(C),M,N]);K=type_clash(O,P,Q,R,S)->chr_error(type_error,'Type clash for variable ~w in ~@: - expected type ~w in ~@ - expected type ~w in ~@ -',[O,format_rule(C),R,chr_translate:format_src(P),S,chr_translate:format_src(Q)]))), - fail - ; - true - ), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - rule___2__7__0__15(E,B,C,A) - ; - true - ) - ; - rule___2__7__0__15(E,B,C,A) - ). -rule___2__7(A,B,C) :- - rule___2__8(A,B,C). -rule___2__8(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',E), - lookup_ht(E,A,D), - !, - rule___2__8__0__16(D,A,B,C). -rule___2__8__0__16([],B,C,A) :- - rule___2__9(B,C,A). -rule___2__8__0__16([F|G],B,C,A) :- - ( F=suspension(_,active,_,D,E), - D==B, - K=t(246,A,F), - '$novel_production'(A,K), - '$novel_production'(F,K), - C=pragma(rule(_,_,_,_),ids([E|I],H),_,_,B) -> - '$extend_history'(A,K), - arg(2,A,L), - setarg(2,A,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',M), - N=[A|M], - b_setval('$chr_store_global_ground_chr_translate____rule___2',N), - ( M=[O|_] -> - setarg(4,O,N) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',P), - insert_ht(P,B,A) - ; - true - ), - append(I,H,J), - check_all_passive(B,J), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - rule___2__8__0__16(G,B,C,A) - ; - true - ) - ; - rule___2__8__0__16(G,B,C,A) - ). -rule___2__8(A,B,C) :- - rule___2__9(A,B,C). -rule___2__9(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-1',E), - lookup_ht(E,A,D), - !, - rule___2__9__0__17(D,A,B,C). -rule___2__9__0__17([],B,C,A) :- - rule___2__10(B,C,A). -rule___2__9__0__17([F|G],B,C,A) :- - ( F=suspension(_,active,_,D,E), - D==B, - I=t(247,A,F), - '$novel_production'(A,I), - '$novel_production'(F,I), - C=pragma(rule(_,_,_,_),ids([],[E|H]),_,_,B) -> - '$extend_history'(A,I), - arg(2,A,J), - setarg(2,A,active), - ( J==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',K), - L=[A|K], - b_setval('$chr_store_global_ground_chr_translate____rule___2',L), - ( K=[M|_] -> - setarg(4,M,L) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',N), - insert_ht(N,B,A) - ; - true - ), - check_all_passive(B,H), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - rule___2__9__0__17(G,B,C,A) - ; - true - ) - ; - rule___2__9__0__17(G,B,C,A) - ). -rule___2__9(A,B,C) :- - rule___2__10(A,B,C). -rule___2__10(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',E), - hash_term(k(A,11910),F), - lookup_ht1(E,F,k(A,[]),D), - !, - rule___2__10__0__18(D,A,B,C). -rule___2__10__0__18([],B,C,A) :- - rule___2__11(B,C,A). -rule___2__10__0__18([F|G],A,B,C) :- - ( F=suspension(_,active,D,E), - D==A, - E=[] -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-12',M), - delete_ht(M,k(A,[]),F), - nb_getval('$chr_store_multi_hash_chr_translate____check_all_passive___2-1',N), - delete_ht(N,A,F), - arg(2,C,H), - setarg(2,C,active), - ( H==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',I), - J=[C|I], - b_setval('$chr_store_global_ground_chr_translate____rule___2',J), - ( I=[K|_] -> - setarg(4,K,J) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',L), - insert_ht(L,A,C) - ; - true - ), - chr_warning(weird_program,'All heads passive in ~@. - This rule never fires. Please check your program. -',[format_rule(B)]), - ( C=suspension(_,active,_,_,_,_) -> - setarg(2,C,inactive), - rule___2__10__0__18(G,A,B,C) - ; - true - ) - ; - rule___2__10__0__18(G,A,B,C) - ). -rule___2__10(A,B,C) :- - rule___2__11(A,B,C). -rule___2__11(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',E), - lookup_ht1(E,A,A,D), - !, - rule___2__11__0__23(D,A,B,C). -rule___2__11__0__23([],B,C,A) :- - rule___2__12(B,C,A). -rule___2__11__0__23([H|J],B,C,A) :- - ( H=suspension(_,active,_,_,D,_,E,F,G), - E==B, - nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',I) -> - rule___2__11__1__23(I,D,F,G,H,J,B,C,A) - ; - rule___2__11__0__23(J,B,C,A) - ). -rule___2__11__1__23([],_,_,_,_,A,C,D,B) :- - rule___2__11__0__23(A,C,D,B). -rule___2__11__1__23([I|K],F,G,H,A,B,D,E,C) :- - ( I=suspension(_,active,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',L), - lookup_ht(L,F,J) -> - rule___2__11__2__23(J,I,K,F,G,H,A,B,D,E,C) - ; - rule___2__11__1__23(K,F,G,H,A,B,D,E,C) - ). -rule___2__11__2__23([],_,A,G,H,I,B,C,E,F,D) :- - rule___2__11__1__23(A,G,H,I,B,C,E,F,D). -rule___2__11__2__23([M|N],A,B,H,I,J,C,D,F,G,E) :- - ( M=suspension(_,active,_,_,K,L), - K==H, - U=t(325,A,C,E,M), - '$novel_production'(A,U), - '$novel_production'(C,U), - '$novel_production'(E,U), - '$novel_production'(M,U) -> - '$extend_history'(E,U), - arg(2,E,V), - setarg(2,E,active), - ( V==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',W), - X=[E|W], - b_setval('$chr_store_global_ground_chr_translate____rule___2',X), - ( W=[Y|_] -> - setarg(4,Y,X) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',Z), - insert_ht(Z,F,E) - ; - true - ), - G=pragma(rule(O,P,Q,_),_,_,_,_), - ( is_passive(F,I) -> - true - ; - ( J==simplification -> - select(R,O,_), - R=..[_|S], - term_variables(Q,T), - partial_wake_args(S,L,T,H) - ) - ; - select(R,P,_), - R=..[_|S], - term_variables(Q,T), - partial_wake_args(S,L,T,H) - ), - ( E=suspension(_,active,_,_,_,_) -> - setarg(2,E,inactive), - rule___2__11__2__23(N,A,B,H,I,J,C,D,F,G,E) - ; - true - ) - ; - rule___2__11__2__23(N,A,B,H,I,J,C,D,F,G,E) - ). -rule___2__11(A,B,C) :- - rule___2__12(A,B,C). -rule___2__12(A,_,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____rule___2',E), - ( D=[F|_] -> - setarg(4,F,E) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',G), - insert_ht(G,A,B) - ; - true - ). -get_rule(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',F), - lookup_ht1(F,A,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - !, - B=D. -get_rule(_,_) :- - fail. -least_occurrence(A,[B|C]) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',P), - lookup_ht1(P,A,A,E), - 'chr sbag_member'(D,E), - D=suspension(_,active,_,_,_,_), - ( - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',R), - lookup_ht(R,k(A,B),I), - 'chr sbag_member'(F,I), - F=suspension(_,active,_,_,G,H,_,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',Q), - lookup_ht(Q,G,L), - 'chr sbag_member'(J,L), - J=suspension(_,active,_,_,K), - K>=H, - \+may_trigger(G), - !, - least_occurrence(A,C) - ; - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',O), - lookup_ht(O,k(A,B),N), - 'chr sbag_member'(M,N), - M=suspension(_,active,_,_,_), - !, - least_occurrence(A,C) - ). -least_occurrence(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',E), - insert_ht(E,k(A,B),C), - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-1',F), - insert_ht(F,A,C). -is_least_occurrence(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____least_occurrence___2-12',D), - hash_term(k(A,11910),E), - lookup_ht1(D,E,k(A,[]),C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - !. -is_least_occurrence(_) :- - fail. -stored_in_guard_lookahead(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',L), - lookup_ht(L,k(A,B),G), - 'chr sbag_member'(C,G), - C=suspension(_,active,_,_,_,_,D,E,F), - ( - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',M), - lookup_ht(M,k(D,E),I), - 'chr sbag_member'(H,I), - H=suspension(_,active,_,_,_), - !, - J is B+1, - stored_in_guard_lookahead(A,J) - ; - !, - F==simplification, - ( is_stored_in_guard(A,D) -> - true - ; - K is B+1, - stored_in_guard_lookahead(A,K) - ) - ). -stored_in_guard_lookahead(_,_) :- - fail. -constraint_index(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',E), - insert_ht(E,B,C), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',F), - insert_ht(F,A,C). -get_constraint_index(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - !, - B=D. -get_constraint_index(_,_) :- - fail. -get_indexed_constraint(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_index___2-2',F), - G is abs(A), - lookup_ht1(F,G,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,D,_), - !, - B=D. -get_indexed_constraint(_,_) :- - fail. -max_constraint_index(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____max_constraint_index___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -get_max_constraint_index(A) :- - nb_getval('$chr_store_global_ground_chr_translate____max_constraint_index___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - A=C. -get_max_constraint_index(0). -identifier_size(A) :- - nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',C), - ( - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - ! - ; - !, - identifier_size___1__0__0__2(C,A) - ). -identifier_size___1__0__0__2([],A) :- - identifier_size___1__1(A). -identifier_size___1__0__0__2([B|C],A) :- - ( B=suspension(_,active,_,_) -> - setarg(2,B,removed), - arg(3,B,D), - ( var(D) -> - nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',E), - E=[_|F], - b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - identifier_size___1__0__0__2(C,A) - ; - identifier_size___1__0__0__2(C,A) - ). -identifier_size(A) :- - identifier_size___1__1(A). -identifier_size___1__1(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -get_identifier_size(A) :- - nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - A=C. -get_identifier_size(1). -identifier_index(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',F), - lookup_ht(F,k(A,B),E), - ( - 'chr sbag_member'(D,E), - D=suspension(_,active,_,_,_), - ! - ; - !, - identifier_index___3__0__0__2(E,A,B,C) - ). -identifier_index___3__0__0__2([],A,B,C) :- - identifier_index___3__1(A,B,C). -identifier_index___3__0__0__2([F|G],A,B,C) :- - ( F=suspension(_,active,D,E,_), - D==A, - E==B -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',H), - delete_ht(H,k(A,B),F), - identifier_index___3__0__0__2(G,A,B,C) - ; - identifier_index___3__0__0__2(G,A,B,C) - ). -identifier_index(A,B,C) :- - identifier_index___3__1(A,B,C). -identifier_index___3__1(A,B,C) :- - D=suspension(E,active,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',F), - insert_ht(F,k(A,B),D). -get_identifier_index(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____identifier_index___3-12',G), - lookup_ht(G,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - !, - C=E. -get_identifier_index(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,E), - !, - setarg(2,D,removed), - arg(3,D,H), - ( var(H) -> - nb_getval('$chr_store_global_ground_chr_translate____identifier_size___1',I), - I=[_|J], - b_setval('$chr_store_global_ground_chr_translate____identifier_size___1',J), - ( J=[K|_] -> - setarg(3,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(3,K,H) - ; - true - ) - ), - G is E+1, - identifier_index(A,B,G), - identifier_size(G), - C=G. -get_identifier_index(A,B,C) :- - identifier_index(A,B,2), - identifier_size(2), - C=2. -type_indexed_identifier_size(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',E), - lookup_ht(E,A,D), - ( - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - ! - ; - !, - type_indexed_identifier_size___2__0__0__2(D,A,B) - ). -type_indexed_identifier_size___2__0__0__2([],A,B) :- - type_indexed_identifier_size___2__1(A,B). -type_indexed_identifier_size___2__0__0__2([D|E],A,B) :- - ( D=suspension(_,active,C,_), - C==A -> - setarg(2,D,removed), - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',F), - delete_ht(F,A,D), - type_indexed_identifier_size___2__0__0__2(E,A,B) - ; - type_indexed_identifier_size___2__0__0__2(E,A,B) - ). -type_indexed_identifier_size(A,B) :- - type_indexed_identifier_size___2__1(A,B). -type_indexed_identifier_size___2__1(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',E), - insert_ht(E,A,C). -get_type_indexed_identifier_size(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - !, - B=D. -get_type_indexed_identifier_size(_,1). -type_indexed_identifier_index(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',G), - lookup_ht(G,k(B,C),F), - ( - 'chr sbag_member'(E,F), - E=suspension(_,active,_,_,_,_), - ! - ; - !, - type_indexed_identifier_index___4__0__0__2(F,A,B,C,D) - ). -type_indexed_identifier_index___4__0__0__2([],A,B,C,D) :- - type_indexed_identifier_index___4__1(A,B,C,D). -type_indexed_identifier_index___4__0__0__2([H|I],A,B,C,D) :- - ( H=suspension(_,active,E,F,G,_), - F==B, - G==C -> - setarg(2,H,removed), - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',J), - delete_ht(J,k(E,B,C),H), - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',K), - delete_ht(K,k(B,C),H), - type_indexed_identifier_index___4__0__0__2(I,A,B,C,D) - ; - type_indexed_identifier_index___4__0__0__2(I,A,B,C,D) - ). -type_indexed_identifier_index(A,B,C,D) :- - type_indexed_identifier_index___4__1(A,B,C,D). -type_indexed_identifier_index___4__1(A,B,C,D) :- - E=suspension(F,active,A,B,C,D), - 'chr gen_id'(F), - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',G), - insert_ht(G,k(A,B,C),E), - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-23',H), - insert_ht(H,k(B,C),E). -get_type_indexed_identifier_index(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_index___4-123',H), - lookup_ht(H,k(A,B,C),G), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,_,_,F), - !, - D=F. -get_type_indexed_identifier_index(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',J), - lookup_ht(J,A,G), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,F), - !, - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____type_indexed_identifier_size___2-1',I), - delete_ht(I,A,E), - H is F+1, - type_indexed_identifier_index(A,B,C,H), - type_indexed_identifier_size(A,H), - D=H. -get_type_indexed_identifier_index(A,B,C,D) :- - type_indexed_identifier_index(A,B,C,2), - type_indexed_identifier_size(A,2), - D=2. -no_history(A) :- - B=suspension(C,active,A), - 'chr gen_id'(C), - nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1',D), - insert_ht(D,A,B). -has_no_history(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____no_history___1-1',D), - E is abs(A), - lookup_ht1(D,E,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !. -has_no_history(_) :- - fail. -history(A,B,C) :- - history___3__0(A,B,C,_). -history___3__0(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',G), - lookup_ht(G,A,E), - !, - D=suspension(F,not_stored_yet,t,A,B,C), - 'chr gen_id'(F), - history___3__0__0__1(E,A,B,C,D). -history___3__0__0__1([],B,C,D,A) :- - history___3__1(B,C,D,A). -history___3__0__0__1([F|G],B,C,D,A) :- - ( F=suspension(_,active,_,E,_,_), - E==B, - H=t(93,A,F), - '$novel_production'(A,H), - '$novel_production'(F,H) -> - '$extend_history'(A,H), - arg(2,A,I), - setarg(2,A,active), - ( I==not_stored_yet -> - ( '$chr_store_constants_chr_translate____history___3___[3]'(D,J) -> - nb_getval(J,K), - b_setval(J,[A|K]) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',L), - insert_ht(L,C,A), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',M), - insert_ht(M,B,A) - ; - true - ), - chr_error(syntax,'Only one pragma history allowed per rule (rule number ~w) -',[B]), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - history___3__0__0__1(G,B,C,D,A) - ; - true - ) - ; - history___3__0__0__1(G,B,C,D,A) - ). -history___3__0(A,B,C,D) :- - D=suspension(E,not_stored_yet,t,A,B,C), - 'chr gen_id'(E), - history___3__1(A,B,C,D). -history___3__1(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',F), - lookup_ht(F,A,E), - !, - history___3__1__0__2(E,A,B,C,D). -history___3__1__0__2([],B,C,D,A) :- - history___3__2(B,C,D,A). -history___3__1__0__2([F|G],B,C,D,A) :- - ( F=suspension(_,active,_,E,_,_), - E==B, - H=t(93,F,A), - '$novel_production'(F,H), - '$novel_production'(A,H) -> - '$extend_history'(A,H), - arg(2,A,I), - setarg(2,A,active), - ( I==not_stored_yet -> - ( '$chr_store_constants_chr_translate____history___3___[3]'(D,J) -> - nb_getval(J,K), - b_setval(J,[A|K]) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',L), - insert_ht(L,C,A), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',M), - insert_ht(M,B,A) - ; - true - ), - chr_error(syntax,'Only one pragma history allowed per rule (rule number ~w) -',[B]), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - history___3__1__0__2(G,B,C,D,A) - ; - true - ) - ; - history___3__1__0__2(G,B,C,D,A) - ). -history___3__1(A,B,C,D) :- - history___3__2(A,B,C,D). -history___3__2(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',F), - lookup_ht(F,B,E), - !, - history___3__2__0__3(E,A,B,C,D). -history___3__2__0__3([],B,C,D,A) :- - history___3__3(B,C,D,A). -history___3__2__0__3([H|I],B,C,D,A) :- - ( H=suspension(_,active,_,E,F,G), - F==C, - L=t(94,A,H), - '$novel_production'(A,L), - '$novel_production'(H,L) -> - '$extend_history'(A,L), - arg(2,A,M), - setarg(2,A,active), - ( M==not_stored_yet -> - ( '$chr_store_constants_chr_translate____history___3___[3]'(D,N) -> - nb_getval(N,O), - b_setval(N,[A|O]) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',P), - insert_ht(P,C,A), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',Q), - insert_ht(Q,B,A) - ; - true - ), - length(D,J), - length(G,K), - ( J\==K -> - chr_error(syntax,'The history named ~w does not always range over an equal amount of occurrences. -',[C]) - ; - test_named_history_id_pairs(B,D,E,G) - ), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - history___3__2__0__3(I,B,C,D,A) - ; - true - ) - ; - history___3__2__0__3(I,B,C,D,A) - ). -history___3__2(A,B,C,D) :- - history___3__3(A,B,C,D). -history___3__3(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',F), - lookup_ht(F,B,E), - !, - history___3__3__0__4(E,A,B,C,D). -history___3__3__0__4([],B,C,D,A) :- - history___3__4(B,C,D,A). -history___3__3__0__4([H|I],B,C,D,A) :- - ( H=suspension(_,active,_,E,F,G), - F==C, - L=t(94,H,A), - '$novel_production'(H,L), - '$novel_production'(A,L) -> - '$extend_history'(A,L), - arg(2,A,M), - setarg(2,A,active), - ( M==not_stored_yet -> - ( '$chr_store_constants_chr_translate____history___3___[3]'(D,N) -> - nb_getval(N,O), - b_setval(N,[A|O]) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',P), - insert_ht(P,C,A), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',Q), - insert_ht(Q,B,A) - ; - true - ), - length(G,J), - length(D,K), - ( J\==K -> - chr_error(syntax,'The history named ~w does not always range over an equal amount of occurrences. -',[C]) - ; - test_named_history_id_pairs(E,G,B,D) - ), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - history___3__3__0__4(I,B,C,D,A) - ; - true - ) - ; - history___3__3__0__4(I,B,C,D,A) - ). -history___3__3(A,B,C,D) :- - history___3__4(A,B,C,D). -history___3__4(A,B,[],C) :- - nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',D), - !, - history___3__4__0__6(D,A,B,[],C). -history___3__4__0__6([],B,C,D,A) :- - history___3__5(B,C,D,A). -history___3__4__0__6([E|F],B,C,D,A) :- - ( E=suspension(_,active,_,_), - G=t(140,E,A), - '$novel_production'(E,G), - '$novel_production'(A,G) -> - '$extend_history'(A,G), - arg(2,A,H), - setarg(2,A,active), - ( H==not_stored_yet -> - ( '$chr_store_constants_chr_translate____history___3___[3]'(D,I) -> - nb_getval(I,J), - b_setval(I,[A|J]) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',K), - insert_ht(K,C,A), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',L), - insert_ht(L,B,A) - ; - true - ), - generate_empty_named_history_initialisation(C), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - history___3__4__0__6(F,B,C,D,A) - ; - true - ) - ; - history___3__4__0__6(F,B,C,D,A) - ). -history___3__4(A,B,C,D) :- - history___3__5(A,B,C,D). -history___3__5(A,B,C,D) :- - arg(2,D,E), - setarg(2,D,active), - ( E==not_stored_yet -> - ( '$chr_store_constants_chr_translate____history___3___[3]'(C,F) -> - nb_getval(F,G), - b_setval(F,[D|G]) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-2',H), - insert_ht(H,B,D), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',I), - insert_ht(I,A,D) - ; - true - ). -named_history(A,B,C) :- - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____history___3-1',H), - lookup_ht(H,A,G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - !, - B=E, - C=F. -named_history(_,_,_) :- - fail. -test_named_history_id_pair(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',L), - lookup_ht(L,k(A,B),G), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,_,F,_,_,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-34',K), - lookup_ht(K,k(C,D),J), - 'chr sbag_member'(H,J), - H=suspension(_,active,_,_,I,_,_,_,_), - H\==E, - I=F, - !. -test_named_history_id_pair(A,_,B,_) :- - chr_error(syntax,'Occurrences of shared history in rules number ~w and ~w do not correspond -',[B,A]). -indexing_spec(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',H), - lookup_ht(H,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - !, - setarg(2,C,removed), - nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',G), - delete_ht(G,A,C), - append(B,D,F), - indexing_spec(A,F). -indexing_spec(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',E), - insert_ht(E,A,C). -get_indexing_spec(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____indexing_spec___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - !, - B=D. -get_indexing_spec(_,[]). -observation_analysis(A) :- - observation_analysis___1__0(A,_). -observation_analysis___1__0(A,B) :- - nb_getval('$chr_store_global_ground_chr_translate____rule___2',C), - !, - B=suspension(D,not_stored_yet,_,A), - 'chr gen_id'(D), - observation_analysis___1__0__0__1(C,A,B). -observation_analysis___1__0__0__1([],B,A) :- - observation_analysis___1__1(B,A). -observation_analysis___1__0__0__1([E|F],B,A) :- - ( E=suspension(_,active,_,_,C,D) -> - D=pragma(rule(_,_,G,H),_,_,_,_), - ( chr_pp_flag(store_in_guards,on) -> - observation_analysis(C,G,guard,B) - ; - true - ), - observation_analysis(C,H,body,B), - observation_analysis___1__0__0__1(F,B,A) - ; - observation_analysis___1__0__0__1(F,B,A) - ). -observation_analysis___1__0(A,B) :- - B=suspension(C,not_stored_yet,_,A), - 'chr gen_id'(C), - observation_analysis___1__1(A,B). -observation_analysis___1__1(_,A) :- - ( var(A) -> - true - ; - arg(2,A,F), - setarg(2,A,removed), - ( F==not_stored_yet -> - true - ; - arg(3,A,B), - ( var(B) -> - nb_getval('$chr_store_global_ground_chr_translate____observation_analysis___1',C), - C=[_|D], - b_setval('$chr_store_global_ground_chr_translate____observation_analysis___1',D), - ( D=[E|_] -> - setarg(3,E,_) - ; - true - ) - ; - B=[_,_|D], - setarg(2,B,D), - ( D=[E|_] -> - setarg(3,E,B) - ; - true - ) - ) - ) - ). -spawns(A,B,C) :- - spawns___3__0(A,B,C,_). -spawns___3__0(A,B,C,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',F), - lookup_ht(F,k(A,B,C),E), - 'chr sbag_member'(D,E), - D=suspension(_,active,_,_,_,_,_), - !. -spawns___3__0(A,body,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',E), - hash_term(k(A,1612897,B),F), - lookup_ht1(E,F,k(A,guard,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_,_,_,_), - !. -spawns___3__0(A,guard,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',E), - hash_term(k(A,1640016,B),F), - lookup_ht1(E,F,k(A,body,B),D), - !, - spawns___3__0__0__4(D,A,guard,B,C). -spawns___3__0__0__4([],B,C,D,A) :- - spawns___3__1(B,C,D,A). -spawns___3__0__0__4([H|I],A,B,C,D) :- - ( H=suspension(_,active,_,_,E,F,G), - E==A, - F=body, - G==C -> - setarg(2,H,removed), - arg(4,H,J), - ( var(J) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',K), - K=[_|L], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',L), - ( L=[M|_] -> - setarg(4,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(4,M,J) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',N), - delete_ht(N,k(A,body),H), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',O), - delete_ht(O,A,H), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',P), - delete_ht(P,C,H), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',Q), - delete_ht(Q,k(A,body,C),H), - spawns___3__0__0__4(I,A,B,C,D) - ; - spawns___3__0__0__4(I,A,B,C,D) - ). -spawns___3__0(A,B,C,D) :- - spawns___3__1(A,B,C,D). -spawns___3__1(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',P), - lookup_ht(P,k(A,B),F), - 'chr sbag_member'(E,F), - E=suspension(_,active,_,_), - !, - ( var(D) -> - true - ; - arg(2,D,O), - setarg(2,D,removed), - ( O==not_stored_yet -> - true - ; - arg(4,D,G), - ( var(G) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',H), - H=[_|I], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',I), - ( I=[J|_] -> - setarg(4,J,_) - ; - true - ) - ; - G=[_,_|I], - setarg(2,G,I), - ( I=[J|_] -> - setarg(4,J,G) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',K), - delete_ht(K,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',L), - delete_ht(L,A,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',M), - delete_ht(M,C,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',N), - delete_ht(N,k(A,B,C),D) - ) - ). -spawns___3__1(A,body,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',O), - hash_term(k(A,1612897),P), - lookup_ht1(O,P,k(A,guard),E), - 'chr sbag_member'(D,E), - D=suspension(_,active,_,_), - !, - ( var(C) -> - true - ; - arg(2,C,N), - setarg(2,C,removed), - ( N==not_stored_yet -> - true - ; - arg(4,C,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',H), - ( H=[I|_] -> - setarg(4,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(4,I,F) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',J), - delete_ht(J,k(A,body),C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',K), - delete_ht(K,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',L), - delete_ht(L,B,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',M), - delete_ht(M,k(A,body,B),C) - ) - ). -spawns___3__1(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',P), - lookup_ht(P,k(A,B),F), - 'chr sbag_member'(E,F), - E=suspension(_,active,_,_,_,_), - may_trigger(C), - !, - ( var(D) -> - true - ; - arg(2,D,O), - setarg(2,D,removed), - ( O==not_stored_yet -> - true - ; - arg(4,D,G), - ( var(G) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',H), - H=[_|I], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',I), - ( I=[J|_] -> - setarg(4,J,_) - ; - true - ) - ; - G=[_,_|I], - setarg(2,G,I), - ( I=[J|_] -> - setarg(4,J,G) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',K), - delete_ht(K,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',L), - delete_ht(L,A,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',M), - delete_ht(M,C,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',N), - delete_ht(N,k(A,B,C),D) - ) - ). -spawns___3__1(A,body,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',O), - hash_term(k(A,1612897),P), - lookup_ht1(O,P,k(A,guard),E), - 'chr sbag_member'(D,E), - D=suspension(_,active,_,_,_,_), - may_trigger(B), - !, - ( var(C) -> - true - ; - arg(2,C,N), - setarg(2,C,removed), - ( N==not_stored_yet -> - true - ; - arg(4,C,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',H), - ( H=[I|_] -> - setarg(4,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(4,I,F) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',J), - delete_ht(J,k(A,body),C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',K), - delete_ht(K,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',L), - delete_ht(L,B,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',M), - delete_ht(M,k(A,body,B),C) - ) - ). -spawns___3__1(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',N), - lookup_ht(N,C,H), - ( - 'chr sbag_member'(E,H), - E=suspension(_,active,_,_,_,_,F,G,_), - ( - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',H1), - lookup_ht(H1,F,J), - 'chr sbag_member'(I,J), - I=suspension(_,active,_,_), - \+is_passive(F,G), - !, - ( var(D) -> - true - ; - arg(2,D,G1), - setarg(2,D,removed), - ( G1==not_stored_yet -> - true - ; - arg(4,D,Y), - ( var(Y) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',Z), - Z=[_|A1], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',A1), - ( A1=[B1|_] -> - setarg(4,B1,_) - ; - true - ) - ; - Y=[_,_|A1], - setarg(2,Y,A1), - ( A1=[B1|_] -> - setarg(4,B1,Y) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',C1), - delete_ht(C1,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',D1), - delete_ht(D1,A,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',E1), - delete_ht(E1,C,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',F1), - delete_ht(F1,k(A,B,C),D) - ) - ), - spawns_all(A,B) - ; - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',X), - lookup_ht(X,F,L), - 'chr sbag_member'(K,L), - K=suspension(_,active,_,_,_,_), - may_trigger(C), - \+is_passive(F,G), - !, - ( var(D) -> - true - ; - arg(2,D,W), - setarg(2,D,removed), - ( W==not_stored_yet -> - true - ; - arg(4,D,O), - ( var(O) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',P), - P=[_|Q], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',Q), - ( Q=[R|_] -> - setarg(4,R,_) - ; - true - ) - ; - O=[_,_|Q], - setarg(2,O,Q), - ( Q=[R|_] -> - setarg(4,R,O) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',S), - delete_ht(S,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',T), - delete_ht(T,A,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',U), - delete_ht(U,C,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',V), - delete_ht(V,k(A,B,C),D) - ) - ), - spawns_all_triggers(A,B) - ) - ; - !, - D=suspension(M,not_stored_yet,t,_,A,B,C), - 'chr gen_id'(M), - spawns___3__1__0__11(H,A,B,C,D) - ). -spawns___3__1__0__11([],B,C,D,A) :- - spawns___3__2(B,C,D,A). -spawns___3__1__0__11([H|J],B,C,D,A) :- - ( H=suspension(_,active,_,_,E,_,F,G,_), - E==D, - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',K), - lookup_ht(K,F,I) -> - spawns___3__1__1__11(I,F,G,H,J,B,C,D,A) - ; - spawns___3__1__0__11(J,B,C,D,A) - ). -spawns___3__1__1__11([],_,_,_,A,C,D,E,B) :- - spawns___3__1__0__11(A,C,D,E,B). -spawns___3__1__1__11([J|K],G,H,A,B,D,E,F,C) :- - ( J=suspension(_,active,_,_,I,_), - I==G, - L=t(121,J,A,C), - '$novel_production'(J,L), - '$novel_production'(C,L), - \+may_trigger(F), - \+is_passive(G,H) -> - '$extend_history'(C,L), - arg(2,C,M), - setarg(2,C,active), - ( M==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',N), - O=[C|N], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',O), - ( N=[P|_] -> - setarg(4,P,O) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',Q), - insert_ht(Q,k(D,E),C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',R), - insert_ht(R,D,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',S), - insert_ht(S,F,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',T), - insert_ht(T,k(D,E,F),C) - ; - true - ), - spawns_all_triggers(D,E), - ( C=suspension(_,active,_,_,_,_,_) -> - setarg(2,C,inactive), - spawns___3__1__1__11(K,G,H,A,B,D,E,F,C) - ; - true - ) - ; - spawns___3__1__1__11(K,G,H,A,B,D,E,F,C) - ). -spawns___3__1(A,B,C,D) :- - D=suspension(E,not_stored_yet,t,_,A,B,C), - 'chr gen_id'(E), - spawns___3__2(A,B,C,D). -spawns___3__2(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',F), - lookup_ht1(F,A,A,E), - !, - spawns___3__2__0__12(E,A,B,C,D). -spawns___3__2__0__12([],B,C,D,A) :- - spawns___3__3(B,C,D,A). -spawns___3__2__0__12([H|J],B,C,D,A) :- - ( H=suspension(_,active,_,_,E,_,F,G,_), - F==B, - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',K), - lookup_ht(K,E,I) -> - spawns___3__2__1__12(I,E,G,H,J,B,C,D,A) - ; - spawns___3__2__0__12(J,B,C,D,A) - ). -spawns___3__2__1__12([],_,_,_,A,C,D,E,B) :- - spawns___3__2__0__12(A,C,D,E,B). -spawns___3__2__1__12([L|M],G,H,A,B,D,E,F,C) :- - ( L=suspension(_,active,_,_,I,J,K), - K==G, - N=t(122,C,A,L), - '$novel_production'(C,N), - '$novel_production'(L,N), - I\==D, - G\==F, - \+is_passive(D,H) -> - '$extend_history'(C,N), - arg(2,C,O), - setarg(2,C,active), - ( O==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',P), - Q=[C|P], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',Q), - ( P=[R|_] -> - setarg(4,R,Q) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',S), - insert_ht(S,k(D,E),C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',T), - insert_ht(T,D,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',U), - insert_ht(U,F,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',V), - insert_ht(V,k(D,E,F),C) - ; - true - ), - spawns(I,J,F), - ( C=suspension(_,active,_,_,_,_,_) -> - setarg(2,C,inactive), - spawns___3__2__1__12(M,G,H,A,B,D,E,F,C) - ; - true - ) - ; - spawns___3__2__1__12(M,G,H,A,B,D,E,F,C) - ). -spawns___3__2(A,B,C,D) :- - spawns___3__3(A,B,C,D). -spawns___3__3(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',F), - lookup_ht(F,C,E), - !, - spawns___3__3__0__13(E,A,B,C,D). -spawns___3__3__0__13([],B,C,D,A) :- - spawns___3__4(B,C,D,A). -spawns___3__3__0__13([H|J],B,C,D,A) :- - ( H=suspension(_,active,_,_,E,_,F,G,_), - E==D, - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',K), - lookup_ht(K,F,I) -> - spawns___3__3__1__13(I,F,G,H,J,B,C,D,A) - ; - spawns___3__3__0__13(J,B,C,D,A) - ). -spawns___3__3__1__13([],_,_,_,A,C,D,E,B) :- - spawns___3__3__0__13(A,C,D,E,B). -spawns___3__3__1__13([K|L],G,H,A,B,D,E,F,C) :- - ( K=suspension(_,active,_,_,I,_,J), - I==G, - M=t(122,K,A,C), - '$novel_production'(K,M), - '$novel_production'(C,M), - D\==G, - F\==J, - \+is_passive(G,H) -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',O), - P=[C|O], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',R), - insert_ht(R,k(D,E),C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',S), - insert_ht(S,D,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',T), - insert_ht(T,F,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',U), - insert_ht(U,k(D,E,F),C) - ; - true - ), - spawns(D,E,J), - ( C=suspension(_,active,_,_,_,_,_) -> - setarg(2,C,inactive), - spawns___3__3__1__13(L,G,H,A,B,D,E,F,C) - ; - true - ) - ; - spawns___3__3__1__13(L,G,H,A,B,D,E,F,C) - ). -spawns___3__3(A,B,C,D) :- - spawns___3__4(A,B,C,D). -spawns___3__4(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',F), - lookup_ht1(F,A,A,E), - !, - spawns___3__4__0__14(E,A,B,C,D). -spawns___3__4__0__14([],B,C,D,A) :- - spawns___3__5(B,C,D,A). -spawns___3__4__0__14([H|J],B,C,D,A) :- - ( H=suspension(_,active,_,_,E,_,F,G,_), - F==B, - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',I) -> - spawns___3__4__1__14(I,E,G,H,J,B,C,D,A) - ; - spawns___3__4__0__14(J,B,C,D,A) - ). -spawns___3__4__1__14([],_,_,_,A,C,D,E,B) :- - spawns___3__4__0__14(A,C,D,E,B). -spawns___3__4__1__14([K|L],G,H,A,B,D,E,F,C) :- - ( K=suspension(_,active,_,_,I,J), - M=t(123,C,A,K), - '$novel_production'(C,M), - '$novel_production'(K,M), - \+is_passive(D,H), - may_trigger(G), - \+may_trigger(F) -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',O), - P=[C|O], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',R), - insert_ht(R,k(D,E),C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',S), - insert_ht(S,D,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',T), - insert_ht(T,F,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',U), - insert_ht(U,k(D,E,F),C) - ; - true - ), - spawns(I,J,F), - ( C=suspension(_,active,_,_,_,_,_) -> - setarg(2,C,inactive), - spawns___3__4__1__14(L,G,H,A,B,D,E,F,C) - ; - true - ) - ; - spawns___3__4__1__14(L,G,H,A,B,D,E,F,C) - ). -spawns___3__4(A,B,C,D) :- - spawns___3__5(A,B,C,D). -spawns___3__5(A,B,C,D) :- - arg(2,D,E), - setarg(2,D,active), - ( E==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',F), - G=[D|F], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',G), - ( F=[H|_] -> - setarg(4,H,G) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',I), - insert_ht(I,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',J), - insert_ht(J,A,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',K), - insert_ht(K,C,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',L), - insert_ht(L,k(A,B,C),D) - ; - true - ). -spawns_all(A,B) :- - spawns_all___2__0(A,B,_). -spawns_all___2__0(A,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -spawns_all___2__0(A,body,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',D), - hash_term(k(A,1612897),E), - lookup_ht1(D,E,k(A,guard),C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - !. -spawns_all___2__0(A,guard,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',D), - hash_term(k(A,1640016),E), - lookup_ht1(D,E,k(A,body),C), - !, - spawns_all___2__0__0__4(C,A,guard,B). -spawns_all___2__0__0__4([],B,C,A) :- - spawns_all___2__1(B,C,A). -spawns_all___2__0__0__4([F|G],A,B,C) :- - ( F=suspension(_,active,D,E), - D==A, - E=body -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',H), - delete_ht(H,A,F), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',I), - delete_ht(I,k(A,body),F), - spawns_all___2__0__0__4(G,A,B,C) - ; - spawns_all___2__0__0__4(G,A,B,C) - ). -spawns_all___2__0(A,B,C) :- - spawns_all___2__1(A,B,C). -spawns_all___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',E), - lookup_ht(E,k(A,B),D), - !, - spawns_all___2__1__0__5(D,A,B,C). -spawns_all___2__1__0__5([],B,C,A) :- - spawns_all___2__2(B,C,A). -spawns_all___2__1__0__5([G|H],A,B,C) :- - ( G=suspension(_,active,_,_,D,E,F), - D==A, - E==B -> - setarg(2,G,removed), - arg(4,G,I), - ( var(I) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',J), - J=[_|K], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',M), - delete_ht(M,k(A,B),G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',N), - delete_ht(N,A,G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',O), - delete_ht(O,F,G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',P), - delete_ht(P,k(A,B,F),G), - spawns_all___2__1__0__5(H,A,B,C) - ; - spawns_all___2__1__0__5(H,A,B,C) - ). -spawns_all___2__1(A,B,C) :- - spawns_all___2__2(A,B,C). -spawns_all___2__2(A,guard,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',D), - hash_term(k(A,1640016),E), - lookup_ht1(D,E,k(A,body),C), - !, - spawns_all___2__2__0__6(C,A,guard,B). -spawns_all___2__2__0__6([],B,C,A) :- - spawns_all___2__3(B,C,A). -spawns_all___2__2__0__6([G|H],A,B,C) :- - ( G=suspension(_,active,_,_,D,E,F), - D==A, - E=body -> - setarg(2,G,removed), - arg(4,G,I), - ( var(I) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',J), - J=[_|K], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',M), - delete_ht(M,k(A,body),G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',N), - delete_ht(N,A,G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',O), - delete_ht(O,F,G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',P), - delete_ht(P,k(A,body,F),G), - spawns_all___2__2__0__6(H,A,B,C) - ; - spawns_all___2__2__0__6(H,A,B,C) - ). -spawns_all___2__2(A,B,C) :- - spawns_all___2__3(A,B,C). -spawns_all___2__3(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',E), - lookup_ht(E,k(A,B),D), - !, - spawns_all___2__3__0__7(D,A,B,C). -spawns_all___2__3__0__7([],B,C,A) :- - spawns_all___2__4(B,C,A). -spawns_all___2__3__0__7([F|G],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - D==A, - E==B -> - setarg(2,F,removed), - arg(4,F,H), - ( var(H) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',I), - I=[_|J], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',J), - ( J=[K|_] -> - setarg(4,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(4,K,H) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',L), - delete_ht(L,A,F), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',M), - delete_ht(M,k(A,B),F), - spawns_all___2__3__0__7(G,A,B,C) - ; - spawns_all___2__3__0__7(G,A,B,C) - ). -spawns_all___2__3(A,B,C) :- - spawns_all___2__4(A,B,C). -spawns_all___2__4(A,guard,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',D), - hash_term(k(A,1640016),E), - lookup_ht1(D,E,k(A,body),C), - !, - spawns_all___2__4__0__8(C,A,guard,B). -spawns_all___2__4__0__8([],B,C,A) :- - spawns_all___2__5(B,C,A). -spawns_all___2__4__0__8([F|G],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - D==A, - E=body -> - setarg(2,F,removed), - arg(4,F,H), - ( var(H) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',I), - I=[_|J], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',J), - ( J=[K|_] -> - setarg(4,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(4,K,H) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',L), - delete_ht(L,A,F), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',M), - delete_ht(M,k(A,body),F), - spawns_all___2__4__0__8(G,A,B,C) - ; - spawns_all___2__4__0__8(G,A,B,C) - ). -spawns_all___2__4(A,B,C) :- - spawns_all___2__5(A,B,C). -spawns_all___2__5(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',F), - lookup_ht1(F,A,A,D), - !, - C=suspension(E,not_stored_yet,A,B), - 'chr gen_id'(E), - spawns_all___2__5__0__9(D,A,B,C). -spawns_all___2__5__0__9([],B,C,A) :- - spawns_all___2__6(B,C,A). -spawns_all___2__5__0__9([G|I],B,C,A) :- - ( G=suspension(_,active,_,_,D,_,E,F,_), - E==B, - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',J), - lookup_ht(J,D,H) -> - spawns_all___2__5__1__9(H,D,F,G,I,B,C,A) - ; - spawns_all___2__5__0__9(I,B,C,A) - ). -spawns_all___2__5__1__9([],_,_,_,A,C,D,B) :- - spawns_all___2__5__0__9(A,C,D,B). -spawns_all___2__5__1__9([K|L],E,F,A,G,B,C,D) :- - ( K=suspension(_,active,_,_,H,I,J), - J==E, - \+is_passive(B,F) -> - setarg(2,K,removed), - arg(4,K,P), - ( var(P) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',Q), - Q=[_|R], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',R), - ( R=[S|_] -> - setarg(4,S,_) - ; - true - ) - ; - P=[_,_|R], - setarg(2,P,R), - ( R=[S|_] -> - setarg(4,S,P) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',T), - delete_ht(T,k(H,I),K), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',U), - delete_ht(U,H,K), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',V), - delete_ht(V,E,K), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',W), - delete_ht(W,k(H,I,E),K), - arg(2,D,M), - setarg(2,D,active), - ( M==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',N), - insert_ht(N,B,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',O), - insert_ht(O,k(B,C),D) - ; - true - ), - spawns_all(H,I), - ( D=suspension(_,active,_,_) -> - setarg(2,D,inactive), - spawns_all___2__5__1__9(L,E,F,A,G,B,C,D) - ; - true - ) - ; - spawns_all___2__5__1__9(L,E,F,A,G,B,C,D) - ). -spawns_all___2__5(A,B,C) :- - C=suspension(D,not_stored_yet,A,B), - 'chr gen_id'(D), - spawns_all___2__6(A,B,C). -spawns_all___2__6(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',E), - lookup_ht1(E,A,A,D), - !, - spawns_all___2__6__0__10(D,A,B,C). -spawns_all___2__6__0__10([],B,C,A) :- - spawns_all___2__7(B,C,A). -spawns_all___2__6__0__10([G|H],B,C,A) :- - ( G=suspension(_,active,_,_,D,_,E,F,_), - E==B, - \+ \+spawns_all_triggers_implies_spawns_all, - \+is_passive(B,F), - may_trigger(D) -> - arg(2,A,I), - setarg(2,A,active), - ( I==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',J), - insert_ht(J,B,A), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',K), - insert_ht(K,k(B,C),A) - ; - true - ), - spawns_all_triggers_implies_spawns_all, - ( A=suspension(_,active,_,_) -> - setarg(2,A,inactive), - spawns_all___2__6__0__10(H,B,C,A) - ; - true - ) - ; - spawns_all___2__6__0__10(H,B,C,A) - ). -spawns_all___2__6(A,B,C) :- - spawns_all___2__7(A,B,C). -spawns_all___2__7(A,B,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',E), - insert_ht(E,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',F), - insert_ht(F,k(A,B),C) - ; - true - ). -spawns_all_triggers(A,B) :- - spawns_all_triggers___2__0(A,B,_). -spawns_all_triggers___2__0(A,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_,_,_), - !. -spawns_all_triggers___2__0(A,body,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',D), - hash_term(k(A,1612897),E), - lookup_ht1(D,E,k(A,guard),C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_,_,_), - !. -spawns_all_triggers___2__0(A,guard,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',D), - hash_term(k(A,1640016),E), - lookup_ht1(D,E,k(A,body),C), - !, - spawns_all_triggers___2__0__0__4(C,A,guard,B). -spawns_all_triggers___2__0__0__4([],B,C,A) :- - spawns_all_triggers___2__1(B,C,A). -spawns_all_triggers___2__0__0__4([F|G],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - D==A, - E=body -> - setarg(2,F,removed), - arg(4,F,H), - ( var(H) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',I), - I=[_|J], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',J), - ( J=[K|_] -> - setarg(4,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(4,K,H) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',L), - delete_ht(L,A,F), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',M), - delete_ht(M,k(A,body),F), - spawns_all_triggers___2__0__0__4(G,A,B,C) - ; - spawns_all_triggers___2__0__0__4(G,A,B,C) - ). -spawns_all_triggers___2__0(A,B,C) :- - spawns_all_triggers___2__1(A,B,C). -spawns_all_triggers___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',M), - lookup_ht(M,k(A,B),E), - 'chr sbag_member'(D,E), - D=suspension(_,active,_,_), - !, - ( var(C) -> - true - ; - arg(2,C,L), - setarg(2,C,removed), - ( L==not_stored_yet -> - true - ; - arg(4,C,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',H), - ( H=[I|_] -> - setarg(4,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(4,I,F) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',J), - delete_ht(J,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',K), - delete_ht(K,k(A,B),C) - ) - ). -spawns_all_triggers___2__1(A,body,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',L), - hash_term(k(A,1612897),M), - lookup_ht1(L,M,k(A,guard),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !, - ( var(B) -> - true - ; - arg(2,B,K), - setarg(2,B,removed), - ( K==not_stored_yet -> - true - ; - arg(4,B,E), - ( var(E) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',F), - F=[_|G], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',I), - delete_ht(I,A,B), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',J), - delete_ht(J,k(A,body),B) - ) - ). -spawns_all_triggers___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',E), - lookup_ht(E,k(A,B),D), - !, - spawns_all_triggers___2__1__0__7(D,A,B,C). -spawns_all_triggers___2__1__0__7([],B,C,A) :- - spawns_all_triggers___2__2(B,C,A). -spawns_all_triggers___2__1__0__7([G|H],A,B,C) :- - ( G=suspension(_,active,_,_,D,E,F), - D==A, - E==B, - may_trigger(F) -> - setarg(2,G,removed), - arg(4,G,I), - ( var(I) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',J), - J=[_|K], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',M), - delete_ht(M,k(A,B),G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',N), - delete_ht(N,A,G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',O), - delete_ht(O,F,G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',P), - delete_ht(P,k(A,B,F),G), - spawns_all_triggers___2__1__0__7(H,A,B,C) - ; - spawns_all_triggers___2__1__0__7(H,A,B,C) - ). -spawns_all_triggers___2__1(A,B,C) :- - spawns_all_triggers___2__2(A,B,C). -spawns_all_triggers___2__2(A,guard,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',D), - hash_term(k(A,1640016),E), - lookup_ht1(D,E,k(A,body),C), - !, - spawns_all_triggers___2__2__0__8(C,A,guard,B). -spawns_all_triggers___2__2__0__8([],B,C,A) :- - spawns_all_triggers___2__3(B,C,A). -spawns_all_triggers___2__2__0__8([G|H],A,B,C) :- - ( G=suspension(_,active,_,_,D,E,F), - D==A, - E=body, - may_trigger(F) -> - setarg(2,G,removed), - arg(4,G,I), - ( var(I) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',J), - J=[_|K], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',M), - delete_ht(M,k(A,body),G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',N), - delete_ht(N,A,G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',O), - delete_ht(O,F,G), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',P), - delete_ht(P,k(A,body,F),G), - spawns_all_triggers___2__2__0__8(H,A,B,C) - ; - spawns_all_triggers___2__2__0__8(H,A,B,C) - ). -spawns_all_triggers___2__2(A,B,C) :- - spawns_all_triggers___2__3(A,B,C). -spawns_all_triggers___2__3(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',E), - 'chr sbag_member'(D,E), - D=suspension(_,active,_), - !, - ( var(C) -> - true - ; - arg(2,C,L), - setarg(2,C,removed), - ( L==not_stored_yet -> - true - ; - arg(4,C,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',H), - ( H=[I|_] -> - setarg(4,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(4,I,F) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',J), - delete_ht(J,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',K), - delete_ht(K,k(A,B),C) - ) - ), - spawns_all(A,B). -spawns_all_triggers___2__3(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',F), - lookup_ht1(F,A,A,D), - !, - C=suspension(E,not_stored_yet,t,_,A,B), - 'chr gen_id'(E), - spawns_all_triggers___2__3__0__10(D,A,B,C). -spawns_all_triggers___2__3__0__10([],B,C,A) :- - spawns_all_triggers___2__4(B,C,A). -spawns_all_triggers___2__3__0__10([G|I],B,C,A) :- - ( G=suspension(_,active,_,_,D,_,E,F,_), - E==B, - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',J), - lookup_ht(J,D,H) -> - spawns_all_triggers___2__3__1__10(H,D,F,G,I,B,C,A) - ; - spawns_all_triggers___2__3__0__10(I,B,C,A) - ). -spawns_all_triggers___2__3__1__10([],_,_,_,A,C,D,B) :- - spawns_all_triggers___2__3__0__10(A,C,D,B). -spawns_all_triggers___2__3__1__10([K|L],E,F,A,G,B,C,D) :- - ( K=suspension(_,active,_,_,H,I,J), - J==E, - may_trigger(E), - \+is_passive(B,F) -> - setarg(2,K,removed), - arg(4,K,S), - ( var(S) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',T), - T=[_|U], - b_setval('$chr_store_global_ground_chr_translate____spawns___3',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-12',W), - delete_ht(W,k(H,I),K), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',X), - delete_ht(X,H,K), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',Y), - delete_ht(Y,E,K), - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',Z), - delete_ht(Z,k(H,I,E),K), - arg(2,D,M), - setarg(2,D,active), - ( M==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',N), - O=[D|N], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',O), - ( N=[P|_] -> - setarg(4,P,O) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',Q), - insert_ht(Q,B,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',R), - insert_ht(R,k(B,C),D) - ; - true - ), - spawns_all_triggers(H,I), - ( D=suspension(_,active,_,_,_,_) -> - setarg(2,D,inactive), - spawns_all_triggers___2__3__1__10(L,E,F,A,G,B,C,D) - ; - true - ) - ; - spawns_all_triggers___2__3__1__10(L,E,F,A,G,B,C,D) - ). -spawns_all_triggers___2__3(A,B,C) :- - C=suspension(D,not_stored_yet,t,_,A,B), - 'chr gen_id'(D), - spawns_all_triggers___2__4(A,B,C). -spawns_all_triggers___2__4(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',E), - lookup_ht1(E,A,A,D), - !, - spawns_all_triggers___2__4__0__11(D,A,B,C). -spawns_all_triggers___2__4__0__11([],B,C,A) :- - spawns_all_triggers___2__5(B,C,A). -spawns_all_triggers___2__4__0__11([G|I],B,C,A) :- - ( G=suspension(_,active,_,_,D,_,E,F,_), - E==B, - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-3',J), - lookup_ht(J,D,H) -> - spawns_all_triggers___2__4__1__11(H,D,F,G,I,B,C,A) - ; - spawns_all_triggers___2__4__0__11(I,B,C,A) - ). -spawns_all_triggers___2__4__1__11([],_,_,_,A,C,D,B) :- - spawns_all_triggers___2__4__0__11(A,C,D,B). -spawns_all_triggers___2__4__1__11([K|L],F,G,A,B,D,E,C) :- - ( K=suspension(_,active,_,_,H,I,J), - J==F, - M=t(121,C,A,K), - '$novel_production'(C,M), - '$novel_production'(K,M), - \+may_trigger(F), - \+is_passive(D,G) -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',O), - P=[C|O], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',R), - insert_ht(R,D,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',S), - insert_ht(S,k(D,E),C) - ; - true - ), - spawns_all_triggers(H,I), - ( C=suspension(_,active,_,_,_,_) -> - setarg(2,C,inactive), - spawns_all_triggers___2__4__1__11(L,F,G,A,B,D,E,C) - ; - true - ) - ; - spawns_all_triggers___2__4__1__11(L,F,G,A,B,D,E,C) - ). -spawns_all_triggers___2__4(A,B,C) :- - spawns_all_triggers___2__5(A,B,C). -spawns_all_triggers___2__5(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____spawns___3',D), - !, - spawns_all_triggers___2__5__0__12(D,A,B,C). -spawns_all_triggers___2__5__0__12([],B,C,A) :- - spawns_all_triggers___2__6(B,C,A). -spawns_all_triggers___2__5__0__12([F|H],B,C,A) :- - ( F=suspension(_,active,_,_,D,_,E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',I), - lookup_ht1(I,D,D,G) -> - spawns_all_triggers___2__5__1__12(G,D,E,F,H,B,C,A) - ; - spawns_all_triggers___2__5__0__12(H,B,C,A) - ). -spawns_all_triggers___2__5__1__12([],_,_,_,A,C,D,B) :- - spawns_all_triggers___2__5__0__12(A,C,D,B). -spawns_all_triggers___2__5__1__12([K|L],F,G,A,B,D,E,C) :- - ( K=suspension(_,active,_,_,H,_,I,J,_), - I==F, - M=t(123,A,K,C), - '$novel_production'(A,M), - '$novel_production'(C,M), - \+is_passive(F,J), - may_trigger(H), - \+may_trigger(G) -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',O), - P=[C|O], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',R), - insert_ht(R,D,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',S), - insert_ht(S,k(D,E),C) - ; - true - ), - spawns(D,E,G), - ( C=suspension(_,active,_,_,_,_) -> - setarg(2,C,inactive), - spawns_all_triggers___2__5__1__12(L,F,G,A,B,D,E,C) - ; - true - ) - ; - spawns_all_triggers___2__5__1__12(L,F,G,A,B,D,E,C) - ). -spawns_all_triggers___2__5(A,B,C) :- - spawns_all_triggers___2__6(A,B,C). -spawns_all_triggers___2__6(A,B,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',E), - F=[C|E], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',F), - ( E=[G|_] -> - setarg(4,G,F) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',H), - insert_ht(H,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',I), - insert_ht(I,k(A,B),C) - ; - true - ). -spawns_all_triggers_implies_spawns_all :- - spawns_all_triggers_implies_spawns_all___0__0(_). -spawns_all_triggers_implies_spawns_all___0__0(_) :- - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !, - setarg(2,A,removed), - arg(3,A,C), - ( var(C) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',D), - D=[_|E], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',E), - ( E=[F|_] -> - setarg(3,F,_) - ; - true - ) - ; - C=[_,_|E], - setarg(2,C,E), - ( E=[F|_] -> - setarg(3,F,C) - ; - true - ) - ), - fail. -spawns_all_triggers_implies_spawns_all___0__0(A) :- - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',B), - !, - A=suspension(C,not_stored_yet,_), - 'chr gen_id'(C), - spawns_all_triggers_implies_spawns_all___0__0__0__3(B,A). -spawns_all_triggers_implies_spawns_all___0__0__0__3([],A) :- - spawns_all_triggers_implies_spawns_all___0__1(A). -spawns_all_triggers_implies_spawns_all___0__0__0__3([D|E],A) :- - ( D=suspension(_,active,_,_,B,C) -> - setarg(2,D,removed), - arg(4,D,J), - ( var(J) -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',K), - K=[_|L], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers___2',L), - ( L=[M|_] -> - setarg(4,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(4,M,J) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',N), - delete_ht(N,B,D), - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',O), - delete_ht(O,k(B,C),D), - arg(2,A,F), - setarg(2,A,active), - ( F==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',G), - H=[A|G], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',H), - ( G=[I|_] -> - setarg(3,I,H) - ; - true - ) - ; - true - ), - spawns_all(B,C), - ( A=suspension(_,active,_) -> - setarg(2,A,inactive), - spawns_all_triggers_implies_spawns_all___0__0__0__3(E,A) - ; - true - ) - ; - spawns_all_triggers_implies_spawns_all___0__0__0__3(E,A) - ). -spawns_all_triggers_implies_spawns_all___0__0(A) :- - A=suspension(B,not_stored_yet,_), - 'chr gen_id'(B), - spawns_all_triggers_implies_spawns_all___0__1(A). -spawns_all_triggers_implies_spawns_all___0__1(A) :- - arg(2,A,B), - setarg(2,A,active), - ( B==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',C), - D=[A|C], - b_setval('$chr_store_global_ground_chr_translate____spawns_all_triggers_implies_spawns_all___0',D), - ( C=[E|_] -> - setarg(3,E,D) - ; - true - ) - ; - true - ). -all_spawned(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',G), - ( - hash_term(k(A,1612897),H), - lookup_ht1(G,H,k(A,guard),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - ! - ; - lookup_ht(G,k(A,B),F), - 'chr sbag_member'(E,F), - E=suspension(_,active,_,_), - ! - ). -all_spawned(_,_) :- - fail. -is_observed(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',G), - lookup_ht(G,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,_,_,E,_,_), - !, - do_is_observed(A,E,C). -is_observed(_,_,_) :- - fail. -do_is_observed(A,B,C) :- - var(C), - !, - do_is_observed(A,B). -do_is_observed(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',S), - lookup_ht(S,A,F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,_,_,E,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',R), - lookup_ht1(R,E,E,J), - 'chr sbag_member'(G,J), - G=suspension(_,active,_,_,H,_,_,I,_), - G\==D, - ground(C), - ( - ( - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-12',U), - lookup_ht(U,k(B,C),L), - 'chr sbag_member'(K,L), - K=suspension(_,active,_,_), - \+is_passive(E,I), - ! - ; - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-123',T), - lookup_ht(T,k(B,C,H),N), - 'chr sbag_member'(M,N), - M=suspension(_,active,_,_,_,_,_), - \+is_passive(E,I), - ! - ) - ; - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-12',Q), - lookup_ht(Q,k(B,C),P), - 'chr sbag_member'(O,P), - O=suspension(_,active,_,_,_,_), - \+is_passive(E,I), - may_trigger(H), - ! - ). -do_is_observed(_,_,_) :- - chr_pp_flag(observation_analysis,off). -do_is_observed(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',S), - lookup_ht(S,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,_,D,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',R), - lookup_ht1(R,D,D,I), - 'chr sbag_member'(F,I), - F=suspension(_,active,_,_,G,_,_,H,_), - F\==C, - ( - ( - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all___2-1',U), - lookup_ht(U,B,K), - 'chr sbag_member'(J,K), - J=suspension(_,active,_,_), - \+is_passive(D,H), - ! - ; - nb_getval('$chr_store_multi_hash_chr_translate____spawns___3-1',T), - lookup_ht(T,B,N), - 'chr sbag_member'(L,N), - L=suspension(_,active,_,_,_,_,M), - M=G, - \+is_passive(D,H), - ! - ) - ; - nb_getval('$chr_store_multi_hash_chr_translate____spawns_all_triggers___2-1',Q), - lookup_ht(Q,B,P), - 'chr sbag_member'(O,P), - O=suspension(_,active,_,_,_,_), - \+is_passive(D,H), - may_trigger(G), - ! - ). -do_is_observed(_,_) :- - chr_pp_flag(observation_analysis,off). -generate_indexed_variables_body(D/E,A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',N), - lookup_ht(N,D/E,H), - 'chr sbag_member'(F,H), - F=suspension(_,active,_,_,_,G), - !, - get_indexing_spec(D/E,I), - ( chr_pp_flag(term_indexing,on) -> - spectermvars(I,A,D,E,B,C) - ; - get_constraint_type_det(D/E,J), - create_indexed_variables_body(A,G,J,C,1,D/E,K,L), - ( K==empty -> - B=true, - C=[] - ; - ( L==0 -> - ( A=[M] -> - true - ; - M=..[term|A] - ), - B=term_variables(M,C) - ) - ; - K=B - ) - ). -generate_indexed_variables_body(A,_,_,_) :- - chr_error(internal,'generate_indexed_variables_body: missing mode info for ~w. -',[A]). -empty_named_history_initialisations(A,B) :- - C=suspension(D,active,_,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',E), - F=[C|E], - b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',F), - ( E=[G|_] -> - setarg(3,G,F) - ; - true - ). -generate_empty_named_history_initialisation(A) :- - generate_empty_named_history_initialisation___1__0(A,_). -generate_empty_named_history_initialisation___1__0(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,chr_translate,G), - G=v(_,E,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(4,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',J), - J=[_|K], - b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - detach_generate_empty_named_history_initialisation___1(H,B) - ) - ). -generate_empty_named_history_initialisation___1__0(A,B) :- - nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',C), - !, - ( var(B) -> - B=suspension(D,not_stored_yet,0,_,A), - 'chr gen_id'(D) - ; - true - ), - generate_empty_named_history_initialisation___1__0__0__3(C,A,B). -generate_empty_named_history_initialisation___1__0__0__3([],B,A) :- - generate_empty_named_history_initialisation___1__1(B,A). -generate_empty_named_history_initialisation___1__0__0__3([E|F],A,B) :- - ( E=suspension(_,active,_,C,D) -> - setarg(2,E,removed), - arg(3,E,Q), - ( var(Q) -> - nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',R), - R=[_|S], - b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',S), - ( S=[T|_] -> - setarg(3,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(3,T,Q) - ; - true - ) - ), - arg(2,B,L), - setarg(2,B,active), - arg(3,B,K), - J is K+1, - setarg(3,B,J), - ( L==not_stored_yet -> - B=suspension(_,_,_,_,M), - term_variables(M,I), - nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',N), - O=[B|N], - b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',O), - ( N=[P|_] -> - setarg(4,P,O) - ; - true - ), - attach_generate_empty_named_history_initialisation___1(I,B) - ; - true - ), - empty_named_history_global_variable(A,G), - C=[(:-nb_setval(G,0))|H], - empty_named_history_initialisations(H,D), - ( B=suspension(_,active,J,_,_) -> - setarg(2,B,inactive), - generate_empty_named_history_initialisation___1__0__0__3(F,A,B) - ; - true - ) - ; - generate_empty_named_history_initialisation___1__0__0__3(F,A,B) - ). -generate_empty_named_history_initialisation___1__0(A,B) :- - ( var(B) -> - B=suspension(C,not_stored_yet,0,_,A), - 'chr gen_id'(C) - ; - true - ), - generate_empty_named_history_initialisation___1__1(A,B). -generate_empty_named_history_initialisation___1__1(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(3,A,D), - C is D+1, - setarg(3,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,F), - term_variables(F,B), - nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',G), - H=[A|G], - b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',H), - ( G=[I|_] -> - setarg(4,I,H) - ; - true - ), - attach_generate_empty_named_history_initialisation___1(B,A) - ; - true - ). -find_empty_named_histories :- - find_empty_named_histories___0__0(_). -find_empty_named_histories___0__0(A) :- - nb_getval('$chr_store_constants_chr_translate____history___3___[3]___[]',B), - !, - A=suspension(C,not_stored_yet,t,_), - 'chr gen_id'(C), - find_empty_named_histories___0__0__0__1(B,A). -find_empty_named_histories___0__0__0__1([],A) :- - find_empty_named_histories___0__1(A). -find_empty_named_histories___0__0__0__1([D|E],A) :- - ( D=suspension(_,active,_,_,B,C), - C=[], - F=t(140,A,D), - '$novel_production'(A,F), - '$novel_production'(D,F) -> - '$extend_history'(A,F), - arg(2,A,G), - setarg(2,A,active), - ( G==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',H), - I=[A|H], - b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',I), - ( H=[J|_] -> - setarg(4,J,I) - ; - true - ) - ; - true - ), - generate_empty_named_history_initialisation(B), - ( A=suspension(_,active,_,_) -> - setarg(2,A,inactive), - find_empty_named_histories___0__0__0__1(E,A) - ; - true - ) - ; - find_empty_named_histories___0__0__0__1(E,A) - ). -find_empty_named_histories___0__0(A) :- - A=suspension(B,not_stored_yet,t,_), - 'chr gen_id'(B), - find_empty_named_histories___0__1(A). -find_empty_named_histories___0__1(A) :- - nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',B), - !, - find_empty_named_histories___0__1__0__2(B,A). -find_empty_named_histories___0__1__0__2([],A) :- - find_empty_named_histories___0__2(A). -find_empty_named_histories___0__1__0__2([B|C],A) :- - ( B=suspension(_,active,_,_,_) -> - B=suspension(_,_,_,_,I), - setarg(2,B,removed), - term_variables(I,D), - arg(4,B,E), - ( var(E) -> - nb_getval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',F), - F=[_|G], - b_setval('$chr_store_global_list_chr_translate____generate_empty_named_history_initialisation___1',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - detach_generate_empty_named_history_initialisation___1(D,B), - find_empty_named_histories___0__1__0__2(C,A) - ; - find_empty_named_histories___0__1__0__2(C,A) - ). -find_empty_named_histories___0__1(A) :- - find_empty_named_histories___0__2(A). -find_empty_named_histories___0__2(A) :- - nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',E), - 'chr sbag_member'(B,E), - B=suspension(_,active,_,C,D), - !, - setarg(2,B,removed), - arg(3,B,K), - ( var(K) -> - nb_getval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',L), - L=[_|M], - b_setval('$chr_store_global_ground_chr_translate____empty_named_history_initialisations___2',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - ( var(A) -> - true - ; - arg(2,A,J), - setarg(2,A,removed), - ( J==not_stored_yet -> - true - ; - arg(4,A,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',H), - ( H=[I|_] -> - setarg(4,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(4,I,F) - ; - true - ) - ) - ) - ), - C=D. -find_empty_named_histories___0__2(A) :- - ( var(A) -> - true - ; - arg(2,A,F), - setarg(2,A,removed), - ( F==not_stored_yet -> - true - ; - arg(4,A,B), - ( var(B) -> - nb_getval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',C), - C=[_|D], - b_setval('$chr_store_global_ground_chr_translate____find_empty_named_histories___0',D), - ( D=[E|_] -> - setarg(4,E,_) - ; - true - ) - ; - B=[_,_|D], - setarg(2,B,D), - ( D=[E|_] -> - setarg(4,E,B) - ; - true - ) - ) - ) - ), - chr_error(internal,'find_empty_named_histories was not removed',[]). -module_initializer(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -module_initializers(A) :- - nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - setarg(2,B,removed), - arg(3,B,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____module_initializer___1',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____module_initializer___1',H), - ( H=[I|_] -> - setarg(3,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(3,I,F) - ; - true - ) - ), - A=(C,E), - module_initializers(E). -module_initializers(true). -actual_atomic_multi_hash_keys(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',Q), - lookup_ht(Q,A,F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,E), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',P), - lookup_ht(P,A,H), - 'chr sbag_member'(G,H), - G=suspension(_,active,_), - !, - setarg(2,D,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',O), - delete_ht(O,A,D), - delete(E,multi_hash([B]),I), - B=[J], - ( get_constraint_arg_type(A,J,K), - enumerated_atomic_type(K,L) -> - M=L, - N=complete - ; - M=C, - N=incomplete - ), - actual_store_types(A,[atomic_constants(B,M,N)|I]). -actual_atomic_multi_hash_keys(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',K), - lookup_ht(K,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - !, - setarg(2,D,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',I), - delete_ht(I,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',J), - delete_ht(J,A,D), - append(C,E,G), - sort(G,H), - actual_atomic_multi_hash_keys(A,B,H). -actual_atomic_multi_hash_keys(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',K), - lookup_ht(K,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - !, - setarg(2,D,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',I), - delete_ht(I,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',J), - delete_ht(J,A,D), - append(E,C,G), - sort(G,H), - actual_ground_multi_hash_keys(A,B,H). -actual_atomic_multi_hash_keys(A,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -actual_atomic_multi_hash_keys(A,B,C) :- - D=suspension(E,active,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',F), - insert_ht(F,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',G), - insert_ht(G,A,D). -actual_ground_multi_hash_keys(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',Q), - lookup_ht(Q,A,F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,E), - nb_getval('$chr_store_multi_hash_chr_translate____validate_store_type_assumption___1-1',P), - lookup_ht(P,A,H), - 'chr sbag_member'(G,H), - G=suspension(_,active,_), - !, - setarg(2,D,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_store_types___2-1',O), - delete_ht(O,A,D), - ( B=[I], - get_constraint_arg_type(A,I,J), - ( is_chr_constants_type(J,K,_) -> - get_chr_constants(K,L) - ; - ( J=chr_enum(L) -> - true - ) - ) -> - M=complete - ; - L=C, - M=incomplete - ), - delete(E,multi_hash([B]),N), - actual_store_types(A,[ground_constants(B,L,M)|N]). -actual_ground_multi_hash_keys(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',K), - lookup_ht(K,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - !, - setarg(2,D,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',I), - delete_ht(I,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',J), - delete_ht(J,A,D), - append(C,E,G), - sort(G,H), - actual_ground_multi_hash_keys(A,B,H). -actual_ground_multi_hash_keys(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',K), - lookup_ht(K,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - !, - setarg(2,D,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',I), - delete_ht(I,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',J), - delete_ht(J,A,D), - append(C,E,G), - sort(G,H), - actual_ground_multi_hash_keys(A,B,H). -actual_ground_multi_hash_keys(A,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -actual_ground_multi_hash_keys(A,B,C) :- - D=suspension(E,active,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',F), - insert_ht(F,k(A,B),D), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',G), - insert_ht(G,A,D). -actual_non_ground_multi_hash_key(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -actual_non_ground_multi_hash_key(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',D), - lookup_ht(D,k(A,B),C), - !, - actual_non_ground_multi_hash_key___2__0__0__3(C,A,B). -actual_non_ground_multi_hash_key___2__0__0__3([],A,B) :- - actual_non_ground_multi_hash_key___2__1(A,B). -actual_non_ground_multi_hash_key___2__0__0__3([E|F],A,B) :- - ( E=suspension(_,active,C,D,_), - C==A, - D==B -> - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-12',G), - delete_ht(G,k(A,B),E), - nb_getval('$chr_store_multi_hash_chr_translate____actual_atomic_multi_hash_keys___3-1',H), - delete_ht(H,A,E), - actual_non_ground_multi_hash_key___2__0__0__3(F,A,B) - ; - actual_non_ground_multi_hash_key___2__0__0__3(F,A,B) - ). -actual_non_ground_multi_hash_key(A,B) :- - actual_non_ground_multi_hash_key___2__1(A,B). -actual_non_ground_multi_hash_key___2__1(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',D), - lookup_ht(D,k(A,B),C), - !, - actual_non_ground_multi_hash_key___2__1__0__4(C,A,B). -actual_non_ground_multi_hash_key___2__1__0__4([],A,B) :- - actual_non_ground_multi_hash_key___2__2(A,B). -actual_non_ground_multi_hash_key___2__1__0__4([E|F],A,B) :- - ( E=suspension(_,active,C,D,_), - C==A, - D==B -> - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-12',G), - delete_ht(G,k(A,B),E), - nb_getval('$chr_store_multi_hash_chr_translate____actual_ground_multi_hash_keys___3-1',H), - delete_ht(H,A,E), - actual_non_ground_multi_hash_key___2__1__0__4(F,A,B) - ; - actual_non_ground_multi_hash_key___2__1__0__4(F,A,B) - ). -actual_non_ground_multi_hash_key___2__1(A,B) :- - actual_non_ground_multi_hash_key___2__2(A,B). -actual_non_ground_multi_hash_key___2__2(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____actual_non_ground_multi_hash_key___2-12',E), - insert_ht(E,k(A,B),C). -prolog_global_variable(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - !. -prolog_global_variable(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',G), - insert_ht(G,A,B). -prolog_global_variables(A) :- - nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - setarg(2,B,removed), - arg(3,B,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____prolog_global_variable___1',H), - ( H=[I|_] -> - setarg(3,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(3,I,F) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____prolog_global_variable___1-1',J), - delete_ht(J,C,B), - A=[C|E], - prolog_global_variables(E). -prolog_global_variables([]). -background_info(A) :- - nb_getval('$chr_store_global_ground_chr_translate____background_info___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - setarg(2,B,removed), - arg(3,B,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____background_info___1',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____background_info___1',H), - ( H=[I|_] -> - setarg(3,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(3,I,F) - ; - true - ) - ), - append(A,C,E), - background_info(E). -background_info(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____background_info___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____background_info___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -background_info(A,B) :- - background_info___2__0(A,B,_). -background_info___2__0(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',D), - !, - ( var(C) -> - C=suspension(E,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(E) - ; - true - ), - background_info___2__0__0__1(D,A,B,C). -background_info___2__0__0__1([],B,C,A) :- - background_info___2__1(B,C,A). -background_info___2__0__0__1([E|F],B,C,A) :- - ( E=suspension(_,active,_,_,_,D,_), - K=t(160,A,E), - '$novel_production'(A,K), - '$novel_production'(E,K), - copy_term_nat(B,G), - subsumes_chk(G,D) -> - '$extend_history'(A,K), - arg(2,A,M), - setarg(2,A,active), - arg(4,A,L), - J is L+1, - setarg(4,A,J), - ( M==not_stored_yet -> - A=suspension(_,_,_,_,_,N,_), - term_variables(N,I), - nb_getval('$chr_store_global_list_chr_translate____background_info___2',O), - P=[A|O], - b_setval('$chr_store_global_list_chr_translate____background_info___2',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - attach_background_info___2(I,A) - ; - true - ), - copy_term_nat(B-C,D-H), - get_bg_info_answer([H]), - ( A=suspension(_,active,_,J,_,_,_) -> - setarg(2,A,inactive), - background_info___2__0__0__1(F,B,C,A) - ; - true - ) - ; - background_info___2__0__0__1(F,B,C,A) - ). -background_info___2__0(A,B,C) :- - ( var(C) -> - C=suspension(D,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(D) - ; - true - ), - background_info___2__1(A,B,C). -background_info___2__1(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F,_), - term_variables(F,B), - nb_getval('$chr_store_global_list_chr_translate____background_info___2',G), - H=[A|G], - b_setval('$chr_store_global_list_chr_translate____background_info___2',H), - ( G=[I|_] -> - setarg(5,I,H) - ; - true - ), - attach_background_info___2(B,A) - ; - true - ). -get_bg_info(A) :- - nb_getval('$chr_store_global_ground_chr_translate____background_info___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - A=C. -get_bg_info([]). -get_bg_info(A,B) :- - get_bg_info___2__0(A,B,_). -get_bg_info___2__0(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____background_info___2',D), - !, - ( var(C) -> - C=suspension(E,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(E) - ; - true - ), - get_bg_info___2__0__0__1(D,A,B,C). -get_bg_info___2__0__0__1([],B,C,A) :- - get_bg_info___2__1(B,C,A). -get_bg_info___2__0__0__1([F|G],B,C,A) :- - ( F=suspension(_,active,_,_,_,D,E), - L=t(160,F,A), - '$novel_production'(F,L), - '$novel_production'(A,L), - copy_term_nat(D,H), - subsumes_chk(H,B) -> - '$extend_history'(A,L), - arg(2,A,N), - setarg(2,A,active), - arg(4,A,M), - K is M+1, - setarg(4,A,K), - ( N==not_stored_yet -> - A=suspension(_,_,_,_,_,O,_), - term_variables(O,J), - nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',P), - Q=[A|P], - b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - attach_get_bg_info___2(J,A) - ; - true - ), - copy_term_nat(D-E,B-I), - get_bg_info_answer([I]), - ( A=suspension(_,active,_,K,_,_,_) -> - setarg(2,A,inactive), - get_bg_info___2__0__0__1(G,B,C,A) - ; - true - ) - ; - get_bg_info___2__0__0__1(G,B,C,A) - ). -get_bg_info___2__0(A,B,C) :- - ( var(C) -> - C=suspension(D,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(D) - ; - true - ), - get_bg_info___2__1(A,B,C). -get_bg_info___2__1(_,A,B) :- - nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - !, - setarg(2,C,removed), - arg(3,C,M), - ( var(M) -> - nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',N), - N=[_|O], - b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',O), - ( O=[P|_] -> - setarg(3,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(3,P,M) - ; - true - ) - ), - ( var(B) -> - true - ; - B=suspension(_,K,_,_,_,L,_), - setarg(2,B,removed), - ( K==not_stored_yet -> - F=[] - ; - term_variables(L,F), - arg(5,B,G), - ( var(G) -> - nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',H), - H=[_|I], - b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',I), - ( I=[J|_] -> - setarg(5,J,_) - ; - true - ) - ; - G=[_,_|I], - setarg(2,G,I), - ( I=[J|_] -> - setarg(5,J,G) - ; - true - ) - ), - detach_get_bg_info___2(F,B) - ) - ), - A=D. -get_bg_info___2__1(_,A,B) :- - ( var(B) -> - true - ; - B=suspension(_,H,_,_,_,I,_), - setarg(2,B,removed), - ( H==not_stored_yet -> - C=[] - ; - term_variables(I,C), - arg(5,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_chr_translate____get_bg_info___2',E), - E=[_|F], - b_setval('$chr_store_global_list_chr_translate____get_bg_info___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - detach_get_bg_info___2(C,B) - ) - ), - A=[]. -get_bg_info_answer(A) :- - nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - setarg(2,B,removed), - arg(3,B,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',H), - ( H=[I|_] -> - setarg(3,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(3,I,F) - ; - true - ) - ), - append(A,C,E), - get_bg_info_answer(E). -get_bg_info_answer(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____get_bg_info_answer___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -prev_guard_list(A,B,C,D,E,F,G,H) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',B1), - lookup_ht1(B1,B,B,K), - 'chr sbag_member'(I,K), - I=suspension(_,active,_,_,_,J), - J=pragma(rule(L,M,N,_),_,_,_,_), - L\==[], - make_head_matchings_explicit(B,O,P), - setof(Q,chr_translate:head_subset(O,D,Q),R), - !, - append(L,M,S), - compute_derived_info(R,P,O,S,N,G,D,H,T,U), - append(F,T,V), - normalize_conj_list(V,W), - append(U,H,X), - normalize_conj_list(X,Y), - next_prev_rule(C,Z,A1), - prev_guard_list(A,Z,A1,D,E,W,G,Y). -prev_guard_list(A,B,C,D,E,F,G,H) :- - ( B>0 -> - next_prev_rule(C,I,J), - prev_guard_list(A,I,J,D,E,F,G,H) - ; - prev_guard_list(A,D,E,F,G,H) - ). -prev_guard_list(A,B,C,D,E,F) :- - prev_guard_list___6__0(A,B,C,D,E,F,_). -prev_guard_list___6__0(A,B,C,D,E,F,_) :- - F\==[], - !, - head_types_modes_condition(F,B,G), - conj2list(G,H), - term_variables(B,I), - append([chr_pp_headvariables(I)|H],D,J), - normalize_conj_list(J,K), - append(B,K,L), - add_background_info([C|L],M), - append(K,M,N), - normalize_conj_list(N,O), - prev_guard_list(A,B,C,O,E,[]). -prev_guard_list___6__0(A,B,C,D,E,F,G) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',W), - lookup_ht1(W,A,A,J), - ( - 'chr sbag_member'(H,J), - H=suspension(_,active,_,_,_,I), - I=pragma(rule(N,O,C,P),K,L,M,A), - C\==true, - append(E,D,Q), - ( conj2list(C,R), - append(Q,R,S), - guard_entailment:entails_guard(S,fail) -> - T=fail - ; - simplify_guard(C,P,Q,T,U) - ), - C\==T, - !, - setarg(2,H,removed), - arg(4,H,X), - ( var(X) -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',Y), - Y=[_|Z], - b_setval('$chr_store_global_ground_chr_translate____rule___2',Z), - ( Z=[A1|_] -> - setarg(4,A1,_) - ; - true - ) - ; - X=[_,_|Z], - setarg(2,X,Z), - ( Z=[A1|_] -> - setarg(4,A1,X) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',B1), - delete_ht(B1,A,H), - rule(A,pragma(rule(N,O,T,U),K,L,M,A)), - prev_guard_list(A,B,T,D,E,[]) - ; - !, - G=suspension(V,not_stored_yet,t,_,A,B,C,D,E,F), - 'chr gen_id'(V), - prev_guard_list___6__0__0__3(J,A,B,C,D,E,F,G) - ). -prev_guard_list___6__0__0__3([],B,C,D,E,F,G,A) :- - prev_guard_list___6__1(B,C,D,E,F,G,A). -prev_guard_list___6__0__0__3([J|K],B,C,D,E,F,G,A) :- - ( J=suspension(_,active,_,_,H,I), - H==B, - O=t(174,A,J), - '$novel_production'(A,O), - '$novel_production'(J,O), - chr_pp_flag(check_impossible_rules,on), - I=pragma(rule(_,_,D,_),_,_,_,B), - conj2list(D,L), - append(F,E,M), - append(M,L,N), - guard_entailment:entails_guard(N,fail) -> - '$extend_history'(A,O), - arg(2,A,P), - setarg(2,A,active), - ( P==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',Q), - R=[A|Q], - b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',R), - ( Q=[S|_] -> - setarg(4,S,R) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',T), - insert_ht(T,B,A) - ; - true - ), - chr_warning(weird_program,'Heads will never match or guard will always fail in ~@. - This rule will never fire! -',[format_rule(I)]), - set_all_passive(B), - ( A=suspension(_,active,_,_,_,_,_,_,_,_) -> - setarg(2,A,inactive), - prev_guard_list___6__0__0__3(K,B,C,D,E,F,G,A) - ; - true - ) - ; - prev_guard_list___6__0__0__3(K,B,C,D,E,F,G,A) - ). -prev_guard_list___6__0(A,B,C,D,E,F,G) :- - G=suspension(H,not_stored_yet,t,_,A,B,C,D,E,F), - 'chr gen_id'(H), - prev_guard_list___6__1(A,B,C,D,E,F,G). -prev_guard_list___6__1(A,B,C,D,E,F,G) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',I), - lookup_ht1(I,A,A,H), - !, - prev_guard_list___6__1__0__4(H,A,B,C,D,E,F,G). -prev_guard_list___6__1__0__4([],B,C,D,E,F,G,A) :- - prev_guard_list___6__2(B,C,D,E,F,G,A). -prev_guard_list___6__1__0__4([J|K],A,B,C,D,E,F,G) :- - ( J=suspension(_,active,_,_,H,I), - H==A, - I=pragma(rule(O,P,C,Q),L,M,N,A), - simplify_heads(E,D,C,Q,R,S), - R\==[], - extract_arguments(O,T), - extract_arguments(P,U), - extract_arguments(B,V), - replace_some_heads(T,U,V,R,W,X,C,Q,Y), - substitute_arguments(O,W,Z), - substitute_arguments(P,X,A1), - append(S,Y,B1), - list2conj(B1,C1), - D1=pragma(rule(Z,A1,C,(C1,Q)),L,M,N,A), - ( - O\==Z - ; - P\==A1 - ) -> - setarg(2,J,removed), - arg(4,J,J1), - ( var(J1) -> - nb_getval('$chr_store_global_ground_chr_translate____rule___2',K1), - K1=[_|L1], - b_setval('$chr_store_global_ground_chr_translate____rule___2',L1), - ( L1=[M1|_] -> - setarg(4,M1,_) - ; - true - ) - ; - J1=[_,_|L1], - setarg(2,J1,L1), - ( L1=[M1|_] -> - setarg(4,M1,J1) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',N1), - delete_ht(N1,A,J), - arg(2,G,E1), - setarg(2,G,active), - ( E1==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',F1), - G1=[G|F1], - b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',G1), - ( F1=[H1|_] -> - setarg(4,H1,G1) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',I1), - insert_ht(I1,A,G) - ; - true - ), - rule(A,D1), - ( G=suspension(_,active,_,_,_,_,_,_,_,_) -> - setarg(2,G,inactive), - prev_guard_list___6__1__0__4(K,A,B,C,D,E,F,G) - ; - true - ) - ; - prev_guard_list___6__1__0__4(K,A,B,C,D,E,F,G) - ). -prev_guard_list___6__1(A,B,C,D,E,F,G) :- - prev_guard_list___6__2(A,B,C,D,E,F,G). -prev_guard_list___6__2(A,B,C,D,E,F,G) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',I), - lookup_ht1(I,A,A,H), - !, - prev_guard_list___6__2__0__5(H,A,B,C,D,E,F,G). -prev_guard_list___6__2__0__5([],B,C,D,E,F,G,A) :- - prev_guard_list___6__3(B,C,D,E,F,G,A). -prev_guard_list___6__2__0__5([J|L],B,C,D,E,F,G,A) :- - ( J=suspension(_,active,_,_,H,I), - H==B, - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',M), - lookup_ht1(M,B,B,K) -> - prev_guard_list___6__2__1__5(K,I,J,L,B,C,D,E,F,G,A) - ; - prev_guard_list___6__2__0__5(L,B,C,D,E,F,G,A) - ). -prev_guard_list___6__2__1__5([],_,_,A,C,D,E,F,G,H,B) :- - prev_guard_list___6__2__0__5(A,C,D,E,F,G,H,B). -prev_guard_list___6__2__1__5([N|P],J,A,B,D,E,F,G,H,I,C) :- - ( N=suspension(_,active,_,_,K,L,M,_,_), - M==D, - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',Q), - lookup_ht(Q,K,O) -> - prev_guard_list___6__2__2__5(O,K,L,N,P,J,A,B,D,E,F,G,H,I,C) - ; - prev_guard_list___6__2__1__5(P,J,A,B,D,E,F,G,H,I,C) - ). -prev_guard_list___6__2__2__5([],_,_,_,A,K,B,C,E,F,G,H,I,J,D) :- - prev_guard_list___6__2__1__5(A,K,B,C,E,F,G,H,I,J,D). -prev_guard_list___6__2__2__5([S|U],M,N,A,B,L,C,D,F,G,H,I,J,K,E) :- - ( S=suspension(_,active,_,_,O,P,Q,R,_), - S\==A, - O==M, - Q==F, - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',T) -> - prev_guard_list___6__2__3__5(T,P,R,S,U,M,N,A,B,L,C,D,F,G,H,I,J,K,E) - ; - prev_guard_list___6__2__2__5(U,M,N,A,B,L,C,D,F,G,H,I,J,K,E) - ). -prev_guard_list___6__2__3__5([],_,_,_,A,N,O,B,C,M,D,E,G,H,I,J,K,L,F) :- - prev_guard_list___6__2__2__5(A,N,O,B,C,M,D,E,G,H,I,J,K,L,F). -prev_guard_list___6__2__3__5([T|U],P,Q,A,R,M,N,B,O,K,C,L,D,E,F,G,H,I,J) :- - ( T=suspension(_,active,_,S), - P - setarg(2,T,removed), - arg(3,T,C1), - ( var(C1) -> - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',D1), - D1=[_|E1], - b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',E1), - ( E1=[F1|_] -> - setarg(3,F1,_) - ; - true - ) - ; - C1=[_,_|E1], - setarg(2,C1,E1), - ( E1=[F1|_] -> - setarg(3,F1,C1) - ; - true - ) - ), - arg(2,J,X), - setarg(2,J,active), - ( X==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',Y), - Z=[J|Y], - b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',Z), - ( Y=[A1|_] -> - setarg(4,A1,Z) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',B1), - insert_ht(B1,D,J) - ; - true - ), - first_occ_in_rule(D,M,P,Q), - tree_set_add(S,M,W), - multiple_occ_constraints_checked(W), - ( J=suspension(_,active,_,_,_,_,_,_,_,_) -> - setarg(2,J,inactive), - prev_guard_list___6__2__3__5(U,P,Q,A,R,M,N,B,O,K,C,L,D,E,F,G,H,I,J) - ; - true - ) - ; - prev_guard_list___6__2__3__5(U,P,Q,A,R,M,N,B,O,K,C,L,D,E,F,G,H,I,J) - ). -prev_guard_list___6__2(A,B,C,D,E,F,G) :- - prev_guard_list___6__3(A,B,C,D,E,F,G). -prev_guard_list___6__3(A,_,_,_,_,_,B) :- - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !, - setarg(2,C,removed), - arg(3,C,K), - ( var(K) -> - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',L), - L=[_|M], - b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - ( var(B) -> - true - ; - arg(2,B,J), - setarg(2,B,removed), - ( J==not_stored_yet -> - true - ; - arg(4,B,E), - ( var(E) -> - nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',F), - F=[_|G], - b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',I), - delete_ht(I,A,B) - ) - ). -prev_guard_list___6__3(A,_,_,_,_,_,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',E), - ( D=[F|_] -> - setarg(4,F,E) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',G), - insert_ht(G,A,B) - ; - true - ). -simplify_guards(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',Z), - lookup_ht1(Z,A,A,D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,_,C), - !, - C=pragma(rule(E,F,G,_),ids(H,I),_,_,A), - append(E,F,J), - make_head_matchings_explicit_not_negated(J,K,L), - tree_set_empty(M), - multiple_occ_constraints_checked(M), - apply_guard_wrt_term(J,G,N), - append(H,I,O), - findall(tuple(Q,R,A)-(-A),(member(S,O),get_occurrence_from_id(Q,R,A,S)),P), - empty_q(T), - insert_list_q(P,T,U), - next_prev_rule(U,_,V), - next_prev_rule(V,W,X), - prev_guard_list(A,W,X,K,G,[],L,[N]), - Y is A+1, - simplify_guards(Y). -simplify_guards(_). -set_all_passive(A) :- - set_all_passive___1__0(A,_). -set_all_passive___1__0(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',E), - lookup_ht1(E,A,A,C), - !, - B=suspension(D,not_stored_yet,t,A), - 'chr gen_id'(D), - set_all_passive___1__0__0__1(C,A,B). -set_all_passive___1__0__0__1([],B,A) :- - set_all_passive___1__1(B,A). -set_all_passive___1__0__0__1([E|F],B,A) :- - ( E=suspension(_,active,_,_,_,_,C,D,_), - C==B, - G=t(176,A,E), - '$novel_production'(A,G), - '$novel_production'(E,G) -> - '$extend_history'(A,G), - arg(2,A,H), - setarg(2,A,active), - ( H==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',I), - insert_ht(I,B,A) - ; - true - ), - passive(B,D), - ( A=suspension(_,active,_,_) -> - setarg(2,A,inactive), - set_all_passive___1__0__0__1(F,B,A) - ; - true - ) - ; - set_all_passive___1__0__0__1(F,B,A) - ). -set_all_passive___1__0(A,B) :- - B=suspension(C,not_stored_yet,t,A), - 'chr gen_id'(C), - set_all_passive___1__1(A,B). -set_all_passive___1__1(A,B) :- - ( var(B) -> - true - ; - arg(2,B,D), - setarg(2,B,removed), - ( D==not_stored_yet -> - true - ; - nb_getval('$chr_store_multi_hash_chr_translate____set_all_passive___1-1',C), - delete_ht(C,A,B) - ) - ). -precompute_head_matchings :- - precompute_head_matchings___0__0(_). -precompute_head_matchings___0__0(A) :- - nb_getval('$chr_store_global_ground_chr_translate____rule___2',B), - !, - A=suspension(C,not_stored_yet,t,_), - 'chr gen_id'(C), - precompute_head_matchings___0__0__0__1(B,A). -precompute_head_matchings___0__0__0__1([],A) :- - precompute_head_matchings___0__1(A). -precompute_head_matchings___0__0__0__1([D|E],A) :- - ( D=suspension(_,active,_,_,B,C), - M=t(170,D,A), - '$novel_production'(D,M), - '$novel_production'(A,M) -> - '$extend_history'(A,M), - arg(2,A,N), - setarg(2,A,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',O), - P=[A|O], - b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ) - ; - true - ), - C=pragma(rule(F,G,_,_),_,_,_,_), - append(F,G,H), - make_head_matchings_explicit_(H,I,J), - copy_term_nat(I-J,K-L), - make_head_matchings_explicit_memo_table(B,K,L), - ( A=suspension(_,active,_,_) -> - setarg(2,A,inactive), - precompute_head_matchings___0__0__0__1(E,A) - ; - true - ) - ; - precompute_head_matchings___0__0__0__1(E,A) - ). -precompute_head_matchings___0__0(A) :- - A=suspension(B,not_stored_yet,t,_), - 'chr gen_id'(B), - precompute_head_matchings___0__1(A). -precompute_head_matchings___0__1(A) :- - ( var(A) -> - true - ; - arg(2,A,F), - setarg(2,A,removed), - ( F==not_stored_yet -> - true - ; - arg(4,A,B), - ( var(B) -> - nb_getval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',C), - C=[_|D], - b_setval('$chr_store_global_ground_chr_translate____precompute_head_matchings___0',D), - ( D=[E|_] -> - setarg(4,E,_) - ; - true - ) - ; - B=[_,_|D], - setarg(2,B,D), - ( D=[E|_] -> - setarg(4,E,B) - ; - true - ) - ) - ) - ). -make_head_matchings_explicit_memo_table(A,B,C) :- - D=suspension(E,active,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',F), - insert_ht(F,A,D). -make_head_matchings_explicit_memo_lookup(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____make_head_matchings_explicit_memo_table___3-1',H), - lookup_ht(H,A,G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,E,F), - !, - B=E, - C=F. -make_head_matchings_explicit_memo_lookup(_,_,_) :- - fail. -first_occ_in_rule(A,B,C,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',I), - lookup_ht(I,B,H), - 'chr sbag_member'(D,H), - D=suspension(_,active,_,_,_,E,F,G,_), - F=A, - E - next_occ_in_rule(A,B,Q,S,E,F) - ; - append(X,E,Z), - add_failing_occ(N,W,H,S,A1,F,K,B,B1), - copy_term(J,C1), - variable_replacement(J,C1,D1), - copy_with_variable_replacement(J,E1,Y), - copy_with_variable_replacement(J,F1,B1), - copy_with_variable_replacement(F1,G1,D1), - append(Z,E1,H1), - append(H1,G1,I1), - copy_with_variable_replacement(K,J1,Y), - copy_with_variable_replacement(K,K1,B1), - append(K1,I1,L1), - append([chr_pp_active_constraint(F)|J1],L1,M1), - list2conj(A1,N1), - copy_term((Z,I1,M1,N1,F),(_,_,O1,P1,_)), - ( N1\=chr_pp_void_info -> - ( guard_entailment:entails_guard(O1,P1) -> - passive(A,S) - ; - true - ) - ; - true - ), - !, - next_occ_in_rule(A,B,Q,S,Z,F) - ). -next_occ_in_rule(_,_,_,_,_,_). -multiple_occ_constraints_checked(A) :- - nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,C,_,_,_,_,_), - ( - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',Z), - lookup_ht1(Z,C,C,H), - 'chr sbag_member'(E,H), - E=suspension(_,active,_,_,F,G,_,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',Y), - lookup_ht1(Y,C,C,K), - 'chr sbag_member'(I,K), - I=suspension(_,active,_,_,_,J), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',X), - lookup_ht(X,F,P), - 'chr sbag_member'(L,P), - L=suspension(_,active,_,_,_,M,N,O,_), - L\==E, - N=C, - M - nb_getval('$chr_store_global_ground_chr_translate____prev_guard_list___6',T), - T=[_|U], - b_setval('$chr_store_global_ground_chr_translate____prev_guard_list___6',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____prev_guard_list___6-1',W), - delete_ht(W,C,B) - ). -multiple_occ_constraints_checked(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____multiple_occ_constraints_checked___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -type_definition(A,B) :- - type_definition___2__0(A,B,_). -type_definition___2__0(A,_,B) :- - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D,_), - ( - functor(A,F,G), - functor(D,F,G), - !, - C=suspension(_,_,_,_,_,L1,M1), - setarg(2,C,removed), - term_variables(term(L1,M1),H), - arg(5,C,H1), - ( var(H1) -> - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',I1), - I1=[_|J1], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',J1), - ( J1=[K1|_] -> - setarg(5,K1,_) - ; - true - ) - ; - H1=[_,_|J1], - setarg(2,H1,J1), - ( J1=[K1|_] -> - setarg(5,K1,H1) - ; - true - ) - ), - detach_type_definition___2(H,C), - ( var(B) -> - true - ; - B=suspension(_,E1,_,_,_,F1,G1), - setarg(2,B,removed), - ( E1==not_stored_yet -> - I=[] - ; - term_variables(term(F1,G1),I), - arg(5,B,A1), - ( var(A1) -> - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',B1), - B1=[_|C1], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',C1), - ( C1=[D1|_] -> - setarg(5,D1,_) - ; - true - ) - ; - A1=[_,_|C1], - setarg(2,A1,C1), - ( C1=[D1|_] -> - setarg(5,D1,A1) - ; - true - ) - ), - detach_type_definition___2(I,B) - ) - ), - chr_error(type_error,'Multiple definitions for type: ~w/~w. -',[F,G]) - ; - functor(D,J,K), - functor(A,J,K), - !, - C=suspension(_,_,_,_,_,Y,Z), - setarg(2,C,removed), - term_variables(term(Y,Z),L), - arg(5,C,U), - ( var(U) -> - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',V), - V=[_|W], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',W), - ( W=[X|_] -> - setarg(5,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(5,X,U) - ; - true - ) - ), - detach_type_definition___2(L,C), - ( var(B) -> - true - ; - B=suspension(_,R,_,_,_,S,T), - setarg(2,B,removed), - ( R==not_stored_yet -> - M=[] - ; - term_variables(term(S,T),M), - arg(5,B,N), - ( var(N) -> - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',O), - O=[_|P], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',P), - ( P=[Q|_] -> - setarg(5,Q,_) - ; - true - ) - ; - N=[_,_|P], - setarg(2,N,P), - ( P=[Q|_] -> - setarg(5,Q,N) - ; - true - ) - ), - detach_type_definition___2(M,B) - ) - ), - chr_error(type_error,'Multiple definitions for type: ~w/~w. -',[J,K]) - ). -type_definition___2__0(A,_,B) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D,_), - functor(A,F,G), - functor(D,F,G), - !, - C=suspension(_,_,_,_,_,U,V), - setarg(2,C,removed), - term_variables(term(U,V),H), - arg(5,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',R), - R=[_|S], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',S), - ( S=[T|_] -> - setarg(5,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(5,T,Q) - ; - true - ) - ), - detach_type_alias___2(H,C), - ( var(B) -> - true - ; - B=suspension(_,N,_,_,_,O,P), - setarg(2,B,removed), - ( N==not_stored_yet -> - I=[] - ; - term_variables(term(O,P),I), - arg(5,B,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',L), - ( L=[M|_] -> - setarg(5,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(5,M,J) - ; - true - ) - ), - detach_type_definition___2(I,B) - ) - ), - chr_error(type_error,'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w. -',[F,G]). -type_definition___2__0(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',D), - !, - ( var(C) -> - C=suspension(E,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(E) - ; - true - ), - type_definition___2__0__0__5(D,A,B,C). -type_definition___2__0__0__5([],B,C,A) :- - type_definition___2__1(B,C,A). -type_definition___2__0__0__5([F|G],A,B,C) :- - ( F=suspension(_,active,_,D,E), - nonvar(A), - functor(A,I,J), - functor(D,I,J) -> - F=suspension(_,_,_,X,_), - setarg(2,F,removed), - term_variables(X,H), - arg(3,F,T), - ( var(T) -> - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',U), - U=[_|V], - b_setval('$chr_store_global_list_chr_translate____unalias_type___2',V), - ( V=[W|_] -> - setarg(3,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(3,W,T) - ; - true - ) - ), - detach_unalias_type___2(H,F), - arg(2,C,N), - setarg(2,C,active), - arg(4,C,M), - L is M+1, - setarg(4,C,L), - ( N==not_stored_yet -> - C=suspension(_,_,_,_,_,O,P), - term_variables(term(O,P),K), - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',Q), - R=[C|Q], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',R), - ( Q=[S|_] -> - setarg(5,S,R) - ; - true - ), - attach_type_definition___2(K,C) - ; - true - ), - E=D, - ( C=suspension(_,active,_,L,_,_,_) -> - setarg(2,C,inactive), - type_definition___2__0__0__5(G,A,B,C) - ; - true - ) - ; - type_definition___2__0__0__5(G,A,B,C) - ). -type_definition___2__0(A,B,C) :- - ( var(C) -> - C=suspension(D,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(D) - ; - true - ), - type_definition___2__1(A,B,C). -type_definition___2__1(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',D), - !, - type_definition___2__1__0__7(D,A,B,C). -type_definition___2__1__0__7([],B,C,A) :- - type_definition___2__2(B,C,A). -type_definition___2__1__0__7([D|E],B,C,A) :- - ( D=suspension(_,active,_,_), - K=t(231,A,D), - '$novel_production'(A,K), - '$novel_production'(D,K) -> - '$extend_history'(A,K), - arg(2,A,M), - setarg(2,A,active), - arg(4,A,L), - J is L+1, - setarg(4,A,J), - ( M==not_stored_yet -> - A=suspension(_,_,_,_,_,N,O), - term_variables(term(N,O),I), - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',P), - Q=[A|P], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - attach_type_definition___2(I,A) - ; - true - ), - copy_term_nat(B-C,F-G), - maplist(dynamic_type_check_clause(F),G,H), - dynamic_type_check_clauses(H), - ( A=suspension(_,active,_,J,_,_,_) -> - setarg(2,A,inactive), - type_definition___2__1__0__7(E,B,C,A) - ; - true - ) - ; - type_definition___2__1__0__7(E,B,C,A) - ). -type_definition___2__1(A,B,C) :- - type_definition___2__2(A,B,C). -type_definition___2__2(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',D), - !, - type_definition___2__2__0__8(D,A,B,C). -type_definition___2__2__0__8([],B,C,A) :- - type_definition___2__3(B,C,A). -type_definition___2__2__0__8([E|F],A,B,C) :- - ( E=suspension(_,active,_,D), - functor(D,H,I), - functor(A,H,I) -> - E=suspension(_,_,_,W), - setarg(2,E,removed), - term_variables(W,G), - arg(3,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',T), - T=[_|U], - b_setval('$chr_store_global_list_chr_translate____atomic_type___1',U), - ( U=[V|_] -> - setarg(3,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(3,V,S) - ; - true - ) - ), - detach_atomic_type___1(G,E), - arg(2,C,M), - setarg(2,C,active), - arg(4,C,L), - K is L+1, - setarg(4,C,K), - ( M==not_stored_yet -> - C=suspension(_,_,_,_,_,N,O), - term_variables(term(N,O),J), - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',P), - Q=[C|P], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - attach_type_definition___2(J,C) - ; - true - ), - maplist(atomic,B), - ( C=suspension(_,active,_,K,_,_,_) -> - setarg(2,C,inactive), - type_definition___2__2__0__8(F,A,B,C) - ; - true - ) - ; - type_definition___2__2__0__8(F,A,B,C) - ). -type_definition___2__2(A,B,C) :- - type_definition___2__3(A,B,C). -type_definition___2__3(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',D), - !, - type_definition___2__3__0__9(D,A,B,C). -type_definition___2__3__0__9([],B,C,A) :- - type_definition___2__4(B,C,A). -type_definition___2__3__0__9([F|G],A,B,C) :- - ( F=suspension(_,active,_,D,E), - functor(D,I,J), - functor(A,I,J) -> - F=suspension(_,_,_,X,_), - setarg(2,F,removed), - term_variables(X,H), - arg(3,F,T), - ( var(T) -> - nb_getval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',U), - U=[_|V], - b_setval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',V), - ( V=[W|_] -> - setarg(3,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(3,W,T) - ; - true - ) - ), - detach_enumerated_atomic_type___2(H,F), - arg(2,C,N), - setarg(2,C,active), - arg(4,C,M), - L is M+1, - setarg(4,C,L), - ( N==not_stored_yet -> - C=suspension(_,_,_,_,_,O,P), - term_variables(term(O,P),K), - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',Q), - R=[C|Q], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',R), - ( Q=[S|_] -> - setarg(5,S,R) - ; - true - ), - attach_type_definition___2(K,C) - ; - true - ), - maplist(atomic,B), - E=B, - ( C=suspension(_,active,_,L,_,_,_) -> - setarg(2,C,inactive), - type_definition___2__3__0__9(G,A,B,C) - ; - true - ) - ; - type_definition___2__3__0__9(G,A,B,C) - ). -type_definition___2__3(A,B,C) :- - type_definition___2__4(A,B,C). -type_definition___2__4(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F,G), - term_variables(term(F,G),B), - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',H), - I=[A|H], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',I), - ( H=[J|_] -> - setarg(5,J,I) - ; - true - ), - attach_type_definition___2(B,A) - ; - true - ). -type_alias(A,B) :- - type_alias___2__0(A,B,_). -type_alias___2__0(A,B,C) :- - var(A), - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',F), - F=[_|G], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - detach_type_alias___2(D,C) - ) - ), - chr_error(type_error,'Variable alias definition: "~w". -',[(:-chr_type A==B)]). -type_alias___2__0(A,B,C) :- - var(B), - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',F), - F=[_|G], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - detach_type_alias___2(D,C) - ) - ), - chr_error(type_error,'Variable alias definition: "~w". -',[(:-chr_type A==B)]). -type_alias___2__0(A,B,C) :- - functor(A,D,E), - functor(B,D,E), - copy_term((A,B),(F,G)), - subsumes(F,G), - !, - ( var(C) -> - true - ; - C=suspension(_,M,_,_,_,N,O), - setarg(2,C,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(term(N,O),H), - arg(5,C,I), - ( var(I) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',J), - J=[_|K], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',K), - ( K=[L|_] -> - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - detach_type_alias___2(H,C) - ) - ), - chr_error(type_error,'Cyclic alias definition: "~w". -',[A==B]). -type_alias___2__0(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',G), - ( - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - ( - ( - functor(A,H,I), - functor(E,H,I), - \+A\=E, - !, - D=suspension(_,_,_,_,_,G2,H2), - setarg(2,D,removed), - term_variables(term(G2,H2),L), - arg(5,D,C2), - ( var(C2) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',D2), - D2=[_|E2], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',E2), - ( E2=[F2|_] -> - setarg(5,F2,_) - ; - true - ) - ; - C2=[_,_|E2], - setarg(2,C2,E2), - ( E2=[F2|_] -> - setarg(5,F2,C2) - ; - true - ) - ), - detach_type_alias___2(L,D), - ( var(C) -> - true - ; - C=suspension(_,Z1,_,_,_,A2,B2), - setarg(2,C,removed), - ( Z1==not_stored_yet -> - M=[] - ; - term_variables(term(A2,B2),M), - arg(5,C,V1), - ( var(V1) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',W1), - W1=[_|X1], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',X1), - ( X1=[Y1|_] -> - setarg(5,Y1,_) - ; - true - ) - ; - V1=[_,_|X1], - setarg(2,V1,X1), - ( X1=[Y1|_] -> - setarg(5,Y1,V1) - ; - true - ) - ), - detach_type_alias___2(M,C) - ) - ), - copy_term_nat(A,J), - copy_term_nat(E,K), - J=K, - chr_error(type_error,'Ambiguous type aliases: you have defined - `~w'' - `~w'' - resulting in two definitions for "~w". -',[A==B,E==F,J]) - ; - functor(E,N,O), - functor(A,N,O), - \+E\=A, - !, - D=suspension(_,_,_,_,_,T1,U1), - setarg(2,D,removed), - term_variables(term(T1,U1),R), - arg(5,D,P1), - ( var(P1) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',Q1), - Q1=[_|R1], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',R1), - ( R1=[S1|_] -> - setarg(5,S1,_) - ; - true - ) - ; - P1=[_,_|R1], - setarg(2,P1,R1), - ( R1=[S1|_] -> - setarg(5,S1,P1) - ; - true - ) - ), - detach_type_alias___2(R,D), - ( var(C) -> - true - ; - C=suspension(_,M1,_,_,_,N1,O1), - setarg(2,C,removed), - ( M1==not_stored_yet -> - S=[] - ; - term_variables(term(N1,O1),S), - arg(5,C,I1), - ( var(I1) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',J1), - J1=[_|K1], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',K1), - ( K1=[L1|_] -> - setarg(5,L1,_) - ; - true - ) - ; - I1=[_,_|K1], - setarg(2,I1,K1), - ( K1=[L1|_] -> - setarg(5,L1,I1) - ; - true - ) - ), - detach_type_alias___2(S,C) - ) - ), - copy_term_nat(E,P), - copy_term_nat(A,Q), - P=Q, - chr_error(type_error,'Ambiguous type aliases: you have defined - `~w'' - `~w'' - resulting in two definitions for "~w". -',[E==F,A==B,P]) - ) - ; - functor(E,T,U), - functor(B,T,U), - copy_term_nat((A,B,E,F),(V,W,X,Y)), - subsumes(X,W), - !, - ( var(C) -> - true - ; - C=suspension(_,F1,_,_,_,G1,H1), - setarg(2,C,removed), - ( F1==not_stored_yet -> - Z=[] - ; - term_variables(term(G1,H1),Z), - arg(5,C,B1), - ( var(B1) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',C1), - C1=[_|D1], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',D1), - ( D1=[E1|_] -> - setarg(5,E1,_) - ; - true - ) - ; - B1=[_,_|D1], - setarg(2,B1,D1), - ( D1=[E1|_] -> - setarg(5,E1,B1) - ; - true - ) - ), - detach_type_alias___2(Z,C) - ) - ), - type_alias(V,Y) - ) - ; - !, - ( var(C) -> - C=suspension(A1,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(A1) - ; - true - ), - type_alias___2__0__0__7(G,A,B,C) - ). -type_alias___2__0__0__7([],B,C,A) :- - type_alias___2__1(B,C,A). -type_alias___2__0__0__7([F|G],A,B,C) :- - ( F=suspension(_,active,_,_,_,D,E), - functor(A,I,J), - functor(E,I,J), - copy_term_nat((D,E,A,B),(K,L,M,N)), - subsumes(M,L) -> - F=suspension(_,_,_,_,_,B1,C1), - setarg(2,F,removed), - term_variables(term(B1,C1),H), - arg(5,F,X), - ( var(X) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',Y), - Y=[_|Z], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',Z), - ( Z=[A1|_] -> - setarg(5,A1,_) - ; - true - ) - ; - X=[_,_|Z], - setarg(2,X,Z), - ( Z=[A1|_] -> - setarg(5,A1,X) - ; - true - ) - ), - detach_type_alias___2(H,F), - arg(2,C,R), - setarg(2,C,active), - arg(4,C,Q), - P is Q+1, - setarg(4,C,P), - ( R==not_stored_yet -> - C=suspension(_,_,_,_,_,S,T), - term_variables(term(S,T),O), - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',U), - V=[C|U], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',V), - ( U=[W|_] -> - setarg(5,W,V) - ; - true - ), - attach_type_alias___2(O,C) - ; - true - ), - type_alias(K,N), - ( C=suspension(_,active,_,P,_,_,_) -> - setarg(2,C,inactive), - type_alias___2__0__0__7(G,A,B,C) - ; - true - ) - ; - type_alias___2__0__0__7(G,A,B,C) - ). -type_alias___2__0(A,B,C) :- - ( var(C) -> - C=suspension(D,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(D) - ; - true - ), - type_alias___2__1(A,B,C). -type_alias___2__1(A,_,B) :- - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D,_), - functor(D,F,G), - functor(A,F,G), - !, - C=suspension(_,_,_,_,_,U,V), - setarg(2,C,removed), - term_variables(term(U,V),H), - arg(5,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',R), - R=[_|S], - b_setval('$chr_store_global_list_chr_translate____type_definition___2',S), - ( S=[T|_] -> - setarg(5,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(5,T,Q) - ; - true - ) - ), - detach_type_definition___2(H,C), - ( var(B) -> - true - ; - B=suspension(_,N,_,_,_,O,P), - setarg(2,B,removed), - ( N==not_stored_yet -> - I=[] - ; - term_variables(term(O,P),I), - arg(5,B,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',L), - ( L=[M|_] -> - setarg(5,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(5,M,J) - ; - true - ) - ), - detach_type_alias___2(I,B) - ) - ), - chr_error(type_error,'Multiple definitions for type, once in a type definition and once as a type alias: ~w/~w. -',[F,G]). -type_alias___2__1(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',D), - !, - type_alias___2__1__0__10(D,A,B,C). -type_alias___2__1__0__10([],B,C,A) :- - type_alias___2__2(B,C,A). -type_alias___2__1__0__10([F|G],A,B,C) :- - ( F=suspension(_,active,_,D,E), - functor(A,I,J), - functor(D,I,J), - copy_term_nat((A,B),(K,L)), - D=K -> - F=suspension(_,_,_,Z,_), - setarg(2,F,removed), - term_variables(Z,H), - arg(3,F,V), - ( var(V) -> - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',W), - W=[_|X], - b_setval('$chr_store_global_list_chr_translate____unalias_type___2',X), - ( X=[Y|_] -> - setarg(3,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(3,Y,V) - ; - true - ) - ), - detach_unalias_type___2(H,F), - arg(2,C,P), - setarg(2,C,active), - arg(4,C,O), - N is O+1, - setarg(4,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,_,Q,R), - term_variables(term(Q,R),M), - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',S), - T=[C|S], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',T), - ( S=[U|_] -> - setarg(5,U,T) - ; - true - ), - attach_type_alias___2(M,C) - ; - true - ), - unalias_type(L,E), - ( C=suspension(_,active,_,N,_,_,_) -> - setarg(2,C,inactive), - type_alias___2__1__0__10(G,A,B,C) - ; - true - ) - ; - type_alias___2__1__0__10(G,A,B,C) - ). -type_alias___2__1(A,B,C) :- - type_alias___2__2(A,B,C). -type_alias___2__2(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',D), - !, - type_alias___2__2__0__12(D,A,B,C). -type_alias___2__2__0__12([],B,C,A) :- - type_alias___2__3(B,C,A). -type_alias___2__2__0__12([G|H],A,B,C) :- - ( G=suspension(_,active,_,D,E,F), - functor(A,J,K), - functor(F,J,K) -> - G=suspension(_,_,_,_,Z,A1), - setarg(2,G,removed), - I=[Z|B1], - term_variables(A1,B1), - arg(3,G,V), - ( var(V) -> - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',W), - W=[_|X], - b_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',X), - ( X=[Y|_] -> - setarg(3,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(3,Y,V) - ; - true - ) - ), - detach_static_type_check_var___3(I,G), - arg(2,C,P), - setarg(2,C,active), - arg(4,C,O), - N is O+1, - setarg(4,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,_,Q,R), - term_variables(term(Q,R),M), - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',S), - T=[C|S], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',T), - ( S=[U|_] -> - setarg(5,U,T) - ; - true - ), - attach_type_alias___2(M,C) - ; - true - ), - copy_term_nat(A-B,F-L), - static_type_check_var(D,E,L), - ( C=suspension(_,active,_,N,_,_,_) -> - setarg(2,C,inactive), - type_alias___2__2__0__12(H,A,B,C) - ; - true - ) - ; - type_alias___2__2__0__12(H,A,B,C) - ). -type_alias___2__2(A,B,C) :- - type_alias___2__3(A,B,C). -type_alias___2__3(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',D), - !, - type_alias___2__3__0__13(D,A,B,C). -type_alias___2__3__0__13([],B,C,A) :- - type_alias___2__4(B,C,A). -type_alias___2__3__0__13([D|E],B,C,A) :- - ( D=suspension(_,active,_,_), - K=t(232,A,D), - '$novel_production'(A,K), - '$novel_production'(D,K) -> - '$extend_history'(A,K), - arg(2,A,M), - setarg(2,A,active), - arg(4,A,L), - J is L+1, - setarg(4,A,J), - ( M==not_stored_yet -> - A=suspension(_,_,_,_,_,N,O), - term_variables(term(N,O),I), - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',P), - Q=[A|P], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - attach_type_alias___2(I,A) - ; - true - ), - copy_term_nat(B-C,F-G), - dynamic_type_check_alias_clause(F,G,H), - dynamic_type_check_clauses([H]), - ( A=suspension(_,active,_,J,_,_,_) -> - setarg(2,A,inactive), - type_alias___2__3__0__13(E,B,C,A) - ; - true - ) - ; - type_alias___2__3__0__13(E,B,C,A) - ). -type_alias___2__3(A,B,C) :- - type_alias___2__4(A,B,C). -type_alias___2__4(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',D), - !, - type_alias___2__4__0__14(D,A,B,C). -type_alias___2__4__0__14([],B,C,A) :- - type_alias___2__5(B,C,A). -type_alias___2__4__0__14([E|F],A,B,C) :- - ( E=suspension(_,active,_,D), - functor(D,H,I), - functor(A,H,I) -> - E=suspension(_,_,_,X), - setarg(2,E,removed), - term_variables(X,G), - arg(3,E,T), - ( var(T) -> - nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',U), - U=[_|V], - b_setval('$chr_store_global_list_chr_translate____atomic_type___1',V), - ( V=[W|_] -> - setarg(3,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(3,W,T) - ; - true - ) - ), - detach_atomic_type___1(G,E), - arg(2,C,N), - setarg(2,C,active), - arg(4,C,M), - L is M+1, - setarg(4,C,L), - ( N==not_stored_yet -> - C=suspension(_,_,_,_,_,O,P), - term_variables(term(O,P),K), - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',Q), - R=[C|Q], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',R), - ( Q=[S|_] -> - setarg(5,S,R) - ; - true - ), - attach_type_alias___2(K,C) - ; - true - ), - atomic(B), - copy_term_nat(A-B,D-J), - atomic_type(J), - ( C=suspension(_,active,_,L,_,_,_) -> - setarg(2,C,inactive), - type_alias___2__4__0__14(F,A,B,C) - ; - true - ) - ; - type_alias___2__4__0__14(F,A,B,C) - ). -type_alias___2__4(A,B,C) :- - type_alias___2__5(A,B,C). -type_alias___2__5(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',D), - !, - type_alias___2__5__0__15(D,A,B,C). -type_alias___2__5__0__15([],B,C,A) :- - type_alias___2__6(B,C,A). -type_alias___2__5__0__15([F|G],A,B,C) :- - ( F=suspension(_,active,_,D,E), - functor(D,I,J), - functor(A,I,J) -> - F=suspension(_,_,_,Y,_), - setarg(2,F,removed), - term_variables(Y,H), - arg(3,F,U), - ( var(U) -> - nb_getval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',V), - V=[_|W], - b_setval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',W), - ( W=[X|_] -> - setarg(3,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(3,X,U) - ; - true - ) - ), - detach_enumerated_atomic_type___2(H,F), - arg(2,C,O), - setarg(2,C,active), - arg(4,C,N), - M is N+1, - setarg(4,C,M), - ( O==not_stored_yet -> - C=suspension(_,_,_,_,_,P,Q), - term_variables(term(P,Q),L), - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',R), - S=[C|R], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',S), - ( R=[T|_] -> - setarg(5,T,S) - ; - true - ), - attach_type_alias___2(L,C) - ; - true - ), - atomic(B), - copy_term_nat(A-B,D-K), - enumerated_atomic_type(K,E), - ( C=suspension(_,active,_,M,_,_,_) -> - setarg(2,C,inactive), - type_alias___2__5__0__15(G,A,B,C) - ; - true - ) - ; - type_alias___2__5__0__15(G,A,B,C) - ). -type_alias___2__5(A,B,C) :- - type_alias___2__6(A,B,C). -type_alias___2__6(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F,G), - term_variables(term(F,G),B), - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',H), - I=[A|H], - b_setval('$chr_store_global_list_chr_translate____type_alias___2',I), - ( H=[J|_] -> - setarg(5,J,I) - ; - true - ), - attach_type_alias___2(B,A) - ; - true - ). -constraint_type(A,B) :- - constraint_type___2__0(A,B,_). -constraint_type___2__0(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____static_type_check___0',D), - !, - C=suspension(E,not_stored_yet,_,A,B), - 'chr gen_id'(E), - constraint_type___2__0__0__2(D,A,B,C). -constraint_type___2__0__0__2([],B,C,A) :- - constraint_type___2__1(B,C,A). -constraint_type___2__0__0__2([D|E],B,C,A) :- - ( D=suspension(_,active,_,_) -> - arg(2,A,H), - setarg(2,A,active), - ( H==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',I), - J=[A|I], - b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',J), - ( I=[K|_] -> - setarg(3,K,J) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',L), - insert_ht(L,B,A) - ; - true - ), - forall((member(F,C),sub_term(F,G)),(get_type_definition(G,_)->true;chr_error(type_error,'Undefined type "~w" used in type declaration of "~w". -',[G,B]))), - ( A=suspension(_,active,_,_,_) -> - setarg(2,A,inactive), - constraint_type___2__0__0__2(E,B,C,A) - ; - true - ) - ; - constraint_type___2__0__0__2(E,B,C,A) - ). -constraint_type___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,_,A,B), - 'chr gen_id'(D), - constraint_type___2__1(A,B,C). -constraint_type___2__1(A,_,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____constraint_type___2',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',G), - insert_ht(G,A,B) - ; - true - ). -get_type_definition(A,_) :- - \+ground(A), - !, - chr_error(type_error,'Non-ground type in constraint definition: "~w". -',[A]). -get_type_definition(A,B) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - functor(D,G,H), - functor(A,G,H), - copy_term_nat((D,E),(I,J)), - I=A, - !, - ( get_type_definition(J,B) -> - true - ; - chr_error(type_error,'Could not find type definition for "~w" (accessed via alias "~w"). -',[J,I]), - fail - ). -get_type_definition(A,B) :- - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - nonvar(D), - functor(D,G,H), - functor(A,G,H), - copy_term_nat((D,E),(I,J)), - I=A, - !, - B=J. -get_type_definition(A,B) :- - atomic_builtin_type(A,_,_), - !, - B=[A]. -get_type_definition(A,B) :- - compound_builtin_type(A,_,_,_), - !, - B=[A]. -get_type_definition(_,_) :- - fail. -get_constraint_type(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____constraint_type___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - !, - B=D. -get_constraint_type(_,_) :- - fail. -unalias_type(A,B) :- - unalias_type___2__0(A,B,_). -unalias_type___2__0(A,B,C) :- - var(A), - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,I,_), - setarg(2,C,removed), - term_variables(I,D), - arg(3,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',F), - F=[_|G], - b_setval('$chr_store_global_list_chr_translate____unalias_type___2',G), - ( G=[H|_] -> - setarg(3,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(3,H,E) - ; - true - ) - ), - detach_unalias_type___2(D,C) - ), - B=A. -unalias_type___2__0(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - functor(E,H,I), - functor(A,H,I), - copy_term_nat((E,F),(J,K)), - A=J, - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,Q,_), - setarg(2,C,removed), - term_variables(Q,L), - arg(3,C,M), - ( var(M) -> - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',N), - N=[_|O], - b_setval('$chr_store_global_list_chr_translate____unalias_type___2',O), - ( O=[P|_] -> - setarg(3,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(3,P,M) - ; - true - ) - ), - detach_unalias_type___2(L,C) - ), - unalias_type(K,B). -unalias_type___2__0(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,_,E,_), - nonvar(E), - functor(E,G,H), - functor(A,G,H), - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,N,_), - setarg(2,C,removed), - term_variables(N,I), - arg(3,C,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____unalias_type___2',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_unalias_type___2(I,C) - ), - B=A. -unalias_type___2__0(A,B,C) :- - atomic_builtin_type(A,_,_), - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,I,_), - setarg(2,C,removed), - term_variables(I,D), - arg(3,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',F), - F=[_|G], - b_setval('$chr_store_global_list_chr_translate____unalias_type___2',G), - ( G=[H|_] -> - setarg(3,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(3,H,E) - ; - true - ) - ), - detach_unalias_type___2(D,C) - ), - B=A. -unalias_type___2__0(A,B,C) :- - compound_builtin_type(A,_,_,_), - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,I,_), - setarg(2,C,removed), - term_variables(I,D), - arg(3,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',F), - F=[_|G], - b_setval('$chr_store_global_list_chr_translate____unalias_type___2',G), - ( G=[H|_] -> - setarg(3,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(3,H,E) - ; - true - ) - ), - detach_unalias_type___2(D,C) - ), - B=A. -unalias_type___2__0(A,B,C) :- - ( var(C) -> - C=suspension(E,active,_,A,B), - term_variables(A,D), - 'chr gen_id'(E), - nb_getval('$chr_store_global_list_chr_translate____unalias_type___2',F), - G=[C|F], - b_setval('$chr_store_global_list_chr_translate____unalias_type___2',G), - ( F=[H|_] -> - setarg(3,H,G) - ; - true - ), - attach_unalias_type___2(D,C) - ; - setarg(2,C,active) - ). -types_modes_condition([],[],A) :- - !, - A=true. -types_modes_condition([B|C],[D|E],A) :- - nb_getval('$chr_store_global_ground_chr_translate____constraint_mode___2',I), - 'chr sbag_member'(F,I), - F=suspension(_,active,_,_,G,H), - G=J/K, - functor(B,J,K), - !, - B=..[_|L], - A=(M,N,O), - modes_condition(H,L,M), - get_constraint_type_det(J/K,P), - D=..[_|Q], - types_condition(P,L,Q,H,N), - types_modes_condition(C,E,O). -types_modes_condition([A|_],_,_) :- - !, - functor(A,B,C), - chr_error(internal,'Mode information missing for ~w. -',[B/C]). -types_modes_condition(A,B,C) :- - D=suspension(E,active,_,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_global_ground_chr_translate____types_modes_condition___3',F), - G=[D|F], - b_setval('$chr_store_global_ground_chr_translate____types_modes_condition___3',G), - ( F=[H|_] -> - setarg(3,H,G) - ; - true - ). -static_type_check :- - static_type_check___0__0(_). -static_type_check___0__0(A) :- - nb_getval('$chr_store_global_ground_chr_translate____constraint_type___2',B), - !, - A=suspension(C,not_stored_yet,t,_), - 'chr gen_id'(C), - static_type_check___0__0__0__1(B,A). -static_type_check___0__0__0__1([],A) :- - static_type_check___0__1(A). -static_type_check___0__0__0__1([D|E],A) :- - ( D=suspension(_,active,_,B,C) -> - arg(2,A,H), - setarg(2,A,active), - ( H==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____static_type_check___0',I), - J=[A|I], - b_setval('$chr_store_global_ground_chr_translate____static_type_check___0',J), - ( I=[K|_] -> - setarg(4,K,J) - ; - true - ) - ; - true - ), - forall((member(F,C),sub_term(F,G)),(get_type_definition(G,_)->true;chr_error(type_error,'Undefined type "~w" used in type declaration of "~w". -',[G,B]))), - ( A=suspension(_,active,_,_) -> - setarg(2,A,inactive), - static_type_check___0__0__0__1(E,A) - ; - true - ) - ; - static_type_check___0__0__0__1(E,A) - ). -static_type_check___0__0(A) :- - A=suspension(B,not_stored_yet,t,_), - 'chr gen_id'(B), - static_type_check___0__1(A). -static_type_check___0__1(A) :- - nb_getval('$chr_store_global_ground_chr_translate____rule___2',B), - !, - static_type_check___0__1__0__2(B,A). -static_type_check___0__1__0__2([],A) :- - static_type_check___0__2(A). -static_type_check___0__1__0__2([C|D],A) :- - ( C=suspension(_,active,_,_,_,B), - S=t(209,C,A), - '$novel_production'(C,S), - '$novel_production'(A,S) -> - '$extend_history'(A,S), - arg(2,A,T), - setarg(2,A,active), - ( T==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____static_type_check___0',U), - V=[A|U], - b_setval('$chr_store_global_ground_chr_translate____static_type_check___0',V), - ( U=[W|_] -> - setarg(4,W,V) - ; - true - ) - ; - true - ), - copy_term_nat(B,E), - E=pragma(rule(F,G,_,H),ids(_,_),_,_,_), - ( - catch((static_type_check_heads(F),static_type_check_heads(G),conj2list(H,I),static_type_check_body(I)),type_error(J),(J=invalid_functor(K,L,M)->chr_error(type_error,'Invalid functor in ~@ of ~@: - found `~w'', - expected type `~w''! -',[chr_translate:format_src(K),format_rule(B),L,M]);J=type_clash(N,O,P,Q,R)->chr_error(type_error,'Type clash for variable ~w in ~@: - expected type ~w in ~@ - expected type ~w in ~@ -',[N,format_rule(B),Q,chr_translate:format_src(O),R,chr_translate:format_src(P)]))), - fail - ; - true - ), - ( A=suspension(_,active,_,_) -> - setarg(2,A,inactive), - static_type_check___0__1__0__2(D,A) - ; - true - ) - ; - static_type_check___0__1__0__2(D,A) - ). -static_type_check___0__1(A) :- - static_type_check___0__2(A). -static_type_check___0__2(A) :- - ( var(A) -> - true - ; - arg(2,A,F), - setarg(2,A,removed), - ( F==not_stored_yet -> - true - ; - arg(4,A,B), - ( var(B) -> - nb_getval('$chr_store_global_ground_chr_translate____static_type_check___0',C), - C=[_|D], - b_setval('$chr_store_global_ground_chr_translate____static_type_check___0',D), - ( D=[E|_] -> - setarg(4,E,_) - ; - true - ) - ; - B=[_,_|D], - setarg(2,B,D), - ( D=[E|_] -> - setarg(4,E,B) - ; - true - ) - ) - ) - ). -static_type_check_term(A,B,C) :- - var(B), - !, - static_type_check_var(A,B,C). -static_type_check_term(A,B,C) :- - atomic_builtin_type(C,B,D), - !, - ( call(D) -> - true - ; - throw(type_error(invalid_functor(A,B,C))) - ). -static_type_check_term(A,B,C) :- - compound_builtin_type(C,B,_,D), - !, - ( call(D) -> - true - ; - throw(type_error(invalid_functor(A,B,C))) - ). -static_type_check_term(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - functor(C,H,I), - functor(E,H,I), - !, - copy_term_nat(E-F,C-J), - static_type_check_term(A,B,J). -static_type_check_term(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - functor(C,H,I), - functor(E,H,I), - !, - copy_term_nat(E-F,C-J), - functor(B,K,L), - ( member(M,J), - functor(M,K,L) -> - B=..[_|N], - M=..[_|O], - maplist(static_type_check_term(A),N,O) - ; - throw(type_error(invalid_functor(A,B,C))) - ). -static_type_check_term(A,B,C) :- - chr_error(internal,'Undefined type ~w while type checking term ~w in ~@. -',[C,B,chr_translate:format_src(A)]). -static_type_check_var(A,B,C) :- - static_type_check_var___3__0(A,B,C,_). -static_type_check_var___3__0(A,B,C,D) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',H), - 'chr sbag_member'(E,H), - E=suspension(_,active,_,_,_,F,G), - functor(F,I,J), - functor(C,I,J), - !, - ( var(D) -> - true - ; - D=suspension(_,_,_,_,Q,R), - setarg(2,D,removed), - L=[Q|S], - term_variables(R,S), - arg(3,D,M), - ( var(M) -> - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',N), - N=[_|O], - b_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',O), - ( O=[P|_] -> - setarg(3,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(3,P,M) - ; - true - ) - ), - detach_static_type_check_var___3(L,D) - ), - copy_term_nat(F-G,C-K), - static_type_check_var(A,B,K). -static_type_check_var___3__0(A,B,C,D) :- - atomic_builtin_type(C,_,_), - !, - ( var(D) -> - true - ; - D=suspension(_,_,_,_,J,K), - setarg(2,D,removed), - E=[J|L], - term_variables(K,L), - arg(3,D,F), - ( var(F) -> - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',G), - G=[_|H], - b_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',H), - ( H=[I|_] -> - setarg(3,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(3,I,F) - ; - true - ) - ), - detach_static_type_check_var___3(E,D) - ), - static_atomic_builtin_type_check_var(A,B,C). -static_type_check_var___3__0(_,_,A,B) :- - compound_builtin_type(A,_,_,_), - !, - ( var(B) -> - true - ; - B=suspension(_,_,_,_,H,I), - setarg(2,B,removed), - C=[H|J], - term_variables(I,J), - arg(3,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',E), - E=[_|F], - b_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - detach_static_type_check_var___3(C,B) - ). -static_type_check_var___3__0(A,B,C,D) :- - get_attr(B,chr_translate,J), - J=v(_,_,_,_,_,_,_,I,_,_,_), - 'chr sbag_member'(E,I), - E=suspension(_,active,_,F,G,H), - G==B, - ( - C\==H, - !, - E=suspension(_,_,_,_,N1,O1), - setarg(2,E,removed), - K=[N1|P1], - term_variables(O1,P1), - arg(3,E,J1), - ( var(J1) -> - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',K1), - K1=[_|L1], - b_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',L1), - ( L1=[M1|_] -> - setarg(3,M1,_) - ; - true - ) - ; - J1=[_,_|L1], - setarg(2,J1,L1), - ( L1=[M1|_] -> - setarg(3,M1,J1) - ; - true - ) - ), - detach_static_type_check_var___3(K,E), - ( var(D) -> - true - ; - D=suspension(_,_,_,_,G1,H1), - setarg(2,D,removed), - L=[G1|I1], - term_variables(H1,I1), - arg(3,D,C1), - ( var(C1) -> - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',D1), - D1=[_|E1], - b_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',E1), - ( E1=[F1|_] -> - setarg(3,F1,_) - ; - true - ) - ; - C1=[_,_|E1], - setarg(2,C1,E1), - ( E1=[F1|_] -> - setarg(3,F1,C1) - ; - true - ) - ), - detach_static_type_check_var___3(L,D) - ), - throw(type_error(type_clash(B,A,F,C,H))) - ; - H\==C, - !, - E=suspension(_,_,_,_,Z,A1), - setarg(2,E,removed), - M=[Z|B1], - term_variables(A1,B1), - arg(3,E,V), - ( var(V) -> - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',W), - W=[_|X], - b_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',X), - ( X=[Y|_] -> - setarg(3,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(3,Y,V) - ; - true - ) - ), - detach_static_type_check_var___3(M,E), - ( var(D) -> - true - ; - D=suspension(_,_,_,_,S,T), - setarg(2,D,removed), - N=[S|U], - term_variables(T,U), - arg(3,D,O), - ( var(O) -> - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',P), - P=[_|Q], - b_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',Q), - ( Q=[R|_] -> - setarg(3,R,_) - ; - true - ) - ; - O=[_,_|Q], - setarg(2,O,Q), - ( Q=[R|_] -> - setarg(3,R,O) - ; - true - ) - ), - detach_static_type_check_var___3(N,D) - ), - throw(type_error(type_clash(B,F,A,H,C))) - ). -static_type_check_var___3__0(A,B,C,D) :- - ( var(D) -> - D=suspension(F,active,_,A,B,C), - E=[B|G], - term_variables(C,G), - 'chr gen_id'(F), - nb_getval('$chr_store_global_list_chr_translate____static_type_check_var___3',H), - I=[D|H], - b_setval('$chr_store_global_list_chr_translate____static_type_check_var___3',I), - ( H=[J|_] -> - setarg(3,J,I) - ; - true - ), - attach_static_type_check_var___3(E,D) - ; - setarg(2,D,active) - ). -static_atomic_builtin_type_check_var(A,B,C) :- - static_atomic_builtin_type_check_var___3__0(A,B,C,_). -static_atomic_builtin_type_check_var___3__0(_,_,A,B) :- - A==any, - !, - ( var(B) -> - true - ; - B=suspension(_,_,_,_,H,I), - setarg(2,B,removed), - term_variables(H,C,J), - term_variables(I,J), - arg(3,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',E), - E=[_|F], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(C,B) - ). -static_atomic_builtin_type_check_var___3__0(A,B,C,D) :- - ( 'chr newvia_2'(B,C,I) -> - get_attr(I,chr_translate,J), - J=v(_,_,_,_,_,_,_,_,H,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',H) - ), - ( - 'chr sbag_member'(E,H), - E=suspension(_,active,_,_,F,G), - F==B, - G==C, - !, - ( var(D) -> - true - ; - D=suspension(_,_,_,_,P,Q), - setarg(2,D,removed), - term_variables(P,K,R), - term_variables(Q,R), - arg(3,D,L), - ( var(L) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',M), - M=[_|N], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',N), - ( N=[O|_] -> - setarg(3,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(3,O,L) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(K,D) - ) - ; - !, - static_atomic_builtin_type_check_var___3__0__0__3(H,A,B,C,D) - ). -static_atomic_builtin_type_check_var___3__0__0__3([],B,C,D,A) :- - static_atomic_builtin_type_check_var___3__1(B,C,D,A). -static_atomic_builtin_type_check_var___3__0__0__3([G|H],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - E==B, - F==C -> - G=suspension(_,_,_,_,N,O), - setarg(2,G,removed), - term_variables(N,I,P), - term_variables(O,P), - arg(3,G,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(I,G), - static_atomic_builtin_type_check_var___3__0__0__3(H,A,B,C,D) - ; - static_atomic_builtin_type_check_var___3__0__0__3(H,A,B,C,D) - ). -static_atomic_builtin_type_check_var___3__0(A,B,C,D) :- - static_atomic_builtin_type_check_var___3__1(A,B,C,D). -static_atomic_builtin_type_check_var___3__1(_,A,B,C) :- - B==number, - ( 'chr newvia_1'(A,H) -> - get_attr(H,chr_translate,I), - I=v(_,_,_,_,_,_,_,_,G,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - E==A, - F==float, - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,_,O,P), - setarg(2,C,removed), - term_variables(O,J,Q), - term_variables(P,Q), - arg(3,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - L=[_|M], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(J,C) - ). -static_atomic_builtin_type_check_var___3__1(A,B,C,D) :- - C==float, - ( 'chr newvia_1'(B,F) -> - get_attr(F,chr_translate,G), - G=v(_,_,_,_,_,_,_,_,E,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',E) - ), - !, - static_atomic_builtin_type_check_var___3__1__0__5(E,A,B,C,D). -static_atomic_builtin_type_check_var___3__1__0__5([],B,C,D,A) :- - static_atomic_builtin_type_check_var___3__8(B,C,D,A). -static_atomic_builtin_type_check_var___3__1__0__5([G|H],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - E==B, - F==number -> - G=suspension(_,_,_,_,N,O), - setarg(2,G,removed), - term_variables(N,I,P), - term_variables(O,P), - arg(3,G,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(I,G), - static_atomic_builtin_type_check_var___3__1__0__5(H,A,B,C,D) - ; - static_atomic_builtin_type_check_var___3__1__0__5(H,A,B,C,D) - ). -static_atomic_builtin_type_check_var___3__1(A,B,C,D) :- - static_atomic_builtin_type_check_var___3__2(A,B,C,D). -static_atomic_builtin_type_check_var___3__2(_,A,B,C) :- - B==number, - ( 'chr newvia_1'(A,H) -> - get_attr(H,chr_translate,I), - I=v(_,_,_,_,_,_,_,_,G,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - E==A, - F==int, - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,_,O,P), - setarg(2,C,removed), - term_variables(O,J,Q), - term_variables(P,Q), - arg(3,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - L=[_|M], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(J,C) - ). -static_atomic_builtin_type_check_var___3__2(A,B,C,D) :- - C==int, - ( 'chr newvia_1'(B,F) -> - get_attr(F,chr_translate,G), - G=v(_,_,_,_,_,_,_,_,E,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',E) - ), - !, - static_atomic_builtin_type_check_var___3__2__0__7(E,A,B,C,D). -static_atomic_builtin_type_check_var___3__2__0__7([],B,C,D,A) :- - static_atomic_builtin_type_check_var___3__5(B,C,D,A). -static_atomic_builtin_type_check_var___3__2__0__7([G|H],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - E==B, - F==number -> - G=suspension(_,_,_,_,N,O), - setarg(2,G,removed), - term_variables(N,I,P), - term_variables(O,P), - arg(3,G,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(I,G), - static_atomic_builtin_type_check_var___3__2__0__7(H,A,B,C,D) - ; - static_atomic_builtin_type_check_var___3__2__0__7(H,A,B,C,D) - ). -static_atomic_builtin_type_check_var___3__2(A,B,C,D) :- - static_atomic_builtin_type_check_var___3__3(A,B,C,D). -static_atomic_builtin_type_check_var___3__3(_,A,B,C) :- - B==number, - ( 'chr newvia_1'(A,H) -> - get_attr(H,chr_translate,I), - I=v(_,_,_,_,_,_,_,_,G,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - E==A, - F==natural, - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,_,O,P), - setarg(2,C,removed), - term_variables(O,J,Q), - term_variables(P,Q), - arg(3,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - L=[_|M], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(J,C) - ). -static_atomic_builtin_type_check_var___3__3(A,B,C,D) :- - C==natural, - ( 'chr newvia_1'(B,F) -> - get_attr(F,chr_translate,G), - G=v(_,_,_,_,_,_,_,_,E,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',E) - ), - !, - static_atomic_builtin_type_check_var___3__3__0__9(E,A,B,C,D). -static_atomic_builtin_type_check_var___3__3__0__9([],B,C,D,A) :- - static_atomic_builtin_type_check_var___3__5(B,C,D,A). -static_atomic_builtin_type_check_var___3__3__0__9([G|H],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - E==B, - F==number -> - G=suspension(_,_,_,_,N,O), - setarg(2,G,removed), - term_variables(N,I,P), - term_variables(O,P), - arg(3,G,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(I,G), - static_atomic_builtin_type_check_var___3__3__0__9(H,A,B,C,D) - ; - static_atomic_builtin_type_check_var___3__3__0__9(H,A,B,C,D) - ). -static_atomic_builtin_type_check_var___3__3(A,B,C,D) :- - static_atomic_builtin_type_check_var___3__4(A,B,C,D). -static_atomic_builtin_type_check_var___3__4(_,A,B,C) :- - B==number, - ( 'chr newvia_1'(A,H) -> - get_attr(H,chr_translate,I), - I=v(_,_,_,_,_,_,_,_,G,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - E==A, - F==dense_int, - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,_,O,P), - setarg(2,C,removed), - term_variables(O,J,Q), - term_variables(P,Q), - arg(3,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - L=[_|M], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(J,C) - ). -static_atomic_builtin_type_check_var___3__4(A,B,C,D) :- - C==dense_int, - ( 'chr newvia_1'(B,F) -> - get_attr(F,chr_translate,G), - G=v(_,_,_,_,_,_,_,_,E,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',E) - ), - !, - static_atomic_builtin_type_check_var___3__4__0__11(E,A,B,C,D). -static_atomic_builtin_type_check_var___3__4__0__11([],B,C,D,A) :- - static_atomic_builtin_type_check_var___3__6(B,C,D,A). -static_atomic_builtin_type_check_var___3__4__0__11([G|H],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - E==B, - F==number -> - G=suspension(_,_,_,_,N,O), - setarg(2,G,removed), - term_variables(N,I,P), - term_variables(O,P), - arg(3,G,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(I,G), - static_atomic_builtin_type_check_var___3__4__0__11(H,A,B,C,D) - ; - static_atomic_builtin_type_check_var___3__4__0__11(H,A,B,C,D) - ). -static_atomic_builtin_type_check_var___3__4(A,B,C,D) :- - static_atomic_builtin_type_check_var___3__5(A,B,C,D). -static_atomic_builtin_type_check_var___3__5(_,A,B,C) :- - B==int, - ( 'chr newvia_1'(A,H) -> - get_attr(H,chr_translate,I), - I=v(_,_,_,_,_,_,_,_,G,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - E==A, - F==natural, - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,_,O,P), - setarg(2,C,removed), - term_variables(O,J,Q), - term_variables(P,Q), - arg(3,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - L=[_|M], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(J,C) - ). -static_atomic_builtin_type_check_var___3__5(A,B,C,D) :- - C==natural, - ( 'chr newvia_1'(B,F) -> - get_attr(F,chr_translate,G), - G=v(_,_,_,_,_,_,_,_,E,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',E) - ), - !, - static_atomic_builtin_type_check_var___3__5__0__13(E,A,B,C,D). -static_atomic_builtin_type_check_var___3__5__0__13([],B,C,D,A) :- - static_atomic_builtin_type_check_var___3__7(B,C,D,A). -static_atomic_builtin_type_check_var___3__5__0__13([G|H],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - E==B, - F==int -> - G=suspension(_,_,_,_,N,O), - setarg(2,G,removed), - term_variables(N,I,P), - term_variables(O,P), - arg(3,G,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(I,G), - static_atomic_builtin_type_check_var___3__5__0__13(H,A,B,C,D) - ; - static_atomic_builtin_type_check_var___3__5__0__13(H,A,B,C,D) - ). -static_atomic_builtin_type_check_var___3__5(A,B,C,D) :- - static_atomic_builtin_type_check_var___3__6(A,B,C,D). -static_atomic_builtin_type_check_var___3__6(_,A,B,C) :- - B==int, - ( 'chr newvia_1'(A,H) -> - get_attr(H,chr_translate,I), - I=v(_,_,_,_,_,_,_,_,G,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - E==A, - F==dense_int, - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,_,O,P), - setarg(2,C,removed), - term_variables(O,J,Q), - term_variables(P,Q), - arg(3,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - L=[_|M], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(J,C) - ). -static_atomic_builtin_type_check_var___3__6(A,B,C,D) :- - C==dense_int, - ( 'chr newvia_1'(B,F) -> - get_attr(F,chr_translate,G), - G=v(_,_,_,_,_,_,_,_,E,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',E) - ), - !, - static_atomic_builtin_type_check_var___3__6__0__15(E,A,B,C,D). -static_atomic_builtin_type_check_var___3__6__0__15([],B,C,D,A) :- - static_atomic_builtin_type_check_var___3__7(B,C,D,A). -static_atomic_builtin_type_check_var___3__6__0__15([G|H],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - E==B, - F==int -> - G=suspension(_,_,_,_,N,O), - setarg(2,G,removed), - term_variables(N,I,P), - term_variables(O,P), - arg(3,G,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(I,G), - static_atomic_builtin_type_check_var___3__6__0__15(H,A,B,C,D) - ; - static_atomic_builtin_type_check_var___3__6__0__15(H,A,B,C,D) - ). -static_atomic_builtin_type_check_var___3__6(A,B,C,D) :- - static_atomic_builtin_type_check_var___3__7(A,B,C,D). -static_atomic_builtin_type_check_var___3__7(_,A,B,C) :- - B==natural, - ( 'chr newvia_1'(A,H) -> - get_attr(H,chr_translate,I), - I=v(_,_,_,_,_,_,_,_,G,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - E==A, - F==dense_int, - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,_,O,P), - setarg(2,C,removed), - term_variables(O,J,Q), - term_variables(P,Q), - arg(3,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - L=[_|M], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(J,C) - ). -static_atomic_builtin_type_check_var___3__7(A,B,C,D) :- - C==dense_int, - ( 'chr newvia_1'(B,F) -> - get_attr(F,chr_translate,G), - G=v(_,_,_,_,_,_,_,_,E,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',E) - ), - !, - static_atomic_builtin_type_check_var___3__7__0__17(E,A,B,C,D). -static_atomic_builtin_type_check_var___3__7__0__17([],B,C,D,A) :- - static_atomic_builtin_type_check_var___3__8(B,C,D,A). -static_atomic_builtin_type_check_var___3__7__0__17([G|H],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - E==B, - F==natural -> - G=suspension(_,_,_,_,N,O), - setarg(2,G,removed), - term_variables(N,I,P), - term_variables(O,P), - arg(3,G,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(I,G), - static_atomic_builtin_type_check_var___3__7__0__17(H,A,B,C,D) - ; - static_atomic_builtin_type_check_var___3__7__0__17(H,A,B,C,D) - ). -static_atomic_builtin_type_check_var___3__7(A,B,C,D) :- - static_atomic_builtin_type_check_var___3__8(A,B,C,D). -static_atomic_builtin_type_check_var___3__8(A,B,C,D) :- - ( 'chr newvia_1'(B,J) -> - get_attr(J,chr_translate,K), - K=v(_,_,_,_,_,_,_,_,I,_,_) - ; - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',I) - ), - 'chr sbag_member'(E,I), - E=suspension(_,active,_,F,G,H), - G==B, - !, - E=suspension(_,_,_,_,Y,Z), - setarg(2,E,removed), - term_variables(Y,L,A1), - term_variables(Z,A1), - arg(3,E,U), - ( var(U) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',V), - V=[_|W], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',W), - ( W=[X|_] -> - setarg(3,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(3,X,U) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(L,E), - ( var(D) -> - true - ; - D=suspension(_,_,_,_,R,S), - setarg(2,D,removed), - term_variables(R,M,T), - term_variables(S,T), - arg(3,D,N), - ( var(N) -> - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',O), - O=[_|P], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',P), - ( P=[Q|_] -> - setarg(3,Q,_) - ; - true - ) - ; - N=[_,_|P], - setarg(2,N,P), - ( P=[Q|_] -> - setarg(3,Q,N) - ; - true - ) - ), - detach_static_atomic_builtin_type_check_var___3(M,D) - ), - throw(type_error(type_clash(B,A,F,C,H))). -static_atomic_builtin_type_check_var___3__8(A,B,C,D) :- - ( var(D) -> - D=suspension(F,active,_,A,B,C), - term_variables(B,E,G), - term_variables(C,G), - 'chr gen_id'(F), - nb_getval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',H), - I=[D|H], - b_setval('$chr_store_global_list_chr_translate____static_atomic_builtin_type_check_var___3',I), - ( H=[J|_] -> - setarg(3,J,I) - ; - true - ), - attach_static_atomic_builtin_type_check_var___3(E,D) - ; - setarg(2,D,active) - ). -dynamic_type_check :- - dynamic_type_check___0__0(_). -dynamic_type_check___0__0(A) :- - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',B), - !, - A=suspension(C,not_stored_yet,t,_), - 'chr gen_id'(C), - dynamic_type_check___0__0__0__1(B,A). -dynamic_type_check___0__0__0__1([],A) :- - dynamic_type_check___0__1(A). -dynamic_type_check___0__0__0__1([D|E],A) :- - ( D=suspension(_,active,_,_,_,B,C), - I=t(231,D,A), - '$novel_production'(D,I), - '$novel_production'(A,I) -> - '$extend_history'(A,I), - arg(2,A,J), - setarg(2,A,active), - ( J==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',K), - L=[A|K], - b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',L), - ( K=[M|_] -> - setarg(4,M,L) - ; - true - ) - ; - true - ), - copy_term_nat(B-C,F-G), - maplist(dynamic_type_check_clause(F),G,H), - dynamic_type_check_clauses(H), - ( A=suspension(_,active,_,_) -> - setarg(2,A,inactive), - dynamic_type_check___0__0__0__1(E,A) - ; - true - ) - ; - dynamic_type_check___0__0__0__1(E,A) - ). -dynamic_type_check___0__0(A) :- - A=suspension(B,not_stored_yet,t,_), - 'chr gen_id'(B), - dynamic_type_check___0__1(A). -dynamic_type_check___0__1(A) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',B), - !, - dynamic_type_check___0__1__0__2(B,A). -dynamic_type_check___0__1__0__2([],A) :- - dynamic_type_check___0__2(A). -dynamic_type_check___0__1__0__2([D|E],A) :- - ( D=suspension(_,active,_,_,_,B,C), - I=t(232,D,A), - '$novel_production'(D,I), - '$novel_production'(A,I) -> - '$extend_history'(A,I), - arg(2,A,J), - setarg(2,A,active), - ( J==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',K), - L=[A|K], - b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',L), - ( K=[M|_] -> - setarg(4,M,L) - ; - true - ) - ; - true - ), - copy_term_nat(B-C,F-G), - dynamic_type_check_alias_clause(F,G,H), - dynamic_type_check_clauses([H]), - ( A=suspension(_,active,_,_) -> - setarg(2,A,inactive), - dynamic_type_check___0__1__0__2(E,A) - ; - true - ) - ; - dynamic_type_check___0__1__0__2(E,A) - ). -dynamic_type_check___0__1(A) :- - dynamic_type_check___0__2(A). -dynamic_type_check___0__2(A) :- - ( var(A) -> - true - ; - arg(2,A,J), - setarg(2,A,removed), - ( J==not_stored_yet -> - true - ; - arg(4,A,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check___0',H), - ( H=[I|_] -> - setarg(4,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(4,I,F) - ; - true - ) - ) - ) - ), - findall(('$dynamic_type_check'(D,E):-C),(atomic_builtin_type(D,E,C);compound_builtin_type(D,E,C,_)),B), - dynamic_type_check_clauses(B). -dynamic_type_check_clauses(A) :- - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - setarg(2,B,removed), - arg(3,B,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',H), - ( H=[I|_] -> - setarg(3,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(3,I,F) - ; - true - ) - ), - append(A,C,E), - dynamic_type_check_clauses(E). -dynamic_type_check_clauses(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -get_dynamic_type_check_clauses(A) :- - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,C), - !, - setarg(2,B,removed), - arg(3,B,E), - ( var(E) -> - nb_getval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',F), - F=[_|G], - b_setval('$chr_store_global_ground_chr_translate____dynamic_type_check_clauses___1',G), - ( G=[H|_] -> - setarg(3,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(3,H,E) - ; - true - ) - ), - A=C. -get_dynamic_type_check_clauses([]). -atomic_type(A) :- - atomic_type___1__0(A,_). -atomic_type___1__0(A,B) :- - atomic_builtin_type(A,_,_), - !, - ( var(B) -> - true - ; - B=suspension(_,_,_,H), - setarg(2,B,removed), - term_variables(H,C), - arg(3,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',E), - E=[_|F], - b_setval('$chr_store_global_list_chr_translate____atomic_type___1',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - detach_atomic_type___1(C,B) - ), - A\==any. -atomic_type___1__0(A,B) :- - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - functor(A,G,H), - functor(D,G,H), - !, - ( var(B) -> - true - ; - B=suspension(_,_,_,N), - setarg(2,B,removed), - term_variables(N,I), - arg(3,B,J), - ( var(J) -> - nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',K), - K=[_|L], - b_setval('$chr_store_global_list_chr_translate____atomic_type___1',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - detach_atomic_type___1(I,B) - ), - maplist(atomic,E). -atomic_type___1__0(A,B) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - functor(A,G,H), - functor(D,G,H), - !, - ( var(B) -> - true - ; - B=suspension(_,_,_,O), - setarg(2,B,removed), - term_variables(O,J), - arg(3,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',L), - L=[_|M], - b_setval('$chr_store_global_list_chr_translate____atomic_type___1',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - detach_atomic_type___1(J,B) - ), - atomic(E), - copy_term_nat(D-E,A-I), - atomic_type(I). -atomic_type___1__0(A,B) :- - ( var(B) -> - B=suspension(D,active,_,A), - term_variables(A,C), - 'chr gen_id'(D), - nb_getval('$chr_store_global_list_chr_translate____atomic_type___1',E), - F=[B|E], - b_setval('$chr_store_global_list_chr_translate____atomic_type___1',F), - ( E=[G|_] -> - setarg(3,G,F) - ; - true - ), - attach_atomic_type___1(C,B) - ; - setarg(2,B,active) - ). -enumerated_atomic_type(A,B) :- - enumerated_atomic_type___2__0(A,B,_). -enumerated_atomic_type___2__0(A,_,B) :- - atomic_builtin_type(A,_,_), - !, - ( var(B) -> - true - ; - B=suspension(_,_,_,H,_), - setarg(2,B,removed), - term_variables(H,C), - arg(3,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',E), - E=[_|F], - b_setval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - detach_enumerated_atomic_type___2(C,B) - ), - fail. -enumerated_atomic_type___2__0(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____type_definition___2',G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - functor(A,H,I), - functor(E,H,I), - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,O,_), - setarg(2,C,removed), - term_variables(O,J), - arg(3,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',L), - L=[_|M], - b_setval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',M), - ( M=[N|_] -> - setarg(3,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(3,N,K) - ; - true - ) - ), - detach_enumerated_atomic_type___2(J,C) - ), - maplist(atomic,F), - B=F. -enumerated_atomic_type___2__0(A,B,C) :- - nb_getval('$chr_store_global_list_chr_translate____type_alias___2',G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - functor(A,H,I), - functor(E,H,I), - !, - ( var(C) -> - true - ; - C=suspension(_,_,_,P,_), - setarg(2,C,removed), - term_variables(P,K), - arg(3,C,L), - ( var(L) -> - nb_getval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',M), - M=[_|N], - b_setval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',N), - ( N=[O|_] -> - setarg(3,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(3,O,L) - ; - true - ) - ), - detach_enumerated_atomic_type___2(K,C) - ), - atomic(F), - copy_term_nat(E-F,A-J), - enumerated_atomic_type(J,B). -enumerated_atomic_type___2__0(A,B,C) :- - ( var(C) -> - C=suspension(E,active,_,A,B), - term_variables(A,D), - 'chr gen_id'(E), - nb_getval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',F), - G=[C|F], - b_setval('$chr_store_global_list_chr_translate____enumerated_atomic_type___2',G), - ( F=[H|_] -> - setarg(3,H,G) - ; - true - ), - attach_enumerated_atomic_type___2(D,C) - ; - setarg(2,C,active) - ). -stored(A,B,yes) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',Q), - lookup_ht(Q,k(A,B),F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,_,D,E,_), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',P), - lookup_ht(P,k(D,E),H), - 'chr sbag_member'(G,H), - G=suspension(_,active,_,_,_), - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',O), - lookup_ht(O,A,L), - 'chr sbag_member'(I,L), - I=suspension(_,active,_,_,J,K), - B - stored_complete___3__0__1__3(H,F,G,I,B,C,D,A) - ; - stored_complete___3__0__0__3(I,B,C,D,A) - ). -stored_complete___3__0__1__3([],_,_,A,C,D,E,B) :- - stored_complete___3__0__0__3(A,C,D,E,B). -stored_complete___3__0__1__3([J|L],G,A,B,D,E,F,C) :- - ( J=suspension(_,active,_,_,H,_,I,_,_), - H==D, - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-3',M), - lookup_ht1(M,I,I,K) -> - stored_complete___3__0__2__3(K,I,J,L,G,A,B,D,E,F,C) - ; - stored_complete___3__0__1__3(L,G,A,B,D,E,F,C) - ). -stored_complete___3__0__2__3([],_,_,A,H,B,C,E,F,G,D) :- - stored_complete___3__0__1__3(A,H,B,C,E,F,G,D). -stored_complete___3__0__2__3([M|N],J,A,B,I,C,D,F,G,H,E) :- - ( M=suspension(_,active,_,_,_,_,K,L,_), - M\==A, - K==J, - O=t(245,M,A,E,C), - '$novel_production'(M,O), - '$novel_production'(A,O), - '$novel_production'(E,O), - '$novel_production'(C,O), - G= - '$extend_history'(E,O), - arg(2,E,P), - setarg(2,E,active), - ( P==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',Q), - insert_ht(Q,F,E) - ; - true - ), - passive(J,L), - ( E=suspension(_,active,_,_,_,_) -> - setarg(2,E,inactive), - stored_complete___3__0__2__3(N,J,A,B,I,C,D,F,G,H,E) - ; - true - ) - ; - stored_complete___3__0__2__3(N,J,A,B,I,C,D,F,G,H,E) - ). -stored_complete___3__0(A,B,C,D) :- - D=suspension(E,not_stored_yet,t,A,B,C), - 'chr gen_id'(E), - stored_complete___3__1(A,B,C,D). -stored_complete___3__1(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',F), - lookup_ht(F,A,E), - !, - stored_complete___3__1__0__4(E,A,B,C,D). -stored_complete___3__1__0__4([],B,C,D,A) :- - stored_complete___3__2(B,C,D,A). -stored_complete___3__1__0__4([I|J],B,C,D,A) :- - ( I=suspension(_,active,_,_,E,F,G,H,_), - E==B, - K=t(254,A,I), - '$novel_production'(A,K), - '$novel_production'(I,K), - F>C -> - '$extend_history'(A,K), - arg(2,A,L), - setarg(2,A,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',M), - insert_ht(M,B,A) - ; - true - ), - passive(G,H), - ( A=suspension(_,active,_,_,_,_) -> - setarg(2,A,inactive), - stored_complete___3__1__0__4(J,B,C,D,A) - ; - true - ) - ; - stored_complete___3__1__0__4(J,B,C,D,A) - ). -stored_complete___3__1(A,B,C,D) :- - stored_complete___3__2(A,B,C,D). -stored_complete___3__2(A,_,_,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',D), - insert_ht(D,A,B) - ; - true - ). -is_stored(A) :- - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',J), - lookup_ht(J,A,D), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,C), - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',I), - lookup_ht(I,A,H), - 'chr sbag_member'(E,H), - E=suspension(_,active,_,_,F,G), - G=0, - F= - setarg(3,H,G) - ; - true - ). -constraint_code(A,B,C) :- - ( - ( - chr_pp_flag(debugable,on) - ; - is_stored(A), - ( - has_active_occurrence(A) - ; - chr_pp_flag(late_allocation,off) - ), - ( - may_trigger(A) - ; - get_allocation_occurrence(A,D), - get_max_occurrence(A,E), - E>=D - ) - ) -> - constraint_prelude(A,F), - add_dummy_location(F,G), - B=[G|H] - ; - B=H - ), - I=[0], - occurrences_code(A,1,I,J,H,K), - gen_cond_attach_clause(A,J,K,C). -has_active_occurrence(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !. -has_active_occurrence(A) :- - has_active_occurrence(A,1), - memo_has_active_occurrence(A). -has_active_occurrence(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - B>D, - !, - fail. -has_active_occurrence(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',K), - lookup_ht(K,k(A,B),F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,_,D,E,_), - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',J), - lookup_ht(J,k(D,E),H), - 'chr sbag_member'(G,H), - G=suspension(_,active,_,_,_), - !, - I is B+1, - has_active_occurrence(A,I). -has_active_occurrence(_,_). -memo_has_active_occurrence(A) :- - B=suspension(C,active,A), - 'chr gen_id'(C), - nb_getval('$chr_store_multi_hash_chr_translate____memo_has_active_occurrence___1-1',D), - insert_ht(D,A,B). -use_auxiliary_predicate(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !. -use_auxiliary_predicate(A) :- - B=suspension(C,active,A), - 'chr gen_id'(C), - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',D), - insert_ht(D,A,B). -use_auxiliary_predicate(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -use_auxiliary_predicate(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',E), - insert_ht(E,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',F), - insert_ht(F,k(A,B),C). -is_used_auxiliary_predicate(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !. -is_used_auxiliary_predicate(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - !. -is_used_auxiliary_predicate(_) :- - fail. -is_used_auxiliary_predicate(A,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !. -is_used_auxiliary_predicate(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_predicate___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -is_used_auxiliary_predicate(_,_) :- - fail. -use_auxiliary_module(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !. -use_auxiliary_module(A) :- - B=suspension(C,active,A), - 'chr gen_id'(C), - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',D), - insert_ht(D,A,B). -is_used_auxiliary_module(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____use_auxiliary_module___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !. -is_used_auxiliary_module(_) :- - fail. -occurrences_code(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',J), - lookup_ht(J,A,I), - 'chr sbag_member'(G,I), - G=suspension(_,active,_,_,H), - B>H, - !, - D=C, - E=F. -occurrences_code(A,B,C,D,E,F) :- - occurrence_code(A,B,C,G,E,H), - I is B+1, - occurrences_code(A,I,G,D,H,F). -occurrence_code(A,B,C,D,E,F) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',B1), - lookup_ht(B1,k(A,B),J), - 'chr sbag_member'(G,J), - G=suspension(_,active,_,_,_,_,H,I,_), - ( - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',C1), - lookup_ht(C1,k(H,I),L), - 'chr sbag_member'(K,L), - K=suspension(_,active,_,_,_), - !, - ( named_history(H,_,_) -> - does_use_history(A,B) - ; - true - ), - D=C, - E=F - ; - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',A1), - lookup_ht1(A1,H,H,O), - 'chr sbag_member'(M,O), - M=suspension(_,active,_,_,_,N), - !, - N=pragma(rule(P,Q,_,_),ids(R,S),_,_,_), - ( select2(I,T,R,P,U,V) -> - D=C, - head1_code(T,I,V,U,N,A,B,C,E,F) - ; - ( select2(I,W,S,Q,X,Y) -> - head2_code(W,I,Y,X,N,A,B,C,E,Z), - ( should_skip_to_next_id(A,B) -> - inc_id(C,D), - ( unconditional_occurrence(A,B) -> - Z=F - ; - gen_alloc_inc_clause(A,B,C,Z,F) - ) - ; - D=C, - Z=F - ) - ) - ) - ). -occurrence_code(A,B,_,_,_,_) :- - chr_error(internal,'occurrence_code/6: missing information to compile ~w:~w -',[A,B]). -functional_dependency(A,B,C,D) :- - B>1, - nb_getval('$chr_store_multi_hash_chr_translate____allocation_occurrence___2-1',M), - lookup_ht(M,A,G), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,_,F), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',L), - lookup_ht(L,A,K), - 'chr sbag_member'(H,K), - H=suspension(_,active,_,_,_,I,J,_,_), - J=B, - F>I, - !, - functional_dependency(A,1,C,D). -functional_dependency(A,B,C,D) :- - E=suspension(F,active,A,B,C,D), - 'chr gen_id'(F), - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',G), - insert_ht(G,A,E), - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-12',H), - insert_ht(H,k(A,B),E). -get_functional_dependency(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____functional_dependency___4-1',J), - lookup_ht(J,A,I), - 'chr sbag_member'(E,I), - E=suspension(_,active,_,F,G,H), - B>=F, - !, - C=G, - D=H. -get_functional_dependency(_,_,_,_) :- - fail. -initial_call_pattern(A) :- - initial_call_pattern___1__0(A,_). -initial_call_pattern___1__0(A,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - !. -initial_call_pattern___1__0(A,B) :- - B=suspension(C,active,t,A), - 'chr gen_id'(C), - nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',D), - insert_ht(D,A,B), - call_pattern(A), - ( B=suspension(_,active,_,_) -> - setarg(2,B,inactive), - initial_call_pattern___1__1(A,B) - ; - true - ). -initial_call_pattern___1__1(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',D), - lookup_ht(D,A,C), - !, - initial_call_pattern___1__1__0__4(C,A,B). -initial_call_pattern___1__1__0__4([],B,A) :- - initial_call_pattern___1__2(B,A). -initial_call_pattern___1__1__0__4([E|G],B,A) :- - ( E=suspension(_,active,_,C,D), - C==B, - nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',F) -> - initial_call_pattern___1__1__1__4(F,D,E,G,B,A) - ; - initial_call_pattern___1__1__0__4(G,B,A) - ). -initial_call_pattern___1__1__1__4([],_,_,A,C,B) :- - initial_call_pattern___1__1__0__4(A,C,B). -initial_call_pattern___1__1__1__4([G|H],E,A,B,D,C) :- - ( G=suspension(_,active,_,F), - I=t(298,C,A,G), - '$novel_production'(C,I), - '$novel_production'(A,I) -> - '$extend_history'(C,I), - setarg(2,C,active), - ai_observation_schedule_new_calls(F,E), - ( C=suspension(_,active,_,_) -> - setarg(2,C,inactive), - initial_call_pattern___1__1__1__4(H,E,A,B,D,C) - ; - true - ) - ; - initial_call_pattern___1__1__1__4(H,E,A,B,D,C) - ). -initial_call_pattern___1__1(A,B) :- - initial_call_pattern___1__2(A,B). -initial_call_pattern___1__2(_,A) :- - setarg(2,A,active). -call_pattern(A) :- - call_pattern___1__0(A,_). -call_pattern___1__0(A,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !. -call_pattern___1__0(A,B) :- - B=suspension(C,active,A), - 'chr gen_id'(C), - nb_getval('$chr_store_multi_hash_chr_translate____call_pattern___1-1',D), - insert_ht(D,A,B), - call_pattern_worker(A), - ( B=suspension(_,active,_) -> - setarg(2,B,inactive), - call_pattern___1__1(A,B) - ; - true - ). -call_pattern___1__1(_,A) :- - setarg(2,A,active). -call_pattern_worker(odom([],A)) :- - !, - final_answer_pattern(odom([],A),odom([],A)). -call_pattern_worker(odom([B|C],A)) :- - !, - D=odom(B,A), - depends_on_goal(odom([B|C],A),D), - call_pattern(D). -call_pattern_worker(odom((B;C),A)) :- - !, - D=odom((B;C),A), - E=odom([],A), - final_answer_pattern(D,E), - F=odom(B,A), - G=odom(C,A), - call_pattern(F), - call_pattern(G), - depends_on_as(D,F,G). -call_pattern_worker(odom(builtin,A)) :- - !, - ord_empty(B), - final_answer_pattern(odom(builtin,A),odom([],B)). -call_pattern_worker(odom(occ(B,C),A)) :- - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',G), - lookup_ht(G,B,F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - C>E, - !, - final_answer_pattern(odom(occ(B,C),A),odom([],A)). -call_pattern_worker(odom(A,B)) :- - A=_/_, - !, - C=odom(occ(A,1),B), - call_pattern(C), - depends_on(odom(A,B),C). -call_pattern_worker(odom(occ(B,C),A)) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',W), - lookup_ht(W,k(B,C),H), - 'chr sbag_member'(D,H), - D=suspension(_,active,_,_,_,_,E,F,G), - ( - ( - is_passive(E,F), - !, - I is C+1, - J=odom(occ(B,I),A), - call_pattern(J), - final_answer_pattern(odom(occ(B,C),A),odom([],A)), - depends_on(odom(occ(B,C),A),J) - ; - G=simplification, - \+is_passive(E,F), - !, - ai_observation_memo_simplification_rest_heads(B,C,K), - ai_observation_observe_set(A,K,L), - ai_observation_memo_abstract_goal(E,M), - call_pattern(odom(M,L)), - N is C+1, - O=odom(occ(B,N),A), - call_pattern(O), - depends_on_as(odom(occ(B,C),A),odom(M,L),O), - final_answer_pattern(odom(occ(B,C),A),odom([],A)) - ) - ; - G=propagation, - \+is_passive(E,F), - !, - ai_observation_memo_propagation_rest_heads(B,C,P), - ai_observation_observe_set(A,P,Q), - ord_add_element(Q,B,R), - ai_observation_memo_abstract_goal(E,S), - call_pattern(odom(S,R)), - ( ord_memberchk(B,Q) -> - T=no - ; - T=yes - ), - U is C+1, - V=odom(occ(B,U),A), - call_pattern(V), - depends_on_ap(odom(occ(B,C),A),odom(S,R),V,T) - ). -call_pattern_worker(A) :- - chr_error(internal,'AI observation analysis: unexpected abstract state ~w -',[A]). -final_answer_pattern(A,B) :- - final_answer_pattern___2__0(A,B,_). -final_answer_pattern___2__0(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',G), - lookup_ht(G,A,F), - ( - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - ai_observation_leq(B,E), - ! - ; - !, - final_answer_pattern___2__0__0__2(F,A,B,C) - ). -final_answer_pattern___2__0__0__2([],B,C,A) :- - final_answer_pattern___2__1(B,C,A). -final_answer_pattern___2__0__0__2([F|G],A,B,C) :- - ( F=suspension(_,active,_,D,E), - D==A, - ai_observation_leq(E,B) -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',H), - delete_ht(H,A,F), - final_answer_pattern___2__0__0__2(G,A,B,C) - ; - final_answer_pattern___2__0__0__2(G,A,B,C) - ). -final_answer_pattern___2__0(A,B,C) :- - final_answer_pattern___2__1(A,B,C). -final_answer_pattern___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____initial_call_pattern___1-1',F), - lookup_ht(F,A,D), - !, - C=suspension(E,not_stored_yet,t,A,B), - 'chr gen_id'(E), - final_answer_pattern___2__1__0__3(D,A,B,C). -final_answer_pattern___2__1__0__3([],B,C,A) :- - final_answer_pattern___2__2(B,C,A). -final_answer_pattern___2__1__0__3([E|G],B,C,A) :- - ( E=suspension(_,active,_,D), - D==B, - nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',F) -> - final_answer_pattern___2__1__1__3(F,E,G,B,C,A) - ; - final_answer_pattern___2__1__0__3(G,B,C,A) - ). -final_answer_pattern___2__1__1__3([],_,A,C,D,B) :- - final_answer_pattern___2__1__0__3(A,C,D,B). -final_answer_pattern___2__1__1__3([G|H],A,B,D,E,C) :- - ( G=suspension(_,active,_,F), - I=t(298,A,C,G), - '$novel_production'(A,I), - '$novel_production'(C,I) -> - '$extend_history'(C,I), - arg(2,C,J), - setarg(2,C,active), - ( J==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',K), - insert_ht(K,D,C) - ; - true - ), - ai_observation_schedule_new_calls(F,E), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - final_answer_pattern___2__1__1__3(H,A,B,D,E,C) - ; - true - ) - ; - final_answer_pattern___2__1__1__3(H,A,B,D,E,C) - ). -final_answer_pattern___2__1(A,B,C) :- - C=suspension(D,not_stored_yet,t,A,B), - 'chr gen_id'(D), - final_answer_pattern___2__2(A,B,C). -final_answer_pattern___2__2(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',E), - lookup_ht(E,A,D), - !, - final_answer_pattern___2__2__0__4(D,A,B,C). -final_answer_pattern___2__2__0__4([],B,C,A) :- - final_answer_pattern___2__3(B,C,A). -final_answer_pattern___2__2__0__4([F|G],B,C,A) :- - ( F=suspension(_,active,_,D,E), - E==B, - H=t(300,F,A), - '$novel_production'(F,H), - '$novel_production'(A,H) -> - '$extend_history'(A,H), - arg(2,A,I), - setarg(2,A,active), - ( I==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',J), - insert_ht(J,B,A) - ; - true - ), - final_answer_pattern(D,C), - ( A=suspension(_,active,_,_,_) -> - setarg(2,A,inactive), - final_answer_pattern___2__2__0__4(G,B,C,A) - ; - true - ) - ; - final_answer_pattern___2__2__0__4(G,B,C,A) - ). -final_answer_pattern___2__2(A,B,C) :- - final_answer_pattern___2__3(A,B,C). -final_answer_pattern___2__3(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',E), - lookup_ht(E,A,D), - !, - final_answer_pattern___2__3__0__5(D,A,B,C). -final_answer_pattern___2__3__0__5([],B,C,A) :- - final_answer_pattern___2__4(B,C,A). -final_answer_pattern___2__3__0__5([F|H],B,C,A) :- - ( F=suspension(_,active,_,D,E), - E==B, - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',I), - lookup_ht(I,D,G) -> - final_answer_pattern___2__3__1__5(G,D,F,H,B,C,A) - ; - final_answer_pattern___2__3__0__5(H,B,C,A) - ). -final_answer_pattern___2__3__1__5([],_,_,A,C,D,B) :- - final_answer_pattern___2__3__0__5(A,C,D,B). -final_answer_pattern___2__3__1__5([I|J],E,A,F,B,C,D) :- - ( I=suspension(_,active,_,G,H), - G==E -> - setarg(2,I,removed), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',K), - delete_ht(K,E,I), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',L), - delete_ht(L,H,I), - final_answer_pattern___2__3__1__5(J,E,A,F,B,C,D) - ; - final_answer_pattern___2__3__1__5(J,E,A,F,B,C,D) - ). -final_answer_pattern___2__3(A,B,C) :- - final_answer_pattern___2__4(A,B,C). -final_answer_pattern___2__4(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',E), - lookup_ht(E,A,D), - !, - final_answer_pattern___2__4__0__6(D,A,B,C). -final_answer_pattern___2__4__0__6([],B,C,A) :- - final_answer_pattern___2__5(B,C,A). -final_answer_pattern___2__4__0__6([F|G],B,C,A) :- - ( F=suspension(_,active,_,D,E), - E==B, - K=t(305,F,A), - '$novel_production'(F,K), - '$novel_production'(A,K) -> - '$extend_history'(A,K), - arg(2,A,L), - setarg(2,A,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',M), - insert_ht(M,B,A) - ; - true - ), - D=odom([_|H],_), - C=odom([],I), - J=odom(H,I), - call_pattern(J), - depends_on(D,J), - ( A=suspension(_,active,_,_,_) -> - setarg(2,A,inactive), - final_answer_pattern___2__4__0__6(G,B,C,A) - ; - true - ) - ; - final_answer_pattern___2__4__0__6(G,B,C,A) - ). -final_answer_pattern___2__4(A,B,C) :- - final_answer_pattern___2__5(A,B,C). -final_answer_pattern___2__5(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',E), - lookup_ht(E,A,D), - !, - final_answer_pattern___2__5__0__7(D,A,B,C). -final_answer_pattern___2__5__0__7([],B,C,A) :- - final_answer_pattern___2__6(B,C,A). -final_answer_pattern___2__5__0__7([G|I],B,C,A) :- - ( G=suspension(_,active,_,D,E,F), - E==B, - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',J), - lookup_ht(J,F,H) -> - final_answer_pattern___2__5__1__7(H,D,F,G,I,B,C,A) - ; - final_answer_pattern___2__5__0__7(I,B,C,A) - ). -final_answer_pattern___2__5__1__7([],_,_,_,A,C,D,B) :- - final_answer_pattern___2__5__0__7(A,C,D,B). -final_answer_pattern___2__5__1__7([J|K],F,G,A,B,D,E,C) :- - ( J=suspension(_,active,_,H,I), - H==G, - M=t(312,A,C,J), - '$novel_production'(A,M), - '$novel_production'(C,M), - '$novel_production'(J,M) -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',O), - insert_ht(O,D,C) - ; - true - ), - ai_observation_lub(E,I,L), - final_answer_pattern(F,L), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - final_answer_pattern___2__5__1__7(K,F,G,A,B,D,E,C) - ; - true - ) - ; - final_answer_pattern___2__5__1__7(K,F,G,A,B,D,E,C) - ). -final_answer_pattern___2__5(A,B,C) :- - final_answer_pattern___2__6(A,B,C). -final_answer_pattern___2__6(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',E), - lookup_ht(E,A,D), - !, - final_answer_pattern___2__6__0__8(D,A,B,C). -final_answer_pattern___2__6__0__8([],B,C,A) :- - final_answer_pattern___2__7(B,C,A). -final_answer_pattern___2__6__0__8([G|I],B,C,A) :- - ( G=suspension(_,active,_,D,E,F), - F==B, - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',J), - lookup_ht(J,E,H) -> - final_answer_pattern___2__6__1__8(H,D,E,G,I,B,C,A) - ; - final_answer_pattern___2__6__0__8(I,B,C,A) - ). -final_answer_pattern___2__6__1__8([],_,_,_,A,C,D,B) :- - final_answer_pattern___2__6__0__8(A,C,D,B). -final_answer_pattern___2__6__1__8([J|K],F,G,A,B,D,E,C) :- - ( J=suspension(_,active,_,H,I), - H==G, - M=t(312,A,J,C), - '$novel_production'(A,M), - '$novel_production'(J,M), - '$novel_production'(C,M) -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',O), - insert_ht(O,D,C) - ; - true - ), - ai_observation_lub(I,E,L), - final_answer_pattern(F,L), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - final_answer_pattern___2__6__1__8(K,F,G,A,B,D,E,C) - ; - true - ) - ; - final_answer_pattern___2__6__1__8(K,F,G,A,B,D,E,C) - ). -final_answer_pattern___2__6(A,B,C) :- - final_answer_pattern___2__7(A,B,C). -final_answer_pattern___2__7(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',E), - lookup_ht(E,A,D), - !, - final_answer_pattern___2__7__0__9(D,A,B,C). -final_answer_pattern___2__7__0__9([],B,C,A) :- - final_answer_pattern___2__8(B,C,A). -final_answer_pattern___2__7__0__9([F|G],B,C,A) :- - ( F=suspension(_,active,_,D,_,E,_), - E==B, - H=t(320,F,A), - '$novel_production'(F,H), - '$novel_production'(A,H) -> - '$extend_history'(A,H), - arg(2,A,I), - setarg(2,A,active), - ( I==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',J), - insert_ht(J,B,A) - ; - true - ), - final_answer_pattern(D,C), - ( A=suspension(_,active,_,_,_) -> - setarg(2,A,inactive), - final_answer_pattern___2__7__0__9(G,B,C,A) - ; - true - ) - ; - final_answer_pattern___2__7__0__9(G,B,C,A) - ). -final_answer_pattern___2__7(A,B,C) :- - final_answer_pattern___2__8(A,B,C). -final_answer_pattern___2__8(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',E), - lookup_ht(E,A,D), - !, - final_answer_pattern___2__8__0__10(D,A,B,C). -final_answer_pattern___2__8__0__10([],B,C,A) :- - final_answer_pattern___2__9(B,C,A). -final_answer_pattern___2__8__0__10([H|J],B,C,A) :- - ( H=suspension(_,active,_,D,E,F,G), - E==B, - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',K), - lookup_ht(K,F,I) -> - final_answer_pattern___2__8__1__10(I,D,F,G,H,J,B,C,A) - ; - final_answer_pattern___2__8__0__10(J,B,C,A) - ). -final_answer_pattern___2__8__1__10([],_,_,_,_,A,C,D,B) :- - final_answer_pattern___2__8__0__10(A,C,D,B). -final_answer_pattern___2__8__1__10([K|L],F,G,H,A,B,D,E,C) :- - ( K=suspension(_,active,_,I,J), - I==G, - S=t(321,A,C,K), - '$novel_production'(A,S), - '$novel_production'(C,S), - '$novel_production'(K,S) -> - '$extend_history'(C,S), - arg(2,C,T), - setarg(2,C,active), - ( T==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',U), - insert_ht(U,D,C) - ; - true - ), - F=odom(occ(M,N),_), - ( ai_observation_is_observed(E,M) -> - ai_observed_internal(M,N) - ; - ai_not_observed_internal(M,N) - ), - ( H==yes -> - E=odom([],O), - ord_del_element(O,M,P), - Q=odom([],P) - ; - Q=E - ), - ai_observation_lub(Q,J,R), - final_answer_pattern(F,R), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - final_answer_pattern___2__8__1__10(L,F,G,H,A,B,D,E,C) - ; - true - ) - ; - final_answer_pattern___2__8__1__10(L,F,G,H,A,B,D,E,C) - ). -final_answer_pattern___2__8(A,B,C) :- - final_answer_pattern___2__9(A,B,C). -final_answer_pattern___2__9(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',E), - lookup_ht(E,A,D), - !, - final_answer_pattern___2__9__0__11(D,A,B,C). -final_answer_pattern___2__9__0__11([],B,C,A) :- - final_answer_pattern___2__10(B,C,A). -final_answer_pattern___2__9__0__11([H|J],B,C,A) :- - ( H=suspension(_,active,_,D,E,F,G), - F==B, - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',K), - lookup_ht(K,E,I) -> - final_answer_pattern___2__9__1__11(I,D,E,G,H,J,B,C,A) - ; - final_answer_pattern___2__9__0__11(J,B,C,A) - ). -final_answer_pattern___2__9__1__11([],_,_,_,_,A,C,D,B) :- - final_answer_pattern___2__9__0__11(A,C,D,B). -final_answer_pattern___2__9__1__11([K|L],F,G,H,A,B,D,E,C) :- - ( K=suspension(_,active,_,I,J), - I==G, - S=t(321,A,K,C), - '$novel_production'(A,S), - '$novel_production'(K,S), - '$novel_production'(C,S) -> - '$extend_history'(C,S), - arg(2,C,T), - setarg(2,C,active), - ( T==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',U), - insert_ht(U,D,C) - ; - true - ), - F=odom(occ(M,N),_), - ( ai_observation_is_observed(J,M) -> - ai_observed_internal(M,N) - ; - ai_not_observed_internal(M,N) - ), - ( H==yes -> - J=odom([],O), - ord_del_element(O,M,P), - Q=odom([],P) - ; - Q=J - ), - ai_observation_lub(Q,E,R), - final_answer_pattern(F,R), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - final_answer_pattern___2__9__1__11(L,F,G,H,A,B,D,E,C) - ; - true - ) - ; - final_answer_pattern___2__9__1__11(L,F,G,H,A,B,D,E,C) - ). -final_answer_pattern___2__9(A,B,C) :- - final_answer_pattern___2__10(A,B,C). -final_answer_pattern___2__10(A,_,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',D), - insert_ht(D,A,B) - ; - true - ). -abstract_constraints(A) :- - nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',C), - ( - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - ! - ; - !, - abstract_constraints___1__0__0__2(C,A) - ). -abstract_constraints___1__0__0__2([],A) :- - abstract_constraints___1__1(A). -abstract_constraints___1__0__0__2([B|C],A) :- - ( B=suspension(_,active,_,_) -> - setarg(2,B,removed), - arg(3,B,D), - ( var(D) -> - nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',E), - E=[_|F], - b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - abstract_constraints___1__0__0__2(C,A) - ; - abstract_constraints___1__0__0__2(C,A) - ). -abstract_constraints(A) :- - abstract_constraints___1__1(A). -abstract_constraints___1__1(A) :- - B=suspension(C,active,_,A), - 'chr gen_id'(C), - nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',D), - E=[B|D], - b_setval('$chr_store_global_ground_chr_translate____abstract_constraints___1',E), - ( D=[F|_] -> - setarg(3,F,E) - ; - true - ). -depends_on(A,B) :- - depends_on___2__0(A,B,_). -depends_on___2__0(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',F), - lookup_ht(F,B,D), - !, - C=suspension(E,not_stored_yet,t,A,B), - 'chr gen_id'(E), - depends_on___2__0__0__1(D,A,B,C). -depends_on___2__0__0__1([],B,C,A) :- - depends_on___2__1(B,C,A). -depends_on___2__0__0__1([F|G],B,C,A) :- - ( F=suspension(_,active,_,D,E), - D==C, - H=t(300,A,F), - '$novel_production'(A,H), - '$novel_production'(F,H) -> - '$extend_history'(A,H), - arg(2,A,I), - setarg(2,A,active), - ( I==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',J), - insert_ht(J,B,A), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',K), - insert_ht(K,C,A) - ; - true - ), - final_answer_pattern(B,E), - ( A=suspension(_,active,_,_,_) -> - setarg(2,A,inactive), - depends_on___2__0__0__1(G,B,C,A) - ; - true - ) - ; - depends_on___2__0__0__1(G,B,C,A) - ). -depends_on___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,t,A,B), - 'chr gen_id'(D), - depends_on___2__1(A,B,C). -depends_on___2__1(A,B,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',E), - insert_ht(E,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',F), - insert_ht(F,B,C) - ; - true - ). -depends_on_ap(A,B,C,D) :- - depends_on_ap___4__0(A,B,C,D,_). -depends_on_ap___4__0(A,B,C,D,E) :- - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',H), - lookup_ht(H,C,F), - !, - E=suspension(G,not_stored_yet,t,A,B,C,D), - 'chr gen_id'(G), - depends_on_ap___4__0__0__1(F,A,B,C,D,E). -depends_on_ap___4__0__0__1([],B,C,D,E,A) :- - depends_on_ap___4__1(B,C,D,E,A). -depends_on_ap___4__0__0__1([H|I],B,C,D,E,A) :- - ( H=suspension(_,active,_,F,G), - F==D, - J=t(320,A,H), - '$novel_production'(A,J), - '$novel_production'(H,J) -> - '$extend_history'(A,J), - arg(2,A,K), - setarg(2,A,active), - ( K==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',L), - insert_ht(L,C,A), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',M), - insert_ht(M,D,A) - ; - true - ), - final_answer_pattern(B,G), - ( A=suspension(_,active,_,_,_,_,_) -> - setarg(2,A,inactive), - depends_on_ap___4__0__0__1(I,B,C,D,E,A) - ; - true - ) - ; - depends_on_ap___4__0__0__1(I,B,C,D,E,A) - ). -depends_on_ap___4__0(A,B,C,D,E) :- - E=suspension(F,not_stored_yet,t,A,B,C,D), - 'chr gen_id'(F), - depends_on_ap___4__1(A,B,C,D,E). -depends_on_ap___4__1(A,B,C,D,E) :- - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',G), - lookup_ht(G,B,F), - !, - depends_on_ap___4__1__0__2(F,A,B,C,D,E). -depends_on_ap___4__1__0__2([],B,C,D,E,A) :- - depends_on_ap___4__2(B,C,D,E,A). -depends_on_ap___4__1__0__2([H|J],B,C,D,E,A) :- - ( H=suspension(_,active,_,F,G), - F==C, - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',K), - lookup_ht(K,D,I) -> - depends_on_ap___4__1__1__2(I,G,H,J,B,C,D,E,A) - ; - depends_on_ap___4__1__0__2(J,B,C,D,E,A) - ). -depends_on_ap___4__1__1__2([],_,_,A,C,D,E,F,B) :- - depends_on_ap___4__1__0__2(A,C,D,E,F,B). -depends_on_ap___4__1__1__2([K|L],H,A,B,D,E,F,G,C) :- - ( K=suspension(_,active,_,I,J), - K\==A, - I==F, - S=t(321,C,A,K), - '$novel_production'(C,S), - '$novel_production'(A,S), - '$novel_production'(K,S) -> - '$extend_history'(C,S), - arg(2,C,T), - setarg(2,C,active), - ( T==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',U), - insert_ht(U,E,C), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',V), - insert_ht(V,F,C) - ; - true - ), - D=odom(occ(M,N),_), - ( ai_observation_is_observed(H,M) -> - ai_observed_internal(M,N) - ; - ai_not_observed_internal(M,N) - ), - ( G==yes -> - H=odom([],O), - ord_del_element(O,M,P), - Q=odom([],P) - ; - Q=H - ), - ai_observation_lub(Q,J,R), - final_answer_pattern(D,R), - ( C=suspension(_,active,_,_,_,_,_) -> - setarg(2,C,inactive), - depends_on_ap___4__1__1__2(L,H,A,B,D,E,F,G,C) - ; - true - ) - ; - depends_on_ap___4__1__1__2(L,H,A,B,D,E,F,G,C) - ). -depends_on_ap___4__1(A,B,C,D,E) :- - depends_on_ap___4__2(A,B,C,D,E). -depends_on_ap___4__2(_,A,B,_,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-2',E), - insert_ht(E,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_ap___4-3',F), - insert_ht(F,B,C) - ; - true - ). -depends_on_goal(A,B) :- - depends_on_goal___2__0(A,B,_). -depends_on_goal___2__0(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',E), - lookup_ht(E,A,D), - !, - depends_on_goal___2__0__0__1(D,A,B,C). -depends_on_goal___2__0__0__1([],B,C,A) :- - depends_on_goal___2__1(B,C,A). -depends_on_goal___2__0__0__1([F|G],A,B,C) :- - ( F=suspension(_,active,_,D,E), - D==A, - ground(B), - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',L), - lookup_ht(L,B,I), - 'chr sbag_member'(H,I), - H=suspension(_,active,_,_,_) -> - setarg(2,F,removed), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-1',J), - delete_ht(J,A,F), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on___2-2',K), - delete_ht(K,E,F), - depends_on_goal___2__0__0__1(G,A,B,C) - ; - depends_on_goal___2__0__0__1(G,A,B,C) - ). -depends_on_goal___2__0(A,B,C) :- - depends_on_goal___2__1(A,B,C). -depends_on_goal___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',F), - lookup_ht(F,B,D), - !, - C=suspension(E,not_stored_yet,t,A,B), - 'chr gen_id'(E), - depends_on_goal___2__1__0__2(D,A,B,C). -depends_on_goal___2__1__0__2([],B,C,A) :- - depends_on_goal___2__2(B,C,A). -depends_on_goal___2__1__0__2([F|G],B,C,A) :- - ( F=suspension(_,active,_,D,E), - D==C, - K=t(305,A,F), - '$novel_production'(A,K), - '$novel_production'(F,K) -> - '$extend_history'(A,K), - arg(2,A,L), - setarg(2,A,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',M), - insert_ht(M,C,A) - ; - true - ), - B=odom([_|H],_), - E=odom([],I), - J=odom(H,I), - call_pattern(J), - depends_on(B,J), - ( A=suspension(_,active,_,_,_) -> - setarg(2,A,inactive), - depends_on_goal___2__1__0__2(G,B,C,A) - ; - true - ) - ; - depends_on_goal___2__1__0__2(G,B,C,A) - ). -depends_on_goal___2__1(A,B,C) :- - C=suspension(D,not_stored_yet,t,A,B), - 'chr gen_id'(D), - depends_on_goal___2__2(A,B,C). -depends_on_goal___2__2(_,A,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_goal___2-2',D), - insert_ht(D,A,B) - ; - true - ). -ai_observed_internal(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',D), - lookup_ht(D,k(A,B),C), - !, - ai_observed_internal___2__0__0__1(C,A,B). -ai_observed_internal___2__0__0__1([],A,B) :- - ai_observed_internal___2__1(A,B). -ai_observed_internal___2__0__0__1([E|F],A,B) :- - ( E=suspension(_,active,_,C,D), - C==A, - D==B -> - setarg(2,E,removed), - arg(3,E,G), - ( var(G) -> - nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',H), - H=[_|I], - b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',I), - ( I=[J|_] -> - setarg(3,J,_) - ; - true - ) - ; - G=[_,_|I], - setarg(2,G,I), - ( I=[J|_] -> - setarg(3,J,G) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',K), - delete_ht(K,k(A,B),E), - ai_observed_internal___2__0__0__1(F,A,B) - ; - ai_observed_internal___2__0__0__1(F,A,B) - ). -ai_observed_internal(A,B) :- - ai_observed_internal___2__1(A,B). -ai_observed_internal___2__1(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_,_), - !. -ai_observed_internal___2__1(_,_) :- - nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -ai_observed_internal___2__1(A,B) :- - C=suspension(D,active,_,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',E), - F=[C|E], - b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',F), - ( E=[G|_] -> - setarg(3,G,F) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',H), - insert_ht(H,k(A,B),C). -ai_not_observed_internal(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_,_), - !. -ai_not_observed_internal(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_,_), - !. -ai_not_observed_internal(A,B) :- - nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_), - !, - ai_not_observed(A,B). -ai_not_observed_internal(A,B) :- - C=suspension(D,active,_,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',E), - F=[C|E], - b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',F), - ( E=[G|_] -> - setarg(3,G,F) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',H), - insert_ht(H,k(A,B),C). -ai_not_observed(A,B) :- - ai_not_observed___2__0(A,B,_). -ai_not_observed___2__0(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',F), - hash_term(k(A,B,1887087),G), - lookup_ht1(F,G,k(A,B,yes),D), - !, - C=suspension(E,not_stored_yet,A,B), - 'chr gen_id'(E), - ai_not_observed___2__0__0__1(D,A,B,C). -ai_not_observed___2__0__0__1([],B,C,A) :- - ai_not_observed___2__1(B,C,A). -ai_not_observed___2__0__0__1([G|H],A,B,C) :- - ( G=suspension(_,active,D,E,F), - D==A, - E==B, - F=yes, - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',S), - lookup_ht(S,A,L), - 'chr sbag_member'(I,L), - I=suspension(_,active,_,_,J,K), - B - setarg(2,G,removed), - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-1',Q), - delete_ht(Q,A,G), - nb_getval('$chr_store_multi_hash_chr_translate____stored___3-123',R), - delete_ht(R,k(A,B,yes),G), - setarg(2,I,removed), - nb_getval('$chr_store_multi_hash_chr_translate____stored_complete___3-1',P), - delete_ht(P,A,I), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',O), - insert_ht(O,k(A,B),C) - ; - true - ), - M is K-1, - stored(A,B,maybe), - stored_complete(A,J,M), - ( C=suspension(_,active,_,_) -> - setarg(2,C,inactive), - ai_not_observed___2__0__0__1(H,A,B,C) - ; - true - ) - ; - ai_not_observed___2__0__0__1(H,A,B,C) - ). -ai_not_observed___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,A,B), - 'chr gen_id'(D), - ai_not_observed___2__1(A,B,C). -ai_not_observed___2__1(A,B,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',E), - insert_ht(E,k(A,B),C) - ; - true - ). -ai_is_observed(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !, - fail. -ai_is_observed(_,_). -depends_on_as(A,B,C) :- - depends_on_as___3__0(A,B,C,_). -depends_on_as___3__0(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',G), - lookup_ht(G,B,E), - !, - D=suspension(F,not_stored_yet,t,A,B,C), - 'chr gen_id'(F), - depends_on_as___3__0__0__1(E,A,B,C,D). -depends_on_as___3__0__0__1([],B,C,D,A) :- - depends_on_as___3__1(B,C,D,A). -depends_on_as___3__0__0__1([G|I],B,C,D,A) :- - ( G=suspension(_,active,_,E,F), - E==C, - nb_getval('$chr_store_multi_hash_chr_translate____final_answer_pattern___2-1',J), - lookup_ht(J,D,H) -> - depends_on_as___3__0__1__1(H,F,G,I,B,C,D,A) - ; - depends_on_as___3__0__0__1(I,B,C,D,A) - ). -depends_on_as___3__0__1__1([],_,_,A,C,D,E,B) :- - depends_on_as___3__0__0__1(A,C,D,E,B). -depends_on_as___3__0__1__1([J|K],G,A,B,D,E,F,C) :- - ( J=suspension(_,active,_,H,I), - J\==A, - H==F, - M=t(312,C,A,J), - '$novel_production'(C,M), - '$novel_production'(A,M), - '$novel_production'(J,M) -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',O), - insert_ht(O,F,C), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',P), - insert_ht(P,E,C) - ; - true - ), - ai_observation_lub(G,I,L), - final_answer_pattern(D,L), - ( C=suspension(_,active,_,_,_,_) -> - setarg(2,C,inactive), - depends_on_as___3__0__1__1(K,G,A,B,D,E,F,C) - ; - true - ) - ; - depends_on_as___3__0__1__1(K,G,A,B,D,E,F,C) - ). -depends_on_as___3__0(A,B,C,D) :- - D=suspension(E,not_stored_yet,t,A,B,C), - 'chr gen_id'(E), - depends_on_as___3__1(A,B,C,D). -depends_on_as___3__1(_,A,B,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-3',E), - insert_ht(E,B,C), - nb_getval('$chr_store_multi_hash_chr_translate____depends_on_as___3-2',F), - insert_ht(F,A,C) - ; - true - ). -ai_observation_gather_results :- - ai_observation_gather_results___0__0(_). -ai_observation_gather_results___0__0(A) :- - nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',B), - !, - ai_observation_gather_results___0__0__0__1(B,A). -ai_observation_gather_results___0__0__0__1([],A) :- - ai_observation_gather_results___0__1(A). -ai_observation_gather_results___0__0__0__1([D|E],A) :- - ( D=suspension(_,active,_,B,C) -> - setarg(2,D,removed), - arg(3,D,F), - ( var(F) -> - nb_getval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',G), - G=[_|H], - b_setval('$chr_store_global_ground_chr_translate____ai_observed_internal___2',H), - ( H=[I|_] -> - setarg(3,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(3,I,F) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____ai_observed_internal___2-12',J), - delete_ht(J,k(B,C),D), - ai_observation_gather_results___0__0__0__1(E,A) - ; - ai_observation_gather_results___0__0__0__1(E,A) - ). -ai_observation_gather_results___0__0(A) :- - ai_observation_gather_results___0__1(A). -ai_observation_gather_results___0__1(A) :- - nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',B), - !, - A=suspension(C,not_stored_yet,_), - 'chr gen_id'(C), - ai_observation_gather_results___0__1__0__2(B,A). -ai_observation_gather_results___0__1__0__2([],A) :- - ai_observation_gather_results___0__2(A). -ai_observation_gather_results___0__1__0__2([D|E],A) :- - ( D=suspension(_,active,_,B,C) -> - setarg(2,D,removed), - arg(3,D,J), - ( var(J) -> - nb_getval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',K), - K=[_|L], - b_setval('$chr_store_global_ground_chr_translate____ai_not_observed_internal___2',L), - ( L=[M|_] -> - setarg(3,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(3,M,J) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____ai_not_observed_internal___2-12',N), - delete_ht(N,k(B,C),D), - arg(2,A,F), - setarg(2,A,active), - ( F==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',G), - H=[A|G], - b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',H), - ( G=[I|_] -> - setarg(3,I,H) - ; - true - ) - ; - true - ), - ai_not_observed(B,C), - ( A=suspension(_,active,_) -> - setarg(2,A,inactive), - ai_observation_gather_results___0__1__0__2(E,A) - ; - true - ) - ; - ai_observation_gather_results___0__1__0__2(E,A) - ). -ai_observation_gather_results___0__1(A) :- - A=suspension(B,not_stored_yet,_), - 'chr gen_id'(B), - ai_observation_gather_results___0__2(A). -ai_observation_gather_results___0__2(A) :- - ( var(A) -> - true - ; - arg(2,A,F), - setarg(2,A,removed), - ( F==not_stored_yet -> - true - ; - arg(3,A,B), - ( var(B) -> - nb_getval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',C), - C=[_|D], - b_setval('$chr_store_global_ground_chr_translate____ai_observation_gather_results___0',D), - ( D=[E|_] -> - setarg(3,E,_) - ; - true - ) - ; - B=[_,_|D], - setarg(2,B,D), - ( D=[E|_] -> - setarg(3,E,B) - ; - true - ) - ) - ) - ). -ai_observation_memo_simplification_rest_heads(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',G), - lookup_ht(G,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - !, - C=E. -ai_observation_memo_simplification_rest_heads(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',V), - lookup_ht(V,k(A,B),G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,_,E,F,_), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',U), - lookup_ht1(U,E,E,J), - 'chr sbag_member'(H,J), - H=suspension(_,active,_,_,_,I), - nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',M), - 'chr sbag_member'(K,M), - K=suspension(_,active,_,L), - !, - I=pragma(rule(N,O,_,_),ids(P,_),_,_,_), - once(select2(F,_,P,N,_,Q)), - ai_observation_abstract_constraints(Q,L,R), - ai_observation_abstract_constraints(O,L,S), - append(R,S,T), - sort(T,C), - ai_observation_memoed_simplification_rest_heads(A,B,C). -ai_observation_memo_simplification_rest_heads(_,_,_) :- - fail. -ai_observation_memoed_simplification_rest_heads(A,B,C) :- - D=suspension(E,active,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_simplification_rest_heads___3-12',F), - insert_ht(F,k(A,B),D). -ai_observation_memo_propagation_rest_heads(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',G), - lookup_ht(G,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - !, - C=E. -ai_observation_memo_propagation_rest_heads(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',V), - lookup_ht(V,k(A,B),G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,_,E,F,_), - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',U), - lookup_ht1(U,E,E,J), - 'chr sbag_member'(H,J), - H=suspension(_,active,_,_,_,I), - nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',M), - 'chr sbag_member'(K,M), - K=suspension(_,active,_,L), - !, - I=pragma(rule(N,O,_,_),ids(_,P),_,_,_), - once(select2(F,_,P,O,_,Q)), - ai_observation_abstract_constraints(Q,L,R), - ai_observation_abstract_constraints(N,L,S), - append(R,S,T), - sort(T,C), - ai_observation_memoed_propagation_rest_heads(A,B,C). -ai_observation_memo_propagation_rest_heads(_,_,_) :- - fail. -ai_observation_memoed_propagation_rest_heads(A,B,C) :- - D=suspension(E,active,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_propagation_rest_heads___3-12',F), - insert_ht(F,k(A,B),D). -ai_observation_memoed_abstract_goal(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',E), - insert_ht(E,A,C). -ai_observation_memo_abstract_goal(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____ai_observation_memoed_abstract_goal___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,D), - !, - B=D. -ai_observation_memo_abstract_goal(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',N), - lookup_ht1(N,A,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - nb_getval('$chr_store_global_ground_chr_translate____abstract_constraints___1',H), - 'chr sbag_member'(F,H), - F=suspension(_,active,_,G), - !, - D=pragma(rule(I,J,K,L),_,_,_,_), - ai_observation_abstract_goal_(I,J,K,L,G,M), - B=M, - ai_observation_memoed_abstract_goal(A,M). -ai_observation_memo_abstract_goal(A,B) :- - C=suspension(D,active,_,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',E), - F=[C|E], - b_setval('$chr_store_global_ground_chr_translate____ai_observation_memo_abstract_goal___2',F), - ( E=[G|_] -> - setarg(3,G,F) - ; - true - ). -partial_wake_analysis :- - partial_wake_analysis___0__0(_). -partial_wake_analysis___0__0(A) :- - nb_getval('$chr_store_global_ground_chr_translate____occurrence___5',B), - !, - A=suspension(C,not_stored_yet,t,_), - 'chr gen_id'(C), - partial_wake_analysis___0__0__0__1(B,A). -partial_wake_analysis___0__0__0__1([],A) :- - partial_wake_analysis___0__1(A). -partial_wake_analysis___0__0__0__1([F|H],A) :- - ( F=suspension(_,active,_,_,B,_,C,D,E), - nb_getval('$chr_store_multi_hash_chr_translate____constraint_mode___2-1',I), - lookup_ht(I,B,G) -> - partial_wake_analysis___0__0__1__1(G,B,C,D,E,F,H,A) - ; - partial_wake_analysis___0__0__0__1(H,A) - ). -partial_wake_analysis___0__0__1__1([],_,_,_,_,_,A,B) :- - partial_wake_analysis___0__0__0__1(A,B). -partial_wake_analysis___0__0__1__1([J|L],D,E,F,G,A,B,C) :- - ( J=suspension(_,active,_,_,H,I), - H==D, - nb_getval('$chr_store_multi_hash_chr_translate____rule___2-1',M), - lookup_ht1(M,E,E,K) -> - partial_wake_analysis___0__0__2__1(K,I,J,L,D,E,F,G,A,B,C) - ; - partial_wake_analysis___0__0__1__1(L,D,E,F,G,A,B,C) - ). -partial_wake_analysis___0__0__2__1([],_,_,A,E,F,G,H,B,C,D) :- - partial_wake_analysis___0__0__1__1(A,E,F,G,H,B,C,D). -partial_wake_analysis___0__0__2__1([M|N],J,A,B,F,G,H,I,C,D,E) :- - ( M=suspension(_,active,_,_,K,L), - K==G, - U=t(325,E,C,M,A), - '$novel_production'(E,U), - '$novel_production'(C,U), - '$novel_production'(M,U), - '$novel_production'(A,U) -> - '$extend_history'(E,U), - arg(2,E,V), - setarg(2,E,active), - ( V==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',W), - X=[E|W], - b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',X), - ( W=[Y|_] -> - setarg(4,Y,X) - ; - true - ) - ; - true - ), - L=pragma(rule(O,P,Q,_),_,_,_,_), - ( is_passive(G,H) -> - true - ; - ( I==simplification -> - select(R,O,_), - R=..[_|S], - term_variables(Q,T), - partial_wake_args(S,J,T,F) - ) - ; - select(R,P,_), - R=..[_|S], - term_variables(Q,T), - partial_wake_args(S,J,T,F) - ), - ( E=suspension(_,active,_,_) -> - setarg(2,E,inactive), - partial_wake_analysis___0__0__2__1(N,J,A,B,F,G,H,I,C,D,E) - ; - true - ) - ; - partial_wake_analysis___0__0__2__1(N,J,A,B,F,G,H,I,C,D,E) - ). -partial_wake_analysis___0__0(A) :- - A=suspension(B,not_stored_yet,t,_), - 'chr gen_id'(B), - partial_wake_analysis___0__1(A). -partial_wake_analysis___0__1(A) :- - arg(2,A,B), - setarg(2,A,active), - ( B==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',C), - D=[A|C], - b_setval('$chr_store_global_ground_chr_translate____partial_wake_analysis___0',D), - ( C=[E|_] -> - setarg(4,E,D) - ; - true - ) - ; - true - ). -no_partial_wake(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !. -no_partial_wake(A) :- - B=suspension(C,active,A), - 'chr gen_id'(C), - nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',D), - insert_ht(D,A,B). -wakes_partially(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____no_partial_wake___1-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - fail. -wakes_partially(_). -phase_end(A) :- - phase_end___1__0(A,_). -phase_end___1__0(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',E), - lookup_ht(E,A,C), - !, - B=suspension(D,not_stored_yet,A), - 'chr gen_id'(D), - phase_end___1__0__0__1(C,A,B). -phase_end___1__0__0__1([],B,A) :- - phase_end___1__1(B,A). -phase_end___1__0__0__1([E|F],A,B) :- - ( E=suspension(_,active,C,D), - C==A -> - setarg(2,E,removed), - nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',I), - delete_ht(I,A,E), - arg(2,B,G), - setarg(2,B,active), - ( G==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',H), - insert_ht(H,A,B) - ; - true - ), - call(D), - ( B=suspension(_,active,_) -> - setarg(2,B,inactive), - phase_end___1__0__0__1(F,A,B) - ; - true - ) - ; - phase_end___1__0__0__1(F,A,B) - ). -phase_end___1__0(A,B) :- - B=suspension(C,not_stored_yet,A), - 'chr gen_id'(C), - phase_end___1__1(A,B). -phase_end___1__1(A,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',D), - insert_ht(D,A,B) - ; - true - ). -delay_phase_end(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____phase_end___1-1',E), - lookup_ht(E,A,D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_), - !, - call(B). -delay_phase_end(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____delay_phase_end___2-1',E), - insert_ht(E,A,C). -does_use_history(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -does_use_history(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',E), - insert_ht(E,A,C), - nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',F), - insert_ht(F,k(A,B),C). -uses_history(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - !. -uses_history(_) :- - fail. -novel_production_call(A,B,C,D) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_history___2-12',G), - lookup_ht(G,k(A,B),F), - 'chr sbag_member'(E,F), - E=suspension(_,active,_,_), - !, - D=C. -novel_production_call(_,_,_,true). -does_use_field(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -does_use_field(A,B) :- - C=suspension(D,active,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',E), - insert_ht(E,k(A,B),C). -uses_field(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____does_use_field___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -uses_field(_,_) :- - fail. -uses_state(A,B) :- - uses_state___2__0(A,B,_). -uses_state___2__0(A,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_), - !. -uses_state___2__0(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',D), - !, - C=suspension(E,not_stored_yet,A,B), - 'chr gen_id'(E), - uses_state___2__0__0__3(D,A,B,C). -uses_state___2__0__0__3([],B,C,A) :- - uses_state___2__1(B,C,A). -uses_state___2__0__0__3([D|F],B,C,A) :- - ( D=suspension(_,active,_), - nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',G), - lookup_ht(G,k(B,C),E) -> - uses_state___2__0__1__3(E,D,F,B,C,A) - ; - uses_state___2__0__0__3(F,B,C,A) - ). -uses_state___2__0__1__3([],_,A,C,D,B) :- - uses_state___2__0__0__3(A,C,D,B). -uses_state___2__0__1__3([J|K],A,E,B,C,D) :- - ( J=suspension(_,active,_,F,G,H,_,I), - F==B, - G==C -> - setarg(2,J,removed), - arg(3,J,N), - ( var(N) -> - nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',O), - O=[_|P], - b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',P), - ( P=[Q|_] -> - setarg(3,Q,_) - ; - true - ) - ; - N=[_,_|P], - setarg(2,N,P), - ( P=[Q|_] -> - setarg(3,Q,N) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',R), - delete_ht(R,k(B,C),J), - arg(2,D,L), - setarg(2,D,active), - ( L==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',M), - insert_ht(M,k(B,C),D) - ; - true - ), - I=H, - ( D=suspension(_,active,_,_) -> - setarg(2,D,inactive), - uses_state___2__0__1__3(K,A,E,B,C,D) - ; - true - ) - ; - uses_state___2__0__1__3(K,A,E,B,C,D) - ). -uses_state___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,A,B), - 'chr gen_id'(D), - uses_state___2__1(A,B,C). -uses_state___2__1(A,B,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',E), - insert_ht(E,k(A,B),C) - ; - true - ). -if_used_state(A,B,C,D,E) :- - nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',G), - 'chr sbag_member'(F,G), - F=suspension(_,active,_), - ( - nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',J), - lookup_ht(J,k(A,B),I), - 'chr sbag_member'(H,I), - H=suspension(_,active,_,_), - !, - E=C - ; - !, - E=D - ). -if_used_state(A,B,C,D,E) :- - F=suspension(G,active,_,A,B,C,D,E), - 'chr gen_id'(G), - nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',H), - I=[F|H], - b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',I), - ( H=[J|_] -> - setarg(3,J,I) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',K), - insert_ht(K,k(A,B),F). -used_states_known :- - used_states_known___0__0(_). -used_states_known___0__0(A) :- - nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',B), - !, - A=suspension(C,not_stored_yet,_), - 'chr gen_id'(C), - used_states_known___0__0__0__1(B,A). -used_states_known___0__0__0__1([],A) :- - used_states_known___0__1(A). -used_states_known___0__0__0__1([F|G],A) :- - ( F=suspension(_,active,_,B,C,D,_,E), - ground(B), - ground(C), - nb_getval('$chr_store_multi_hash_chr_translate____uses_state___2-12',S), - lookup_ht(S,k(B,C),I), - 'chr sbag_member'(H,I), - H=suspension(_,active,_,_) -> - setarg(2,F,removed), - arg(3,F,N), - ( var(N) -> - nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',O), - O=[_|P], - b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',P), - ( P=[Q|_] -> - setarg(3,Q,_) - ; - true - ) - ; - N=[_,_|P], - setarg(2,N,P), - ( P=[Q|_] -> - setarg(3,Q,N) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',R), - delete_ht(R,k(B,C),F), - arg(2,A,J), - setarg(2,A,active), - ( J==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',K), - L=[A|K], - b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',L), - ( K=[M|_] -> - setarg(3,M,L) - ; - true - ) - ; - true - ), - E=D, - ( A=suspension(_,active,_) -> - setarg(2,A,inactive), - used_states_known___0__0__0__1(G,A) - ; - true - ) - ; - used_states_known___0__0__0__1(G,A) - ). -used_states_known___0__0(A) :- - A=suspension(B,not_stored_yet,_), - 'chr gen_id'(B), - used_states_known___0__1(A). -used_states_known___0__1(A) :- - nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',B), - !, - used_states_known___0__1__0__2(B,A). -used_states_known___0__1__0__2([],A) :- - used_states_known___0__2(A). -used_states_known___0__1__0__2([F|G],A) :- - ( F=suspension(_,active,_,B,C,_,D,E) -> - setarg(2,F,removed), - arg(3,F,L), - ( var(L) -> - nb_getval('$chr_store_global_ground_chr_translate____if_used_state___5',M), - M=[_|N], - b_setval('$chr_store_global_ground_chr_translate____if_used_state___5',N), - ( N=[O|_] -> - setarg(3,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(3,O,L) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____if_used_state___5-12',P), - delete_ht(P,k(B,C),F), - arg(2,A,H), - setarg(2,A,active), - ( H==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',I), - J=[A|I], - b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',J), - ( I=[K|_] -> - setarg(3,K,J) - ; - true - ) - ; - true - ), - E=D, - ( A=suspension(_,active,_) -> - setarg(2,A,inactive), - used_states_known___0__1__0__2(G,A) - ; - true - ) - ; - used_states_known___0__1__0__2(G,A) - ). -used_states_known___0__1(A) :- - used_states_known___0__2(A). -used_states_known___0__2(A) :- - arg(2,A,B), - setarg(2,A,active), - ( B==not_stored_yet -> - nb_getval('$chr_store_global_ground_chr_translate____used_states_known___0',C), - D=[A|C], - b_setval('$chr_store_global_ground_chr_translate____used_states_known___0',D), - ( C=[E|_] -> - setarg(3,E,D) - ; - true - ) - ; - true - ). -stored_assertion(A) :- - B=suspension(C,active,A), - 'chr gen_id'(C), - nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',D), - insert_ht(D,A,B). -never_stored_default(A,B) :- - never_stored_default___2__0(A,B,_). -never_stored_default___2__0(A,B,C) :- - nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',D), - !, - C=suspension(E,not_stored_yet,A,B), - 'chr gen_id'(E), - never_stored_default___2__0__0__1(D,A,B,C). -never_stored_default___2__0__0__1([],B,C,A) :- - never_stored_default___2__1(B,C,A). -never_stored_default___2__0__0__1([F|I],A,B,C) :- - ( F=suspension(_,active,_,D,E), - D=[G|H], - G==A -> - setarg(2,F,removed), - arg(3,F,R), - ( var(R) -> - nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',S), - S=[_|T], - b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',T), - ( T=[U|_] -> - setarg(3,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(3,U,R) - ; - true - ) - ), - arg(2,C,P), - setarg(2,C,active), - ( P==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',Q), - insert_ht(Q,A,C) - ; - true - ), - A=J/K, - functor(L,J,K), - inc_rule_count(M), - N=pragma(rule([L],[],true,B),ids([0],[]),[],no,M), - E=[N|O], - never_stored_rules(H,O), - ( C=suspension(_,active,_,_) -> - setarg(2,C,inactive), - never_stored_default___2__0__0__1(I,A,B,C) - ; - true - ) - ; - never_stored_default___2__0__0__1(I,A,B,C) - ). -never_stored_default___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,A,B), - 'chr gen_id'(D), - never_stored_default___2__1(A,B,C). -never_stored_default___2__1(A,_,B) :- - arg(2,B,C), - setarg(2,B,active), - ( C==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',D), - insert_ht(D,A,B) - ; - true - ). -never_stored_rules([],A) :- - !, - A=[]. -never_stored_rules([B|C],A) :- - nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',M), - lookup_ht(M,B,F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,E), - !, - B=G/H, - functor(I,G,H), - inc_rule_count(J), - K=pragma(rule([I],[],true,E),ids([0],[]),[],no,J), - A=[K|L], - never_stored_rules(C,L). -never_stored_rules([_|B],A) :- - !, - never_stored_rules(B,A). -never_stored_rules(A,B) :- - C=suspension(D,active,_,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_global_ground_chr_translate____never_stored_rules___2',E), - F=[C|E], - b_setval('$chr_store_global_ground_chr_translate____never_stored_rules___2',F), - ( E=[G|_] -> - setarg(3,G,F) - ; - true - ). -check_storedness_assertion(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',E), - lookup_ht(E,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - setarg(2,B,removed), - nb_getval('$chr_store_multi_hash_chr_translate____stored_assertion___1-1',D), - delete_ht(D,A,B), - ( is_stored(A) -> - true - ; - chr_warning(assertion_failed,'Constraint ~w is not stored. However, it was asserted to be stored. -',[A]) - ). -check_storedness_assertion(A) :- - nb_getval('$chr_store_multi_hash_chr_translate____never_stored_default___2-1',D), - lookup_ht(D,A,C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_,_), - !, - ( is_finally_stored(A) -> - chr_warning(assertion_failed,'Constraint ~w is stored. However, it was asserted not to be stored. -',[A]) - ; - ( is_stored(A) -> - chr_warning(assertion_failed,'Constraint ~w is temporarily stored. However, it was asserted not to be stored. -',[A]) - ) - ; - true - ). -check_storedness_assertion(A) :- - ( is_finally_stored(A) -> - chr_warning(assertion_failed,'Constraint ~w is stored. However, it was asserted not to be stored. -',[A]) - ; - ( is_stored(A) -> - chr_warning(assertion_failed,'Constraint ~w is temporarily stored. However, it was asserted not to be stored. -',[A]) - ) - ; - true - ). -continuation_occurrence(A,B,C) :- - D=suspension(E,active,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',F), - insert_ht(F,k(A,B),D). -get_success_continuation_occurrence(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',G), - lookup_ht(G,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - !, - C=E. -get_success_continuation_occurrence(A,B,_) :- - chr_error(internal,'Success continuation not found for ~w. -',[A:B]). -skip_to_next_id(A,B) :- - skip_to_next_id___2__0(A,B,_). -skip_to_next_id___2__0(A,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_,_), - !. -skip_to_next_id___2__0(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',F), - lookup_ht(F,k(A,B),D), - !, - C=suspension(E,not_stored_yet,t,A,B), - 'chr gen_id'(E), - skip_to_next_id___2__0__0__4(D,A,B,C). -skip_to_next_id___2__0__0__4([],B,C,A) :- - skip_to_next_id___2__1(B,C,A). -skip_to_next_id___2__0__0__4([H|J],B,C,A) :- - ( H=suspension(_,active,_,_,D,E,F,G,_), - D==B, - E==C, - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',K), - lookup_ht(K,k(F,G),I) -> - skip_to_next_id___2__0__1__4(I,F,G,H,J,B,C,A) - ; - skip_to_next_id___2__0__0__4(J,B,C,A) - ). -skip_to_next_id___2__0__1__4([],_,_,_,A,C,D,B) :- - skip_to_next_id___2__0__0__4(A,C,D,B). -skip_to_next_id___2__0__1__4([J|K],F,G,A,B,D,E,C) :- - ( J=suspension(_,active,_,H,I), - H==F, - I==G, - M=t(357,A,J,C), - '$novel_production'(A,M), - '$novel_production'(J,M), - '$novel_production'(C,M), - E>1 -> - '$extend_history'(C,M), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',O), - insert_ht(O,k(D,E),C) - ; - true - ), - L is E-1, - skip_to_next_id(D,L), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - skip_to_next_id___2__0__1__4(K,F,G,A,B,D,E,C) - ; - true - ) - ; - skip_to_next_id___2__0__1__4(K,F,G,A,B,D,E,C) - ). -skip_to_next_id___2__0(A,B,C) :- - C=suspension(D,not_stored_yet,t,A,B), - 'chr gen_id'(D), - skip_to_next_id___2__1(A,B,C). -skip_to_next_id___2__1(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',E), - lookup_ht(E,k(A,B),D), - !, - skip_to_next_id___2__1__0__5(D,A,B,C). -skip_to_next_id___2__1__0__5([],B,C,A) :- - skip_to_next_id___2__2(B,C,A). -skip_to_next_id___2__1__0__5([G|H],A,B,C) :- - ( G=suspension(_,active,D,E,F), - D==A, - E==B, - ground(A), - ground(B), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',Q), - lookup_ht(Q,k(A,B),K), - 'chr sbag_member'(I,K), - I=suspension(_,active,_,_,_,_,_,_,J), - J=propagation -> - setarg(2,G,removed), - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',P), - delete_ht(P,k(A,B),G), - arg(2,C,N), - setarg(2,C,active), - ( N==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',O), - insert_ht(O,k(A,B),C) - ; - true - ), - occurrence_code_id(A,B,F), - L is B+1, - M is F+1, - set_occurrence_code_id(A,L,M), - ( C=suspension(_,active,_,_,_) -> - setarg(2,C,inactive), - skip_to_next_id___2__1__0__5(H,A,B,C) - ; - true - ) - ; - skip_to_next_id___2__1__0__5(H,A,B,C) - ). -skip_to_next_id___2__1(A,B,C) :- - skip_to_next_id___2__2(A,B,C). -skip_to_next_id___2__2(A,B,C) :- - arg(2,C,D), - setarg(2,C,active), - ( D==not_stored_yet -> - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',E), - insert_ht(E,k(A,B),C) - ; - true - ). -should_skip_to_next_id(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',E), - lookup_ht(E,k(A,B),D), - 'chr sbag_member'(C,D), - C=suspension(_,active,_,_,_), - !. -should_skip_to_next_id(_,_) :- - fail. -bulk_propagation(A,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____max_occurrence___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - B>=D, - !, - skip_to_next_id(A,B). -bulk_propagation(A,B,C) :- - C=:=B+1, - !, - skip_to_next_id(A,B), - get_max_occurrence(A,D), - E is D+1, - bulk_propagation(A,C,E). -bulk_propagation(A,B,_) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-1',I), - lookup_ht(I,A,F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,_,_,E), - E=simplification, - D=:=B+1, - !, - skip_to_next_id(A,B), - get_max_occurrence(A,G), - H is G+1, - bulk_propagation(A,D,H). -bulk_propagation(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____continuation_occurrence___3-12',I), - lookup_ht(I,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - E>B+1, - !, - G is min(C,E), - H is B+1, - bulk_propagation(A,H,G). -bulk_propagation(A,B,_) :- - skip_to_next_id(A,B), - get_max_occurrence(A,C), - D is C+1, - E is B+1, - bulk_propagation(A,E,D). -set_occurrence_code_id(A,B,C) :- - get_max_occurrence(A,D), - B>D, - !, - occurrence_code_id(A,B,C). -set_occurrence_code_id(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence___5-12',R), - lookup_ht(R,k(A,B),H), - 'chr sbag_member'(D,H), - D=suspension(_,active,_,_,_,_,E,F,G), - ( - ( - ( - nb_getval('$chr_store_multi_hash_chr_translate____passive___2-12',T), - lookup_ht(T,k(E,F),J), - 'chr sbag_member'(I,J), - I=suspension(_,active,_,_,_), - !, - occurrence_code_id(A,B,C), - K is B+1, - set_occurrence_code_id(A,K,C) - ; - G=simplification, - !, - occurrence_code_id(A,B,C), - L is B+1, - set_occurrence_code_id(A,L,C) - ) - ; - G=propagation, - nb_getval('$chr_store_multi_hash_chr_translate____skip_to_next_id___2-12',S), - lookup_ht(S,k(A,B),N), - 'chr sbag_member'(M,N), - M=suspension(_,active,_,_,_), - !, - occurrence_code_id(A,B,C), - O is B+1, - P is C+1, - set_occurrence_code_id(A,O,P) - ) - ; - G=propagation, - !, - occurrence_code_id(A,B,C), - Q is B+1, - set_occurrence_code_id(A,Q,C) - ). -set_occurrence_code_id(A,B,C) :- - D=suspension(E,active,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_multi_hash_chr_translate____set_occurrence_code_id___3-12',F), - insert_ht(F,k(A,B),D). -occurrence_code_id(A,B,C) :- - D=suspension(E,active,A,B,C), - 'chr gen_id'(E), - nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',F), - insert_ht(F,k(A,B),D). -get_occurrence_code_id(A,B,C) :- - nb_getval('$chr_store_multi_hash_chr_translate____occurrence_code_id___3-12',G), - lookup_ht(G,k(A,B),F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - !, - C=E. -get_occurrence_code_id(A,B,_) :- - ( B==0 -> - true - ; - format('no occurrence code for ~w! -',[A:B]) - ). -chr_constants(A,B) :- - C=suspension(D,active,_,A,B), - 'chr gen_id'(D), - nb_getval('$chr_store_global_ground_chr_translate____chr_constants___2',E), - F=[C|E], - b_setval('$chr_store_global_ground_chr_translate____chr_constants___2',F), - ( E=[G|_] -> - setarg(3,G,F) - ; - true - ), - nb_getval('$chr_store_multi_hash_chr_translate____chr_constants___2-1',H), - insert_ht(H,A,C). -get_chr_constants(A,B) :- - ground(A), - nb_getval('$chr_store_multi_hash_chr_translate____chr_constants___2-1',F), - lookup_ht(F,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - !, - B=D. -get_chr_constants(A,B) :- - chr_warning(internal,'No constants found for key ~w. -',[A]), - B=[]. -add_chr_constant(A,B) :- - nb_getval('$chr_store_multi_hash_chr_translate____chr_constants___2-1',L), - lookup_ht(L,A,E), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - !, - setarg(2,C,removed), - arg(3,C,G), - ( var(G) -> - nb_getval('$chr_store_global_ground_chr_translate____chr_constants___2',H), - H=[_|I], - b_setval('$chr_store_global_ground_chr_translate____chr_constants___2',I), - ( I=[J|_] -> - setarg(3,J,_) - ; - true - ) - ; - G=[_,_|I], - setarg(2,G,I), - ( I=[J|_] -> - setarg(3,J,G) - ; - true - ) - ), - nb_getval('$chr_store_multi_hash_chr_translate____chr_constants___2-1',K), - delete_ht(K,A,C), - sort([B|D],F), - chr_constants(A,F). -add_chr_constant(A,B) :- - chr_constants(A,[B]). -print_chr_constants :- - print_chr_constants___0__0(_). -print_chr_constants___0__0(A) :- - nb_getval('$chr_store_global_ground_chr_translate____chr_constants___2',B), - !, - A=suspension(C,not_stored_yet,_), - 'chr gen_id'(C), - print_chr_constants___0__0__0__1(B,A). -print_chr_constants___0__0__0__1([],A) :- - print_chr_constants___0__1(A). -print_chr_constants___0__0__0__1([D|E],A) :- - ( D=suspension(_,active,_,B,C) -> - format(' * chr_constants ~w : ~w. -',[B,C]), - print_chr_constants___0__0__0__1(E,A) - ; - print_chr_constants___0__0__0__1(E,A) - ). -print_chr_constants___0__0(A) :- - A=suspension(B,not_stored_yet,_), - 'chr gen_id'(B), - print_chr_constants___0__1(A). -print_chr_constants___0__1(A) :- - ( var(A) -> - true - ; - arg(2,A,F), - setarg(2,A,removed), - ( F==not_stored_yet -> - true - ; - arg(3,A,B), - ( var(B) -> - nb_getval('$chr_store_global_ground_chr_translate____print_chr_constants___0',C), - C=[_|D], - b_setval('$chr_store_global_ground_chr_translate____print_chr_constants___0',D), - ( D=[E|_] -> - setarg(3,E,_) - ; - true - ) - ; - B=[_,_|D], - setarg(2,B,D), - ( D=[E|_] -> - setarg(3,E,B) - ; - true - ) - ) - ) - ). -end_of_file. diff --git a/LGPL/chr/chr_translate_bootstrap.pl b/LGPL/chr/chr_translate_bootstrap.pl deleted file mode 100644 index 07abd35d9..000000000 --- a/LGPL/chr/chr_translate_bootstrap.pl +++ /dev/null @@ -1,2508 +0,0 @@ -/* $Id: chr_translate_bootstrap.pl,v 1.7 2008-03-13 17:43:13 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% ____ _ _ ____ ____ _ _ -%% / ___| | | | _ \ / ___|___ _ __ ___ _ __ (_) | ___ _ __ -%% | | | |_| | |_) | | | / _ \| '_ ` _ \| '_ \| | |/ _ \ '__| -%% | |___| _ | _ < | |__| (_) | | | | | | |_) | | | __/ | -%% \____|_| |_|_| \_\ \____\___/|_| |_| |_| .__/|_|_|\___|_| -%% |_| -%% -%% hProlog CHR compiler: -%% -%% * by Tom Schrijvers, K.U. Leuven, Tom.Schrijvers@cs.kuleuven.be -%% -%% * based on the SICStus CHR compilation by Christian Holzbaur -%% -%% First working version: 6 June 2003 -%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% To Do -%% -%% * SICStus compatibility -%% - rules/1 declaration -%% - options -%% - pragmas -%% - tell guard -%% -%% -%% * do not suspend on variables that don't matter -%% * make difference between cheap guards for reordering -%% and non-binding guards for lock removal -%% -%% * unqiue -> once/[] transformation for propagation -%% -%% * cheap guards interleaved with head retrieval + faster -%% via-retrieval + non-empty checking for propagation rules -%% redo for simpagation_head2 prelude -%% -%% * intelligent backtracking for simplification/simpagation rule -%% generator_1(X),'_$savecp'(CP_1), -%% ... -%% if( ( -%% generator_n(Y), -%% test(X,Y) -%% ), -%% true, -%% ('_$cutto'(CP_1), fail) -%% ), -%% ... -%% -%% or recently developped cascading-supported approach -%% -%% * intelligent backtracking for propagation rule -%% use additional boolean argument for each possible smart backtracking -%% when boolean at end of list true -> no smart backtracking -%% false -> smart backtracking -%% only works for rules with at least 3 constraints in the head -%% -%% * mutually exclusive rules -%% -%% * constraints that can never be attached / always simplified away -%% -> need not be considered in diverse operations -%% -%% * (set semantics + functional dependency) declaration + resolution -%% -%% * type and instantiation declarations + optimisations -%% + better indexes -%% -%% * disable global store option -%% -%% Done -%% -%% * clean up generated code -%% * input verification: pragmas -%% * SICStus compatibility: handler/1, constraints/1 -%% * optimise variable passing for propagation rule -%% * reordering of head constraints for passive head search -%% * unique inference for simpagation rules -%% * unique optimisation for simpagation and simplification rules -%% * cheap guards interleaved with head retrieval + faster -%% via-retrieval + non-empty checking for simplification / simpagation rules -%% * transform -%% C \ C <=> true -%% into -%% C # ID \ C <=> true pragma passive. -%% * valid to disregard body in uniqueness inference? -%% * unique inference for simplification rules -%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- module(chr_translate, - [ chr_translate/2 % +Decls, -TranslatedDecls - ]). -%% SWI begin -:- use_module(library(lists),[member/2,append/3,append/2,permutation/2,reverse/2]). -:- use_module(library(ordsets)). -%% SWI end -:- use_module(hprolog). -:- use_module(pairlist). -:- include(chr_op). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Translation - -chr_translate(Declarations,NewDeclarations) :- - init_chr_pp_flags, - partition_clauses(Declarations,Decls,Rules,OtherClauses,Mod), - default(Mod,user), - ( Decls == [] -> - NewDeclarations = OtherClauses - ; - check_rules(Rules,Decls), - unique_analyse_optimise(Rules,1,[],NRules), - generate_attach_a_constraint_all(Decls,Mod,AttachAConstraintClauses), - generate_detach_a_constraint_all(Decls,Mod,DettachAConstraintClauses), - generate_attach_increment(Decls,Mod,AttachIncrementClauses), - generate_attr_unify_hook(Decls,Mod,AttrUnifyHookClauses), - constraints_code(Decls,NRules,Mod,ConstraintClauses), - append([ OtherClauses, - AttachAConstraintClauses, - DettachAConstraintClauses, - AttachIncrementClauses, - AttrUnifyHookClauses, - ConstraintClauses - ], - NewDeclarations) - ). - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Partitioning of clauses into constraint declarations, chr rules and other -%% clauses - -partition_clauses([],[],[],[],_). -partition_clauses([C|Cs],Ds,Rs,OCs,Mod) :- - ( rule(C,R) -> - Ds = RDs, - Rs = [R | RRs], - OCs = ROCs - ; is_declaration(C,D) -> - append(D,RDs,Ds), - Rs = RRs, - OCs = ROCs - ; is_module_declaration(C,Mod) -> - Ds = RDs, - Rs = RRs, - OCs = [C|ROCs] - ; C = (handler _) -> - format('CHR compiler WARNING: ~w.\n',[C]), - format(' `--> SICStus compatibility: ignoring handler/1 declaration.\n',[]), - Ds = RDs, - Rs = RRs, - OCs = ROCs - ; C = (rules _) -> - format('CHR compiler WARNING: ~w.\n',[C]), - format(' `--> SICStus compatibility: ignoring rules/1 declaration.\n',[]), - Ds = RDs, - Rs = RRs, - OCs = ROCs - ; C = (:- chr_option(OptionName,OptionValue)) -> - handle_option(OptionName,OptionValue), - Ds = RDs, - Rs = RRs, - OCs = ROCs - ; Ds = RDs, - Rs = RRs, - OCs = [C|ROCs] - ), - partition_clauses(Cs,RDs,RRs,ROCs,Mod). - -is_declaration(D, Constraints) :- %% constraint declaration - D = (:- Decl), - ( Decl =.. [chr_constraint,Cs] ; Decl =.. [chr_constraint,Cs]), - conj2list(Cs,Constraints). - -%% Data Declaration -%% -%% pragma_rule -%% -> pragma( -%% rule, -%% ids, -%% list(pragma), -%% yesno(string) -%% ) -%% -%% ids -> ids( -%% list(int), -%% list(int) -%% ) -%% -%% rule -> rule( -%% list(constraint), :: constraints to be removed -%% list(constraint), :: surviving constraints -%% goal, :: guard -%% goal :: body -%% ) - -rule(RI,R) :- %% name @ rule - RI = (Name @ RI2), !, - rule(RI2,yes(Name),R). -rule(RI,R) :- - rule(RI,no,R). - -rule(RI,Name,R) :- - RI = (RI2 pragma P), !, %% pragmas - is_rule(RI2,R1,IDs), - conj2list(P,Ps), - R = pragma(R1,IDs,Ps,Name). -rule(RI,Name,R) :- - is_rule(RI,R1,IDs), - R = pragma(R1,IDs,[],Name). - -is_rule(RI,R,IDs) :- %% propagation rule - RI = (H ==> B), !, - conj2list(H,Head2i), - get_ids(Head2i,IDs2,Head2), - IDs = ids([],IDs2), - ( B = (G | RB) -> - R = rule([],Head2,G,RB) - ; - R = rule([],Head2,true,B) - ). -is_rule(RI,R,IDs) :- %% simplification/simpagation rule - RI = (H <=> B), !, - ( B = (G | RB) -> - Guard = G, - Body = RB - ; Guard = true, - Body = B - ), - ( H = (H1 \ H2) -> - conj2list(H1,Head2i), - conj2list(H2,Head1i), - get_ids(Head2i,IDs2,Head2,0,N), - get_ids(Head1i,IDs1,Head1,N,_), - IDs = ids(IDs1,IDs2) - ; conj2list(H,Head1i), - Head2 = [], - get_ids(Head1i,IDs1,Head1), - IDs = ids(IDs1,[]) - ), - R = rule(Head1,Head2,Guard,Body). - -get_ids(Cs,IDs,NCs) :- - get_ids(Cs,IDs,NCs,0,_). - -get_ids([],[],[],N,N). -get_ids([C|Cs],[N|IDs],[NC|NCs],N,NN) :- - ( C = (NC # N) -> - true - ; - NC = C - ), - M is N + 1, - get_ids(Cs,IDs,NCs, M,NN). - -is_module_declaration((:- module(Mod)),Mod). -is_module_declaration((:- module(Mod,_)),Mod). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Some input verification: -%% - all constraints in heads are declared constraints - -check_rules(Rules,Decls) :- - check_rules(Rules,Decls,1). - -check_rules([],_,_). -check_rules([PragmaRule|Rest],Decls,N) :- - check_rule(PragmaRule,Decls,N), - N1 is N + 1, - check_rules(Rest,Decls,N1). - -check_rule(PragmaRule,Decls,N) :- - PragmaRule = pragma(Rule,_IDs,Pragmas,_Name), - Rule = rule(H1,H2,_,_), - append(H1,H2,HeadConstraints), - check_head_constraints(HeadConstraints,Decls,PragmaRule,N), - check_pragmas(Pragmas,PragmaRule,N). - -check_head_constraints([],_,_,_). -check_head_constraints([Constr|Rest],Decls,PragmaRule,N) :- - functor(Constr,F,A), - ( member(F/A,Decls) -> - check_head_constraints(Rest,Decls,PragmaRule,N) - ; - format('CHR compiler ERROR: Undeclared constraint ~w in head of ~@.\n', - [F/A,format_rule(PragmaRule,N)]), - format(' `--> Constraint should be on of ~w.\n',[Decls]), - fail - ). - -check_pragmas([],_,_). -check_pragmas([Pragma|Pragmas],PragmaRule,N) :- - check_pragma(Pragma,PragmaRule,N), - check_pragmas(Pragmas,PragmaRule,N). - -check_pragma(Pragma,PragmaRule,N) :- - var(Pragma), !, - format('CHR compiler ERROR: invalid pragma ~w in ~@.\n', - [Pragma,format_rule(PragmaRule,N)]), - format(' `--> Pragma should not be a variable!\n',[]), - fail. - -check_pragma(passive(ID), PragmaRule, N) :- - !, - PragmaRule = pragma(_,ids(IDs1,IDs2),_,_), - ( memberchk_eq(ID,IDs1) -> - true - ; memberchk_eq(ID,IDs2) -> - true - ; - format('CHR compiler ERROR: invalid identifier ~w in pragma passive in ~@.\n', - [ID,format_rule(PragmaRule,N)]), - fail - ). - -check_pragma(Pragma, PragmaRule, N) :- - Pragma = unique(_,_), - !, - format('CHR compiler WARNING: undocumented pragma ~w in ~@.\n',[Pragma,format_rule(PragmaRule,N)]), - format(' `--> Only use this pragma if you know what you are doing.\n',[]). - -check_pragma(Pragma, PragmaRule, N) :- - Pragma = already_in_heads, - !, - format('CHR compiler WARNING: currently unsupported pragma ~w in ~@.\n',[Pragma,format_rule(PragmaRule,N)]), - format(' `--> Pragma is ignored. Termination and correctness may be affected \n',[]). - -check_pragma(Pragma, PragmaRule, N) :- - Pragma = already_in_head(_), - !, - format('CHR compiler WARNING: currently unsupported pragma ~w in ~@.\n',[Pragma,format_rule(PragmaRule,N)]), - format(' `--> Pragma is ignored. Termination and correctness may be affected \n',[]). - -check_pragma(Pragma,PragmaRule,N) :- - format('CHR compiler ERROR: invalid pragma ~w in ~@.\n',[Pragma,format_rule(PragmaRule,N)]), - format(' `--> Pragma should be one of passive/1!\n',[]), - fail. - -format_rule(PragmaRule,N) :- - PragmaRule = pragma(_,_,_,MaybeName), - ( MaybeName = yes(Name) -> - write('rule '), write(Name) - ; - write('rule number '), write(N) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Global Options -% - -handle_option(Var,Value) :- - var(Var), !, - format('CHR compiler ERROR: ~w.\n',[option(Var,Value)]), - format(' `--> First argument should be an atom, not a variable.\n',[]), - fail. - -handle_option(Name,Value) :- - var(Value), !, - format('CHR compiler ERROR: ~w.\n',[option(Name,Value)]), - format(' `--> Second argument should be a nonvariable.\n',[]), - fail. - -handle_option(Name,Value) :- - option_definition(Name,Value,Flags), - !, - set_chr_pp_flags(Flags). - -handle_option(Name,Value) :- - \+ option_definition(Name,_,_), !, - setof(N,_V ^ _F ^ (option_definition(N,_V,_F)),Ns), - format('CHR compiler ERROR: ~w.\n',[option(Name,Value)]), - format(' `--> Invalid option name ~w: should be one of ~w.\n',[Name,Ns]), - fail. - -handle_option(Name,Value) :- - findall(V,option_definition(Name,V,_),Vs), - format('CHR compiler ERROR: ~w.\n',[option(Name,Value)]), - format(' `--> Invalid value ~w: should be one of ~w.\n',[Value,Vs]), - fail. - -option_definition(optimize,full,Flags) :- - Flags = [ unique_analyse_optimise - on, - check_unnecessary_active - full, - reorder_heads - on, - set_semantics_rule - on, - guard_via_reschedule - on - ]. - -option_definition(optimize,sicstus,Flags) :- - Flags = [ unique_analyse_optimise - off, - check_unnecessary_active - simplification, - reorder_heads - off, - set_semantics_rule - off, - guard_via_reschedule - off - ]. - -option_definition(optimize,off,Flags) :- - Flags = [ unique_analyse_optimise - off, - check_unnecessary_active - off, - reorder_heads - off, - set_semantics_rule - off, - guard_via_reschedule - off - ]. - -option_definition(check_guard_bindings,on,Flags) :- - Flags = [ guard_locks - on ]. - -option_definition(check_guard_bindings,off,Flags) :- - Flags = [ guard_locks - off ]. - -init_chr_pp_flags :- - chr_pp_flag_definition(Name,[DefaultValue|_]), - set_chr_pp_flag(Name,DefaultValue), - fail. -init_chr_pp_flags. - -set_chr_pp_flags([]). -set_chr_pp_flags([Name-Value|Flags]) :- - set_chr_pp_flag(Name,Value), - set_chr_pp_flags(Flags). - -set_chr_pp_flag(Name,Value) :- - atom_concat('$chr_pp_',Name,GlobalVar), - nb_setval(GlobalVar,Value). - -chr_pp_flag_definition(unique_analyse_optimise,[on,off]). -chr_pp_flag_definition(check_unnecessary_active,[full,simplification,off]). -chr_pp_flag_definition(reorder_heads,[on,off]). -chr_pp_flag_definition(set_semantics_rule,[on,off]). -chr_pp_flag_definition(guard_via_reschedule,[on,off]). -chr_pp_flag_definition(guard_locks,[on,off]). - -chr_pp_flag(Name,Value) :- - atom_concat('$chr_pp_',Name,GlobalVar), - nb_getval(GlobalVar,V), - ( V == [] -> - chr_pp_flag_definition(Name,[Value|_]) - ; - V = Value - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Generated predicates -%% attach_$CONSTRAINT -%% attach_increment -%% detach_$CONSTRAINT -%% attr_unify_hook - -%% attach_$CONSTRAINT -generate_attach_a_constraint_all(Constraints,Mod,Clauses) :- - length(Constraints,Total), - generate_attach_a_constraint_all(Constraints,1,Total,Mod,Clauses). - -generate_attach_a_constraint_all([],_,_,_,[]). -generate_attach_a_constraint_all([Constraint|Constraints],Position,Total,Mod,Clauses) :- - generate_attach_a_constraint(Total,Position,Constraint,Mod,Clauses1), - NextPosition is Position + 1, - generate_attach_a_constraint_all(Constraints,NextPosition,Total,Mod,Clauses2), - append(Clauses1,Clauses2,Clauses). - -generate_attach_a_constraint(Total,Position,Constraint,Mod,[Clause1,Clause2]) :- - generate_attach_a_constraint_empty_list(Constraint,Clause1), - ( Total == 1 -> - generate_attach_a_constraint_1_1(Constraint,Mod,Clause2) - ; - generate_attach_a_constraint_t_p(Total,Position,Constraint,Mod,Clause2) - ). - -generate_attach_a_constraint_empty_list(CFct / CAty,Clause) :- - atom_concat_list(['attach_',CFct, (/) ,CAty],Fct), - Args = [[],_], - Head =.. [Fct | Args], - Clause = ( Head :- true). - -generate_attach_a_constraint_1_1(CFct / CAty,Mod,Clause) :- - atom_concat_list(['attach_',CFct, (/) ,CAty],Fct), - Args = [[Var|Vars],Susp], - Head =.. [Fct | Args], - RecursiveCall =.. [Fct,Vars,Susp], - Body = - ( - ( get_attr(Var, Mod, Susps) -> - NewSusps=[Susp|Susps], - put_attr(Var, Mod, NewSusps) - ; - put_attr(Var, Mod, [Susp]) - ), - RecursiveCall - ), - Clause = (Head :- Body). - -generate_attach_a_constraint_t_p(Total,Position,CFct / CAty ,Mod,Clause) :- - atom_concat_list(['attach_',CFct, (/) ,CAty],Fct), - Args = [[Var|Vars],Susp], - Head =.. [Fct | Args], - RecursiveCall =.. [Fct,Vars,Susp], - or_pattern(Position,Pattern), - make_attr(Total,Mask,SuspsList,Attr), - nth1(Position,SuspsList,Susps), - substitute_eq(Susps,SuspsList,[Susp|Susps],SuspsList1), - make_attr(Total,Mask,SuspsList1,NewAttr1), - substitute_eq(Susps,SuspsList,[Susp],SuspsList2), - make_attr(Total,NewMask,SuspsList2,NewAttr2), - copy_term_nat(SuspsList,SuspsList3), - nth1(Position,SuspsList3,[Susp]), - chr_delete(SuspsList3,[Susp],RestSuspsList), - set_elems(RestSuspsList,[]), - make_attr(Total,Pattern,SuspsList3,NewAttr3), - Body = - ( - ( get_attr(Var,Mod,TAttr) -> - TAttr = Attr, - ( Mask /\ Pattern =:= Pattern -> - put_attr(Var, Mod, NewAttr1) - ; - NewMask is Mask \/ Pattern, - put_attr(Var, Mod, NewAttr2) - ) - ; - put_attr(Var,Mod,NewAttr3) - ), - RecursiveCall - ), - Clause = (Head :- Body). - -%% detach_$CONSTRAINT -generate_detach_a_constraint_all(Constraints,Mod,Clauses) :- - length(Constraints,Total), - generate_detach_a_constraint_all(Constraints,1,Total,Mod,Clauses). - -generate_detach_a_constraint_all([],_,_,_,[]). -generate_detach_a_constraint_all([Constraint|Constraints],Position,Total,Mod,Clauses) :- - generate_detach_a_constraint(Total,Position,Constraint,Mod,Clauses1), - NextPosition is Position + 1, - generate_detach_a_constraint_all(Constraints,NextPosition,Total,Mod,Clauses2), - append(Clauses1,Clauses2,Clauses). - -generate_detach_a_constraint(Total,Position,Constraint,Mod,[Clause1,Clause2]) :- - generate_detach_a_constraint_empty_list(Constraint,Clause1), - ( Total == 1 -> - generate_detach_a_constraint_1_1(Constraint,Mod,Clause2) - ; - generate_detach_a_constraint_t_p(Total,Position,Constraint,Mod,Clause2) - ). - -generate_detach_a_constraint_empty_list(CFct / CAty,Clause) :- - atom_concat_list(['detach_',CFct, (/) ,CAty],Fct), - Args = [[],_], - Head =.. [Fct | Args], - Clause = ( Head :- true). - -generate_detach_a_constraint_1_1(CFct / CAty,Mod,Clause) :- - atom_concat_list(['detach_',CFct, (/) ,CAty],Fct), - Args = [[Var|Vars],Susp], - Head =.. [Fct | Args], - RecursiveCall =.. [Fct,Vars,Susp], - Body = - ( - ( get_attr(Var,Mod,Susps) -> - 'chr sbag_del_element'(Susps,Susp,NewSusps), - ( NewSusps == [] -> - del_attr(Var,Mod) - ; - put_attr(Var,Mod,NewSusps) - ) - ; - true - ), - RecursiveCall - ), - Clause = (Head :- Body). - -generate_detach_a_constraint_t_p(Total,Position,CFct / CAty ,Mod,Clause) :- - atom_concat_list(['detach_',CFct, (/) ,CAty],Fct), - Args = [[Var|Vars],Susp], - Head =.. [Fct | Args], - RecursiveCall =.. [Fct,Vars,Susp], - or_pattern(Position,Pattern), - and_pattern(Position,DelPattern), - make_attr(Total,Mask,SuspsList,Attr), - nth1(Position,SuspsList,Susps), - substitute_eq(Susps,SuspsList,[],SuspsList1), - make_attr(Total,NewMask,SuspsList1,Attr1), - substitute_eq(Susps,SuspsList,NewSusps,SuspsList2), - make_attr(Total,Mask,SuspsList2,Attr2), - Body = - ( - ( get_attr(Var,Mod,TAttr) -> - TAttr = Attr, - ( Mask /\ Pattern =:= Pattern -> - 'chr sbag_del_element'(Susps,Susp,NewSusps), - ( NewSusps == [] -> - NewMask is Mask /\ DelPattern, - ( NewMask == 0 -> - del_attr(Var,Mod) - ; - put_attr(Var,Mod,Attr1) - ) - ; - put_attr(Var,Mod,Attr2) - ) - ; - true - ) - ; - true - ), - RecursiveCall - ), - Clause = (Head :- Body). - -%% detach_$CONSTRAINT -generate_attach_increment(Constraints,Mod,[Clause1,Clause2]) :- - generate_attach_increment_empty(Clause1), - length(Constraints,N), - ( N == 1 -> - generate_attach_increment_one(Mod,Clause2) - ; - generate_attach_increment_many(N,Mod,Clause2) - ). - -generate_attach_increment_empty((attach_increment([],_) :- true)). - -generate_attach_increment_one(Mod,Clause) :- - Head = attach_increment([Var|Vars],Susps), - Body = - ( - 'chr not_locked'(Var), - ( get_attr(Var,Mod,VarSusps) -> - sort(VarSusps,SortedVarSusps), - merge(Susps,SortedVarSusps,MergedSusps), - put_attr(Var,Mod,MergedSusps) - ; - put_attr(Var,Mod,Susps) - ), - attach_increment(Vars,Susps) - ), - Clause = (Head :- Body). - -generate_attach_increment_many(N,Mod,Clause) :- - make_attr(N,Mask,SuspsList,Attr), - make_attr(N,OtherMask,OtherSuspsList,OtherAttr), - Head = attach_increment([Var|Vars],Attr), - bagof(G,X ^ Y ^ SY ^ M ^ (member2(SuspsList,OtherSuspsList,X-Y),G = (sort(Y,SY),'chr merge_attributes'(X,SY,M))),Gs), - list2conj(Gs,SortGoals), - bagof(MS,A ^ B ^ C ^ member((A,'chr merge_attributes'(B,C,MS)),Gs), MergedSuspsList), - make_attr(N,MergedMask,MergedSuspsList,NewAttr), - Body = - ( - 'chr not_locked'(Var), - ( get_attr(Var,Mod,TOtherAttr) -> - TOtherAttr = OtherAttr, - SortGoals, - MergedMask is Mask \/ OtherMask, - put_attr(Var,Mod,NewAttr) - ; - put_attr(Var,Mod,Attr) - ), - attach_increment(Vars,Attr) - ), - Clause = (Head :- Body). - -%% attr_unify_hook -generate_attr_unify_hook(Constraints,Mod,[Clause]) :- - length(Constraints,N), - ( N == 1 -> - generate_attr_unify_hook_one(Mod,Clause) - ; - generate_attr_unify_hook_many(N,Mod,Clause) - ). - -generate_attr_unify_hook_one(Mod,Clause) :- - Head = attr_unify_hook(Susps,Other), - Body = - ( - sort(Susps, SortedSusps), - ( var(Other) -> - ( get_attr(Other,Mod,OtherSusps) -> - true - ; - OtherSusps = [] - ), - sort(OtherSusps,SortedOtherSusps), - 'chr merge_attributes'(SortedSusps,SortedOtherSusps,NewSusps), - put_attr(Other,Mod,NewSusps), - 'chr run_suspensions'(NewSusps) - ; - ( compound(Other) -> - term_variables(Other,OtherVars), - attach_increment(OtherVars, SortedSusps) - ; - true - ), - 'chr run_suspensions'(Susps) - ) - ), - Clause = (Head :- Body). - -generate_attr_unify_hook_many(N,Mod,Clause) :- - make_attr(N,Mask,SuspsList,Attr), - make_attr(N,OtherMask,OtherSuspsList,OtherAttr), - bagof(Sort,A ^ B ^ ( member(A,SuspsList) , Sort = sort(A,B) ) , SortGoalList), - list2conj(SortGoalList,SortGoals), - bagof(B, A ^ member(sort(A,B),SortGoalList), SortedSuspsList), - bagof(C, D ^ E ^ F ^ G ^ (member2(SortedSuspsList,OtherSuspsList,D-E), - C = (sort(E,F), - 'chr merge_attributes'(D,F,G)) ), - SortMergeGoalList), - bagof(G, D ^ F ^ H ^ member((H,'chr merge_attributes'(D,F,G)),SortMergeGoalList) , MergedSuspsList), - list2conj(SortMergeGoalList,SortMergeGoals), - make_attr(N,MergedMask,MergedSuspsList,MergedAttr), - make_attr(N,Mask,SortedSuspsList,SortedAttr), - Head = attr_unify_hook(Attr,Other), - Body = - ( - SortGoals, - ( var(Other) -> - ( get_attr(Other,Mod,TOtherAttr) -> - TOtherAttr = OtherAttr, - SortMergeGoals, - MergedMask is Mask \/ OtherMask, - put_attr(Other,Mod,MergedAttr), - 'chr run_suspensions_loop'(MergedSuspsList) - ; - put_attr(Other,Mod,SortedAttr), - 'chr run_suspensions_loop'(SortedSuspsList) - ) - ; - ( compound(Other) -> - term_variables(Other,OtherVars), - attach_increment(OtherVars,SortedAttr) - ; - true - ), - 'chr run_suspensions_loop'(SortedSuspsList) - ) - ), - Clause = (Head :- Body). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ ____ _ _ _ _ -%% | _ \ _ _| | ___ / ___|___ _ __ ___ _ __ (_) | __ _| |_(_) ___ _ __ -%% | |_) | | | | |/ _ \ | | / _ \| '_ ` _ \| '_ \| | |/ _` | __| |/ _ \| '_ \ -%% | _ <| |_| | | __/ | |__| (_) | | | | | | |_) | | | (_| | |_| | (_) | | | | -%% |_| \_\\__,_|_|\___| \____\___/|_| |_| |_| .__/|_|_|\__,_|\__|_|\___/|_| |_| -%% |_| - -constraints_code(Constraints,Rules,Mod,Clauses) :- - constraints_code(Constraints,Rules,Mod,L,[]), - clean_clauses(L,Clauses). - -%% Generate code for all the CHR constraints -constraints_code(Constraints,Rules,Mod,L,T) :- - length(Constraints,N), - constraints_code(Constraints,1,N,Constraints,Rules,Mod,L,T). - -constraints_code([],_,_,_,_,_,L,L). -constraints_code([Constr|Constrs],I,N,Constraints,Rules,Mod,L,T) :- - constraint_code(Constr,I,N,Constraints,Rules,Mod,L,T1), - J is I + 1, - constraints_code(Constrs,J,N,Constraints,Rules,Mod,T1,T). - -%% Generate code for a single CHR constraint -constraint_code(Constraint, I, N, Constraints, Rules, Mod, L, T) :- - constraint_prelude(Constraint,Mod,Clause), - L = [Clause | L1], - Id1 = [0], - rules_code(Rules,1,Constraint,I,N,Constraints,Mod,Id1,Id2,L1,L2), - gen_cond_attach_clause(Mod,Constraint,I,N,Constraints,Id2,L2,T). - -%% Generate prelude predicate for a constraint. -%% f(...) :- f/a_0(...,Susp). -constraint_prelude(F/A, _Mod, Clause) :- - vars_susp(A,Vars,_Susp,VarsSusp), - Head =.. [ F | Vars], - build_head(F,A,[0],VarsSusp,Delegate), - Clause = ( Head :- Delegate ). - -gen_cond_attach_clause(Mod,F/A,_I,_N,_Constraints,Id,L,T) :- - ( Id == [0] -> - gen_cond_attach_goal(Mod,F/A,Body,AllArgs) - ; vars_susp(A,_Args,Susp,AllArgs), - gen_uncond_attach_goal(F/A,Susp,Mod,Body,_) - ), - build_head(F,A,Id,AllArgs,Head), - Clause = ( Head :- Body ), - L = [Clause | T]. - -gen_cond_attach_goal(Mod,F/A,Goal,AllArgs) :- - vars_susp(A,Args,Susp,AllArgs), - build_head(F,A,[0],AllArgs,Closure), - atom_concat_list(['attach_',F, (/) ,A],AttachF), - Attach =.. [AttachF,Vars,Susp], - Goal = - ( - ( var(Susp) -> - 'chr insert_constraint_internal'(Vars,Susp,Mod:Closure,F,Args) - ; - 'chr activate_constraint'(Vars,Susp,_) - ), - Attach - ). - -gen_uncond_attach_goal(F/A,Susp,_Mod,AttachGoal,Generation) :- - atom_concat_list(['attach_',F, (/) ,A],AttachF), - Attach =.. [AttachF,Vars,Susp], - AttachGoal = - ( - 'chr activate_constraint'(Vars, Susp, Generation), - Attach - ). - -%% Generate all the code for a constraint based on all CHR rules -rules_code([],_,_,_,_,_,_,Id,Id,L,L). -rules_code([R |Rs],RuleNb,FA,I,N,Constraints,Mod,Id1,Id3,L,T) :- - rule_code(R,RuleNb,FA,I,N,Constraints,Mod,Id1,Id2,L,T1), - NextRuleNb is RuleNb + 1, - rules_code(Rs,NextRuleNb,FA,I,N,Constraints,Mod,Id2,Id3,T1,T). - -%% Generate code for a constraint based on a single CHR rule -rule_code(PragmaRule,RuleNb,FA,I,N,Constraints,Mod,Id1,Id2,L,T) :- - PragmaRule = pragma(Rule,HeadIDs,_Pragmas,_Name), - HeadIDs = ids(Head1IDs,Head2IDs), - Rule = rule(Head1,Head2,_,_), - heads1_code(Head1,[],Head1IDs,[],PragmaRule,FA,I,N,Constraints,Mod,Id1,L,L1), - heads2_code(Head2,[],Head2IDs,[],PragmaRule,RuleNb,FA,I,N,Constraints,Mod,Id1,Id2,L1,T). - -%% Generate code based on all the removed heads of a CHR rule -heads1_code([],_,_,_,_,_,_,_,_,_,_,L,L). -heads1_code([Head|Heads],RestHeads,[HeadID|HeadIDs],RestIDs,PragmaRule,F/A,I,N,Constraints,Mod,Id,L,T) :- - PragmaRule = pragma(Rule,_,Pragmas,_Name), - ( functor(Head,F,A), - \+ check_unnecessary_active(Head,RestHeads,Rule), - \+ memberchk_eq(passive(HeadID),Pragmas) -> - append(Heads,RestHeads,OtherHeads), - append(HeadIDs,RestIDs,OtherIDs), - head1_code(Head,OtherHeads,OtherIDs,PragmaRule,F/A,I,N,Constraints,Mod,Id,L,L1) - ; - L = L1 - ), - heads1_code(Heads,[Head|RestHeads],HeadIDs,[HeadID|RestIDs],PragmaRule,F/A,I,N,Constraints,Mod,Id,L1,T). - -%% Generate code based on one removed head of a CHR rule -head1_code(Head,OtherHeads,OtherIDs,PragmaRule,FA,I,N,Constraints,Mod,Id,L,T) :- - PragmaRule = pragma(Rule,_,_,_Name), - Rule = rule(_,Head2,_,_), - ( Head2 == [] -> - reorder_heads(Head,OtherHeads,OtherIDs,NOtherHeads,NOtherIDs), - simplification_code(Head,NOtherHeads,NOtherIDs,PragmaRule,FA,I,N,Constraints,Mod,Id,L,T) - ; - simpagation_head1_code(Head,OtherHeads,OtherIDs,PragmaRule,FA,I,N,Constraints,Mod,Id,L,T) - ). - -%% Generate code based on all the persistent heads of a CHR rule -heads2_code([],_,_,_,_,_,_,_,_,_,_,Id,Id,L,L). -heads2_code([Head|Heads],RestHeads,[HeadID|HeadIDs],RestIDs,PragmaRule,RuleNb,F/A,I,N,Constraints,Mod,Id1,Id3,L,T) :- - PragmaRule = pragma(Rule,_,Pragmas,_Name), - ( functor(Head,F,A), - \+ check_unnecessary_active(Head,RestHeads,Rule), - \+ memberchk_eq(passive(HeadID),Pragmas), - \+ set_semantics_rule(PragmaRule) -> - append(Heads,RestHeads,OtherHeads), - append(HeadIDs,RestIDs,OtherIDs), - length(Heads,RestHeadNb), - head2_code(Head,OtherHeads,OtherIDs,PragmaRule,RuleNb,RestHeadNb,F/A,I,N,Constraints,Mod,Id1,L,L0), - inc_id(Id1,Id2), - gen_alloc_inc_clause(F/A,Mod,Id1,L0,L1) - ; - L = L1, - Id2 = Id1 - ), - heads2_code(Heads,[Head|RestHeads],HeadIDs,[HeadID|RestIDs],PragmaRule,RuleNb,F/A,I,N,Constraints,Mod,Id2,Id3,L1,T). - -%% Generate code based on one persistent head of a CHR rule -head2_code(Head,OtherHeads,OtherIDs,PragmaRule,RuleNb,RestHeadNb,FA,I,N,Constraints,Mod,Id,L,T) :- - PragmaRule = pragma(Rule,_,_,_Name), - Rule = rule(Head1,_,_,_), - ( Head1 == [] -> - reorder_heads(Head,OtherHeads,NOtherHeads), - propagation_code(Head,NOtherHeads,Rule,RuleNb,RestHeadNb,FA,N,Constraints,Mod,Id,L,T) - ; - simpagation_head2_code(Head,OtherHeads,OtherIDs,PragmaRule,FA,I,N,Constraints,Mod,Id,L,T) - ). - -gen_alloc_inc_clause(F/A,Mod,Id,L,T) :- - vars_susp(A,Vars,Susp,VarsSusp), - build_head(F,A,Id,VarsSusp,Head), - inc_id(Id,IncId), - build_head(F,A,IncId,VarsSusp,CallHead), - ( Id == [0] -> - gen_cond_allocation(Vars,Susp,F/A,VarsSusp,Mod,ConditionalAlloc) - ; - ConditionalAlloc = true - ), - Clause = - ( - Head :- - ConditionalAlloc, - CallHead - ), - L = [Clause|T]. - -gen_cond_allocation(Vars,Susp,F/A,VarsSusp,Mod,ConstraintAllocationGoal) :- - build_head(F,A,[0],VarsSusp,Term), - ConstraintAllocationGoal = - ( var(Susp) -> - 'chr allocate_constraint'(Mod : Term, Susp, F, Vars) - ; - true - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -guard_via_reschedule(Retrievals,GuardList,Prelude,Goal) :- - ( chr_pp_flag(guard_via_reschedule,on) -> - guard_via_reschedule_main(Retrievals,GuardList,Prelude,Goal) - ; - append(Retrievals,GuardList,GoalList), - list2conj(GoalList,Goal) - ). - -guard_via_reschedule_main(Retrievals,GuardList,Prelude,Goal) :- - initialize_unit_dictionary(Prelude,Dict), - build_units(Retrievals,GuardList,Dict,Units), - dependency_reorder(Units,NUnits), - units2goal(NUnits,Goal). - -units2goal([],true). -units2goal([unit(_,Goal,_,_)|Units],(Goal,Goals)) :- - units2goal(Units,Goals). - -dependency_reorder(Units,NUnits) :- - dependency_reorder(Units,[],NUnits). - -dependency_reorder([],Acc,Result) :- - reverse(Acc,Result). - -dependency_reorder([Unit|Units],Acc,Result) :- - Unit = unit(_GID,_Goal,Type,GIDs), - ( Type == fixed -> - NAcc = [Unit|Acc] - ; - dependency_insert(Acc,Unit,GIDs,NAcc) - ), - dependency_reorder(Units,NAcc,Result). - -dependency_insert([],Unit,_,[Unit]). -dependency_insert([X|Xs],Unit,GIDs,L) :- - X = unit(GID,_,_,_), - ( memberchk(GID,GIDs) -> - L = [Unit,X|Xs] - ; - L = [X | T], - dependency_insert(Xs,Unit,GIDs,T) - ). - -build_units(Retrievals,Guard,InitialDict,Units) :- - build_retrieval_units(Retrievals,1,N,InitialDict,Dict,Units,Tail), - build_guard_units(Guard,N,Dict,Tail). - -build_retrieval_units([],N,N,Dict,Dict,L,L). -build_retrieval_units([U|Us],N,M,Dict,NDict,L,T) :- - term_variables(U,Vs), - update_unit_dictionary(Vs,N,Dict,Dict1,[],GIDs), - L = [unit(N,U,movable,GIDs)|L1], - N1 is N + 1, - build_retrieval_units2(Us,N1,M,Dict1,NDict,L1,T). - -build_retrieval_units2([],N,N,Dict,Dict,L,L). -build_retrieval_units2([U|Us],N,M,Dict,NDict,L,T) :- - term_variables(U,Vs), - update_unit_dictionary(Vs,N,Dict,Dict1,[],GIDs), - L = [unit(N,U,fixed,GIDs)|L1], - N1 is N + 1, - build_retrieval_units(Us,N1,M,Dict1,NDict,L1,T). - -initialize_unit_dictionary(Term,Dict) :- - term_variables(Term,Vars), - pair_all_with(Vars,0,Dict). - -update_unit_dictionary([],_,Dict,Dict,GIDs,GIDs). -update_unit_dictionary([V|Vs],This,Dict,NDict,GIDs,NGIDs) :- - ( lookup_eq(Dict,V,GID) -> - ( (GID == This ; memberchk(GID,GIDs) ) -> - GIDs1 = GIDs - ; - GIDs1 = [GID|GIDs] - ), - Dict1 = Dict - ; - Dict1 = [V - This|Dict], - GIDs1 = GIDs - ), - update_unit_dictionary(Vs,This,Dict1,NDict,GIDs1,NGIDs). - -build_guard_units(Guard,N,Dict,Units) :- - ( Guard = [Goal] -> - Units = [unit(N,Goal,fixed,[])] - ; Guard = [Goal|Goals] -> - term_variables(Goal,Vs), - update_unit_dictionary2(Vs,N,Dict,NDict,[],GIDs), - Units = [unit(N,Goal,movable,GIDs)|RUnits], - N1 is N + 1, - build_guard_units(Goals,N1,NDict,RUnits) - ). - -update_unit_dictionary2([],_,Dict,Dict,GIDs,GIDs). -update_unit_dictionary2([V|Vs],This,Dict,NDict,GIDs,NGIDs) :- - ( lookup_eq(Dict,V,GID) -> - ( (GID == This ; memberchk(GID,GIDs) ) -> - GIDs1 = GIDs - ; - GIDs1 = [GID|GIDs] - ), - Dict1 = [V - This|Dict] - ; - Dict1 = [V - This|Dict], - GIDs1 = GIDs - ), - update_unit_dictionary2(Vs,This,Dict1,NDict,GIDs1,NGIDs). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ ____ _ _ -%% / ___| ___| |_ / ___| ___ _ __ ___ __ _ _ __ | |_(_) ___ ___ _ -%% \___ \ / _ \ __| \___ \ / _ \ '_ ` _ \ / _` | '_ \| __| |/ __/ __(_) -%% ___) | __/ |_ ___) | __/ | | | | | (_| | | | | |_| | (__\__ \_ -%% |____/ \___|\__| |____/ \___|_| |_| |_|\__,_|_| |_|\__|_|\___|___(_) -%% -%% _ _ _ ___ __ -%% | | | |_ __ (_) __ _ _ _ ___ |_ _|_ __ / _| ___ _ __ ___ _ __ ___ ___ -%% | | | | '_ \| |/ _` | | | |/ _ \ | || '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \ -%% | |_| | | | | | (_| | |_| | __/ | || | | | _| __/ | | __/ | | | (_| __/ -%% \___/|_| |_|_|\__, |\__,_|\___| |___|_| |_|_| \___|_| \___|_| |_|\___\___| -%% |_| -unique_analyse_optimise(Rules,N,PatternList,NRules) :- - ( chr_pp_flag(unique_analyse_optimise,on) -> - unique_analyse_optimise_main(Rules,N,PatternList,NRules) - ; - NRules = Rules - ). - -unique_analyse_optimise_main([],_,_,[]). -unique_analyse_optimise_main([PRule|PRules],N,PatternList,[NPRule|NPRules]) :- - ( discover_unique_pattern(PRule,N,Pattern) -> - NPatternList = [Pattern|PatternList] - ; - NPatternList = PatternList - ), - PRule = pragma(Rule,Ids,Pragmas,Name), - Rule = rule(H1,H2,_,_), - Ids = ids(Ids1,Ids2), - apply_unique_patterns_to_constraints(H1,Ids1,NPatternList,MorePragmas1), - apply_unique_patterns_to_constraints(H2,Ids2,NPatternList,MorePragmas2), - append([MorePragmas1,MorePragmas2,Pragmas],NPragmas), - NPRule = pragma(Rule,Ids,NPragmas,Name), - N1 is N + 1, - unique_analyse_optimise_main(PRules,N1,NPatternList,NPRules). - -apply_unique_patterns_to_constraints([],_,_,[]). -apply_unique_patterns_to_constraints([C|Cs],[Id|Ids],Patterns,Pragmas) :- - ( member(Pattern,Patterns), - apply_unique_pattern(C,Id,Pattern,Pragma) -> - Pragmas = [Pragma | RPragmas] - ; - Pragmas = RPragmas - ), - apply_unique_patterns_to_constraints(Cs,Ids,Patterns,RPragmas). - -apply_unique_pattern(Constraint,Id,Pattern,Pragma) :- - Pattern = unique(PatternConstraint,PatternKey), - subsumes(Constraint,PatternConstraint,Unifier), - ( setof( V, - T^Term^Vs^( - member(T,PatternKey), - lookup_eq(Unifier,T,Term), - term_variables(Term,Vs), - member(V,Vs) - ), - Vars) -> - true - ; - Vars = [] - ), - Pragma = unique(Id,Vars). - -% subsumes(+Term1, +Term2, -Unifier) -% -% If Term1 is a more general term than Term2 (e.g. has a larger -% part instantiated), unify Unifier with a list Var-Value of -% variables from Term2 and their corresponding values in Term1. - -subsumes(Term1,Term2,Unifier) :- - empty_ds(S0), - subsumes_aux(Term1,Term2,S0,S), - ds_to_list(S,L), - build_unifier(L,Unifier). - -subsumes_aux(Term1, Term2, S0, S) :- - ( compound(Term2), - functor(Term2, F, N) - -> compound(Term1), functor(Term1, F, N), - subsumes_aux(N, Term1, Term2, S0, S) - ; Term1 == Term2 - -> S = S0 - ; var(Term2), - get_ds(Term1,S0,V) - -> V == Term2, S = S0 - ; var(Term2), - put_ds(Term1, S0, Term2, S) - ). - -subsumes_aux(0, _, _, S, S) :- ! . -subsumes_aux(N, T1, T2, S0, S) :- - arg(N, T1, T1x), - arg(N, T2, T2x), - subsumes_aux(T1x, T2x, S0, S1), - M is N-1, - subsumes_aux(M, T1, T2, S1, S). - -build_unifier([],[]). -build_unifier([X-V|R],[V - X | T]) :- - build_unifier(R,T). - -discover_unique_pattern(PragmaRule,RuleNb,Pattern) :- - PragmaRule = pragma(Rule,_,Pragmas,Name), - ( Rule = rule([C1],[C2],Guard,Body) -> - true - ; - Rule = rule([C1,C2],[],Guard,Body) - ), - check_unique_constraints(C1,C2,Guard,Body,Pragmas,List), - term_variables(C1,Vs), - select_pragma_unique_variables(List,Vs,Key), - Pattern0 = unique(C1,Key), - copy_term_nat(Pattern0,Pattern), - ( verbosity_on -> - format('Found unique pattern ~w in rule ~d~@\n', - [Pattern,RuleNb,(Name=yes(N) -> write(": "),write(N) ; true)]) - ; - true - ). - -select_pragma_unique_variables([],_,[]). -select_pragma_unique_variables([X-Y|R],Vs,L) :- - ( X == Y -> - L = [X|T] - ; - once(( - \+ memberchk_eq(X,Vs) - ; - \+ memberchk_eq(Y,Vs) - )), - L = T - ), - select_pragma_unique_variables(R,Vs,T). - -check_unique_constraints(C1,C2,G,_Body,Pragmas,List) :- - \+ member(passive(_),Pragmas), - variable_replacement(C1-C2,C2-C1,List), - copy_with_variable_replacement(G,OtherG,List), - negate(G,NotG), - once(entails(NotG,OtherG)). - -negate(true,fail). -negate(fail,true). -negate(X =< Y, Y < X). -negate(X > Y, Y >= X). -negate(X >= Y, Y > X). -negate(X < Y, Y =< X). -negate(var(X),nonvar(X)). -negate(nonvar(X),var(X)). - -entails(X,X1) :- X1 == X. -entails(fail,_). -entails(X > Y, X1 >= Y1) :- X1 == X, Y1 == Y. -entails(X < Y, X1 =< Y1) :- X1 == X, Y1 == Y. -entails(ground(X),var(X1)) :- X1 == X. - -check_unnecessary_active(Constraint,Previous,Rule) :- - ( chr_pp_flag(check_unnecessary_active,full) -> - check_unnecessary_active_main(Constraint,Previous,Rule) - ; chr_pp_flag(check_unnecessary_active,simplification), - Rule = rule(_,[],_,_) -> - check_unnecessary_active_main(Constraint,Previous,Rule) - ; - fail - ). - -check_unnecessary_active_main(Constraint,Previous,Rule) :- - member(Other,Previous), - variable_replacement(Other,Constraint,List), - copy_with_variable_replacement(Rule,Rule2,List), - identical_rules(Rule,Rule2), ! . - -set_semantics_rule(PragmaRule) :- - ( chr_pp_flag(set_semantics_rule,on) -> - set_semantics_rule_main(PragmaRule) - ; - fail - ). - -set_semantics_rule_main(PragmaRule) :- - PragmaRule = pragma(Rule,IDs,Pragmas,_), - Rule = rule([C1],[C2],true,true), - C1 == C2, - IDs = ids([ID1],_), - \+ memberchk_eq(passive(ID1),Pragmas). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _____ _ _ -%% | _ \ _ _| | ___ | ____|__ _ _ _(_)_ ____ _| | ___ _ __ ___ ___ -%% | |_) | | | | |/ _ \ | _| / _` | | | | \ \ / / _` | |/ _ \ '_ \ / __/ _ \ -%% | _ <| |_| | | __/ | |__| (_| | |_| | |\ V / (_| | | __/ | | | (_| __/ -%% |_| \_\\__,_|_|\___| |_____\__, |\__,_|_| \_/ \__,_|_|\___|_| |_|\___\___| -%% |_| -% have to check for no duplicates in value list - -% check wether two rules are identical - -identical_rules(rule(H11,H21,G1,B1),rule(H12,H22,G2,B2)) :- - G1 == G2, - identical_bodies(B1,B2), - permutation(H11,P1), - P1 == H12, - permutation(H21,P2), - P2 == H22. - -identical_bodies(B1,B2) :- - ( B1 = (X1 = Y1), - B2 = (X2 = Y2) -> - ( X1 == X2, - Y1 == Y2 - ; X1 == Y2, - X2 == Y1 - ), - ! - ; B1 == B2 - ). - -% replace variables in list - -copy_with_variable_replacement(X,Y,L) :- - ( var(X) -> - ( lookup_eq(L,X,Y) -> - true - ; X = Y - ) - ; functor(X,F,A), - functor(Y,F,A), - X =.. [_|XArgs], - Y =.. [_|YArgs], - copy_with_variable_replacement_l(XArgs,YArgs,L) - ). - -copy_with_variable_replacement_l([],[],_). -copy_with_variable_replacement_l([X|Xs],[Y|Ys],L) :- - copy_with_variable_replacement(X,Y,L), - copy_with_variable_replacement_l(Xs,Ys,L). - -%% build variable replacement list - -variable_replacement(X,Y,L) :- - variable_replacement(X,Y,[],L). - -variable_replacement(X,Y,L1,L2) :- - ( var(X) -> - var(Y), - ( lookup_eq(L1,X,Z) -> - Z == Y, - L2 = L1 - ; L2 = [X-Y|L1] - ) - ; X =.. [F|XArgs], - nonvar(Y), - Y =.. [F|YArgs], - variable_replacement_l(XArgs,YArgs,L1,L2) - ). - -variable_replacement_l([],[],L,L). -variable_replacement_l([X|Xs],[Y|Ys],L1,L3) :- - variable_replacement(X,Y,L1,L2), - variable_replacement_l(Xs,Ys,L2,L3). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ __ _ _ _ -%% / ___|(_)_ __ ___ _ __ | (_)/ _(_) ___ __ _| |_(_) ___ _ __ -%% \___ \| | '_ ` _ \| '_ \| | | |_| |/ __/ _` | __| |/ _ \| '_ \ -%% ___) | | | | | | | |_) | | | _| | (_| (_| | |_| | (_) | | | | -%% |____/|_|_| |_| |_| .__/|_|_|_| |_|\___\__,_|\__|_|\___/|_| |_| -%% |_| - -simplification_code(Head,RestHeads,RestIDs,PragmaRule,F/A,_I,N,Constraints,Mod,Id,L,T) :- - PragmaRule = pragma(Rule,_,Pragmas,_), - head_info(Head,A,_Vars,Susp,HeadVars,HeadPairs), - build_head(F,A,Id,HeadVars,ClauseHead), - head_arg_matches(HeadPairs,[],FirstMatching,VarDict1), - - ( RestHeads == [] -> - Susps = [], - VarDict = VarDict1, - GetRestHeads = [] - ; - rest_heads_retrieval_and_matching(RestHeads,RestIDs,Pragmas,Head,Mod,N,Constraints,GetRestHeads,Susps,VarDict1,VarDict) - ), - - guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy), - guard_via_reschedule(GetRestHeads,GuardCopyList,ClauseHead-FirstMatching,RescheduledTest), - - gen_uncond_susps_detachments(Susps,RestHeads,SuspsDetachments), - gen_cond_susp_detachment(Susp,F/A,SuspDetachment), - - Clause = ( ClauseHead :- - FirstMatching, - RescheduledTest, - !, - SuspsDetachments, - SuspDetachment, - BodyCopy - ), - L = [Clause | T]. - -head_arg_matches(Pairs,VarDict,Goal,NVarDict) :- - head_arg_matches_(Pairs,VarDict,GoalList,NVarDict), - list2conj(GoalList,Goal). - -head_arg_matches_([],VarDict,[],VarDict). -head_arg_matches_([Arg-Var| Rest],VarDict,GoalList,NVarDict) :- - ( var(Arg) -> - ( lookup_eq(VarDict,Arg,OtherVar) -> - GoalList = [Var == OtherVar | RestGoalList], - VarDict1 = VarDict - ; VarDict1 = [Arg-Var | VarDict], - GoalList = RestGoalList - ), - Pairs = Rest - ; atomic(Arg) -> - GoalList = [ Var == Arg | RestGoalList], - VarDict = VarDict1, - Pairs = Rest - ; Arg =.. [_|Args], - functor(Arg,Fct,N), - functor(Term,Fct,N), - Term =.. [_|Vars], - GoalList =[ nonvar(Var), Var = Term | RestGoalList ], - pairup(Args,Vars,NewPairs), - append(NewPairs,Rest,Pairs), - VarDict1 = VarDict - ), - head_arg_matches_(Pairs,VarDict1,RestGoalList,NVarDict). - -rest_heads_retrieval_and_matching(Heads,IDs,Pragmas,ActiveHead,Mod,N,Constraints,GoalList,Susps,VarDict,NVarDict):- - rest_heads_retrieval_and_matching(Heads,IDs,Pragmas,ActiveHead,Mod,N,Constraints,GoalList,Susps,VarDict,NVarDict,[],[],[]). - -rest_heads_retrieval_and_matching(Heads,IDs,Pragmas,ActiveHead,Mod,N,Constraints,GoalList,Susps,VarDict,NVarDict,PrevHs,PrevSusps,AttrDict) :- - ( Heads = [_|_] -> - rest_heads_retrieval_and_matching_n(Heads,IDs,Pragmas,PrevHs,PrevSusps,ActiveHead,Mod,N,Constraints,GoalList,Susps,VarDict,NVarDict,AttrDict) - ; - GoalList = [], - Susps = [], - VarDict = NVarDict - ). - -rest_heads_retrieval_and_matching_n([],_,_,_,_,_,_,N,_,[],[],VarDict,VarDict,AttrDict) :- - instantiate_pattern_goals(AttrDict,N). -rest_heads_retrieval_and_matching_n([H|Hs],[ID|IDs],Pragmas,PrevHs,PrevSusps,ActiveHead,Mod,N,Constraints,[ViaGoal,Goal|Goals],[Susp|Susps],VarDict,NVarDict,AttrDict) :- - passive_head_via(H,[ActiveHead|PrevHs],AttrDict,Constraints,Mod,VarDict,ViaGoal,Attr,NewAttrDict), - functor(H,Fct,Aty), - head_info(H,Aty,Vars,_,_,Pairs), - head_arg_matches(Pairs,VarDict,MatchingGoal,VarDict1), - Suspension =.. [suspension,_,State,_,_,_,_|Vars], - ( N == 1 -> - VarSusps = Attr - ; - nth1(Pos,Constraints,Fct/Aty), !, - make_attr(N,_Mask,SuspsList,Attr), - nth1(Pos,SuspsList,VarSusps) - ), - different_from_other_susps(H,Susp,PrevHs,PrevSusps,DiffSuspGoals), - create_get_mutable_ref(active,State,GetMutable), - Goal1 = - ( - 'chr sbag_member'(Susp,VarSusps), - Susp = Suspension, - GetMutable, - DiffSuspGoals, - MatchingGoal - ), - ( member(unique(ID,UniqueKeus),Pragmas), - check_unique_keys(UniqueKeus,VarDict) -> - Goal = (Goal1 -> true) % once(Goal1) - ; - Goal = Goal1 - ), - rest_heads_retrieval_and_matching_n(Hs,IDs,Pragmas,[H|PrevHs],[Susp|PrevSusps],ActiveHead,Mod,N,Constraints,Goals,Susps,VarDict1,NVarDict,NewAttrDict). - -instantiate_pattern_goals([],_). -instantiate_pattern_goals([_-attr(Attr,Bits,Goal)|Rest],N) :- - ( N == 1 -> - Goal = true - ; - make_attr(N,Mask,_,Attr), - or_list(Bits,Pattern), !, - Goal = (Mask /\ Pattern =:= Pattern) - ), - instantiate_pattern_goals(Rest,N). - - -check_unique_keys([],_). -check_unique_keys([V|Vs],Dict) :- - lookup_eq(Dict,V,_), - check_unique_keys(Vs,Dict). - -% Generates tests to ensure the found constraint differs from previously found constraints -different_from_other_susps(Head,Susp,Heads,Susps,DiffSuspGoals) :- - ( bagof(DiffSuspGoal, Pos ^ ( nth1(Pos,Heads,PreHead), \+ Head \= PreHead, nth1(Pos,Susps,PreSusp), DiffSuspGoal = (Susp \== PreSusp) ),DiffSuspGoalList) -> - list2conj(DiffSuspGoalList,DiffSuspGoals) - ; - DiffSuspGoals = true - ). - -passive_head_via(Head,PrevHeads,AttrDict,Constraints,Mod,VarDict,Goal,Attr,NewAttrDict) :- - functor(Head,F,A), - nth1(Pos,Constraints,F/A),!, - common_variables(Head,PrevHeads,CommonVars), - translate(CommonVars,VarDict,Vars), - or_pattern(Pos,Bit), - ( permutation(Vars,PermutedVars), - lookup_eq(AttrDict,PermutedVars,attr(Attr,Positions,_)) -> - member(Bit,Positions), !, - NewAttrDict = AttrDict, - Goal = true - ; - Goal = (Goal1, PatternGoal), - gen_get_mod_constraints(Mod,Vars,Goal1,Attr), - NewAttrDict = [Vars - attr(Attr,[Bit|_],PatternGoal) | AttrDict] - ). - -common_variables(T,Ts,Vs) :- - term_variables(T,V1), - term_variables(Ts,V2), - intersect_eq(V1,V2,Vs). - -gen_get_mod_constraints(Mod,L,Goal,Susps) :- - ( L == [] -> - Goal = - ( 'chr default_store'(Global), - get_attr(Global,Mod,TSusps), - TSusps = Susps - ) - ; - ( L = [A] -> - VIA = 'chr via_1'(A,V) - ; ( L = [A,B] -> - VIA = 'chr via_2'(A,B,V) - ; VIA = 'chr via'(L,V) - ) - ), - Goal = - ( VIA, - get_attr(V,Mod,TSusps), - TSusps = Susps - ) - ). - -guard_body_copies(Rule,VarDict,GuardCopy,BodyCopy) :- - guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy), - list2conj(GuardCopyList,GuardCopy). - -guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy) :- - Rule = rule(_,_,Guard,Body), - conj2list(Guard,GuardList), - split_off_simple_guard(GuardList,VarDict,GuardPrefix,RestGuardList), - my_term_copy(GuardPrefix-RestGuardList,VarDict,VarDict2,GuardPrefixCopy-RestGuardListCopyCore), - - append(GuardPrefixCopy,[RestGuardCopy],GuardCopyList), - term_variables(RestGuardList,GuardVars), - term_variables(RestGuardListCopyCore,GuardCopyVars), - ( chr_pp_flag(guard_locks,on), - bagof(('chr lock'(Y)) - ('chr unlock'(Y)), - X ^ (member(X,GuardVars), % X is a variable appearing in the original guard - lookup_eq(VarDict,X,Y), % translate X into new variable - memberchk_eq(Y,GuardCopyVars) % redundant check? or multiple entries for X possible? - ), - LocksUnlocks) -> - once(pairup(Locks,Unlocks,LocksUnlocks)) - ; - Locks = [], - Unlocks = [] - ), - list2conj(Locks,LockPhase), - list2conj(Unlocks,UnlockPhase), - list2conj(RestGuardListCopyCore,RestGuardCopyCore), - RestGuardCopy = (LockPhase,(RestGuardCopyCore,UnlockPhase)), - my_term_copy(Body,VarDict2,BodyCopy). - - -split_off_simple_guard([],_,[],[]). -split_off_simple_guard([G|Gs],VarDict,S,C) :- - ( simple_guard(G,VarDict) -> - S = [G|Ss], - split_off_simple_guard(Gs,VarDict,Ss,C) - ; - S = [], - C = [G|Gs] - ). - -% simple guard: cheap and benign (does not bind variables) - -simple_guard(var(_), _). -simple_guard(nonvar(_), _). -simple_guard(ground(_), _). -simple_guard(number(_), _). -simple_guard(atom(_), _). -simple_guard(integer(_), _). -simple_guard(float(_), _). - -simple_guard(_ > _ , _). -simple_guard(_ < _ , _). -simple_guard(_ =< _, _). -simple_guard(_ >= _, _). -simple_guard(_ =:= _, _). -simple_guard(_ == _, _). - -simple_guard(X is _, VarDict) :- - \+ lookup_eq(VarDict,X,_). - -simple_guard((G1,G2),VarDict) :- - simple_guard(G1,VarDict), - simple_guard(G2,VarDict). - -simple_guard(\+ G, VarDict) :- - simple_guard(G, VarDict). - -my_term_copy(X,Dict,Y) :- - my_term_copy(X,Dict,_,Y). - -my_term_copy(X,Dict1,Dict2,Y) :- - ( var(X) -> - ( lookup_eq(Dict1,X,Y) -> - Dict2 = Dict1 - ; Dict2 = [X-Y|Dict1] - ) - ; functor(X,XF,XA), - functor(Y,XF,XA), - X =.. [_|XArgs], - Y =.. [_|YArgs], - my_term_copy_list(XArgs,Dict1,Dict2,YArgs) - ). - -my_term_copy_list([],Dict,Dict,[]). -my_term_copy_list([X|Xs],Dict1,Dict3,[Y|Ys]) :- - my_term_copy(X,Dict1,Dict2,Y), - my_term_copy_list(Xs,Dict2,Dict3,Ys). - -gen_cond_susp_detachment(Susp,FA,SuspDetachment) :- - gen_uncond_susp_detachment(Susp,FA,UnCondSuspDetachment), - SuspDetachment = - ( var(Susp) -> - true - ; UnCondSuspDetachment - ). - -gen_uncond_susp_detachment(Susp,CFct/CAty,SuspDetachment) :- - atom_concat_list(['detach_',CFct, (/) ,CAty],Fct), - Detach =.. [Fct,Vars,Susp], - SuspDetachment = - ( - 'chr remove_constraint_internal'(Susp, Vars), - Detach - ). - -gen_uncond_susps_detachments([],[],true). -gen_uncond_susps_detachments([Susp|Susps],[Term|Terms],(SuspDetachment,SuspsDetachments)) :- - functor(Term,F,A), - gen_uncond_susp_detachment(Susp,F/A,SuspDetachment), - gen_uncond_susps_detachments(Susps,Terms,SuspsDetachments). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ _ -%% / ___|(_)_ __ ___ _ __ __ _ __ _ __ _| |_(_) ___ _ __ / | -%% \___ \| | '_ ` _ \| '_ \ / _` |/ _` |/ _` | __| |/ _ \| '_ \ | | -%% ___) | | | | | | | |_) | (_| | (_| | (_| | |_| | (_) | | | | | | -%% |____/|_|_| |_| |_| .__/ \__,_|\__, |\__,_|\__|_|\___/|_| |_| |_| -%% |_| |___/ - -simpagation_head1_code(Head,RestHeads,OtherIDs,PragmaRule,F/A,_I,N,Constraints,Mod,Id,L,T) :- - PragmaRule = pragma(Rule,ids(_,Heads2IDs),Pragmas,_Name), - Rule = rule(_Heads,Heads2,_Guard,_Body), - - head_info(Head,A,_Vars,Susp,HeadVars,HeadPairs), - head_arg_matches(HeadPairs,[],FirstMatching,VarDict1), - - build_head(F,A,Id,HeadVars,ClauseHead), - - append(RestHeads,Heads2,Heads), - append(OtherIDs,Heads2IDs,IDs), - reorder_heads(Head,Heads,IDs,NHeads,NIDs), - rest_heads_retrieval_and_matching(NHeads,NIDs,Pragmas,Head,Mod,N,Constraints,GetRestHeads,Susps,VarDict1,VarDict), - length(RestHeads,RN), - take(RN,Susps,Susps1), - - guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy), - guard_via_reschedule(GetRestHeads,GuardCopyList,ClauseHead-FirstMatching,RescheduledTest), - - gen_uncond_susps_detachments(Susps1,RestHeads,SuspsDetachments), - gen_cond_susp_detachment(Susp,F/A,SuspDetachment), - - Clause = ( ClauseHead :- - FirstMatching, - RescheduledTest, - !, - SuspsDetachments, - SuspDetachment, - BodyCopy - ), - L = [Clause | T]. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ ____ -%% / ___|(_)_ __ ___ _ __ __ _ __ _ __ _| |_(_) ___ _ __ |___ \ -%% \___ \| | '_ ` _ \| '_ \ / _` |/ _` |/ _` | __| |/ _ \| '_ \ __) | -%% ___) | | | | | | | |_) | (_| | (_| | (_| | |_| | (_) | | | | / __/ -%% |____/|_|_| |_| |_| .__/ \__,_|\__, |\__,_|\__|_|\___/|_| |_| |_____| -%% |_| |___/ - -%% Genereate prelude + worker predicate -%% prelude calls worker -%% worker iterates over one type of removed constraints -simpagation_head2_code(Head2,RestHeads2,RestIDs,PragmaRule,FA,I,N,Constraints,Mod,Id,L,T) :- - PragmaRule = pragma(Rule,ids(IDs1,_),Pragmas,_Name), - Rule = rule(Heads1,_,Guard,Body), - reorder_heads(Head2,Heads1,IDs1,[Head1|RestHeads1],[ID1|RestIDs1]), % Heads1 = [Head1|RestHeads1], - % IDs1 = [ID1|RestIDs1], - simpagation_head2_prelude(Head2,Head1,[RestHeads2,Heads1,Guard,Body],FA,I,N,Constraints,Mod,Id,L,L1), - extend_id(Id,Id2), - simpagation_head2_worker(Head2,Head1,ID1,RestHeads1,RestIDs1,RestHeads2,RestIDs,Rule,Pragmas,FA,I,N,Constraints,Mod,Id2,L1,T). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_prelude(Head,Head1,Rest,F/A,_I,N,Constraints,Mod,Id1,L,T) :- - head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs), - build_head(F,A,Id1,VarsSusp,ClauseHead), - head_arg_matches(HeadPairs,[],FirstMatching,VarDict), - - passive_head_via(Head1,[Head],[],Constraints,Mod,VarDict,ModConstraintsGoal,Attr,AttrDict), - instantiate_pattern_goals(AttrDict,N), - ( N == 1 -> - AllSusps = Attr - ; - functor(Head1,F1,A1), - nth1(Pos,Constraints,F1/A1), !, - make_attr(N,_,SuspsList,Attr), - nth1(Pos,SuspsList,AllSusps) - ), - - ( Id1 == [0] -> % create suspension - gen_cond_allocation(Vars,Susp,F/A,VarsSusp,Mod,ConstraintAllocationGoal) - ; ConstraintAllocationGoal = true - ), - - extend_id(Id1,DelegateId), - extra_active_delegate_variables(Head,Rest,VarDict,ExtraVars), - append([AllSusps|VarsSusp],ExtraVars,DelegateCallVars), - build_head(F,A,DelegateId,DelegateCallVars,Delegate), - - PreludeClause = - ( ClauseHead :- - FirstMatching, - ModConstraintsGoal, - !, - ConstraintAllocationGoal, - Delegate - ), - L = [PreludeClause|T]. - -extra_active_delegate_variables(Term,Terms,VarDict,Vars) :- - Term =.. [_|Args], - delegate_variables(Term,Terms,VarDict,Args,Vars). - -passive_delegate_variables(Term,PrevTerms,NextTerms,VarDict,Vars) :- - term_variables(PrevTerms,PrevVars), - delegate_variables(Term,NextTerms,VarDict,PrevVars,Vars). - -delegate_variables(Term,Terms,VarDict,PrevVars,Vars) :- - term_variables(Term,V1), - term_variables(Terms,V2), - intersect_eq(V1,V2,V3), - list_difference_eq(V3,PrevVars,V4), - translate(V4,VarDict,Vars). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_worker(Head2,Head1,ID1,RestHeads1,IDs1,RestHeads2,IDs2,Rule,Pragmas,FA,I,N,Constraints,Mod,Id,L,T) :- - Rule = rule(_,_,Guard,Body), - simpagation_head2_worker_end(Head2,[Head1,RestHeads1,RestHeads2,Guard,Body],FA,Id,L,L1), - simpagation_head2_worker_body(Head2,Head1,ID1,RestHeads1,IDs1,RestHeads2,IDs2,Rule,Pragmas,FA,I,N,Constraints,Mod,Id,L1,T). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_worker_body(Head2,Head1,ID1,RestHeads1,IDs1,RestHeads2,IDs2,Rule,Pragmas,F/A,_I,N,Constraints,Mod,Id,L,T) :- - gen_var(OtherSusp), - gen_var(OtherSusps), - - head_info(Head2,A,_Vars,Susp,VarsSusp,Head2Pairs), - head_arg_matches(Head2Pairs,[],_,VarDict1), - - Rule = rule(_,_,Guard,Body), - extra_active_delegate_variables(Head2,[Head1,RestHeads1,RestHeads2,Guard,Body],VarDict1,ExtraVars), - append([[OtherSusp|OtherSusps]|VarsSusp],ExtraVars,HeadVars), - build_head(F,A,Id,HeadVars,ClauseHead), - - functor(Head1,_OtherF,OtherA), - head_info(Head1,OtherA,OtherVars,_,_,Head1Pairs), - head_arg_matches(Head1Pairs,VarDict1,FirstMatching,VarDict2), - - OtherSuspension =.. [suspension,_,OtherState,_,_,_,_|OtherVars], - create_get_mutable_ref(active,OtherState,GetMutable), - IteratorSuspTest = - ( OtherSusp = OtherSuspension, - GetMutable - ), - - ( (RestHeads1 \== [] ; RestHeads2 \== []) -> - append(RestHeads1,RestHeads2,RestHeads), - append(IDs1,IDs2,IDs), - reorder_heads(Head1-Head2,RestHeads,IDs,NRestHeads,NIDs), - rest_heads_retrieval_and_matching(NRestHeads,NIDs,Pragmas,[Head1,Head2],Mod,N,Constraints,RestSuspsRetrieval,Susps,VarDict2,VarDict,[Head1],[OtherSusp],[]), - length(RestHeads1,RH1N), - take(RH1N,Susps,Susps1) - ; RestSuspsRetrieval = [], - Susps1 = [], - VarDict = VarDict2 - ), - - gen_uncond_susps_detachments([OtherSusp | Susps1],[Head1|RestHeads1],Susps1Detachments), - - append([OtherSusps|VarsSusp],ExtraVars,RecursiveVars), - build_head(F,A,Id,RecursiveVars,RecursiveCall), - append([[]|VarsSusp],ExtraVars,RecursiveVars2), - build_head(F,A,Id,RecursiveVars2,RecursiveCall2), - - guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy), - guard_via_reschedule(RestSuspsRetrieval,GuardCopyList,v(ClauseHead,IteratorSuspTest,FirstMatching),RescheduledTest), - ( BodyCopy \== true -> - gen_uncond_attach_goal(F/A,Susp,Mod,Attachment,Generation), - gen_state_cond_call(Susp,A,RecursiveCall,Generation,ConditionalRecursiveCall), - gen_state_cond_call(Susp,A,RecursiveCall2,Generation,ConditionalRecursiveCall2) - ; Attachment = true, - ConditionalRecursiveCall = RecursiveCall, - ConditionalRecursiveCall2 = RecursiveCall2 - ), - - ( member(unique(ID1,UniqueKeys), Pragmas), - check_unique_keys(UniqueKeys,VarDict1) -> - Clause = - ( ClauseHead :- - ( IteratorSuspTest, - FirstMatching -> - ( RescheduledTest -> - Susps1Detachments, - Attachment, - BodyCopy, - ConditionalRecursiveCall2 - ; - RecursiveCall2 - ) - ; - RecursiveCall - ) - ) - ; - Clause = - ( ClauseHead :- - ( IteratorSuspTest, - FirstMatching, - RescheduledTest -> - Susps1Detachments, - Attachment, - BodyCopy, - ConditionalRecursiveCall - ; - RecursiveCall - ) - ) - ), - L = [Clause | T]. - -gen_state_cond_call(Susp,N,Call,Generation,ConditionalCall) :- - length(Args,N), - Suspension =.. [suspension,_,State,_,NewGeneration,_,_|Args], - create_get_mutable_ref(active,State,GetState), - create_get_mutable_ref(Generation,NewGeneration,GetGeneration), - ConditionalCall = - ( Susp = Suspension, - GetState, - GetGeneration -> - 'chr update_mutable'(inactive,State), - Call - ; true - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_worker_end(Head,Rest,F/A,Id,L,T) :- - head_info(Head,A,_Vars,_Susp,VarsSusp,Pairs), - head_arg_matches(Pairs,[],_,VarDict), - extra_active_delegate_variables(Head,Rest,VarDict,ExtraVars), - append([[]|VarsSusp],ExtraVars,HeadVars), - build_head(F,A,Id,HeadVars,ClauseHead), - next_id(Id,ContinuationId), - build_head(F,A,ContinuationId,VarsSusp,ContinuationHead), - Clause = ( ClauseHead :- ContinuationHead ), - L = [Clause | T]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ -%% | _ \ _ __ ___ _ __ __ _ __ _ __ _| |_(_) ___ _ __ -%% | |_) | '__/ _ \| '_ \ / _` |/ _` |/ _` | __| |/ _ \| '_ \ -%% | __/| | | (_) | |_) | (_| | (_| | (_| | |_| | (_) | | | | -%% |_| |_| \___/| .__/ \__,_|\__, |\__,_|\__|_|\___/|_| |_| -%% |_| |___/ - -propagation_code(Head,RestHeads,Rule,RuleNb,RestHeadNb,FA,N,Constraints,Mod,Id,L,T) :- - ( RestHeads == [] -> - propagation_single_headed(Head,Rule,RuleNb,FA,Mod,Id,L,T) - ; - propagation_multi_headed(Head,RestHeads,Rule,RuleNb,RestHeadNb,FA,N,Constraints,Mod,Id,L,T) - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Single headed propagation -%% everything in a single clause -propagation_single_headed(Head,Rule,RuleNb,F/A,Mod,Id,L,T) :- - head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs), - build_head(F,A,Id,VarsSusp,ClauseHead), - - inc_id(Id,NextId), - build_head(F,A,NextId,VarsSusp,NextHead), - - NextCall = NextHead, - - head_arg_matches(HeadPairs,[],HeadMatching,VarDict), - guard_body_copies(Rule,VarDict,GuardCopy,BodyCopy), - ( Id == [0] -> - gen_cond_allocation(Vars,Susp,F/A,VarsSusp,Mod,Allocation), - Allocation1 = Allocation - ; - Allocation1 = true - ), - gen_uncond_attach_goal(F/A,Susp,Mod,Attachment,Generation), - - gen_state_cond_call(Susp,A,NextCall,Generation,ConditionalNextCall), - - Clause = ( - ClauseHead :- - HeadMatching, - Allocation1, - 'chr novel_production'(Susp,RuleNb), % optimisation of t(RuleNb,Susp) - GuardCopy, - !, - 'chr extend_history'(Susp,RuleNb), - Attachment, - BodyCopy, - ConditionalNextCall - ), - L = [Clause | T]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% multi headed propagation -%% prelude + predicates to accumulate the necessary combinations of suspended -%% constraints + predicate to execute the body -propagation_multi_headed(Head,RestHeads,Rule,RuleNb,RestHeadNb,FA,N,Constraints,Mod,Id,L,T) :- - RestHeads = [First|Rest], - propagation_prelude(Head,RestHeads,Rule,FA,N,Constraints,Mod,Id,L,L1), - extend_id(Id,ExtendedId), - propagation_nested_code(Rest,[First,Head],Rule,RuleNb,RestHeadNb,FA,N,Constraints,Mod,ExtendedId,L1,T). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -propagation_prelude(Head,[First|Rest],Rule,F/A,N,Constraints,Mod,Id,L,T) :- - head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs), - build_head(F,A,Id,VarsSusp,PreludeHead), - head_arg_matches(HeadPairs,[],FirstMatching,VarDict), - Rule = rule(_,_,Guard,Body), - extra_active_delegate_variables(Head,[First,Rest,Guard,Body],VarDict,ExtraVars), - - passive_head_via(First,[Head],[],Constraints,Mod,VarDict,FirstSuspGoal,Attr,AttrDict), - instantiate_pattern_goals(AttrDict,N), - ( N == 1 -> - Susps = Attr - ; - functor(First,FirstFct,FirstAty), - make_attr(N,_Mask,SuspsList,Attr), - nth1(Pos,Constraints,FirstFct/FirstAty), !, - nth1(Pos,SuspsList,Susps) - ), - - ( Id == [0] -> - gen_cond_allocation(Vars,Susp,F/A,VarsSusp,Mod,CondAllocation) - ; CondAllocation = true - ), - - extend_id(Id,NestedId), - append([Susps|VarsSusp],ExtraVars,NestedVars), - build_head(F,A,NestedId,NestedVars,NestedHead), - NestedCall = NestedHead, - - Prelude = ( - PreludeHead :- - FirstMatching, - FirstSuspGoal, - !, - CondAllocation, - NestedCall - ), - L = [Prelude|T]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -propagation_nested_code([],[CurrentHead|PreHeads],Rule,RuleNb,RestHeadNb,FA,_,_Constraints,Mod,Id,L,T) :- - propagation_end([CurrentHead|PreHeads],[],Rule,FA,Id,L,L1), - propagation_body(CurrentHead,PreHeads,Rule,RuleNb,RestHeadNb,FA,Mod,Id,L1,T). - -propagation_nested_code([Head|RestHeads],PreHeads,Rule,RuleNb,RestHeadNb,FA,N,Constraints,Mod,Id,L,T) :- - propagation_end(PreHeads,[Head|RestHeads],Rule,FA,Id,L,L1), - propagation_accumulator([Head|RestHeads],PreHeads,Rule,FA,N,Constraints,Mod,Id,L1,L2), - inc_id(Id,IncId), - propagation_nested_code(RestHeads,[Head|PreHeads],Rule,RuleNb,RestHeadNb,FA,N,Constraints,Mod,IncId,L2,T). - -propagation_body(CurrentHead,PreHeads,Rule,RuleNb,RestHeadNb,F/A,Mod,Id,L,T) :- - Rule = rule(_,_,Guard,Body), - get_prop_inner_loop_vars(PreHeads,[CurrentHead,Guard,Body],PreVarsAndSusps,VarDict1,Susp,RestSusps), - gen_var(OtherSusp), - gen_var(OtherSusps), - functor(CurrentHead,_OtherF,OtherA), - gen_vars(OtherA,OtherVars), - Suspension =.. [suspension,_,State,_,_,_,_|OtherVars], - create_get_mutable_ref(active,State,GetMutable), - CurrentSuspTest = ( - OtherSusp = Suspension, - GetMutable - ), - ClauseVars = [[OtherSusp|OtherSusps]|PreVarsAndSusps], - build_head(F,A,Id,ClauseVars,ClauseHead), - RecursiveVars = [OtherSusps|PreVarsAndSusps], - build_head(F,A,Id,RecursiveVars,RecursiveHead), - RecursiveCall = RecursiveHead, - CurrentHead =.. [_|OtherArgs], - pairup(OtherArgs,OtherVars,OtherPairs), - head_arg_matches(OtherPairs,VarDict1,Matching,VarDict), - - different_from_other_susps(CurrentHead,OtherSusp,PreHeads,RestSusps,DiffSuspGoals), - - guard_body_copies(Rule,VarDict,GuardCopy,BodyCopy), - gen_uncond_attach_goal(F/A,Susp,Mod,Attach,Generation), - gen_state_cond_call(Susp,A,RecursiveCall,Generation,ConditionalRecursiveCall), - - history_susps(RestHeadNb,[OtherSusp|RestSusps],Susp,[],HistorySusps), - bagof('chr novel_production'(X,Y),( member(X,HistorySusps), Y = TupleVar) ,NovelProductionsList), - list2conj(NovelProductionsList,NovelProductions), - Tuple =.. [t,RuleNb|HistorySusps], - - Clause = ( - ClauseHead :- - ( CurrentSuspTest, - DiffSuspGoals, - Matching, - TupleVar = Tuple, - NovelProductions, - GuardCopy -> - 'chr extend_history'(Susp,TupleVar), - Attach, - BodyCopy, - ConditionalRecursiveCall - ; RecursiveCall - ) - ), - L = [Clause|T]. - - -history_susps(Count,OtherSusps,Susp,Acc,HistorySusps) :- - ( Count == 0 -> - reverse(OtherSusps,ReversedSusps), - append(ReversedSusps,[Susp|Acc],HistorySusps) - ; - OtherSusps = [OtherSusp|RestOtherSusps], - NCount is Count - 1, - history_susps(NCount,RestOtherSusps,Susp,[OtherSusp|Acc],HistorySusps) - ). - - -get_prop_inner_loop_vars([Head],Terms,HeadVars,VarDict,Susp,[]) :- - !, - functor(Head,_F,A), - head_info(Head,A,_Vars,Susp,VarsSusp,Pairs), - head_arg_matches(Pairs,[],_,VarDict), - extra_active_delegate_variables(Head,Terms,VarDict,ExtraVars), - append(VarsSusp,ExtraVars,HeadVars). -get_prop_inner_loop_vars([Head|Heads],Terms,VarsSusps,NVarDict,MainSusp,[Susp|RestSusps]) :- - get_prop_inner_loop_vars(Heads,[Head|Terms],RestVarsSusp,VarDict,MainSusp,RestSusps), - functor(Head,_F,A), - gen_var(Susps), - head_info(Head,A,_Vars,Susp,_VarsSusp,Pairs), - head_arg_matches(Pairs,VarDict,_,NVarDict), - passive_delegate_variables(Head,Heads,Terms,NVarDict,HeadVars), - append(HeadVars,[Susp,Susps|RestVarsSusp],VarsSusps). - -propagation_end([CurrentHead|PrevHeads],NextHeads,Rule,F/A,Id,L,T) :- - Rule = rule(_,_,Guard,Body), - gen_var_susp_list_for(PrevHeads,[CurrentHead,NextHeads,Guard,Body],_,VarsAndSusps,AllButFirst,FirstSusp), - - Vars = [ [] | VarsAndSusps], - - build_head(F,A,Id,Vars,Head), - - ( Id = [0|_] -> - next_id(Id,PrevId), - PrevVarsAndSusps = AllButFirst - ; - dec_id(Id,PrevId), - PrevVarsAndSusps = [FirstSusp|AllButFirst] - ), - - build_head(F,A,PrevId,PrevVarsAndSusps,PrevHead), - PredecessorCall = PrevHead, - - Clause = ( - Head :- - PredecessorCall - ), - L = [Clause | T]. - -gen_var_susp_list_for([Head],Terms,VarDict,HeadVars,VarsSusp,Susp) :- - !, - functor(Head,_F,A), - head_info(Head,A,_Vars,Susp,VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,[],_,VarDict), - extra_active_delegate_variables(Head,Terms,VarDict,ExtraVars), - append(VarsSusp,ExtraVars,HeadVars). -gen_var_susp_list_for([Head|Heads],Terms,NVarDict,VarsSusps,Rest,Susps) :- - gen_var_susp_list_for(Heads,[Head|Terms],VarDict,Rest,_,_), - functor(Head,_F,A), - gen_var(Susps), - head_info(Head,A,_Vars,Susp,_VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,VarDict,_,NVarDict), - passive_delegate_variables(Head,Heads,Terms,NVarDict,HeadVars), - append(HeadVars,[Susp,Susps|Rest],VarsSusps). - -propagation_accumulator([NextHead|RestHeads],[CurrentHead|PreHeads],Rule,F/A,N,Constraints,Mod,Id,L,T) :- - Rule = rule(_,_,Guard,Body), - pre_vars_and_susps(PreHeads,[CurrentHead,NextHead,RestHeads,Guard,Body],PreVarsAndSusps,VarDict,PreSusps), - gen_var(OtherSusps), - functor(CurrentHead,_OtherF,OtherA), - gen_vars(OtherA,OtherVars), - head_info(CurrentHead,OtherA,OtherVars,OtherSusp,_VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,VarDict,FirstMatching,VarDict1), - - OtherSuspension =.. [suspension,_,State,_,_,_,_|OtherVars], - - different_from_other_susps(CurrentHead,OtherSusp,PreHeads,PreSusps,DiffSuspGoals), - create_get_mutable_ref(active,State,GetMutable), - CurrentSuspTest = ( - OtherSusp = OtherSuspension, - GetMutable, - DiffSuspGoals, - FirstMatching - ), - functor(NextHead,NextF,NextA), - passive_head_via(NextHead,[CurrentHead|PreHeads],[],Constraints,Mod,VarDict1,NextSuspGoal,Attr,AttrDict), - instantiate_pattern_goals(AttrDict,N), - ( N == 1 -> - NextSusps = Attr - ; - nth1(Position,Constraints,NextF/NextA), !, - make_attr(N,_Mask,SuspsList,Attr), - nth1(Position,SuspsList,NextSusps) - ), - inc_id(Id,NestedId), - ClauseVars = [[OtherSusp|OtherSusps]|PreVarsAndSusps], - build_head(F,A,Id,ClauseVars,ClauseHead), - passive_delegate_variables(CurrentHead,PreHeads,[NextHead,RestHeads,Guard,Body],VarDict1,CurrentHeadVars), - append([NextSusps|CurrentHeadVars],[OtherSusp,OtherSusps|PreVarsAndSusps],NestedVars), - build_head(F,A,NestedId,NestedVars,NestedHead), - - RecursiveVars = [OtherSusps|PreVarsAndSusps], - build_head(F,A,Id,RecursiveVars,RecursiveHead), - Clause = ( - ClauseHead :- - ( CurrentSuspTest, - NextSuspGoal - -> - NestedHead - ; RecursiveHead - ) - ), - L = [Clause|T]. - -pre_vars_and_susps([Head],Terms,HeadVars,VarDict,[]) :- - !, - functor(Head,_F,A), - head_info(Head,A,_Vars,_Susp,VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,[],_,VarDict), - extra_active_delegate_variables(Head,Terms,VarDict,ExtraVars), - append(VarsSusp,ExtraVars,HeadVars). -pre_vars_and_susps([Head|Heads],Terms,NVSs,NVarDict,[Susp|Susps]) :- - pre_vars_and_susps(Heads,[Head|Terms],VSs,VarDict,Susps), - functor(Head,_F,A), - gen_var(NextSusps), - head_info(Head,A,_Vars,Susp,_VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,VarDict,_,NVarDict), - passive_delegate_variables(Head,Heads,Terms,NVarDict,HeadVars), - append(HeadVars,[Susp,NextSusps|VSs],NVSs). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ _ -%% | _ \ __ _ ___ ___(_)_ _____ | | | | ___ __ _ __| | -%% | |_) / _` / __/ __| \ \ / / _ \ | |_| |/ _ \/ _` |/ _` | -%% | __/ (_| \__ \__ \ |\ V / __/ | _ | __/ (_| | (_| | -%% |_| \__,_|___/___/_| \_/ \___| |_| |_|\___|\__,_|\__,_| -%% -%% ____ _ _ _ -%% | _ \ ___| |_ _ __(_) _____ ____ _| | -%% | |_) / _ \ __| '__| |/ _ \ \ / / _` | | -%% | _ < __/ |_| | | | __/\ V / (_| | | -%% |_| \_\___|\__|_| |_|\___| \_/ \__,_|_| -%% -%% ____ _ _ -%% | _ \ ___ ___ _ __ __| | ___ _ __(_)_ __ __ _ -%% | |_) / _ \/ _ \| '__/ _` |/ _ \ '__| | '_ \ / _` | -%% | _ < __/ (_) | | | (_| | __/ | | | | | | (_| | -%% |_| \_\___|\___/|_| \__,_|\___|_| |_|_| |_|\__, | -%% |___/ - -reorder_heads(Head,RestHeads,RestIDs,NRestHeads,NRestIDs) :- - ( chr_pp_flag(reorder_heads,on) -> - reorder_heads_main(Head,RestHeads,RestIDs,NRestHeads,NRestIDs) - ; - NRestHeads = RestHeads, - NRestIDs = RestIDs - ). - -reorder_heads_main(Head,RestHeads,RestIDs,NRestHeads,NRestIDs) :- - term_variables(Head,KnownVars), - reorder_heads1(RestHeads,RestIDs,KnownVars,NRestHeads,NRestIDs). - -reorder_heads1(Heads,IDs,KnownVars,NHeads,NIDs) :- - ( Heads == [] -> - NHeads = [], - NIDs = [] - ; - NHeads = [BestHead|BestTail], - NIDs = [BestID | BestIDs], - select_best_head(Heads,IDs,KnownVars,BestHead,BestID,RestHeads,RestIDs,NKnownVars), - reorder_heads1(RestHeads,RestIDs,NKnownVars,BestTail,BestIDs) - ). - -select_best_head(Heads,IDs,KnownVars,BestHead,BestID,RestHeads,RestIDs,NKnownVars) :- - ( bagof(tuple(Score,Head,ID,Rest,RIDs), ( - select2(Head,ID, Heads,IDs,Rest,RIDs) , - order_score(Head,KnownVars,Rest,Score) - ), - Scores) -> true ; Scores = []), - max_go_list(Scores,tuple(_,BestHead,BestID,RestHeads,RestIDs)), - term_variables(BestHead,BestHeadVars), - ( setof(V, ( - member(V,BestHeadVars), - \+ memberchk_eq(V,KnownVars) - ), - NewVars) -> true ; NewVars = []), - append(NewVars,KnownVars,NKnownVars). - -reorder_heads(Head,RestHeads,NRestHeads) :- - term_variables(Head,KnownVars), - reorder_heads1(RestHeads,KnownVars,NRestHeads). - -reorder_heads1(Heads,KnownVars,NHeads) :- - ( Heads == [] -> - NHeads = [] - ; - NHeads = [BestHead|BestTail], - select_best_head(Heads,KnownVars,BestHead,RestHeads,NKnownVars), - reorder_heads1(RestHeads,NKnownVars,BestTail) - ). - -select_best_head(Heads,KnownVars,BestHead,RestHeads,NKnownVars) :- - ( bagof(tuple(Score,Head,Rest), ( - select(Head,Heads,Rest) , - order_score(Head,KnownVars,Rest,Score) - ), - Scores) -> true ; Scores = []), - max_go_list(Scores,tuple(_,BestHead,RestHeads)), - term_variables(BestHead,BestHeadVars), - ( setof(V, ( - member(V,BestHeadVars), - \+ memberchk_eq(V,KnownVars) - ), - NewVars) -> true ; NewVars = []), - append(NewVars,KnownVars,NKnownVars). - -order_score(Head,KnownVars,Rest,Score) :- - term_variables(Head,HeadVars), - term_variables(Rest,RestVars), - order_score_vars(HeadVars,KnownVars,RestVars,0,Score). - -order_score_vars([],_,_,Score,NScore) :- - ( Score == 0 -> - NScore = 99999 - ; - NScore = Score - ). -order_score_vars([V|Vs],KnownVars,RestVars,Score,NScore) :- - ( memberchk_eq(V,KnownVars) -> - TScore is Score + 1 - ; memberchk_eq(V,RestVars) -> - TScore is Score + 1 - ; - TScore = Score - ), - order_score_vars(Vs,KnownVars,RestVars,TScore,NScore). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ___ _ _ _ -%% |_ _|_ __ | (_)_ __ (_)_ __ __ _ -%% | || '_ \| | | '_ \| | '_ \ / _` | -%% | || | | | | | | | | | | | | (_| | -%% |___|_| |_|_|_|_| |_|_|_| |_|\__, | -%% |___/ - -%% SWI begin -create_get_mutable_ref(V,M,GM) :- GM = (M = mutable(V)). -%% SWI end - -%% SICStus begin -%% create_get_mutable_ref(V,M,GM) :- GM = (get_mutable(V,M)). -%% SICStus end - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ ____ _ _ -%% / ___|___ __| | ___ / ___| | ___ __ _ _ __ (_)_ __ __ _ -%% | | / _ \ / _` |/ _ \ | | | |/ _ \/ _` | '_ \| | '_ \ / _` | -%% | |__| (_) | (_| | __/ | |___| | __/ (_| | | | | | | | | (_| | -%% \____\___/ \__,_|\___| \____|_|\___|\__,_|_| |_|_|_| |_|\__, | -%% |___/ -%% -%% removes redundant 'true's and other trivial but potentially non-free constructs - -clean_clauses([],[]). -clean_clauses([C|Cs],[NC|NCs]) :- - clean_clause(C,NC), - clean_clauses(Cs,NCs). - -clean_clause(Clause,NClause) :- - ( Clause = (Head :- Body) -> - clean_goal(Body,NBody), - ( NBody == true -> - NClause = Head - ; - NClause = (Head :- NBody) - ) - ; - NClause = Clause - ). - -clean_goal(Goal,NGoal) :- - var(Goal), !, - NGoal = Goal. -clean_goal((G1,G2),NGoal) :- - !, - clean_goal(G1,NG1), - clean_goal(G2,NG2), - ( NG1 == true -> - NGoal = NG2 - ; NG2 == true -> - NGoal = NG1 - ; - NGoal = (NG1,NG2) - ). -clean_goal((If -> Then ; Else),NGoal) :- - !, - clean_goal(If,NIf), - ( NIf == true -> - clean_goal(Then,NThen), - NGoal = NThen - ; NIf == fail -> - clean_goal(Else,NElse), - NGoal = NElse - ; - clean_goal(Then,NThen), - clean_goal(Else,NElse), - NGoal = (NIf -> NThen; NElse) - ). -clean_goal((G1 ; G2),NGoal) :- - !, - clean_goal(G1,NG1), - clean_goal(G2,NG2), - ( NG1 == fail -> - NGoal = NG2 - ; NG2 == fail -> - NGoal = NG1 - ; - NGoal = (NG1 ; NG2) - ). -clean_goal(once(G),NGoal) :- - !, - clean_goal(G,NG), - ( NG == true -> - NGoal = true - ; NG == fail -> - NGoal = fail - ; - NGoal = once(NG) - ). -clean_goal((G1 -> G2),NGoal) :- - !, - clean_goal(G1,NG1), - ( NG1 == true -> - clean_goal(G2,NGoal) - ; NG1 == fail -> - NGoal = fail - ; - clean_goal(G2,NG2), - NGoal = (NG1 -> NG2) - ). -clean_goal(Goal,Goal). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% _ _ _ _ _ _ _ -%% | | | | |_(_) (_) |_ _ _ -%% | | | | __| | | | __| | | | -%% | |_| | |_| | | | |_| |_| | -%% \___/ \__|_|_|_|\__|\__, | -%% |___/ - -gen_var(_). -gen_vars(N,Xs) :- - length(Xs,N). - -head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs) :- - vars_susp(A,Vars,Susp,VarsSusp), - Head =.. [_|Args], - pairup(Args,Vars,HeadPairs). - -inc_id([N|Ns],[O|Ns]) :- - O is N + 1. -dec_id([N|Ns],[M|Ns]) :- - M is N - 1. - -extend_id(Id,[0|Id]). - -next_id([_,N|Ns],[O|Ns]) :- - O is N + 1. - -build_head(F,A,Id,Args,Head) :- - buildName(F,A,Id,Name), - Head =.. [Name|Args]. - -buildName(Fct,Aty,List,Result) :- - atom_concat(Fct, (/) ,FctSlash), - atomic_concat(FctSlash,Aty,FctSlashAty), - buildName_(List,FctSlashAty,Result). - -buildName_([],Name,Name). -buildName_([N|Ns],Name,Result) :- - buildName_(Ns,Name,Name1), - atom_concat(Name1,'__',NameDash), % '_' is a char :-( - atomic_concat(NameDash,N,Result). - -vars_susp(A,Vars,Susp,VarsSusp) :- - length(Vars,A), - append(Vars,[Susp],VarsSusp). - -make_attr(N,Mask,SuspsList,Attr) :- - length(SuspsList,N), - Attr =.. [v,Mask|SuspsList]. - -or_pattern(Pos,Pat) :- - Pow is Pos - 1, - Pat is 1 << Pow. % was 2 ** X - -and_pattern(Pos,Pat) :- - X is Pos - 1, - Y is 1 << X, % was 2 ** X - Pat is -(Y + 1). - -conj2list(Conj,L) :- %% transform conjunctions to list - conj2list(Conj,L,[]). - -conj2list(Conj,L,T) :- - Conj = (G1,G2), !, - conj2list(G1,L,T1), - conj2list(G2,T1,T). -conj2list(G,[G | T],T). - -list2conj([],true). -list2conj([G],X) :- !, X = G. -list2conj([G|Gs],C) :- - ( G == true -> %% remove some redundant trues - list2conj(Gs,C) - ; - C = (G,R), - list2conj(Gs,R) - ). - -atom_concat_list([X],X) :- ! . -atom_concat_list([X|Xs],A) :- - atom_concat_list(Xs,B), - atomic_concat(X,B,A). - -atomic_concat(A,B,C) :- - make_atom(A,AA), - make_atom(B,BB), - atom_concat(AA,BB,C). - -make_atom(A,AA) :- - ( - atom(A) -> - AA = A - ; - number(A) -> - number_codes(A,AL), - atom_codes(AA,AL) - ). - -set_elems([],_). -set_elems([X|Xs],X) :- - set_elems(Xs,X). - -member2([X|_],[Y|_],X-Y). -member2([_|Xs],[_|Ys],P) :- - member2(Xs,Ys,P). - -select2(X, Y, [X|Xs], [Y|Ys], Xs, Ys). -select2(X, Y, [X1|Xs], [Y1|Ys], [X1|NXs], [Y1|NYs]) :- - select2(X, Y, Xs, Ys, NXs, NYs). - -pair_all_with([],_,[]). -pair_all_with([X|Xs],Y,[X-Y|Rest]) :- - pair_all_with(Xs,Y,Rest). - -default(X,Def) :- - ( var(X) -> X = Def ; true). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% SWI begin -verbosity_on :- prolog_flag(verbose,V), V == yes. -%% SWI end - -%% SICStus begin -%% verbosity_on. % at the moment -%% SICStus end diff --git a/LGPL/chr/chr_translate_bootstrap1.chr b/LGPL/chr/chr_translate_bootstrap1.chr deleted file mode 100644 index db9af8041..000000000 --- a/LGPL/chr/chr_translate_bootstrap1.chr +++ /dev/null @@ -1,2319 +0,0 @@ -/* Generated by CHR bootstrap compiler - From: chr_translate_bootstrap1.pl - Date: Fri Jan 12 13:49:11 2007 - - DO NOT EDIT. EDIT THE CHR FILE INSTEAD -*/ - -:- module(chr_translate_bootstrap1, - [ chr_translate/2 - ]). -:- use_module(chr_runtime). -:- style_check(- (discontiguous)). -:- use_module(chr_runtime). -:- style_check(- (discontiguous)). -:- use_module(library(lists), - [ append/3, - member/2, - permutation/2, - reverse/2 - ]). -:- use_module(library(ordsets)). -:- use_module(hprolog). -:- use_module(pairlist). -:- include(chr_op2). -chr_translate(A, C) :- - init_chr_pp_flags, - partition_clauses(A, B, E, D), - ( B==[] - -> C=D - ; check_rules(E, B), - unique_analyse_optimise(E, F), - check_attachments(F), - set_constraint_indices(B, 1), - store_management_preds(B, G), - constraints_code(B, F, H), - append([D, G, H], C) - ), - chr_clear. -store_management_preds(A, E) :- - generate_attach_detach_a_constraint_all(A, B), - generate_attach_increment(C), - generate_attr_unify_hook(D), - append([B, C, D], E). -partition_clauses([], [], [], []). -partition_clauses([A|M], B, C, E) :- - ( rule(A, D) - -> B=G, - C=[D|H], - E=I - ; is_declaration(A, F) - -> append(F, G, B), - C=H, - E=I - ; is_module_declaration(A, J) - -> target_module(J), - B=G, - C=H, - E=[A|I] - ; A=handler(_) - -> format('CHR compiler WARNING: ~w.\n', [A]), - format(' `--> SICStus compatibility: ignoring handler/1 declaration.\n', []), - B=G, - C=H, - E=I - ; A=rules(_) - -> format('CHR compiler WARNING: ~w.\n', [A]), - format(' `--> SICStus compatibility: ignoring rules/1 declaration.\n', []), - B=G, - C=H, - E=I - ; A= (:-chr_option(K, L)) - -> handle_option(K, L), - B=G, - C=H, - E=I - ; B=G, - C=H, - E=[A|I] - ), - partition_clauses(M, G, H, I). -is_declaration(A, D) :- - A= (:-B), - ( B=..[chr_constraint, C] - ; B=..[chr_constraint, C] - ), - conj2list(C, D). -rule(A, D) :- - A= @(C, B), !, - rule(B, yes(C), D). -rule(A, B) :- - rule(A, no, B). -rule(A, H, D) :- - A=pragma(B, C), !, - is_rule(B, E, F), - conj2list(C, G), - D=pragma(E, F, G, H). -rule(A, E, B) :- - is_rule(A, C, D), - B=pragma(C, D, [], E). -is_rule(A, G, D) :- - A= ==>(B, F), !, - conj2list(B, C), - get_ids(C, E, H), - D=ids([], E), - ( F= (I'|'J) - -> G=rule([], H, I, J) - ; G=rule([], H, true, F) - ). -is_rule(A, R, M) :- - A= <=>(G, B), !, - ( B= (C'|'D) - -> E=C, - F=D - ; E=true, - F=B - ), - ( G= \(H, I) - -> conj2list(H, J), - conj2list(I, K), - get_ids(J, O, P, 0, L), - get_ids(K, N, Q, L, _), - M=ids(N, O) - ; conj2list(G, K), - P=[], - get_ids(K, N, Q), - M=ids(N, []) - ), - R=rule(Q, P, E, F). -get_ids(A, B, C) :- - get_ids(A, B, C, 0, _). -get_ids([], [], [], A, A). -get_ids([B|D], [A|E], [C|F], A, H) :- - ( B= #(C, A) - -> true - ; C=B - ), - G is A+1, - get_ids(D, E, F, G, H). -is_module_declaration((:-module(A)), A). -is_module_declaration((:-module(A, _)), A). -check_rules(A, B) :- - check_rules(A, B, 1). -check_rules([], _, _). -check_rules([A|D], B, C) :- - check_rule(A, B, C), - E is C+1, - check_rules(D, B, E). -check_rule(A, F, G) :- - A=pragma(B, _, H, _), - B=rule(C, D, _, _), - append(C, D, E), - check_head_constraints(E, F, A, G), - check_pragmas(H, A, G). -check_head_constraints([], _, _, _). -check_head_constraints([A|E], D, F, G) :- - functor(A, B, C), - ( member(B/C, D) - -> check_head_constraints(E, D, F, G) - ; format('CHR compiler ERROR: Undeclared constraint ~w in head of ~@.\n', [B/C, format_rule(F, G)]), - format(' `--> Constraint should be on of ~w.\n', [D]), - fail - ). -check_pragmas([], _, _). -check_pragmas([A|D], B, C) :- - check_pragma(A, B, C), - check_pragmas(D, B, C). -check_pragma(A, B, C) :- - var(A), !, - format('CHR compiler ERROR: invalid pragma ~w in ~@.\n', [A, format_rule(B, C)]), - format(' `--> Pragma should not be a variable!\n', []), - fail. -check_pragma(passive(B), A, E) :- !, - A=pragma(_, ids(C, D), _, _), - ( memberchk_eq(B, C) - -> true - ; memberchk_eq(B, D) - -> true - ; format('CHR compiler ERROR: invalid identifier ~w in pragma passive in ~@.\n', [B, format_rule(A, E)]), - fail - ). -check_pragma(A, B, C) :- - A=unique(_, _), !, - format('CHR compiler WARNING: undocumented pragma ~w in ~@.\n', [A, format_rule(B, C)]), - format(' `--> Only use this pragma if you know what you are doing.\n', []). -check_pragma(A, B, C) :- - A=already_in_heads, !, - format('CHR compiler WARNING: currently unsupported pragma ~w in ~@.\n', [A, format_rule(B, C)]), - format(' `--> Pragma is ignored. Termination and correctness may be affected \n', []). -check_pragma(A, B, C) :- - A=already_in_head(_), !, - format('CHR compiler WARNING: currently unsupported pragma ~w in ~@.\n', [A, format_rule(B, C)]), - format(' `--> Pragma is ignored. Termination and correctness may be affected \n', []). -check_pragma(A, B, C) :- - format('CHR compiler ERROR: invalid pragma ~w in ~@.\n', [A, format_rule(B, C)]), - format(' `--> Pragma should be one of passive/1!\n', []), - fail. -format_rule(A, D) :- - A=pragma(_, _, _, B), - ( B=yes(C) - -> write('rule '), - write(C) - ; write('rule number '), - write(D) - ). -handle_option(A, B) :- - var(A), !, - format('CHR compiler ERROR: ~w.\n', [option(A, B)]), - format(' `--> First argument should be an atom, not a variable.\n', []), - fail. -handle_option(B, A) :- - var(A), !, - format('CHR compiler ERROR: ~w.\n', [option(B, A)]), - format(' `--> Second argument should be a nonvariable.\n', []), - fail. -handle_option(A, B) :- - option_definition(A, B, C), !, - set_chr_pp_flags(C). -handle_option(A, _) :- - \+option_definition(A, _, _), !. -handle_option(A, C) :- - findall(B, option_definition(A, B, _), D), - format('CHR compiler ERROR: ~w.\n', [option(A, C)]), - format(' `--> Invalid value ~w: should be one of ~w.\n', [C, D]), - fail. -option_definition(optimize, experimental, A) :- - A=[unique_analyse_optimise-on, check_unnecessary_active-full, reorder_heads-on, set_semantics_rule-on, check_attachments-on, guard_via_reschedule-on]. -option_definition(optimize, full, A) :- - A=[unique_analyse_optimise-on, check_unnecessary_active-full, reorder_heads-on, set_semantics_rule-on, check_attachments-on, guard_via_reschedule-on]. -option_definition(optimize, sicstus, A) :- - A=[unique_analyse_optimise-off, check_unnecessary_active-simplification, reorder_heads-off, set_semantics_rule-off, check_attachments-off, guard_via_reschedule-off]. -option_definition(optimize, off, A) :- - A=[unique_analyse_optimise-off, check_unnecessary_active-off, reorder_heads-off, set_semantics_rule-off, check_attachments-off, guard_via_reschedule-off]. -option_definition(debug, off, A) :- - A=[debugable-off]. -option_definition(debug, on, A) :- - A=[debugable-on]. -option_definition(check_guard_bindings, on, A) :- - A=[guard_locks-on]. -option_definition(check_guard_bindings, off, A) :- - A=[guard_locks-off]. -init_chr_pp_flags :- - chr_pp_flag_definition(A, [B|_]), - set_chr_pp_flag(A, B), - fail. -init_chr_pp_flags. -set_chr_pp_flags([]). -set_chr_pp_flags([A-B|C]) :- - set_chr_pp_flag(A, B), - set_chr_pp_flags(C). -set_chr_pp_flag(A, C) :- - atomic_concat('$chr_pp_', A, B), - nb_setval(B, C). -chr_pp_flag_definition(unique_analyse_optimise, [on, off]). -chr_pp_flag_definition(check_unnecessary_active, [full, simplification, off]). -chr_pp_flag_definition(reorder_heads, [on, off]). -chr_pp_flag_definition(set_semantics_rule, [on, off]). -chr_pp_flag_definition(guard_via_reschedule, [on, off]). -chr_pp_flag_definition(guard_locks, [on, off]). -chr_pp_flag_definition(check_attachments, [on, off]). -chr_pp_flag_definition(debugable, [off, on]). -chr_pp_flag(A, D) :- - atomic_concat('$chr_pp_', A, B), - nb_getval(B, C), - ( C==[] - -> chr_pp_flag_definition(A, [D|_]) - ; C=D - ). -generate_attach_detach_a_constraint_all([], []). -generate_attach_detach_a_constraint_all([A|D], F) :- - ( is_attached(A) - -> generate_attach_a_constraint(A, B), - generate_detach_a_constraint(A, C) - ; B=[], - C=[] - ), - generate_attach_detach_a_constraint_all(D, E), - append([B, C, E], F). -generate_attach_a_constraint(A, [B, D]) :- - generate_attach_a_constraint_empty_list(A, B), - get_max_constraint_index(C), - ( C==1 - -> generate_attach_a_constraint_1_1(A, D) - ; generate_attach_a_constraint_t_p(A, D) - ). -generate_attach_a_constraint_empty_list(A/B, E) :- - atom_concat_list([attach_, A, /, B], C), - D=[[], _], - F=..[C|D], - E= (F:-true). -generate_attach_a_constraint_1_1(A/B, L) :- - atom_concat_list([attach_, A, /, B], C), - D=[[G|E], F], - M=..[C|D], - K=..[C, E, F], - get_target_module(H), - N= ((get_attr(G, H, I)->J=[F|I], put_attr(G, H, J);put_attr(G, H, [F])), K), - L= (M:-N). -generate_attach_a_constraint_t_p(A/B, Z) :- - atom_concat_list([attach_, A, /, B], C), - D=[[Q|E], F], - A1=..[C|D], - Y=..[C, E, F], - get_constraint_index(A/B, G), - or_pattern(G, P), - get_max_constraint_index(H), - make_attr(H, K, I, T), - nth1(G, I, J), - substitute_eq(J, I, [F|J], L), - make_attr(H, K, L, U), - substitute_eq(J, I, [F], M), - make_attr(H, V, M, W), - copy_term_nat(I, N), - nth1(G, N, [F]), - chr_delete(N, [F], O), - set_elems(O, []), - make_attr(H, P, N, X), - get_target_module(R), - B1= ((get_attr(Q, R, S)->S=T, (K/\P=:=P->put_attr(Q, R, U);V is K\/P, put_attr(Q, R, W));put_attr(Q, R, X)), Y), - Z= (A1:-B1). -generate_detach_a_constraint(A, [B, D]) :- - generate_detach_a_constraint_empty_list(A, B), - get_max_constraint_index(C), - ( C==1 - -> generate_detach_a_constraint_1_1(A, D) - ; generate_detach_a_constraint_t_p(A, D) - ). -generate_detach_a_constraint_empty_list(A/B, E) :- - atom_concat_list([detach_, A, /, B], C), - D=[[], _], - F=..[C|D], - E= (F:-true). -generate_detach_a_constraint_1_1(A/B, L) :- - atom_concat_list([detach_, A, /, B], C), - D=[[G|E], F], - M=..[C|D], - K=..[C, E, F], - get_target_module(H), - N= ((get_attr(G, H, I)->'chr sbag_del_element'(I, F, J), (J==[]->del_attr(G, H);put_attr(G, H, J));true), K), - L= (M:-N). -generate_detach_a_constraint_t_p(A/B, Y) :- - atom_concat_list([detach_, A, /, B], C), - D=[[N|E], F], - Z=..[C|D], - X=..[C, E, F], - get_constraint_index(A/B, G), - or_pattern(G, R), - and_pattern(G, U), - get_max_constraint_index(H), - make_attr(H, L, I, Q), - nth1(G, I, J), - substitute_eq(J, I, [], K), - make_attr(H, T, K, V), - substitute_eq(J, I, S, M), - make_attr(H, L, M, W), - get_target_module(O), - A1= ((get_attr(N, O, P)->P=Q, (L/\R=:=R->'chr sbag_del_element'(J, F, S), (S==[]->T is L/\U, (T==0->del_attr(N, O);put_attr(N, O, V));put_attr(N, O, W));true);true), X), - Y= (Z:-A1). -generate_attach_increment([A, C]) :- - generate_attach_increment_empty(A), - get_max_constraint_index(B), - ( B==1 - -> generate_attach_increment_one(C) - ; generate_attach_increment_many(B, C) - ). -generate_attach_increment_empty((attach_increment([], _):-true)). -generate_attach_increment_one(H) :- - I=attach_increment([A|G], D), - get_target_module(B), - J= ('chr not_locked'(A), (get_attr(A, B, C)->sort(C, E), merge(D, E, F), put_attr(A, B, F);put_attr(A, B, D)), attach_increment(G, D)), - H= (I:-J). -generate_attach_increment_many(A, Z) :- - make_attr(A, V, C, B), - make_attr(A, W, D, S), - A1=attach_increment([P|Y], B), - bagof(G, E^F^H^I^ (member2(C, D, E-F), G= (sort(F, H), 'chr merge_attributes'(E, H, I))), J), - list2conj(J, T), - bagof(N, K^L^M^member((K, 'chr merge_attributes'(L, M, N)), J), O), - make_attr(A, U, O, X), - get_target_module(Q), - B1= ('chr not_locked'(P), (get_attr(P, Q, R)->R=S, T, U is V\/W, put_attr(P, Q, X);put_attr(P, Q, B)), attach_increment(Y, B)), - Z= (A1:-B1). -generate_attr_unify_hook([B]) :- - get_max_constraint_index(A), - ( A==1 - -> generate_attr_unify_hook_one(B) - ; generate_attr_unify_hook_many(A, B) - ). -generate_attr_unify_hook_one(K) :- - L=A:attr_unify_hook(B, C), - get_target_module(A), - make_run_suspensions(G, H), - make_run_suspensions(B, J), - M= (sort(B, E), (var(C)-> (get_attr(C, A, D)->true;D=[]), sort(D, F), 'chr merge_attributes'(E, F, G), put_attr(C, A, G), H; (compound(C)->term_variables(C, I), attach_increment(I, E);true), J)), - K= (L:-M). -generate_attr_unify_hook_many(A, F1) :- - make_attr(A, Q, C, R), - make_attr(A, Z, H, W), - bagof(D, B^E^ (member(B, C), D=sort(B, E)), F), - list2conj(F, T), - bagof(E, B^member(sort(B, E), F), G), - bagof(K, I^J^L^M^ (member2(G, H, I-J), K= (sort(J, L), 'chr merge_attributes'(I, L, M))), O), - bagof(M, I^L^N^member((N, 'chr merge_attributes'(I, L, M)), O), P), - list2conj(O, X), - make_attr(A, Y, P, A1), - make_attr(A, Q, G, C1), - G1=S:attr_unify_hook(R, U), - get_target_module(S), - make_run_suspensions_loop(P, B1), - make_run_suspensions_loop(G, D1), - H1= (T, (var(U)-> (get_attr(U, S, V)->V=W, X, Y is Q\/Z, put_attr(U, S, A1), B1;put_attr(U, S, C1), D1); (compound(U)->term_variables(U, E1), attach_increment(E1, C1);true), D1)), - F1= (G1:-H1). -make_run_suspensions(B, A) :- - ( chr_pp_flag(debugable, on) - -> A='chr run_suspensions_d'(B) - ; A='chr run_suspensions'(B) - ). -make_run_suspensions_loop(B, A) :- - ( chr_pp_flag(debugable, on) - -> A='chr run_suspensions_loop_d'(B) - ; A='chr run_suspensions_loop'(B) - ). -check_attachments(A) :- - ( chr_pp_flag(check_attachments, on) - -> check_attachments_(A) - ; true - ). -check_attachments_([]). -check_attachments_([A|B]) :- - check_attachment(A), - check_attachments_(B). -check_attachment(A) :- - A=pragma(B, _, _, _), - B=rule(C, D, E, F), - check_attachment_heads1(C, C, D, E), - check_attachment_heads2(D, C, F). -check_attachment_heads1([], _, _, _). -check_attachment_heads1([A|H], B, C, D) :- - functor(A, F, G), - ( B==[A], - C==[], - D==true, - A=..[_|E], - no_matching(E, []) - -> attached(F/G, no) - ; attached(F/G, maybe) - ), - check_attachment_heads1(H, B, C, D). -no_matching([], _). -no_matching([A|C], B) :- - var(A), - \+memberchk_eq(A, B), - no_matching(C, [A|B]). -check_attachment_heads2([], _, _). -check_attachment_heads2([A|F], B, C) :- - functor(A, D, E), - ( B\==[], - C==true - -> attached(D/E, maybe) - ; attached(D/E, yes) - ), - check_attachment_heads2(F, B, C). -all_attached([]). -all_attached([A|D]) :- - functor(A, B, C), - is_attached(B/C), - all_attached(D). -set_constraint_indices([], A) :- - B is A-1, - max_constraint_index(B). -set_constraint_indices([A|C], B) :- - ( is_attached(A) - -> constraint_index(A, B), - D is B+1, - set_constraint_indices(C, D) - ; set_constraint_indices(C, B) - ). -constraints_code(A, B, D) :- - post_constraints(A, 1), - constraints_code1(1, B, C, []), - clean_clauses(C, D). -post_constraints([], A) :- - B is A-1, - constraint_count(B). -post_constraints([A/B|D], C) :- - constraint(A/B, C), - E is C+1, - post_constraints(D, E). -constraints_code1(A, E, D, C) :- - constraint_count(B), - ( A>B - -> C=D - ; constraint_code(A, E, D, G), - F is A+1, - constraints_code1(F, E, G, C) - ). -constraint_code(A, E, C, J) :- - constraint(B, A), - constraint_prelude(B, D), - C=[D|G], - F=[0], - rules_code(E, 1, A, F, H, G, I), - gen_cond_attach_clause(B, H, I, J). -constraint_prelude(B/A, E) :- - vars_susp(A, C, I, D), - F=..[B|C], - build_head(B, A, [0], D, H), - get_target_module(G), - ( chr_pp_flag(debugable, on) - -> E= (F:-'chr allocate_constraint'(G:H, I, B, C), ('chr debug_event'(call(I)), H;'chr debug_event'(fail(I)), !, fail), ('chr debug_event'(exit(I));'chr debug_event'(redo(I)), fail)) - ; E= (F:-H) - ). -gen_cond_attach_clause(A/B, C, K, M) :- - ( is_attached(A/B) - -> ( C==[0] - -> gen_cond_attach_goal(A/B, G, F, D, E) - ; vars_susp(B, D, E, F), - gen_uncond_attach_goal(A/B, E, G, _) - ), - ( chr_pp_flag(debugable, on) - -> H=..[A|D], - I='chr debug_event'(insert(#(H, E))) - ; I=true - ), - build_head(A, B, C, F, J), - L= (J:-I, G), - K=[L|M] - ; K=M - ). -gen_cond_attach_goal(E/A, G, D, B, C) :- - vars_susp(A, B, C, D), - build_head(E, A, [0], D, J), - atom_concat_list([attach_, E, /, A], F), - K=..[F, H, C], - get_target_module(I), - G= ((var(C)->'chr insert_constraint_internal'(H, C, I:J, E, B);'chr activate_constraint'(H, C, _)), K). -gen_uncond_attach_goal(A/B, D, E, G) :- - atom_concat_list([attach_, A, /, B], C), - H=..[C, F, D], - E= ('chr activate_constraint'(F, D, G), H). -rules_code([], _, _, A, A, B, B). -rules_code([A|F], B, C, D, I, E, K) :- - rule_code(A, B, C, D, H, E, J), - G is B+1, - rules_code(F, G, C, H, I, J, K). -rule_code(A, K, F, G, L, H, N) :- - A=pragma(C, B, _, _), - B=ids(E, J), - C=rule(D, I, _, _), - heads1_code(D, [], E, [], A, F, G, H, M), - heads2_code(I, [], J, [], A, K, F, G, L, M, N). -heads1_code([], _, _, _, _, _, _, A, A). -heads1_code([C|J], F, [H|L], M, A, B, P, Q, S) :- - A=pragma(G, _, I, _), - constraint(D/E, B), - ( functor(C, D, E), - \+check_unnecessary_active(C, F, G), - \+memberchk_eq(passive(H), I), - all_attached(J), - all_attached(F), - G=rule(_, K, _, _), - all_attached(K) - -> append(J, F, N), - append(L, M, O), - head1_code(C, N, O, A, D/E, B, P, Q, R) - ; Q=R - ), - heads1_code(J, [C|F], L, [H|M], A, B, P, R, S). -head1_code(D, E, F, A, I, _, J, K, L) :- - A=pragma(B, _, _, _), - B=rule(_, C, _, _), - ( C==[] - -> reorder_heads(D, E, F, G, H), - simplification_code(D, G, H, A, I, J, K, L) - ; simpagation_head1_code(D, E, F, A, I, J, K, L) - ). -heads2_code([], _, _, _, _, _, _, A, A, B, B). -heads2_code([C|J], F, [H|L], M, A, P, B, R, W, S, X) :- - A=pragma(G, _, I, _), - constraint(D/E, B), - ( functor(C, D, E), - \+check_unnecessary_active(C, F, G), - \+memberchk_eq(passive(H), I), - \+set_semantics_rule(A), - all_attached(J), - all_attached(F), - G=rule(K, _, _, _), - all_attached(K) - -> append(J, F, N), - append(L, M, O), - length(J, Q), - head2_code(C, N, O, A, P, Q, D/E, R, S, T), - inc_id(R, V), - gen_alloc_inc_clause(D/E, R, T, U) - ; S=U, - V=R - ), - heads2_code(J, [C|F], L, [H|M], A, P, B, V, W, U, X). -head2_code(D, E, M, A, G, H, I, J, K, L) :- - A=pragma(B, _, _, _), - B=rule(C, _, _, _), - ( C==[] - -> reorder_heads(D, E, F), - propagation_code(D, F, B, G, H, I, J, K, L) - ; simpagation_head2_code(D, E, M, A, I, J, K, L) - ). -gen_alloc_inc_clause(B/A, C, K, M) :- - vars_susp(A, F, G, D), - build_head(B, A, C, D, I), - inc_id(C, E), - build_head(B, A, E, D, J), - ( C==[0] - -> gen_cond_allocation(F, G, B/A, D, H) - ; H=true - ), - L= (I:-H, J), - K=[L|M]. -gen_cond_allocation(H, E, A/B, C, D) :- - build_head(A, B, [0], C, G), - get_target_module(F), - D= (var(E)->'chr allocate_constraint'(F:G, E, A, H);true). -guard_via_reschedule(A, B, C, D) :- - ( chr_pp_flag(guard_via_reschedule, on) - -> guard_via_reschedule_main(A, B, C, D) - ; append(A, B, E), - list2conj(E, D) - ). -guard_via_reschedule_main(B, C, A, G) :- - initialize_unit_dictionary(A, D), - build_units(B, C, D, E), - dependency_reorder(E, F), - units2goal(F, G). -units2goal([], true). -units2goal([unit(_, A, _, _)|B], (A, C)) :- - units2goal(B, C). -dependency_reorder(A, B) :- - dependency_reorder(A, [], B). -dependency_reorder([], A, B) :- - reverse(A, B). -dependency_reorder([A|F], C, G) :- - A=unit(_, _, B, D), - ( B==fixed - -> E=[A|C] - ; dependency_insert(C, A, D, E) - ), - dependency_reorder(F, E, G). -dependency_insert([], A, _, [A]). -dependency_insert([A|F], E, C, D) :- - A=unit(B, _, _, _), - ( memberchk(B, C) - -> D=[E, A|F] - ; D=[A|G], - dependency_insert(F, E, C, G) - ). -build_units(A, D, B, C) :- - build_retrieval_units(A, 1, E, B, F, C, G), - build_guard_units(D, E, F, G). -build_retrieval_units([], A, A, B, B, C, C). -build_retrieval_units([A|G], C, I, D, K, E, M) :- - term_variables(A, B), - update_unit_dictionary(B, C, D, J, [], F), - E=[unit(C, A, movable, F)|L], - H is C+1, - build_retrieval_units2(G, H, I, J, K, L, M). -build_retrieval_units2([], A, A, B, B, C, C). -build_retrieval_units2([A|G], C, I, D, K, E, M) :- - term_variables(A, B), - update_unit_dictionary(B, C, D, J, [], F), - E=[unit(C, A, fixed, F)|L], - H is C+1, - build_retrieval_units(G, H, I, J, K, L, M). -initialize_unit_dictionary(A, C) :- - term_variables(A, B), - pair_all_with(B, 0, C). -update_unit_dictionary([], _, A, A, B, B). -update_unit_dictionary([B|H], D, A, I, E, J) :- - ( lookup_eq(A, B, C) - -> ( ( C==D - ; memberchk(C, E) - ) - -> F=E - ; F=[C|E] - ), - G=A - ; G=[B-D|A], - F=E - ), - update_unit_dictionary(H, D, G, I, F, J). -build_guard_units(A, C, F, B) :- - ( A=[D] - -> B=[unit(C, D, fixed, [])] - ; A=[D|H] - -> term_variables(D, E), - update_unit_dictionary2(E, C, F, J, [], G), - B=[unit(C, D, movable, G)|K], - I is C+1, - build_guard_units(H, I, J, K) - ). -update_unit_dictionary2([], _, A, A, B, B). -update_unit_dictionary2([B|H], D, A, I, E, J) :- - ( lookup_eq(A, B, C) - -> ( ( C==D - ; memberchk(C, E) - ) - -> F=E - ; F=[C|E] - ), - G=[B-D|A] - ; G=[B-D|A], - F=E - ), - update_unit_dictionary2(H, D, G, I, F, J). -unique_analyse_optimise(A, B) :- - ( chr_pp_flag(unique_analyse_optimise, on) - -> unique_analyse_optimise_main(A, 1, [], B) - ; B=A - ). -unique_analyse_optimise_main([], _, _, []). -unique_analyse_optimise_main([A|R], B, D, [O|T]) :- - ( discover_unique_pattern(A, B, C) - -> E=[C|D] - ; E=D - ), - A=pragma(F, G, N, Q), - F=rule(H, J, _, _), - G=ids(I, K), - apply_unique_patterns_to_constraints(H, I, E, L), - apply_unique_patterns_to_constraints(J, K, E, M), - append([L, M, N], P), - O=pragma(F, G, P, Q), - S is B+1, - unique_analyse_optimise_main(R, S, E, T). -apply_unique_patterns_to_constraints([], _, _, []). -apply_unique_patterns_to_constraints([B|H], [C|I], A, E) :- - ( member(D, A), - apply_unique_pattern(B, C, D, F) - -> E=[F|G] - ; E=G - ), - apply_unique_patterns_to_constraints(H, I, A, G). -apply_unique_pattern(B, L, A, K) :- - A=unique(C, E), - subsumes(B, C, F), - ( setof(I, D^G^H^ (member(D, E), lookup_eq(F, D, G), term_variables(G, H), member(I, H)), J) - -> true - ; J=[] - ), - K=unique(L, J). -subsumes(A, B, F) :- - empty_ds(C), - subsumes_aux(A, B, C, D), - ds_to_list(D, E), - build_unifier(E, F). -subsumes_aux(B, A, E, F) :- - ( compound(A), - functor(A, C, D) - -> compound(B), - functor(B, C, D), - subsumes_aux(D, B, A, E, F) - ; B==A - -> F=E - ; var(A), - get_ds(B, E, G) - -> G==A, - F=E - ; var(A), - put_ds(B, E, A, F) - ). -subsumes_aux(0, _, _, A, A) :- !. -subsumes_aux(A, B, C, F, I) :- - arg(A, B, D), - arg(A, C, E), - subsumes_aux(D, E, F, H), - G is A-1, - subsumes_aux(G, B, C, H, I). -build_unifier([], []). -build_unifier([B-A|C], [A-B|D]) :- - build_unifier(C, D). -discover_unique_pattern(A, M, L) :- - A=pragma(B, _, G, N), - ( B=rule([C], [D], E, F) - -> true - ; B=rule([C, D], [], E, F) - ), - check_unique_constraints(C, D, E, F, G, H), - term_variables(C, I), - select_pragma_unique_variables(H, I, J), - K=unique(C, J), - copy_term_nat(K, L), - ( verbosity_on - -> format('Found unique pattern ~w in rule ~d~@\n', [L, M, (N=yes(O)->write([58, 32]), write(O);true)]) - ; true - ). -select_pragma_unique_variables([], _, []). -select_pragma_unique_variables([A-B|F], D, C) :- - ( A==B - -> C=[A|E] - ; once(( - ( \+memberchk_eq(A, D) - ; \+memberchk_eq(B, D) - ) - )), - C=E - ), - select_pragma_unique_variables(F, D, E). -check_unique_constraints(B, C, E, _, A, D) :- - \+member(passive(_), A), - variable_replacement(B-C, C-B, D), - copy_with_variable_replacement(E, G, D), - negate(E, F), - once(entails(F, G)). -negate(true, fail). -negate(fail, true). -negate(B=A, A>=B). -negate(B>=A, A>B). -negate(BD, A>=C) :- - A==B, - C==D. -entails(B check_unnecessary_active_main(A, B, C) - ; chr_pp_flag(check_unnecessary_active, simplification), - C=rule(_, [], _, _) - -> check_unnecessary_active_main(A, B, C) - ; fail - ). -check_unnecessary_active_main(C, A, D) :- - member(B, A), - variable_replacement(B, C, E), - copy_with_variable_replacement(D, F, E), - identical_rules(D, F), !. -set_semantics_rule(A) :- - ( chr_pp_flag(set_semantics_rule, on) - -> set_semantics_rule_main(A) - ; fail - ). -set_semantics_rule_main(A) :- - A=pragma(B, C, E, _), - B=rule([_], [_], true, _), - C=ids([D], [F]), - once(member(unique(D, G), E)), - once(member(unique(F, H), E)), - G==H, - \+memberchk_eq(passive(D), E). -identical_rules(rule(E, H, A, C), rule(G, J, B, D)) :- - A==B, - identical_bodies(C, D), - permutation(E, F), - F==G, - permutation(H, I), - I==J. -identical_bodies(A, B) :- - ( A= (C=E), - B= (D=F) - -> ( C==D, - E==F - ; C==F, - D==E - ), ! - ; A==B - ). -copy_with_variable_replacement(A, C, B) :- - ( var(A) - -> ( lookup_eq(B, A, C) - -> true - ; A=C - ) - ; functor(A, D, E), - functor(C, D, E), - A=..[_|F], - C=..[_|G], - copy_with_variable_replacement_l(F, G, B) - ). -copy_with_variable_replacement_l([], [], _). -copy_with_variable_replacement_l([A|D], [B|E], C) :- - copy_with_variable_replacement(A, B, C), - copy_with_variable_replacement_l(D, E, C). -variable_replacement(A, B, C) :- - variable_replacement(A, B, [], C). -variable_replacement(A, B, C, E) :- - ( var(A) - -> var(B), - ( lookup_eq(C, A, D) - -> D==B, - E=C - ; E=[A-B|C] - ) - ; A=..[F|G], - nonvar(B), - B=..[F|H], - variable_replacement_l(G, H, C, E) - ). -variable_replacement_l([], [], A, A). -variable_replacement_l([A|D], [B|E], C, G) :- - variable_replacement(A, B, C, F), - variable_replacement_l(D, E, F, G). -simplification_code(B, H, J, A, D/C, E, E1, G1) :- - A=pragma(O, _, K, _), - head_info(B, C, _, S, F, G), - build_head(D, C, E, F, Q), - head_arg_matches(G, [], R, I), - ( H==[] - -> M=[], - N=I, - L=[] - ; rest_heads_retrieval_and_matching(H, J, K, B, L, M, I, N) - ), - guard_body_copies2(O, N, P, D1), - guard_via_reschedule(L, P, Q-R, A1), - gen_uncond_susps_detachments(M, H, B1), - gen_cond_susp_detachment(S, D/C, C1), - ( chr_pp_flag(debugable, on) - -> O=rule(_, _, T, U), - my_term_copy(T-U, N, _, V-W), - Y='chr debug_event'(try([S|X], [], V, W)), - Z='chr debug_event'(apply([S|X], [], V, W)) - ; Y=true, - Z=true - ), - F1= (Q:-R, A1, Y, !, Z, B1, C1, D1), - E1=[F1|G1]. -head_arg_matches(A, B, E, C) :- - head_arg_matches_(A, B, D, C), - list2conj(D, E). -head_arg_matches_([], A, [], A). -head_arg_matches_([A-D|H], B, C, P) :- - ( var(A) - -> ( lookup_eq(B, A, E) - -> C=[D==E|G], - F=B - ; F=[A-D|B], - C=G - ), - I=H - ; atomic(A) - -> C=[D==A|G], - B=F, - I=H - ; A=..[_|M], - functor(A, J, K), - functor(L, J, K), - L=..[_|N], - C=[nonvar(D), D=L|G], - pairup(M, N, O), - append(O, H, I), - F=B - ), - head_arg_matches_(I, F, G, P). -rest_heads_retrieval_and_matching(A, B, C, D, E, F, G, H) :- - rest_heads_retrieval_and_matching(A, B, C, D, E, F, G, H, [], [], []). -rest_heads_retrieval_and_matching(A, B, C, F, G, H, I, J, D, E, K) :- - ( A=[_|_] - -> rest_heads_retrieval_and_matching_n(A, B, C, D, E, F, G, H, I, J, K) - ; G=[], - H=[], - I=J - ). -rest_heads_retrieval_and_matching_n([], _, _, _, _, _, [], [], A, A, B) :- - instantiate_pattern_goals(B). -rest_heads_retrieval_and_matching_n([A|B1], [W|C1], X, C, Q, B, [F, Z|D1], [P|E1], E, G1, D) :- - passive_head_via(A, [B|C], D, E, F, K, H1), - functor(A, L, G), - head_info(A, G, I, _, _, H), - head_arg_matches(H, E, V, F1), - S=..[suspension, _, R, _, _, _, _|I], - get_max_constraint_index(J), - ( J==1 - -> O=K - ; get_constraint_index(L/G, M), - make_attr(J, _, N, K), - nth1(M, N, O) - ), - different_from_other_susps(A, P, C, Q, U), - create_get_mutable_ref(active, R, T), - A1= ('chr sbag_member'(P, O), P=S, T, U, V), - ( member(unique(W, Y), X), - check_unique_keys(Y, E) - -> Z= (A1->true) - ; Z=A1 - ), - rest_heads_retrieval_and_matching_n(B1, C1, X, [A|C], [P|Q], B, D1, E1, F1, G1, H1). -instantiate_pattern_goals([]). -instantiate_pattern_goals([_-attr(C, D, B)|G]) :- - get_max_constraint_index(A), - ( A==1 - -> B=true - ; make_attr(A, E, _, C), - or_list(D, F), !, - B= (E/\F=:=F) - ), - instantiate_pattern_goals(G). -check_unique_keys([], _). -check_unique_keys([B|C], A) :- - lookup_eq(A, B, _), - check_unique_keys(C, A). -different_from_other_susps(C, G, B, E, J) :- - ( bagof(F, A^ (nth1(A, B, D), \+C\=D, nth1(A, E, H), F= (G\==H)), I) - -> list2conj(I, J) - ; J=true - ). -passive_head_via(A, D, I, F, O, K, N) :- - functor(A, B, C), - get_constraint_index(B/C, G), - common_variables(A, D, E), - translate(E, F, H), - or_pattern(G, L), - ( permutation(H, J), - lookup_eq(I, J, attr(K, M, _)) - -> member(L, M), !, - N=I, - O=true - ; O= (P, Q), - gen_get_mod_constraints(H, P, K), - N=[H-attr(K, [L|_], Q)|I] - ). -common_variables(A, B, E) :- - term_variables(A, C), - term_variables(B, D), - intersect_eq(C, D, E). -gen_get_mod_constraints(A, B, F) :- - get_target_module(D), - ( A==[] - -> B= ('chr default_store'(C), get_attr(C, D, E), E=F) - ; ( A=[G] - -> H='chr via_1'(G, J) - ; A=[G, I] - -> H='chr via_2'(G, I, J) - ; H='chr via'(A, J) - ), - B= (H, get_attr(J, D, E), E=F) - ). -guard_body_copies(A, B, E, C) :- - guard_body_copies2(A, B, D, C), - list2conj(D, E). -guard_body_copies2(A, D, H, W) :- - A=rule(_, _, B, U), - conj2list(B, C), - split_off_simple_guard(C, D, E, F), - my_term_copy(E-F, D, V, G-I), - append(G, [Q], H), - term_variables(F, L), - term_variables(I, M), - ( chr_pp_flag(guard_locks, on), - bagof('chr lock'(J)-'chr unlock'(J), K^ (member(K, L), lookup_eq(D, K, J), memberchk_eq(J, M)), N) - -> once(pairup(O, P, N)) - ; O=[], - P=[] - ), - list2conj(O, R), - list2conj(P, T), - list2conj(I, S), - Q= (R, S, T), - my_term_copy(U, V, W). -split_off_simple_guard([], _, [], []). -split_off_simple_guard([A|D], B, C, F) :- - ( simple_guard(A, B) - -> C=[A|E], - split_off_simple_guard(D, B, E, F) - ; C=[], - F=[A|D] - ). -simple_guard(var(_), _). -simple_guard(nonvar(_), _). -simple_guard(ground(_), _). -simple_guard(number(_), _). -simple_guard(atom(_), _). -simple_guard(integer(_), _). -simple_guard(float(_), _). -simple_guard(_>_, _). -simple_guard(_<_, _). -simple_guard(_=<_, _). -simple_guard(_>=_, _). -simple_guard(_=:=_, _). -simple_guard(_==_, _). -simple_guard(B is _, A) :- - \+lookup_eq(A, B, _). -simple_guard((A, C), B) :- - simple_guard(A, B), - simple_guard(C, B). -simple_guard(\+A, B) :- - simple_guard(A, B). -my_term_copy(A, B, C) :- - my_term_copy(A, B, _, C). -my_term_copy(A, B, D, C) :- - ( var(A) - -> ( lookup_eq(B, A, C) - -> D=B - ; D=[A-C|B] - ) - ; functor(A, E, F), - functor(C, E, F), - A=..[_|G], - C=..[_|H], - my_term_copy_list(G, B, D, H) - ). -my_term_copy_list([], A, A, []). -my_term_copy_list([A|D], B, F, [C|G]) :- - my_term_copy(A, B, E, C), - my_term_copy_list(D, E, F, G). -gen_cond_susp_detachment(B, A, C) :- - ( is_attached(A) - -> gen_uncond_susp_detachment(B, A, D), - C= (var(B)->true;D) - ; C=true - ). -gen_uncond_susp_detachment(D, A/B, F) :- - ( is_attached(A/B) - -> atom_concat_list([detach_, A, /, B], C), - H=..[C, G, D], - ( chr_pp_flag(debugable, on) - -> E='chr debug_event'(remove(D)) - ; E=true - ), - F= (E, 'chr remove_constraint_internal'(D, G), H) - ; F=true - ). -gen_uncond_susps_detachments([], [], true). -gen_uncond_susps_detachments([B|F], [A|G], (E, H)) :- - functor(A, C, D), - gen_uncond_susp_detachment(B, C/D, E), - gen_uncond_susps_detachments(F, G, H). -simpagation_head1_code(C, I, K, A, F/D, G, L1, N1) :- - A=pragma(B, ids(_, L), Q, _), - B=rule(_, J, A1, B1), - head_info(C, D, _, Z, H, E), - head_arg_matches(E, [], X, R), - build_head(F, D, G, H, W), - append(I, J, M), - append(K, L, N), - reorder_heads(C, M, N, O, P), - rest_heads_retrieval_and_matching(O, P, Q, C, U, S, R, T), - split_by_ids(P, S, K, Y, C1), - guard_body_copies2(B, T, V, K1), - guard_via_reschedule(U, V, W-X, H1), - gen_uncond_susps_detachments(Y, I, I1), - gen_cond_susp_detachment(Z, F/D, J1), - ( chr_pp_flag(debugable, on) - -> my_term_copy(A1-B1, T, _, D1-E1), - F1='chr debug_event'(try([Z|Y], C1, D1, E1)), - G1='chr debug_event'(apply([Z|Y], C1, D1, E1)) - ; F1=true, - G1=true - ), - M1= (W:-X, H1, F1, !, G1, I1, J1, K1), - L1=[M1|N1]. -split_by_ids([], [], _, [], []). -split_by_ids([A|H], [D|I], B, C, E) :- - ( memberchk_eq(A, B) - -> C=[D|F], - E=G - ; C=F, - E=[D|G] - ), - split_by_ids(H, I, B, F, G). -simpagation_head2_code(C, G, P, A, J, K, L, T) :- - A=pragma(B, ids(E, _), Q, _), - B=rule(D, _, H, I), - reorder_heads(C, D, E, [F|N], [M|O]), - simpagation_head2_prelude(C, F, [G, D, H, I], J, K, L, S), - extend_id(K, R), - simpagation_head2_worker(C, F, M, N, O, G, P, B, Q, J, R, S, T). -simpagation_head2_prelude(A, G, T, C/B, D, B1, D1) :- - head_info(A, B, Q, R, E, F), - build_head(C, B, D, E, X), - head_arg_matches(F, [], Y, H), - passive_head_via(G, [A], [], H, Z, K, I), - instantiate_pattern_goals(I), - get_max_constraint_index(J), - ( J==1 - -> P=K - ; functor(G, L, M), - get_constraint_index(L/M, N), - make_attr(J, _, O, K), - nth1(N, O, P) - ), - ( D==[0] - -> gen_cond_allocation(Q, R, C/B, E, S) - ; S=true - ), - extend_id(D, V), - extra_active_delegate_variables(A, T, H, U), - append([P|E], U, W), - build_head(C, B, V, W, A1), - C1= (X:-Y, Z, !, S, A1), - B1=[C1|D1]. -extra_active_delegate_variables(A, B, C, E) :- - A=..[_|D], - delegate_variables(A, B, C, D, E). -passive_delegate_variables(B, A, C, D, F) :- - term_variables(A, E), - delegate_variables(B, C, D, E, F). -delegate_variables(A, B, H, F, I) :- - term_variables(A, C), - term_variables(B, D), - intersect_eq(C, D, E), - list_difference_eq(E, F, G), - translate(G, H, I). -simpagation_head2_worker(B, C, K, D, L, E, M, A, N, H, I, J, P) :- - A=rule(_, _, F, G), - simpagation_head2_worker_end(B, [C, D, E, F, G], H, I, J, O), - simpagation_head2_worker_body(B, C, K, D, L, E, M, A, N, H, I, O, P). -simpagation_head2_worker_body(A, E, C2, F, X, G, Y, D, D1, O/B, P, H2, I2) :- - gen_var(K), - gen_var(L), - head_info(A, B, _, R1, M, C), - head_arg_matches(C, [], _, J), - D=rule(_, _, H, I), - extra_active_delegate_variables(A, [E, F, G, H, I], J, N), - append([[K|L]|M], N, Q), - build_head(O, B, P, Q, N1), - functor(E, _, R), - head_info(E, R, T, _, _, S), - head_arg_matches(S, J, P1, E1), - V=..[suspension, _, U, _, _, _, _|T], - create_get_mutable_ref(active, U, W), - O1= (K=V, W), - ( ( F\==[] - ; G\==[] - ) - -> append(F, G, Z), - append(X, Y, A1), - reorder_heads(E-A, Z, A1, B1, C1), - rest_heads_retrieval_and_matching(B1, C1, D1, [E, A], G1, F1, E1, J1, [E], [K], []), - split_by_ids(C1, F1, X, H1, I1) - ; G1=[], - H1=[], - I1=[], - J1=E1 - ), - gen_uncond_susps_detachments([K|H1], [E|F], F2), - append([L|M], N, K1), - build_head(O, B, P, K1, S1), - append([[]|M], N, L1), - build_head(O, B, P, L1, U1), - guard_body_copies2(D, J1, M1, Q1), - guard_via_reschedule(G1, M1, v(N1, O1, P1), E2), - ( Q1\==true - -> gen_uncond_attach_goal(O/B, R1, V1, T1), - gen_state_cond_call(R1, B, S1, T1, W1), - gen_state_cond_call(R1, B, U1, T1, X1) - ; V1=true, - W1=S1, - X1=U1 - ), - ( chr_pp_flag(debugable, on) - -> my_term_copy(H-I, J1, _, Y1-Z1), - A2='chr debug_event'(try([K|H1], [R1|I1], Y1, Z1)), - B2='chr debug_event'(apply([K|H1], [R1|I1], Y1, Z1)) - ; A2=true, - B2=true - ), - ( member(unique(C2, D2), D1), - check_unique_keys(D2, J) - -> G2= (N1:-O1, P1-> (E2, A2->B2, F2, V1, Q1, X1;U1);S1) - ; G2= (N1:-O1, P1, E2, A2->B2, F2, V1, Q1, W1;S1) - ), - H2=[G2|I2]. -gen_state_cond_call(G, A, K, D, F) :- - length(B, A), - H=..[suspension, _, C, _, E, _, _|B], - create_get_mutable_ref(active, C, I), - create_get_mutable_ref(D, E, J), - F= (G=H, I, J->'chr update_mutable'(inactive, C), K;true). -simpagation_head2_worker_end(A, D, H/B, I, N, P) :- - head_info(A, B, _, _, F, C), - head_arg_matches(C, [], _, E), - extra_active_delegate_variables(A, D, E, G), - append([[]|F], G, J), - build_head(H, B, I, J, L), - next_id(I, K), - build_head(H, B, K, F, M), - O= (L:-M), - N=[O|P]. -propagation_code(B, A, C, D, I, E, F, G, H) :- - ( A==[] - -> propagation_single_headed(B, C, D, E, F, G, H) - ; propagation_multi_headed(B, A, C, D, I, E, F, G, H) - ). -propagation_single_headed(A, I, Y, C/B, D, D1, F1) :- - head_info(A, B, K, L, E, H), - build_head(C, B, D, E, W), - inc_id(D, F), - build_head(C, B, F, E, G), - O=G, - head_arg_matches(H, [], X, J), - guard_body_copies(I, J, Z, B1), - ( D==[0] - -> gen_cond_allocation(K, L, C/B, E, M), - N=M - ; N=true - ), - gen_uncond_attach_goal(C/B, L, A1, P), - gen_state_cond_call(L, B, O, P, C1), - ( chr_pp_flag(debugable, on) - -> I=rule(_, _, Q, R), - my_term_copy(Q-R, J, _, S-T), - U='chr debug_event'(try([], [L], S, T)), - V='chr debug_event'(apply([], [L], S, T)) - ; U=true, - V=true - ), - E1= (W:-X, N, 'chr novel_production'(L, Y), Z, U, !, V, 'chr extend_history'(L, Y), A1, B1, C1), - D1=[E1|F1]. -propagation_multi_headed(B, A, C, I, J, D, E, F, M) :- - A=[H|G], - propagation_prelude(B, A, C, D, E, F, L), - extend_id(E, K), - propagation_nested_code(G, [H, B], C, I, J, D, K, L, M). -propagation_prelude(A, [H|I], G, C/B, D, F1, H1) :- - head_info(A, B, U, V, E, F), - build_head(C, B, D, E, B1), - head_arg_matches(F, [], C1, L), - G=rule(_, _, J, K), - extra_active_delegate_variables(A, [H, I, J, K], L, X), - passive_head_via(H, [A], [], L, D1, O, M), - instantiate_pattern_goals(M), - get_max_constraint_index(N), - ( N==1 - -> T=O - ; functor(H, P, Q), - make_attr(N, _, S, O), - get_constraint_index(P/Q, R), - nth1(R, S, T) - ), - ( D==[0] - -> gen_cond_allocation(U, V, C/B, E, W) - ; W=true - ), - extend_id(D, Y), - append([T|E], X, Z), - build_head(C, B, Y, Z, A1), - E1=A1, - G1= (B1:-C1, D1, !, W, E1), - F1=[G1|H1]. -propagation_nested_code([], [A|B], C, G, H, D, E, F, J) :- - propagation_end([A|B], [], C, D, E, F, I), - propagation_body(A, B, C, G, H, D, E, I, J). -propagation_nested_code([B|C], A, D, I, J, E, F, G, M) :- - propagation_end(A, [B|C], D, E, F, G, H), - propagation_accumulator([B|C], A, D, E, F, H, L), - inc_id(F, K), - propagation_nested_code(C, [B|A], D, I, J, E, K, L, M). -propagation_body(C, B, A, G1, B1, N/O, P, W1, Y1) :- - A=rule(_, _, D, E), - get_prop_inner_loop_vars(B, [C, D, E], M, V, Y, W), - gen_var(I), - gen_var(L), - functor(C, _, F), - gen_vars(F, G), - J=..[suspension, _, H, _, _, _, _|G], - create_get_mutable_ref(active, H, K), - M1= (I=J, K), - Q=[[I|L]|M], - build_head(N, O, P, Q, L1), - R=[L|M], - build_head(N, O, P, R, S), - Z=S, - C=..[_|T], - pairup(T, G, U), - head_arg_matches(U, V, O1, X), - different_from_other_susps(C, I, B, W, N1), - guard_body_copies(A, X, S1, U1), - gen_uncond_attach_goal(N/O, Y, T1, A1), - gen_state_cond_call(Y, O, Z, A1, V1), - history_susps(B1, [I|W], Y, [], D1), - bagof('chr novel_production'(C1, E1), (member(C1, D1), E1=P1), F1), - list2conj(F1, R1), - Q1=..[t, G1|D1], - ( chr_pp_flag(debugable, on) - -> A=rule(_, _, D, E), - my_term_copy(D-E, X, _, H1-I1), - J1='chr debug_event'(try([], [Y, I|W], H1, I1)), - K1='chr debug_event'(apply([], [Y, I|W], H1, I1)) - ; J1=true, - K1=true - ), - X1= (L1:-M1, N1, O1, P1=Q1, R1, S1, J1->K1, 'chr extend_history'(Y, P1), T1, U1, V1;Z), - W1=[X1|Y1]. -history_susps(A, B, D, E, F) :- - ( A==0 - -> reverse(B, C), - append(C, [D|E], F) - ; B=[I|H], - G is A-1, - history_susps(G, H, D, [I|E], F) - ). -get_prop_inner_loop_vars([A], F, I, E, C, []) :- !, - functor(A, _, B), - head_info(A, B, _, C, G, D), - head_arg_matches(D, [], _, E), - extra_active_delegate_variables(A, F, E, H), - append(G, H, I). -get_prop_inner_loop_vars([B|A], C, N, J, D, [G|E]) :- - get_prop_inner_loop_vars(A, [B|C], M, I, D, E), - functor(B, _, F), - gen_var(L), - head_info(B, F, _, G, _, H), - head_arg_matches(H, I, _, J), - passive_delegate_variables(B, A, C, J, K), - append(K, [G, L|M], N). -propagation_end([C|B], D, A, H/I, J, S, U) :- - A=rule(_, _, E, F), - gen_var_susp_list_for(B, [C, D, E, F], _, G, L, O), - K=[[]|G], - build_head(H, I, J, K, Q), - ( J=[0|_] - -> next_id(J, M), - N=L - ; dec_id(J, M), - N=[O|L] - ), - build_head(H, I, M, N, P), - R=P, - T= (Q:-R), - S=[T|U]. -gen_var_susp_list_for([A], G, F, I, D, C) :- !, - functor(A, _, B), - head_info(A, B, _, C, D, E), - head_arg_matches(E, [], _, F), - extra_active_delegate_variables(A, G, F, H), - append(D, H, I). -gen_var_susp_list_for([B|A], C, I, L, D, E) :- - gen_var_susp_list_for(A, [B|C], H, D, _, _), - functor(B, _, F), - gen_var(E), - head_info(B, F, _, K, _, G), - head_arg_matches(G, H, _, I), - passive_delegate_variables(B, A, C, I, J), - append(J, [K, E|D], L). -propagation_accumulator([D|E], [C|B], A, E1/F1, B1, Q1, S1) :- - A=rule(_, _, F, G), - pre_vars_and_susps(B, [C, D, E, F, G], D1, K, M), - gen_var(C1), - functor(C, _, H), - gen_vars(H, I), - head_info(C, H, I, L, _, J), - head_arg_matches(J, K, R, S), - O=..[suspension, _, N, _, _, _, _|I], - different_from_other_susps(C, L, B, M, Q), - create_get_mutable_ref(active, N, P), - M1= (L=O, P, Q, R), - functor(D, W, X), - passive_head_via(D, [C|B], [], S, N1, V, T), - instantiate_pattern_goals(T), - get_max_constraint_index(U), - ( U==1 - -> A1=V - ; get_constraint_index(W/X, Y), - make_attr(U, _, Z, V), - nth1(Y, Z, A1) - ), - inc_id(B1, I1), - G1=[[L|C1]|D1], - build_head(E1, F1, B1, G1, L1), - passive_delegate_variables(C, B, [D, E, F, G], S, H1), - append([A1|H1], [L, C1|D1], J1), - build_head(E1, F1, I1, J1, O1), - K1=[C1|D1], - build_head(E1, F1, B1, K1, P1), - R1= (L1:-M1, N1->O1;P1), - Q1=[R1|S1]. -pre_vars_and_susps([A], E, H, D, []) :- !, - functor(A, _, B), - head_info(A, B, _, _, F, C), - head_arg_matches(C, [], _, D), - extra_active_delegate_variables(A, E, D, G), - append(F, G, H). -pre_vars_and_susps([B|A], C, M, I, [F|D]) :- - pre_vars_and_susps(A, [B|C], L, H, D), - functor(B, _, E), - gen_var(K), - head_info(B, E, _, F, _, G), - head_arg_matches(G, H, _, I), - passive_delegate_variables(B, A, C, I, J), - append(J, [F, K|L], M). -reorder_heads(A, B, C, D, E) :- - ( chr_pp_flag(reorder_heads, on) - -> reorder_heads_main(A, B, C, D, E) - ; D=B, - E=C - ). -reorder_heads_main(A, B, C, E, F) :- - term_variables(A, D), - reorder_heads1(B, C, D, E, F). -reorder_heads1(A, D, E, B, C) :- - ( A==[] - -> B=[], - C=[] - ; B=[F|K], - C=[G|L], - select_best_head(A, D, E, F, G, H, I, J), - reorder_heads1(H, I, J, K, L) - ). -select_best_head(C, D, G, J, K, L, M, Q) :- - ( bagof(tuple(H, A, B, E, F), (select2(A, B, C, D, E, F), order_score(A, G, E, H)), I) - -> true - ; I=[] - ), - max_go_list(I, tuple(_, J, K, L, M)), - term_variables(J, O), - ( setof(N, (member(N, O), \+memberchk_eq(N, G)), P) - -> true - ; P=[] - ), - append(P, G, Q). -reorder_heads(A, B, D) :- - term_variables(A, C), - reorder_heads1(B, C, D). -reorder_heads1(A, C, B) :- - ( A==[] - -> B=[] - ; B=[D|G], - select_best_head(A, C, D, E, F), - reorder_heads1(E, F, G) - ). -select_best_head(B, D, G, H, L) :- - ( bagof(tuple(E, A, C), (select(A, B, C), order_score(A, D, C, E)), F) - -> true - ; F=[] - ), - max_go_list(F, tuple(_, G, H)), - term_variables(G, J), - ( setof(I, (member(I, J), \+memberchk_eq(I, D)), K) - -> true - ; K=[] - ), - append(K, D, L). -order_score(A, D, B, F) :- - term_variables(A, C), - term_variables(B, E), - order_score_vars(C, D, E, 0, F). -order_score_vars([], _, _, A, B) :- - ( A==0 - -> B=99999 - ; B=A - ). -order_score_vars([A|F], B, D, C, G) :- - ( memberchk_eq(A, B) - -> E is C+1 - ; memberchk_eq(A, D) - -> E is C+1 - ; E=C - ), - order_score_vars(F, B, D, E, G). -create_get_mutable_ref(C, B, A) :- - A= (B=mutable(C)). -clean_clauses([], []). -clean_clauses([A|C], [B|D]) :- - clean_clause(A, B), - clean_clauses(C, D). -clean_clause(A, D) :- - ( A= (E:-B) - -> clean_goal(B, C), - ( C==true - -> D=E - ; D= (E:-C) - ) - ; D=A - ). -clean_goal(A, B) :- - var(A), !, - B=A. -clean_goal((A, B), D) :- !, - clean_goal(A, C), - clean_goal(B, E), - ( C==true - -> D=E - ; E==true - -> D=C - ; D= (C, E) - ). -clean_goal((A->C;F), D) :- !, - clean_goal(A, B), - ( B==true - -> clean_goal(C, E), - D=E - ; B==fail - -> clean_goal(F, G), - D=G - ; clean_goal(C, E), - clean_goal(F, G), - D= (B->E;G) - ). -clean_goal((A;B), D) :- !, - clean_goal(A, C), - clean_goal(B, E), - ( C==fail - -> D=E - ; E==fail - -> D=C - ; D= (C;E) - ). -clean_goal(once(A), C) :- !, - clean_goal(A, B), - ( B==true - -> C=true - ; B==fail - -> C=fail - ; C=once(B) - ). -clean_goal((A->C), D) :- !, - clean_goal(A, B), - ( B==true - -> clean_goal(C, D) - ; B==fail - -> D=fail - ; clean_goal(C, E), - D= (B->E) - ). -clean_goal(A, A). -gen_var(_). -gen_vars(B, A) :- - length(A, B). -head_info(E, A, B, C, D, G) :- - vars_susp(A, B, C, D), - E=..[_|F], - pairup(F, B, G). -inc_id([C|A], [B|A]) :- - B is C+1. -dec_id([C|A], [B|A]) :- - B is C-1. -extend_id(A, [0|A]). -next_id([_, C|A], [B|A]) :- - B is C+1. -build_head(A, B, C, F, D) :- - buildName(A, B, C, E), - D=..[E|F]. -buildName(A, C, D, F) :- - atom_concat(A, /, B), - atomic_concat(B, C, E), - buildName_(D, E, F). -buildName_([], A, A). -buildName_([E|A], B, F) :- - buildName_(A, B, C), - atom_concat(C, '__', D), - atomic_concat(D, E, F). -vars_susp(B, A, C, D) :- - length(A, B), - append(A, [C], D). -make_attr(B, D, A, C) :- - length(A, B), - C=..[v, D|A]. -or_pattern(A, B) :- - C is A-1, - B is 1< list2conj(B, C) - ; C= (A, D), - list2conj(B, D) - ). -atom_concat_list([A], A) :- !. -atom_concat_list([B|A], D) :- - atom_concat_list(A, C), - atomic_concat(B, C, D). -atomic_concat(A, B, E) :- - make_atom(A, C), - make_atom(B, D), - atom_concat(C, D, E). -make_atom(A, B) :- - ( atom(A) - -> B=A - ; number(A) - -> number_codes(A, C), - atom_codes(B, C) - ). -set_elems([], _). -set_elems([A|B], A) :- - set_elems(B, A). -member2([A|_], [B|_], A-B). -member2([_|A], [_|B], C) :- - member2(A, B, C). -select2(A, B, [A|C], [B|D], C, D). -select2(C, D, [A|E], [B|F], [A|G], [B|H]) :- - select2(C, D, E, F, G, H). -pair_all_with([], _, []). -pair_all_with([A|C], B, [A-B|D]) :- - pair_all_with(C, B, D). -verbosity_on :- - prolog_flag(verbose, A), - A==yes. -'attach_constraint/2'([], _). -'attach_constraint/2'([A|L], D) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, E, F, G, H, I, J), - ( C/\1=:=1 - -> put_attr(A, chr_translate_bootstrap1, v(C, [D|E], F, G, H, I, J)) - ; K is C\/1, - put_attr(A, chr_translate_bootstrap1, v(K, [D], F, G, H, I, J)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(1, [D], [], [], [], [], [])) - ), - 'attach_constraint/2'(L, D). -'detach_constraint/2'([], _). -'detach_constraint/2'([A|M], E) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, D, H, I, J, K, L), - ( C/\1=:=1 - -> 'chr sbag_del_element'(D, E, F), - ( F==[] - -> G is C/\ -2, - ( G==0 - -> del_attr(A, chr_translate_bootstrap1) - ; put_attr(A, chr_translate_bootstrap1, v(G, [], H, I, J, K, L)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(C, F, H, I, J, K, L)) - ) - ; true - ) - ; true - ), - 'detach_constraint/2'(M, E). -'attach_constraint_count/1'([], _). -'attach_constraint_count/1'([A|L], E) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, D, F, G, H, I, J), - ( C/\2=:=2 - -> put_attr(A, chr_translate_bootstrap1, v(C, D, [E|F], G, H, I, J)) - ; K is C\/2, - put_attr(A, chr_translate_bootstrap1, v(K, D, [E], G, H, I, J)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(2, [], [E], [], [], [], [])) - ), - 'attach_constraint_count/1'(L, E). -'detach_constraint_count/1'([], _). -'detach_constraint_count/1'([A|M], E) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, H, D, I, J, K, L), - ( C/\2=:=2 - -> 'chr sbag_del_element'(D, E, F), - ( F==[] - -> G is C/\ -3, - ( G==0 - -> del_attr(A, chr_translate_bootstrap1) - ; put_attr(A, chr_translate_bootstrap1, v(G, H, [], I, J, K, L)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(C, H, F, I, J, K, L)) - ) - ; true - ) - ; true - ), - 'detach_constraint_count/1'(M, E). -'attach_constraint_index/2'([], _). -'attach_constraint_index/2'([A|L], F) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, D, E, G, H, I, J), - ( C/\4=:=4 - -> put_attr(A, chr_translate_bootstrap1, v(C, D, E, [F|G], H, I, J)) - ; K is C\/4, - put_attr(A, chr_translate_bootstrap1, v(K, D, E, [F], H, I, J)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(4, [], [], [F], [], [], [])) - ), - 'attach_constraint_index/2'(L, F). -'detach_constraint_index/2'([], _). -'detach_constraint_index/2'([A|M], E) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, H, I, D, J, K, L), - ( C/\4=:=4 - -> 'chr sbag_del_element'(D, E, F), - ( F==[] - -> G is C/\ -5, - ( G==0 - -> del_attr(A, chr_translate_bootstrap1) - ; put_attr(A, chr_translate_bootstrap1, v(G, H, I, [], J, K, L)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(C, H, I, F, J, K, L)) - ) - ; true - ) - ; true - ), - 'detach_constraint_index/2'(M, E). -'attach_max_constraint_index/1'([], _). -'attach_max_constraint_index/1'([A|L], G) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, D, E, F, H, I, J), - ( C/\8=:=8 - -> put_attr(A, chr_translate_bootstrap1, v(C, D, E, F, [G|H], I, J)) - ; K is C\/8, - put_attr(A, chr_translate_bootstrap1, v(K, D, E, F, [G], I, J)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(8, [], [], [], [G], [], [])) - ), - 'attach_max_constraint_index/1'(L, G). -'detach_max_constraint_index/1'([], _). -'detach_max_constraint_index/1'([A|M], E) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, H, I, J, D, K, L), - ( C/\8=:=8 - -> 'chr sbag_del_element'(D, E, F), - ( F==[] - -> G is C/\ -9, - ( G==0 - -> del_attr(A, chr_translate_bootstrap1) - ; put_attr(A, chr_translate_bootstrap1, v(G, H, I, J, [], K, L)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(C, H, I, J, F, K, L)) - ) - ; true - ) - ; true - ), - 'detach_max_constraint_index/1'(M, E). -'attach_target_module/1'([], _). -'attach_target_module/1'([A|L], H) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, D, E, F, G, I, J), - ( C/\16=:=16 - -> put_attr(A, chr_translate_bootstrap1, v(C, D, E, F, G, [H|I], J)) - ; K is C\/16, - put_attr(A, chr_translate_bootstrap1, v(K, D, E, F, G, [H], J)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(16, [], [], [], [], [H], [])) - ), - 'attach_target_module/1'(L, H). -'detach_target_module/1'([], _). -'detach_target_module/1'([A|M], E) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, H, I, J, K, D, L), - ( C/\16=:=16 - -> 'chr sbag_del_element'(D, E, F), - ( F==[] - -> G is C/\ -17, - ( G==0 - -> del_attr(A, chr_translate_bootstrap1) - ; put_attr(A, chr_translate_bootstrap1, v(G, H, I, J, K, [], L)) - ) - ; put_attr(A, chr_translate_bootstrap1, v(C, H, I, J, K, F, L)) - ) - ; true - ) - ; true - ), - 'detach_target_module/1'(M, E). -'attach_attached/2'([], _). -'attach_attached/2'([A|L], I) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, D, E, F, G, H, J), - ( C/\32=:=32 - -> put_attr(A, chr_translate_bootstrap1, v(C, D, E, F, G, H, [I|J])) - ; K is C\/32, - put_attr(A, chr_translate_bootstrap1, v(K, D, E, F, G, H, [I])) - ) - ; put_attr(A, chr_translate_bootstrap1, v(32, [], [], [], [], [], [I])) - ), - 'attach_attached/2'(L, I). -'detach_attached/2'([], _). -'detach_attached/2'([A|M], E) :- - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(C, H, I, J, K, L, D), - ( C/\32=:=32 - -> 'chr sbag_del_element'(D, E, F), - ( F==[] - -> G is C/\ -33, - ( G==0 - -> del_attr(A, chr_translate_bootstrap1) - ; put_attr(A, chr_translate_bootstrap1, v(G, H, I, J, K, L, [])) - ) - ; put_attr(A, chr_translate_bootstrap1, v(C, H, I, J, K, L, F)) - ) - ; true - ) - ; true - ), - 'detach_attached/2'(M, E). -attach_increment([], _). -attach_increment([A|D1], v(U, D, G, J, M, P, S)) :- - 'chr not_locked'(A), - ( get_attr(A, chr_translate_bootstrap1, B) - -> B=v(V, C, F, I, L, O, R), - sort(C, E), - 'chr merge_attributes'(D, E, X), - sort(F, H), - 'chr merge_attributes'(G, H, Y), - sort(I, K), - 'chr merge_attributes'(J, K, Z), - sort(L, N), - 'chr merge_attributes'(M, N, A1), - sort(O, Q), - 'chr merge_attributes'(P, Q, B1), - sort(R, T), - 'chr merge_attributes'(S, T, C1), - W is U\/V, - put_attr(A, chr_translate_bootstrap1, v(W, X, Y, Z, A1, B1, C1)) - ; put_attr(A, chr_translate_bootstrap1, v(U, D, G, J, M, P, S)) - ), - attach_increment(D1, v(U, D, G, J, M, P, S)). -chr_translate_bootstrap1:attr_unify_hook(v(A1, A, B, C, D, E, F), G) :- - sort(A, J), - sort(B, M), - sort(C, P), - sort(D, S), - sort(E, V), - sort(F, Y), - ( var(G) - -> ( get_attr(G, chr_translate_bootstrap1, H) - -> H=v(B1, I, L, O, R, U, X), - sort(I, K), - 'chr merge_attributes'(J, K, D1), - sort(L, N), - 'chr merge_attributes'(M, N, E1), - sort(O, Q), - 'chr merge_attributes'(P, Q, F1), - sort(R, T), - 'chr merge_attributes'(S, T, G1), - sort(U, W), - 'chr merge_attributes'(V, W, H1), - sort(X, Z), - 'chr merge_attributes'(Y, Z, I1), - C1 is A1\/B1, - put_attr(G, chr_translate_bootstrap1, v(C1, D1, E1, F1, G1, H1, I1)), - 'chr run_suspensions_loop'([D1, E1, F1, G1, H1, I1]) - ; put_attr(G, chr_translate_bootstrap1, v(A1, J, M, P, S, V, Y)), - 'chr run_suspensions_loop'([J, M, P, S, V, Y]) - ) - ; ( compound(G) - -> term_variables(G, J1), - attach_increment(J1, v(A1, J, M, P, S, V, Y)) - ; true - ), - 'chr run_suspensions_loop'([J, M, P, S, V, Y]) - ). -constraint(A, B) :- - 'constraint/2__0'(A, B, _). -'constraint/2__0'(A, K, I) :- - 'chr via_1'(A, B), - get_attr(B, chr_translate_bootstrap1, C), - C=v(D, E, _, _, _, _, _), - D/\1=:=1, - ( 'chr sbag_member'(F, E), - F=suspension(_, G, _, _, _, _, H, L), - G=mutable(active), - H==A - -> true - ), !, - ( var(I) - -> true - ; 'chr remove_constraint_internal'(I, J), - 'detach_constraint/2'(J, I) - ), - K=L. -'constraint/2__0'(K, A, I) :- - 'chr via_1'(A, B), - get_attr(B, chr_translate_bootstrap1, C), - C=v(D, E, _, _, _, _, _), - D/\1=:=1, - 'chr sbag_member'(F, E), - F=suspension(_, G, _, _, _, _, L, H), - G=mutable(active), - H==A, !, - ( var(I) - -> true - ; 'chr remove_constraint_internal'(I, J), - 'detach_constraint/2'(J, I) - ), - K=L. -'constraint/2__0'(B, C, A) :- - ( var(A) - -> 'chr insert_constraint_internal'(D, A, chr_translate_bootstrap1:'constraint/2__0'(B, C, A), constraint, [B, C]) - ; 'chr activate_constraint'(D, A, _) - ), - 'attach_constraint/2'(D, A). -constraint_count(A) :- - 'constraint_count/1__0'(A, _). -'constraint_count/1__0'(I, G) :- - 'chr default_store'(A), - get_attr(A, chr_translate_bootstrap1, B), - B=v(C, _, D, _, _, _, _), - C/\2=:=2, - 'chr sbag_member'(E, D), - E=suspension(_, F, _, _, _, _, J), - F=mutable(active), !, - ( var(G) - -> true - ; 'chr remove_constraint_internal'(G, H), - 'detach_constraint_count/1'(H, G) - ), - I=J. -'constraint_count/1__0'(B, A) :- - ( var(A) - -> 'chr insert_constraint_internal'(C, A, chr_translate_bootstrap1:'constraint_count/1__0'(B, A), constraint_count, [B]) - ; 'chr activate_constraint'(C, A, _) - ), - 'attach_constraint_count/1'(C, A). -constraint_index(A, B) :- - 'constraint_index/2__0'(A, B, _). -'constraint_index/2__0'(B, C, A) :- - ( var(A) - -> 'chr insert_constraint_internal'(D, A, chr_translate_bootstrap1:'constraint_index/2__0'(B, C, A), constraint_index, [B, C]) - ; 'chr activate_constraint'(D, A, _) - ), - 'attach_constraint_index/2'(D, A). -get_constraint_index(A, B) :- - 'get_constraint_index/2__0'(A, B, _). -'get_constraint_index/2__0'(A, I, _) :- - 'chr via_1'(A, B), - get_attr(B, chr_translate_bootstrap1, C), - C=v(D, _, _, E, _, _, _), - D/\4=:=4, - 'chr sbag_member'(F, E), - F=suspension(_, G, _, _, _, _, H, J), - G=mutable(active), - H==A, !, - I=J. -'get_constraint_index/2__0'(_, _, _) :- !, - fail. -max_constraint_index(A) :- - 'max_constraint_index/1__0'(A, _). -'max_constraint_index/1__0'(B, A) :- - ( var(A) - -> 'chr insert_constraint_internal'(C, A, chr_translate_bootstrap1:'max_constraint_index/1__0'(B, A), max_constraint_index, [B]) - ; 'chr activate_constraint'(C, A, _) - ), - 'attach_max_constraint_index/1'(C, A). -get_max_constraint_index(A) :- - 'get_max_constraint_index/1__0'(A, _). -'get_max_constraint_index/1__0'(G, _) :- - 'chr default_store'(A), - get_attr(A, chr_translate_bootstrap1, B), - B=v(C, _, _, _, D, _, _), - C/\8=:=8, - 'chr sbag_member'(E, D), - E=suspension(_, F, _, _, _, _, H), - F=mutable(active), !, - G=H. -'get_max_constraint_index/1__0'(_, _) :- !, - fail. -target_module(A) :- - 'target_module/1__0'(A, _). -'target_module/1__0'(B, A) :- - ( var(A) - -> 'chr insert_constraint_internal'(C, A, chr_translate_bootstrap1:'target_module/1__0'(B, A), target_module, [B]) - ; 'chr activate_constraint'(C, A, _) - ), - 'attach_target_module/1'(C, A). -get_target_module(A) :- - 'get_target_module/1__0'(A, _). -'get_target_module/1__0'(G, _) :- - 'chr default_store'(A), - get_attr(A, chr_translate_bootstrap1, B), - B=v(C, _, _, _, _, D, _), - C/\16=:=16, - 'chr sbag_member'(E, D), - E=suspension(_, F, _, _, _, _, H), - F=mutable(active), !, - G=H. -'get_target_module/1__0'(A, _) :- !, - A=user. -attached(A, B) :- - 'attached/2__0'(A, B, _). -'attached/2__0'(A, _, J) :- - 'chr via_1'(A, B), - get_attr(B, chr_translate_bootstrap1, C), - C=v(D, _, _, _, _, _, E), - D/\32=:=32, - 'chr sbag_member'(F, E), - F=suspension(_, G, _, _, _, _, H, I), - G=mutable(active), - H==A, - I==yes, !, - ( var(J) - -> true - ; 'chr remove_constraint_internal'(J, K), - 'detach_attached/2'(K, J) - ). -'attached/2__0'(B, A, F) :- - A==yes, - 'chr via_1'(B, C), - get_attr(C, chr_translate_bootstrap1, D), - D=v(E, _, _, _, _, _, G), - E/\32=:=32, !, - ( var(F) - -> 'chr allocate_constraint'(chr_translate_bootstrap1:'attached/2__0'(B, A, F), F, attached, [B, A]) - ; true - ), - 'attached/2__0__0'(G, B, A, F). -'attached/2__0__0'([], A, B, C) :- - 'attached/2__1'(A, B, C). -'attached/2__0__0'([A|F], D, G, H) :- - ( A=suspension(_, B, _, _, _, _, C, _), - B=mutable(active), - C==D - -> 'chr remove_constraint_internal'(A, E), - 'detach_attached/2'(E, A), - 'attached/2__0__0'(F, D, G, H) - ; 'attached/2__0__0'(F, D, G, H) - ). -'attached/2__0'(B, C, A) :- - ( var(A) - -> 'chr allocate_constraint'(chr_translate_bootstrap1:'attached/2__0'(B, C, A), A, attached, [B, C]) - ; true - ), - 'attached/2__1'(B, C, A). -'attached/2__1'(A, _, J) :- - 'chr via_1'(A, B), - get_attr(B, chr_translate_bootstrap1, C), - C=v(D, _, _, _, _, _, E), - D/\32=:=32, - 'chr sbag_member'(F, E), - F=suspension(_, G, _, _, _, _, H, I), - G=mutable(active), - H==A, - I==no, !, - ( var(J) - -> true - ; 'chr remove_constraint_internal'(J, K), - 'detach_attached/2'(K, J) - ). -'attached/2__1'(B, A, G) :- - A==no, - 'chr via_1'(B, C), - get_attr(C, chr_translate_bootstrap1, D), - D=v(E, _, _, _, _, _, F), - E/\32=:=32, !, - 'attached/2__1__0'(F, B, A, G). -'attached/2__1__0'([], A, B, C) :- - 'attached/2__2'(A, B, C). -'attached/2__1__0'([A|F], D, G, H) :- - ( A=suspension(_, B, _, _, _, _, C, _), - B=mutable(active), - C==D - -> 'chr remove_constraint_internal'(A, E), - 'detach_attached/2'(E, A), - 'attached/2__1__0'(F, D, G, H) - ; 'attached/2__1__0'(F, D, G, H) - ). -'attached/2__1'(A, B, C) :- - 'attached/2__2'(A, B, C). -'attached/2__2'(B, A, K) :- - A==maybe, - 'chr via_1'(B, C), - get_attr(C, chr_translate_bootstrap1, D), - D=v(E, _, _, _, _, _, F), - E/\32=:=32, - ( 'chr sbag_member'(G, F), - G=suspension(_, H, _, _, _, _, I, J), - H=mutable(active), - I==B, - J==maybe - -> true - ), !, - ( var(K) - -> true - ; 'chr remove_constraint_internal'(K, L), - 'detach_attached/2'(L, K) - ). -'attached/2__2'(_, _, A) :- - 'chr activate_constraint'(B, A, _), - 'attach_attached/2'(B, A). -is_attached(A) :- - 'is_attached/1__0'(A, _). -'is_attached/1__0'(A, _) :- - 'chr via_1'(A, B), - get_attr(B, chr_translate_bootstrap1, C), - C=v(D, _, _, _, _, _, E), - D/\32=:=32, - 'chr sbag_member'(F, E), - F=suspension(_, G, _, _, _, _, H, I), - G=mutable(active), - H==A, !, - ( I==no - -> fail - ; true - ). -'is_attached/1__0'(_, _) :- !. -chr_clear :- - 'chr_clear/0__0'(_). -'chr_clear/0__0'(D) :- - 'chr default_store'(A), - get_attr(A, chr_translate_bootstrap1, B), - B=v(C, E, _, _, _, _, _), - C/\1=:=1, !, - ( var(D) - -> 'chr allocate_constraint'(chr_translate_bootstrap1:'chr_clear/0__0'(D), D, chr_clear, []) - ; true - ), - 'chr_clear/0__0__0'(E, D). -'chr_clear/0__0__0'([], A) :- - 'chr_clear/0__1'(A). -'chr_clear/0__0__0'([A|D], E) :- - ( A=suspension(_, B, _, _, _, _, _, _), - B=mutable(active) - -> 'chr remove_constraint_internal'(A, C), - 'detach_constraint/2'(C, A), - 'chr_clear/0__0__0'(D, E) - ; 'chr_clear/0__0__0'(D, E) - ). -'chr_clear/0__0'(A) :- - ( var(A) - -> 'chr allocate_constraint'(chr_translate_bootstrap1:'chr_clear/0__0'(A), A, chr_clear, []) - ; true - ), - 'chr_clear/0__1'(A). -'chr_clear/0__1'(E) :- - 'chr default_store'(A), - get_attr(A, chr_translate_bootstrap1, B), - B=v(C, _, D, _, _, _, _), - C/\2=:=2, !, - 'chr_clear/0__1__0'(D, E). -'chr_clear/0__1__0'([], A) :- - 'chr_clear/0__2'(A). -'chr_clear/0__1__0'([A|D], E) :- - ( A=suspension(_, B, _, _, _, _, _), - B=mutable(active) - -> 'chr remove_constraint_internal'(A, C), - 'detach_constraint_count/1'(C, A), - 'chr_clear/0__1__0'(D, E) - ; 'chr_clear/0__1__0'(D, E) - ). -'chr_clear/0__1'(A) :- - 'chr_clear/0__2'(A). -'chr_clear/0__2'(E) :- - 'chr default_store'(A), - get_attr(A, chr_translate_bootstrap1, B), - B=v(C, _, _, D, _, _, _), - C/\4=:=4, !, - 'chr_clear/0__2__0'(D, E). -'chr_clear/0__2__0'([], A) :- - 'chr_clear/0__3'(A). -'chr_clear/0__2__0'([A|D], E) :- - ( A=suspension(_, B, _, _, _, _, _, _), - B=mutable(active) - -> 'chr remove_constraint_internal'(A, C), - 'detach_constraint_index/2'(C, A), - 'chr_clear/0__2__0'(D, E) - ; 'chr_clear/0__2__0'(D, E) - ). -'chr_clear/0__2'(A) :- - 'chr_clear/0__3'(A). -'chr_clear/0__3'(E) :- - 'chr default_store'(A), - get_attr(A, chr_translate_bootstrap1, B), - B=v(C, _, _, _, D, _, _), - C/\8=:=8, !, - 'chr_clear/0__3__0'(D, E). -'chr_clear/0__3__0'([], A) :- - 'chr_clear/0__4'(A). -'chr_clear/0__3__0'([A|D], E) :- - ( A=suspension(_, B, _, _, _, _, _), - B=mutable(active) - -> 'chr remove_constraint_internal'(A, C), - 'detach_max_constraint_index/1'(C, A), - 'chr_clear/0__3__0'(D, E) - ; 'chr_clear/0__3__0'(D, E) - ). -'chr_clear/0__3'(A) :- - 'chr_clear/0__4'(A). -'chr_clear/0__4'(E) :- - 'chr default_store'(A), - get_attr(A, chr_translate_bootstrap1, B), - B=v(C, _, _, _, _, D, _), - C/\16=:=16, !, - 'chr_clear/0__4__0'(D, E). -'chr_clear/0__4__0'([], A) :- - 'chr_clear/0__5'(A). -'chr_clear/0__4__0'([A|D], E) :- - ( A=suspension(_, B, _, _, _, _, _), - B=mutable(active) - -> 'chr remove_constraint_internal'(A, C), - 'detach_target_module/1'(C, A), - 'chr_clear/0__4__0'(D, E) - ; 'chr_clear/0__4__0'(D, E) - ). -'chr_clear/0__4'(A) :- - 'chr_clear/0__5'(A). -'chr_clear/0__5'(E) :- - 'chr default_store'(A), - get_attr(A, chr_translate_bootstrap1, B), - B=v(C, _, _, _, _, _, D), - C/\32=:=32, !, - 'chr_clear/0__5__0'(D, E). -'chr_clear/0__5__0'([], A) :- - 'chr_clear/0__6'(A). -'chr_clear/0__5__0'([A|D], E) :- - ( A=suspension(_, B, _, _, _, _, _, _), - B=mutable(active) - -> 'chr remove_constraint_internal'(A, C), - 'detach_attached/2'(C, A), - 'chr_clear/0__5__0'(D, E) - ; 'chr_clear/0__5__0'(D, E) - ). -'chr_clear/0__5'(A) :- - 'chr_clear/0__6'(A). -'chr_clear/0__6'(_) :- !. diff --git a/LGPL/chr/chr_translate_bootstrap2.chr b/LGPL/chr/chr_translate_bootstrap2.chr deleted file mode 100644 index 3a4576e52..000000000 --- a/LGPL/chr/chr_translate_bootstrap2.chr +++ /dev/null @@ -1,3687 +0,0 @@ -/* $Id: chr_translate_bootstrap2.chr,v 1.5 2008-03-13 22:37:07 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% ____ _ _ ____ ____ _ _ -%% / ___| | | | _ \ / ___|___ _ __ ___ _ __ (_) | ___ _ __ -%% | | | |_| | |_) | | | / _ \| '_ ` _ \| '_ \| | |/ _ \ '__| -%% | |___| _ | _ < | |__| (_) | | | | | | |_) | | | __/ | -%% \____|_| |_|_| \_\ \____\___/|_| |_| |_| .__/|_|_|\___|_| -%% |_| -%% -%% hProlog CHR compiler: -%% -%% * by Tom Schrijvers, K.U. Leuven, Tom.Schrijvers@cs.kuleuven.be -%% -%% * based on the SICStus CHR compilation by Christian Holzbaur -%% -%% First working version: 6 June 2003 -%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% URGENTLY TODO -%% -%% * fine-tune automatic selection of constraint stores -%% -%% To Do -%% -%% * further specialize runtime predicates for special cases where -%% - none of the constraints contain any indexing variables, ... -%% - just one constraint requires some runtime predicate -%% * analysis for attachment delaying (see primes for case) -%% * internal constraints declaration + analyses? -%% * Do not store in global variable store if not necessary -%% NOTE: affects show_store/1 -%% * multi-level store: variable - ground -%% * Do not maintain/check unnecessary propagation history -%% for rules that cannot be applied more than once -%% e.g. due to groundness -%% * Strengthen attachment analysis: -%% reason about bodies of rules only containing constraints -%% -%% * SICStus compatibility -%% - rules/1 declaration -%% - options -%% - pragmas -%% - tell guard -%% * instantiation declarations -%% POTENTIAL GAIN: -%% GROUND -%% - cheaper matching code? -%% VARIABLE (never bound) -%% -%% * make difference between cheap guards for reordering -%% and non-binding guards for lock removal -%% * unqiue -> once/[] transformation for propagation -%% * cheap guards interleaved with head retrieval + faster -%% via-retrieval + non-empty checking for propagation rules -%% redo for simpagation_head2 prelude -%% * intelligent backtracking for simplification/simpagation rule -%% generator_1(X),'_$savecp'(CP_1), -%% ... -%% if( ( -%% generator_n(Y), -%% test(X,Y) -%% ), -%% true, -%% ('_$cutto'(CP_1), fail) -%% ), -%% ... -%% -%% or recently developped cascading-supported approach -%% -%% * intelligent backtracking for propagation rule -%% use additional boolean argument for each possible smart backtracking -%% when boolean at end of list true -> no smart backtracking -%% false -> smart backtracking -%% only works for rules with at least 3 constraints in the head -%% -%% * mutually exclusive rules -%% * (set semantics + functional dependency) declaration + resolution -%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -:- module(chr_translate, - [ chr_translate/2 % +Decls, -TranslatedDecls - ]). -%% SWI begin -:- use_module(library(lists),[append/3,append/2,member/2,delete/3,reverse/2,permutation/2]). -:- use_module(library(ordsets)). -%% SWI end - -:- use_module(hprolog). -:- use_module(pairlist). -:- use_module(a_star). -:- use_module(clean_code). -:- use_module(builtins). -:- use_module(find). -:- include(chr_op2). - -:- chr_option(debug,off). -:- chr_option(optimize,full). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -:- chr_constraint - - constraint/2, % constraint(F/A,ConstraintIndex) - get_constraint/2, - - constraint_count/1, % constraint_count(MaxConstraintIndex) - get_constraint_count/1, - - constraint_index/2, % constraint_index(F/A,DefaultStoreAndAttachedIndex) - get_constraint_index/2, - - max_constraint_index/1, % max_constraint_index(MaxDefaultStoreAndAttachedIndex) - get_max_constraint_index/1, - - target_module/1, % target_module(Module) - get_target_module/1, - - attached/2, % attached(F/A,yes/no/maybe) - is_attached/1, - - indexed_argument/2, % argument instantiation may enable applicability of rule - is_indexed_argument/2, - - constraint_mode/2, - get_constraint_mode/2, - - may_trigger/1, - - has_nonground_indexed_argument/3, - - store_type/2, - get_store_type/2, - update_store_type/2, - actual_store_types/2, - assumed_store_type/2, - validate_store_type_assumption/1, - - rule_count/1, - inc_rule_count/1, - get_rule_count/1, - - passive/2, - is_passive/2, - any_passive_head/1, - - pragma_unique/3, - get_pragma_unique/3, - - occurrence/4, - get_occurrence/4, - - max_occurrence/2, - get_max_occurrence/2, - - allocation_occurrence/2, - get_allocation_occurrence/2, - rule/2, - get_rule/2 - . - -:- chr_option(mode,constraint(+,+)). -:- chr_option(mode,constraint_count(+)). -:- chr_option(mode,constraint_index(+,+)). -:- chr_option(mode,max_constraint_index(+)). -:- chr_option(mode,target_module(+)). -:- chr_option(mode,attached(+,+)). -:- chr_option(mode,indexed_argument(+,+)). -:- chr_option(mode,constraint_mode(+,+)). -:- chr_option(mode,may_trigger(+)). -:- chr_option(mode,store_type(+,+)). -:- chr_option(mode,actual_store_types(+,+)). -:- chr_option(mode,assumed_store_type(+,+)). -:- chr_option(mode,rule_count(+)). -:- chr_option(mode,passive(+,+)). -:- chr_option(mode,pragma_unique(+,+,?)). -:- chr_option(mode,occurrence(+,+,+,+)). -:- chr_option(mode,max_occurrence(+,+)). -:- chr_option(mode,allocation_occurrence(+,+)). -:- chr_option(mode,rule(+,+)). - -constraint(FA,Index) \ get_constraint(Query,Index) - <=> Query = FA. -get_constraint(_,_) - <=> fail. - -constraint_count(Index) \ get_constraint_count(Query) - <=> Query = Index. -get_constraint_count(Query) - <=> Query = 0. - -target_module(Mod) \ get_target_module(Query) - <=> Query = Mod . -get_target_module(Query) - <=> Query = user. - -constraint_index(C,Index) \ get_constraint_index(C,Query) - <=> Query = Index. -get_constraint_index(_,_) - <=> fail. - -max_constraint_index(Index) \ get_max_constraint_index(Query) - <=> Query = Index. -get_max_constraint_index(Query) - <=> Query = 0. - -attached(Constr,yes) \ attached(Constr,_) <=> true. -attached(Constr,no) \ attached(Constr,_) <=> true. -attached(Constr,maybe) \ attached(Constr,maybe) <=> true. - -attached(Constr,Type) \ is_attached(Constr) - <=> Type \== no. -is_attached(_) <=> true. - -indexed_argument(FA,I) \ indexed_argument(FA,I) <=> true. -indexed_argument(FA,I) \ is_indexed_argument(FA,I) <=> true. -is_indexed_argument(_,_) <=> fail. - -constraint_mode(FA,Mode) \ get_constraint_mode(FA,Query) - <=> Query = Mode. -get_constraint_mode(FA,Query) - <=> FA = _/A, length(Query,A), set_elems(Query,?). - -may_trigger(FA) <=> - is_attached(FA), - get_constraint_mode(FA,Mode), - has_nonground_indexed_argument(FA,1,Mode). - -has_nonground_indexed_argument(FA,I,[Mode|Modes]) - <=> - true - | - ( is_indexed_argument(FA,I), - Mode \== (+) -> - true - ; - J is I + 1, - has_nonground_indexed_argument(FA,J,Modes) - ). -has_nonground_indexed_argument(_,_,_) - <=> fail. - -store_type(FA,atom_hash(Index)) <=> store_type(FA,multi_hash([Index])). -store_type(FA,Store) \ get_store_type(FA,Query) - <=> Query = Store. -assumed_store_type(FA,Store) \ get_store_type(FA,Query) - <=> Query = Store. -get_store_type(_,Query) - <=> Query = default. - -actual_store_types(C,STs) \ update_store_type(C,ST) - <=> member(ST,STs) | true. -update_store_type(C,ST), actual_store_types(C,STs) - <=> - actual_store_types(C,[ST|STs]). -update_store_type(C,ST) - <=> - actual_store_types(C,[ST]). - -% refine store type assumption -validate_store_type_assumption(C), actual_store_types(C,STs), assumed_store_type(C,_) % automatic assumption - <=> - store_type(C,multi_store(STs)). -validate_store_type_assumption(C), actual_store_types(C,STs), store_type(C,_) % user assumption - <=> - store_type(C,multi_store(STs)). -validate_store_type_assumption(_) - <=> true. - -rule_count(C), inc_rule_count(NC) - <=> NC is C + 1, rule_count(NC). -inc_rule_count(NC) - <=> NC = 1, rule_count(NC). - -rule_count(C) \ get_rule_count(Q) - <=> Q = C. -get_rule_count(Q) - <=> Q = 0. - -passive(RuleNb,ID) \ is_passive(RuleNb,ID) - <=> true. -is_passive(_,_) - <=> fail. -passive(RuleNb,_) \ any_passive_head(RuleNb) - <=> true. -any_passive_head(_) - <=> fail. - -pragma_unique(RuleNb,ID,Vars) \ get_pragma_unique(RuleNb,ID,Query) - <=> Query = Vars. -get_pragma_unique(_,_,_) - <=> true. - -occurrence(C,ON,Rule,ID) \ get_occurrence(C,ON,QRule,QID) - <=> Rule = QRule, ID = QID. -get_occurrence(_,_,_,_) - <=> fail. - -occurrence(C,ON,_,_) ==> max_occurrence(C,ON). -max_occurrence(C,N) \ max_occurrence(C,M) - <=> N >= M | true. -max_occurrence(C,MON) \ get_max_occurrence(C,Q) - <=> Q = MON. -get_max_occurrence(_,Q) - <=> Q = 0. - - % need not store constraint that is removed -rule(RuleNb,Rule), occurrence(C,O,RuleNb,ID) \ allocation_occurrence(C,O) - <=> Rule = pragma(_,ids(IDs1,_),_,_,_), member(ID,IDs) - | NO is O + 1, allocation_occurrence(C,NO). - % need not store constraint when body is true -rule(RuleNb,Rule), occurrence(C,O,RuleNb,_) \ allocation_occurrence(C,O) - <=> Rule = pragma(rule(_,_,_,true),_,_,_,_) - | NO is O + 1, allocation_occurrence(C,NO). - % cannot store constraint at passive occurrence -occurrence(C,O,RuleNb,ID), passive(RuleNb,ID) \ allocation_occurrence(C,O) - <=> NO is O + 1, allocation_occurrence(C,NO). -allocation_occurrence(C,O) \ get_allocation_occurrence(C,Q) - <=> Q = O. -get_allocation_occurrence(_,_) - <=> fail. - -rule(RuleNb,Rule) \ get_rule(RuleNb,Q) - <=> Q = Rule. -get_rule(_,_) - <=> fail. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Translation - -chr_translate(Declarations,NewDeclarations) :- - init_chr_pp_flags, - partition_clauses(Declarations,Constraints,Rules,OtherClauses), - ( Constraints == [] -> - insert_declarations(OtherClauses, NewDeclarations) - ; - % start analysis - add_rules(Rules), - check_rules(Rules,Constraints), - add_occurrences(Rules), - late_allocation(Constraints), - unique_analyse_optimise(Rules,NRules), - check_attachments(Constraints), - assume_constraint_stores(Constraints), - set_constraint_indices(Constraints,1), - % end analysis - constraints_code(Constraints,NRules,ConstraintClauses), - validate_store_type_assumptions(Constraints), - store_management_preds(Constraints,StoreClauses), % depends on actual code used - insert_declarations(OtherClauses, Clauses0), - chr_module_declaration(CHRModuleDeclaration), - append([Clauses0, - StoreClauses, - ConstraintClauses, - CHRModuleDeclaration - ], - NewDeclarations) - ). - -store_management_preds(Constraints,Clauses) :- - generate_attach_detach_a_constraint_all(Constraints,AttachAConstraintClauses), - generate_indexed_variables_clauses(Constraints,IndexedClauses), - generate_attach_increment(AttachIncrementClauses), - generate_attr_unify_hook(AttrUnifyHookClauses), - generate_extra_clauses(Constraints,ExtraClauses), - generate_insert_delete_constraints(Constraints,DeleteClauses), - generate_store_code(Constraints,StoreClauses), - append([AttachAConstraintClauses - ,IndexedClauses - ,AttachIncrementClauses - ,AttrUnifyHookClauses - ,ExtraClauses - ,DeleteClauses - ,StoreClauses] - ,Clauses). - - -%% SWI begin -specific_declarations([(:- use_module('chr_runtime')) - ,(:- use_module('chr_hashtable_store')) - ,(:- style_check(-discontiguous)) - |Tail],Tail). -%% SWI end - -%% SICStus begin -%% specific_declarations([(:- use_module('chr_runtime')), -%% (:- use_module('chr_hashtable_store')), -%% (:- set_prolog_flag(discontiguous_warnings,off)), -%% (:- set_prolog_flag(single_var_warnings,off)) -%% |Tail],Tail). -%% SICStus end - - -insert_declarations(Clauses0, Clauses) :- - specific_declarations(Decls,Tail), - ( Clauses0 = [ (:- module(M,E))|FileBody] -> - Clauses = [ (:- module(M,E))|Decls], - Tail = FileBody - ; - Clauses = Decls, - Tail = Clauses0 - ). - - -chr_module_declaration(CHRModuleDeclaration) :- - get_target_module(Mod), - ( Mod \== chr_translate -> - CHRModuleDeclaration = [ - (:- multifile chr:'$chr_module'/1), - chr:'$chr_module'(Mod) - ] - ; - CHRModuleDeclaration = [] - ). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Partitioning of clauses into constraint declarations, chr rules and other -%% clauses - -partition_clauses([],[],[],[]). -partition_clauses([C|Cs],Ds,Rs,OCs) :- - ( parse_rule(C,R) -> - Ds = RDs, - Rs = [R | RRs], - OCs = ROCs - ; is_declaration(C,D) -> - append(D,RDs,Ds), - Rs = RRs, - OCs = ROCs - ; is_module_declaration(C,Mod) -> - target_module(Mod), - Ds = RDs, - Rs = RRs, - OCs = [C|ROCs] - ; C = (handler _) -> - format('CHR compiler WARNING: ~w.\n',[C]), - format(' `--> SICStus compatibility: ignoring handler/1 declaration.\n',[]), - Ds = RDs, - Rs = RRs, - OCs = ROCs - ; C = (rules _) -> - format('CHR compiler WARNING: ~w.\n',[C]), - format(' `--> SICStus compatibility: ignoring rules/1 declaration.\n',[]), - Ds = RDs, - Rs = RRs, - OCs = ROCs - ; C = (:- chr_option(OptionName,OptionValue)) -> - handle_option(OptionName,OptionValue), - Ds = RDs, - Rs = RRs, - OCs = ROCs - ; C = (:- chr_type _) -> - Ds = RDs, - Rs = RRs, - OCs = ROCs - ; Ds = RDs, - Rs = RRs, - OCs = [C|ROCs] - ), - partition_clauses(Cs,RDs,RRs,ROCs). - -is_declaration(D, Constraints) :- %% constraint declaration - D = (:- Decl), - ( Decl =.. [chr_constraint,Cs] ; Decl =.. [chr_constraint,Cs]), - conj2list(Cs,Constraints). - -%% Data Declaration -%% -%% pragma_rule -%% -> pragma( -%% rule, -%% ids, -%% list(pragma), -%% yesno(string), :: maybe rule nane -%% int :: rule number -%% ) -%% -%% ids -> ids( -%% list(int), -%% list(int) -%% ) -%% -%% rule -> rule( -%% list(constraint), :: constraints to be removed -%% list(constraint), :: surviving constraints -%% goal, :: guard -%% goal :: body -%% ) - -parse_rule(RI,R) :- %% name @ rule - RI = (Name @ RI2), !, - rule(RI2,yes(Name),R). -parse_rule(RI,R) :- - rule(RI,no,R). - -rule(RI,Name,R) :- - RI = (RI2 pragma P), !, %% pragmas - is_rule(RI2,R1,IDs), - conj2list(P,Ps), - inc_rule_count(RuleCount), - R = pragma(R1,IDs,Ps,Name,RuleCount). -rule(RI,Name,R) :- - is_rule(RI,R1,IDs), - inc_rule_count(RuleCount), - R = pragma(R1,IDs,[],Name,RuleCount). - -is_rule(RI,R,IDs) :- %% propagation rule - RI = (H ==> B), !, - conj2list(H,Head2i), - get_ids(Head2i,IDs2,Head2), - IDs = ids([],IDs2), - ( B = (G | RB) -> - R = rule([],Head2,G,RB) - ; - R = rule([],Head2,true,B) - ). -is_rule(RI,R,IDs) :- %% simplification/simpagation rule - RI = (H <=> B), !, - ( B = (G | RB) -> - Guard = G, - Body = RB - ; Guard = true, - Body = B - ), - ( H = (H1 \ H2) -> - conj2list(H1,Head2i), - conj2list(H2,Head1i), - get_ids(Head2i,IDs2,Head2,0,N), - get_ids(Head1i,IDs1,Head1,N,_), - IDs = ids(IDs1,IDs2) - ; conj2list(H,Head1i), - Head2 = [], - get_ids(Head1i,IDs1,Head1), - IDs = ids(IDs1,[]) - ), - R = rule(Head1,Head2,Guard,Body). - -get_ids(Cs,IDs,NCs) :- - get_ids(Cs,IDs,NCs,0,_). - -get_ids([],[],[],N,N). -get_ids([C|Cs],[N|IDs],[NC|NCs],N,NN) :- - ( C = (NC # N) -> - true - ; - NC = C - ), - M is N + 1, - get_ids(Cs,IDs,NCs, M,NN). - -is_module_declaration((:- module(Mod)),Mod). -is_module_declaration((:- module(Mod,_)),Mod). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Add rules -add_rules([]). -add_rules([Rule|Rules]) :- - Rule = pragma(_,_,_,_,RuleNb), - rule(RuleNb,Rule), - add_rules(Rules). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Some input verification: -%% - all constraints in heads are declared constraints -%% - all passive pragmas refer to actual head constraints - -check_rules([],_). -check_rules([PragmaRule|Rest],Decls) :- - check_rule(PragmaRule,Decls), - check_rules(Rest,Decls). - -check_rule(PragmaRule,Decls) :- - check_rule_indexing(PragmaRule), - PragmaRule = pragma(Rule,_IDs,Pragmas,_Name,_N), - Rule = rule(H1,H2,_,_), - append(H1,H2,HeadConstraints), - check_head_constraints(HeadConstraints,Decls,PragmaRule), - check_pragmas(Pragmas,PragmaRule). - -check_head_constraints([],_,_). -check_head_constraints([Constr|Rest],Decls,PragmaRule) :- - functor(Constr,F,A), - ( member(F/A,Decls) -> - check_head_constraints(Rest,Decls,PragmaRule) - ; - format('CHR compiler ERROR: Undeclared constraint ~w in head of ~@.\n', - [F/A,format_rule(PragmaRule)]), - format(' `--> Constraint should be one of ~w.\n',[Decls]), - fail - ). - -check_pragmas([],_). -check_pragmas([Pragma|Pragmas],PragmaRule) :- - check_pragma(Pragma,PragmaRule), - check_pragmas(Pragmas,PragmaRule). - -check_pragma(Pragma,PragmaRule) :- - var(Pragma), !, - format('CHR compiler ERROR: invalid pragma ~w in ~@.\n', - [Pragma,format_rule(PragmaRule)]), - format(' `--> Pragma should not be a variable!\n',[]), - fail. -check_pragma(passive(ID), PragmaRule) :- - !, - PragmaRule = pragma(_,ids(IDs1,IDs2),_,_,RuleNb), - ( memberchk_eq(ID,IDs1) -> - true - ; memberchk_eq(ID,IDs2) -> - true - ; - format('CHR compiler ERROR: invalid identifier ~w in pragma passive in ~@.\n', - [ID,format_rule(PragmaRule)]), - fail - ), - passive(RuleNb,ID). - -check_pragma(Pragma, PragmaRule) :- - Pragma = unique(ID,Vars), - !, - PragmaRule = pragma(_,_,_,_,RuleNb), - pragma_unique(RuleNb,ID,Vars), - format('CHR compiler WARNING: undocumented pragma ~w in ~@.\n',[Pragma,format_rule(PragmaRule)]), - format(' `--> Only use this pragma if you know what you are doing.\n',[]). - -check_pragma(Pragma, PragmaRule) :- - Pragma = already_in_heads, - !, - format('CHR compiler WARNING: currently unsupported pragma ~w in ~@.\n',[Pragma,format_rule(PragmaRule)]), - format(' `--> Pragma is ignored. Termination and correctness may be affected \n',[]). - -check_pragma(Pragma, PragmaRule) :- - Pragma = already_in_head(_), - !, - format('CHR compiler WARNING: currently unsupported pragma ~w in ~@.\n',[Pragma,format_rule(PragmaRule)]), - format(' `--> Pragma is ignored. Termination and correctness may be affected \n',[]). - -check_pragma(Pragma,PragmaRule) :- - format('CHR compiler ERROR: invalid pragma ~w in ~@.\n',[Pragma,format_rule(PragmaRule)]), - format(' `--> Pragma should be one of passive/1!\n',[]), - fail. - -format_rule(PragmaRule) :- - PragmaRule = pragma(_,_,_,MaybeName,N), - ( MaybeName = yes(Name) -> - write('rule '), write(Name) - ; - write('rule number '), write(N) - ). - -check_rule_indexing(PragmaRule) :- - PragmaRule = pragma(Rule,_,_,_,_), - Rule = rule(H1,H2,G,_), - term_variables(H1-H2,HeadVars), - remove_anti_monotonic_guards(G,HeadVars,NG), - check_indexing(H1,NG-H2), - check_indexing(H2,NG-H1). - -remove_anti_monotonic_guards(G,Vars,NG) :- - conj2list(G,GL), - remove_anti_monotonic_guard_list(GL,Vars,NGL), - list2conj(NGL,NG). - -remove_anti_monotonic_guard_list([],_,[]). -remove_anti_monotonic_guard_list([G|Gs],Vars,NGs) :- - ( G = var(X), - memberchk_eq(X,Vars) -> - NGs = RGs - ; - NGs = [G|RGs] - ), - remove_anti_monotonic_guard_list(Gs,Vars,RGs). - -check_indexing([],_). -check_indexing([Head|Heads],Other) :- - functor(Head,F,A), - Head =.. [_|Args], - term_variables(Heads-Other,OtherVars), - check_indexing(Args,1,F/A,OtherVars), - check_indexing(Heads,[Head|Other]). - -check_indexing([],_,_,_). -check_indexing([Arg|Args],I,FA,OtherVars) :- - ( is_indexed_argument(FA,I) -> - true - ; nonvar(Arg) -> - indexed_argument(FA,I) - ; % var(Arg) -> - term_variables(Args,ArgsVars), - append(ArgsVars,OtherVars,RestVars), - ( memberchk_eq(Arg,RestVars) -> - indexed_argument(FA,I) - ; - true - ) - ), - J is I + 1, - term_variables(Arg,NVars), - append(NVars,OtherVars,NOtherVars), - check_indexing(Args,J,FA,NOtherVars). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Occurrences - -add_occurrences([]). -add_occurrences([Rule|Rules]) :- - Rule = pragma(rule(H1,H2,_,_),ids(IDs1,IDs2),_,_,Nb), - add_occurrences(H1,IDs1,Nb), - add_occurrences(H2,IDs2,Nb), - add_occurrences(Rules). - -add_occurrences([],[],_). -add_occurrences([H|Hs],[ID|IDs],RuleNb) :- - functor(H,F,A), - FA = F/A, - get_max_occurrence(FA,MO), - O is MO + 1, - occurrence(FA,O,RuleNb,ID), - add_occurrences(Hs,IDs,RuleNb). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Late allocation - -late_allocation([]). -late_allocation([C|Cs]) :- - allocation_occurrence(C,1), - late_allocation(Cs). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Global Options -% - -handle_option(Var,Value) :- - var(Var), !, - format('CHR compiler ERROR: ~w.\n',[option(Var,Value)]), - format(' `--> First argument should be an atom, not a variable.\n',[]), - fail. - -handle_option(Name,Value) :- - var(Value), !, - format('CHR compiler ERROR: ~w.\n',[option(Name,Value)]), - format(' `--> Second argument should be a nonvariable.\n',[]), - fail. - -handle_option(Name,Value) :- - option_definition(Name,Value,Flags), - !, - set_chr_pp_flags(Flags). - -handle_option(Name,Value) :- - \+ option_definition(Name,_,_), !, -% setof(N,_V ^ _F ^ (option_definition(N,_V,_F)),Ns), - format('CHR compiler WARNING: ~w.\n',[option(Name,Value)]), - format(' `--> Invalid option name \n',[]). %~w: should be one of ~w.\n',[Name,Ns]). - -handle_option(Name,Value) :- - findall(V,option_definition(Name,V,_),Vs), - format('CHR compiler ERROR: ~w.\n',[option(Name,Value)]), - format(' `--> Invalid value ~w: should be one of ~w.\n',[Value,Vs]), - fail. - -option_definition(optimize,experimental,Flags) :- - Flags = [ unique_analyse_optimise - on, - check_unnecessary_active - full, - reorder_heads - on, - set_semantics_rule - on, - check_attachments - on, - guard_via_reschedule - on - ]. -option_definition(optimize,full,Flags) :- - Flags = [ unique_analyse_optimise - off, - check_unnecessary_active - full, - reorder_heads - on, - set_semantics_rule - on, - check_attachments - on, - guard_via_reschedule - on - ]. - -option_definition(optimize,sicstus,Flags) :- - Flags = [ unique_analyse_optimise - off, - check_unnecessary_active - simplification, - reorder_heads - off, - set_semantics_rule - off, - check_attachments - off, - guard_via_reschedule - off - ]. - -option_definition(optimize,off,Flags) :- - Flags = [ unique_analyse_optimise - off, - check_unnecessary_active - off, - reorder_heads - off, - set_semantics_rule - off, - check_attachments - off, - guard_via_reschedule - off - ]. - -option_definition(check_guard_bindings,on,Flags) :- - Flags = [ guard_locks - on ]. - -option_definition(check_guard_bindings,off,Flags) :- - Flags = [ guard_locks - off ]. - -option_definition(reduced_indexing,on,Flags) :- - Flags = [ reduced_indexing - on ]. - -option_definition(reduced_indexing,off,Flags) :- - Flags = [ reduced_indexing - off ]. - -option_definition(mode,ModeDecl,[]) :- - (nonvar(ModeDecl) -> - functor(ModeDecl,F,A), - ModeDecl =.. [_|ArgModes], - constraint_mode(F/A,ArgModes) - ; - true - ). -option_definition(store,FA-Store,[]) :- - store_type(FA,Store). - -option_definition(debug,on,Flags) :- - Flags = [ debugable - on ]. -option_definition(debug,off,Flags) :- - Flags = [ debugable - off ]. -option_definition(type_definition, _, []). % JW: ignored by bootstrap compiler -option_definition(type_declaration, _, []). % JW: ignored by bootstrap compiler -option_definition(verbosity,_,[]). - -init_chr_pp_flags :- - chr_pp_flag_definition(Name,[DefaultValue|_]), - set_chr_pp_flag(Name,DefaultValue), - fail. -init_chr_pp_flags. - -set_chr_pp_flags([]). -set_chr_pp_flags([Name-Value|Flags]) :- - set_chr_pp_flag(Name,Value), - set_chr_pp_flags(Flags). - -set_chr_pp_flag(Name,Value) :- - atom_concat('$chr_pp_',Name,GlobalVar), - nb_setval(GlobalVar,Value). - -chr_pp_flag_definition(unique_analyse_optimise,[on,off]). -chr_pp_flag_definition(check_unnecessary_active,[full,simplification,off]). -chr_pp_flag_definition(reorder_heads,[on,off]). -chr_pp_flag_definition(set_semantics_rule,[on,off]). -chr_pp_flag_definition(guard_via_reschedule,[on,off]). -chr_pp_flag_definition(guard_locks,[on,off]). -chr_pp_flag_definition(check_attachments,[on,off]). -chr_pp_flag_definition(debugable,[off,on]). -chr_pp_flag_definition(reduced_indexing,[on,off]). - -chr_pp_flag(Name,Value) :- - atom_concat('$chr_pp_',Name,GlobalVar), - nb_getval(GlobalVar,V), - ( V == [] -> - chr_pp_flag_definition(Name,[Value|_]) - ; - V = Value - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% Generated predicates -%% attach_$CONSTRAINT -%% attach_increment -%% detach_$CONSTRAINT -%% attr_unify_hook - -%% attach_$CONSTRAINT -generate_attach_detach_a_constraint_all([],[]). -generate_attach_detach_a_constraint_all([Constraint|Constraints],Clauses) :- - ( may_trigger(Constraint) -> - generate_attach_a_constraint(Constraint,Clauses1), - generate_detach_a_constraint(Constraint,Clauses2) - ; - Clauses1 = [], - Clauses2 = [] - ), - generate_attach_detach_a_constraint_all(Constraints,Clauses3), - append([Clauses1,Clauses2,Clauses3],Clauses). - -generate_attach_a_constraint(Constraint,[Clause1,Clause2]) :- - generate_attach_a_constraint_empty_list(Constraint,Clause1), - get_max_constraint_index(N), - ( N == 1 -> - generate_attach_a_constraint_1_1(Constraint,Clause2) - ; - generate_attach_a_constraint_t_p(Constraint,Clause2) - ). - -generate_attach_a_constraint_skeleton(FA,Args,Body,Clause) :- - make_name('attach_',FA,Fct), - Head =.. [Fct | Args], - Clause = ( Head :- Body). - -generate_attach_a_constraint_empty_list(FA,Clause) :- - generate_attach_a_constraint_skeleton(FA,[[],_],true,Clause). - -generate_attach_a_constraint_1_1(FA,Clause) :- - Args = [[Var|Vars],Susp], - generate_attach_a_constraint_skeleton(FA,Args,Body,Clause), - generate_attach_body_1(FA,Var,Susp,AttachBody), - make_name('attach_',FA,Fct), - RecursiveCall =.. [Fct,Vars,Susp], - Body = - ( - AttachBody, - RecursiveCall - ). - -generate_attach_body_1(FA,Var,Susp,Body) :- - get_target_module(Mod), - Body = - ( get_attr(Var, Mod, Susps) -> - NewSusps=[Susp|Susps], - put_attr(Var, Mod, NewSusps) - ; - put_attr(Var, Mod, [Susp]) - ). - -generate_attach_a_constraint_t_p(FA,Clause) :- - Args = [[Var|Vars],Susp], - generate_attach_a_constraint_skeleton(FA,Args,Body,Clause), - make_name('attach_',FA,Fct), - RecursiveCall =.. [Fct,Vars,Susp], - generate_attach_body_n(FA,Var,Susp,AttachBody), - Body = - ( - AttachBody, - RecursiveCall - ). - -generate_attach_body_n(F/A,Var,Susp,Body) :- - get_constraint_index(F/A,Position), - or_pattern(Position,Pattern), - get_max_constraint_index(Total), - make_attr(Total,Mask,SuspsList,Attr), - nth1(Position,SuspsList,Susps), - substitute_eq(Susps,SuspsList,[Susp|Susps],SuspsList1), - make_attr(Total,Mask,SuspsList1,NewAttr1), - substitute_eq(Susps,SuspsList,[Susp],SuspsList2), - make_attr(Total,NewMask,SuspsList2,NewAttr2), - copy_term_nat(SuspsList,SuspsList3), - nth1(Position,SuspsList3,[Susp]), - delete(SuspsList3,[Susp],RestSuspsList), - set_elems(RestSuspsList,[]), - make_attr(Total,Pattern,SuspsList3,NewAttr3), - get_target_module(Mod), - Body = - ( get_attr(Var,Mod,TAttr) -> - TAttr = Attr, - ( Mask /\ Pattern =:= Pattern -> - put_attr(Var, Mod, NewAttr1) - ; - NewMask is Mask \/ Pattern, - put_attr(Var, Mod, NewAttr2) - ) - ; - put_attr(Var,Mod,NewAttr3) - ). - -%% detach_$CONSTRAINT -generate_detach_a_constraint(Constraint,[Clause1,Clause2]) :- - generate_detach_a_constraint_empty_list(Constraint,Clause1), - get_max_constraint_index(N), - ( N == 1 -> - generate_detach_a_constraint_1_1(Constraint,Clause2) - ; - generate_detach_a_constraint_t_p(Constraint,Clause2) - ). - -generate_detach_a_constraint_empty_list(FA,Clause) :- - make_name('detach_',FA,Fct), - Args = [[],_], - Head =.. [Fct | Args], - Clause = ( Head :- true). - -generate_detach_a_constraint_1_1(FA,Clause) :- - make_name('detach_',FA,Fct), - Args = [[Var|Vars],Susp], - Head =.. [Fct | Args], - RecursiveCall =.. [Fct,Vars,Susp], - generate_detach_body_1(FA,Var,Susp,DetachBody), - Body = - ( - DetachBody, - RecursiveCall - ), - Clause = (Head :- Body). - -generate_detach_body_1(FA,Var,Susp,Body) :- - get_target_module(Mod), - Body = - ( get_attr(Var,Mod,Susps) -> - 'chr sbag_del_element'(Susps,Susp,NewSusps), - ( NewSusps == [] -> - del_attr(Var,Mod) - ; - put_attr(Var,Mod,NewSusps) - ) - ; - true - ). - -generate_detach_a_constraint_t_p(FA,Clause) :- - make_name('detach_',FA,Fct), - Args = [[Var|Vars],Susp], - Head =.. [Fct | Args], - RecursiveCall =.. [Fct,Vars,Susp], - generate_detach_body_n(FA,Var,Susp,DetachBody), - Body = - ( - DetachBody, - RecursiveCall - ), - Clause = (Head :- Body). - -generate_detach_body_n(F/A,Var,Susp,Body) :- - get_constraint_index(F/A,Position), - or_pattern(Position,Pattern), - and_pattern(Position,DelPattern), - get_max_constraint_index(Total), - make_attr(Total,Mask,SuspsList,Attr), - nth1(Position,SuspsList,Susps), - substitute_eq(Susps,SuspsList,[],SuspsList1), - make_attr(Total,NewMask,SuspsList1,Attr1), - substitute_eq(Susps,SuspsList,NewSusps,SuspsList2), - make_attr(Total,Mask,SuspsList2,Attr2), - get_target_module(Mod), - Body = - ( get_attr(Var,Mod,TAttr) -> - TAttr = Attr, - ( Mask /\ Pattern =:= Pattern -> - 'chr sbag_del_element'(Susps,Susp,NewSusps), - ( NewSusps == [] -> - NewMask is Mask /\ DelPattern, - ( NewMask == 0 -> - del_attr(Var,Mod) - ; - put_attr(Var,Mod,Attr1) - ) - ; - put_attr(Var,Mod,Attr2) - ) - ; - true - ) - ; - true - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -generate_indexed_variables_clauses(Constraints,Clauses) :- - ( forsome(C,Constraints,chr_translate:may_trigger(C)) -> - generate_indexed_variables_clauses_(Constraints,Clauses) - ; - Clauses = [] - ). - -generate_indexed_variables_clauses_([],[]). -generate_indexed_variables_clauses_([C|Cs],Clauses) :- - ( ( is_attached(C) ; chr_pp_flag(debugable,on)) -> - Clauses = [Clause|RestClauses], - generate_indexed_variables_clause(C,Clause) - ; - Clauses = RestClauses - ), - generate_indexed_variables_clauses_(Cs,RestClauses). - -generate_indexed_variables_clause(F/A,Clause) :- - functor(Term,F,A), - get_constraint_mode(F/A,ArgModes), - Term =.. [_|Args], - create_indexed_variables_body(Args,ArgModes,Vars,1,F/A,MaybeBody,N), - ( MaybeBody == empty -> - - Body = (Vars = []) - ; N == 0 -> - Body = term_variables(Susp,Vars) - ; - MaybeBody = Body - ), - Clause = - ( '$indexed_variables'(Susp,Vars) :- - Susp = Term, - Body - ). - -create_indexed_variables_body([],[],_,_,_,empty,0). -create_indexed_variables_body([V|Vs],[Mode|Modes],Vars,I,FA,Body,N) :- - J is I + 1, - create_indexed_variables_body(Vs,Modes,Tail,J,FA,RBody,M), - ( Mode \== (+), - is_indexed_argument(FA,I) -> - ( RBody == empty -> - Body = term_variables(V,Vars) - ; - Body = (term_variables(V,Vars,Tail),RBody) - ), - N = M - ; - Vars = Tail, - Body = RBody, - N is M + 1 - ). - -generate_extra_clauses(Constraints,[A,B,C,D,E]) :- - ( chr_pp_flag(reduced_indexing,on) -> - global_indexed_variables_clause(Constraints,D) - ; - D = - ( chr_indexed_variables(Susp,Vars) :- - 'chr chr_indexed_variables'(Susp,Vars) - ) - ), - generate_remove_clause(A), - generate_activate_clause(B), - generate_allocate_clause(C), - generate_insert_constraint_internal(E). - -generate_remove_clause(RemoveClause) :- - RemoveClause = - ( - remove_constraint_internal(Susp, Agenda, Delete) :- - arg( 2, Susp, Mref), - 'chr get_mutable'( State, Mref), - 'chr update_mutable'( removed, Mref), % mark in any case - ( compound(State) -> % passive/1 - Agenda = [], - Delete = no - ; State==removed -> - Agenda = [], - Delete = no - %; State==triggered -> - % Agenda = [] - ; - Delete = yes, - chr_indexed_variables(Susp,Agenda) - ) - ). - -generate_activate_clause(ActivateClause) :- - ActivateClause = - ( - activate_constraint(Store, Vars, Susp, Generation) :- - arg( 2, Susp, Mref), - 'chr get_mutable'( State, Mref), - 'chr update_mutable'( active, Mref), - ( nonvar(Generation) -> % aih - true - ; - arg( 4, Susp, Gref), - 'chr get_mutable'( Gen, Gref), - Generation is Gen+1, - 'chr update_mutable'( Generation, Gref) - ), - ( compound(State) -> % passive/1 - term_variables( State, Vars), - 'chr none_locked'( Vars), - Store = yes - ; State == removed -> % the price for eager removal ... - chr_indexed_variables(Susp,Vars), - Store = yes - ; - Vars = [], - Store = no - ) - ). - -generate_allocate_clause(AllocateClause) :- - AllocateClause = - ( - allocate_constraint( Closure, Self, F, Args) :- - Self =.. [suspension,Id,Mref,Closure,Gref,Href,F|Args], - 'chr create_mutable'(0,Gref), % Gref = mutable(0), - 'chr empty_history'(History), - 'chr create_mutable'(History,Href), % Href = mutable(History), - chr_indexed_variables(Self,Vars), - 'chr create_mutable'(passive(Vars),Mref), % Mref = mutable(passive(Vars)), - 'chr gen_id'( Id) - ). - -generate_insert_constraint_internal(Clause) :- - Clause = - ( - insert_constraint_internal(yes, Vars, Self, Closure, F, Args) :- - Self =.. [suspension,Id,Mref,Closure,Gref,Href,F|Args], - chr_indexed_variables(Self,Vars), - 'chr none_locked'(Vars), - 'chr create_mutable'(active,Mref), % Mref = mutable(active), - 'chr create_mutable'(0,Gref), % Gref = mutable(0), - 'chr empty_history'(History), - 'chr create_mutable'(History,Href), % Href = mutable(History), - 'chr gen_id'(Id) - ). - -global_indexed_variables_clause(Constraints,Clause) :- - ( forsome(C,Constraints,chr_translate:may_trigger(C)) -> - Body = (Susp =.. [_,_,_,_,_,_,Term|_], '$indexed_variables'(Term,Vars)) - ; - Body = true, - Vars = [] - ), - Clause = ( chr_indexed_variables(Susp,Vars) :- Body ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -generate_attach_increment(Clauses) :- - get_max_constraint_index(N), - ( N > 0 -> - Clauses = [Clause1,Clause2], - generate_attach_increment_empty(Clause1), - ( N == 1 -> - generate_attach_increment_one(Clause2) - ; - generate_attach_increment_many(N,Clause2) - ) - ; - Clauses = [] - ). - -generate_attach_increment_empty((attach_increment([],_) :- true)). - -generate_attach_increment_one(Clause) :- - Head = attach_increment([Var|Vars],Susps), - get_target_module(Mod), - Body = - ( - 'chr not_locked'(Var), - ( get_attr(Var,Mod,VarSusps) -> - sort(VarSusps,SortedVarSusps), - merge(Susps,SortedVarSusps,MergedSusps), - put_attr(Var,Mod,MergedSusps) - ; - put_attr(Var,Mod,Susps) - ), - attach_increment(Vars,Susps) - ), - Clause = (Head :- Body). - -generate_attach_increment_many(N,Clause) :- - make_attr(N,Mask,SuspsList,Attr), - make_attr(N,OtherMask,OtherSuspsList,OtherAttr), - Head = attach_increment([Var|Vars],Attr), - bagof(G,X ^ Y ^ SY ^ M ^ (member2(SuspsList,OtherSuspsList,X-Y),G = (sort(Y,SY),'chr merge_attributes'(X,SY,M))),Gs), - list2conj(Gs,SortGoals), - bagof(MS,A ^ B ^ C ^ member((A,'chr merge_attributes'(B,C,MS)),Gs), MergedSuspsList), - make_attr(N,MergedMask,MergedSuspsList,NewAttr), - get_target_module(Mod), - Body = - ( - 'chr not_locked'(Var), - ( get_attr(Var,Mod,TOtherAttr) -> - TOtherAttr = OtherAttr, - SortGoals, - MergedMask is Mask \/ OtherMask, - put_attr(Var,Mod,NewAttr) - ; - put_attr(Var,Mod,Attr) - ), - attach_increment(Vars,Attr) - ), - Clause = (Head :- Body). - -%% attr_unify_hook -generate_attr_unify_hook([Clause]) :- - get_max_constraint_index(N), - ( N == 0 -> - get_target_module(Mod), - Clause = - ( attr_unify_hook(Attr,Var) :- - write('ERROR: Unexpected triggering of attr_unify_hook/2 in module '), - writeln(Mod) - ) - ; N == 1 -> - generate_attr_unify_hook_one(Clause) - ; - generate_attr_unify_hook_many(N,Clause) - ). - -generate_attr_unify_hook_one(Clause) :- - Head = attr_unify_hook(Susps,Other), - get_target_module(Mod), - make_run_suspensions(NewSusps,WakeNewSusps), - make_run_suspensions(Susps,WakeSusps), - Body = - ( - sort(Susps, SortedSusps), - ( var(Other) -> - ( get_attr(Other,Mod,OtherSusps) -> - true - ; - OtherSusps = [] - ), - sort(OtherSusps,SortedOtherSusps), - 'chr merge_attributes'(SortedSusps,SortedOtherSusps,NewSusps), - put_attr(Other,Mod,NewSusps), - WakeNewSusps - ; - ( compound(Other) -> - term_variables(Other,OtherVars), - attach_increment(OtherVars, SortedSusps) - ; - true - ), - WakeSusps - ) - ), - Clause = (Head :- Body). - -generate_attr_unify_hook_many(N,Clause) :- - make_attr(N,Mask,SuspsList,Attr), - make_attr(N,OtherMask,OtherSuspsList,OtherAttr), - bagof(Sort,A ^ B ^ ( member(A,SuspsList) , Sort = sort(A,B) ) , SortGoalList), - list2conj(SortGoalList,SortGoals), - bagof(B, A ^ member(sort(A,B),SortGoalList), SortedSuspsList), - bagof(C, D ^ E ^ F ^ G ^ (member2(SortedSuspsList,OtherSuspsList,D-E), - C = (sort(E,F), - 'chr merge_attributes'(D,F,G)) ), - SortMergeGoalList), - bagof(G, D ^ F ^ H ^ member((H,'chr merge_attributes'(D,F,G)),SortMergeGoalList) , MergedSuspsList), - list2conj(SortMergeGoalList,SortMergeGoals), - make_attr(N,MergedMask,MergedSuspsList,MergedAttr), - make_attr(N,Mask,SortedSuspsList,SortedAttr), - Head = attr_unify_hook(Attr,Other), - get_target_module(Mod), - make_run_suspensions_loop(MergedSuspsList,WakeMergedSusps), - make_run_suspensions_loop(SortedSuspsList,WakeSortedSusps), - Body = - ( - SortGoals, - ( var(Other) -> - ( get_attr(Other,Mod,TOtherAttr) -> - TOtherAttr = OtherAttr, - SortMergeGoals, - MergedMask is Mask \/ OtherMask, - put_attr(Other,Mod,MergedAttr), - WakeMergedSusps - ; - put_attr(Other,Mod,SortedAttr), - WakeSortedSusps - ) - ; - ( compound(Other) -> - term_variables(Other,OtherVars), - attach_increment(OtherVars,SortedAttr) - ; - true - ), - WakeSortedSusps - ) - ), - Clause = (Head :- Body). - -make_run_suspensions(Susps,Goal) :- - ( chr_pp_flag(debugable,on) -> - Goal = 'chr run_suspensions_d'(Susps) - ; - Goal = 'chr run_suspensions'(Susps) - ). - -make_run_suspensions_loop(SuspsList,Goal) :- - ( chr_pp_flag(debugable,on) -> - Goal = 'chr run_suspensions_loop_d'(SuspsList) - ; - Goal = 'chr run_suspensions_loop'(SuspsList) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% $insert_in_store_F/A -% $delete_from_store_F/A - -generate_insert_delete_constraints([],[]). -generate_insert_delete_constraints([FA|Rest],Clauses) :- - ( is_attached(FA) -> - Clauses = [IClause,DClause|RestClauses], - generate_insert_delete_constraint(FA,IClause,DClause) - ; - Clauses = RestClauses - ), - generate_insert_delete_constraints(Rest,RestClauses). - -generate_insert_delete_constraint(FA,IClause,DClause) :- - get_store_type(FA,StoreType), - generate_insert_constraint(StoreType,FA,IClause), - generate_delete_constraint(StoreType,FA,DClause). - -generate_insert_constraint(StoreType,C,Clause) :- - make_name('$insert_in_store_',C,ClauseName), - Head =.. [ClauseName,Susp], - generate_insert_constraint_body(StoreType,C,Susp,Body), - Clause = (Head :- Body). - -generate_insert_constraint_body(default,C,Susp,Body) :- - get_target_module(Mod), - get_max_constraint_index(Total), - ( Total == 1 -> - generate_attach_body_1(C,Store,Susp,AttachBody) - ; - generate_attach_body_n(C,Store,Susp,AttachBody) - ), - Body = - ( - 'chr default_store'(Store), - AttachBody - ). -generate_insert_constraint_body(multi_hash(Indexes),C,Susp,Body) :- - generate_multi_hash_insert_constraint_bodies(Indexes,C,Susp,Body). -generate_insert_constraint_body(global_ground,C,Susp,Body) :- - global_ground_store_name(C,StoreName), - make_get_store_goal(StoreName,Store,GetStoreGoal), - make_update_store_goal(StoreName,[Susp|Store],UpdateStoreGoal), - Body = - ( - GetStoreGoal, % nb_getval(StoreName,Store), - UpdateStoreGoal % b_setval(StoreName,[Susp|Store]) - ). -generate_insert_constraint_body(multi_store(StoreTypes),C,Susp,Body) :- - find_with_var_identity( - B, - [Susp], - ( - member(ST,StoreTypes), - chr_translate:generate_insert_constraint_body(ST,C,Susp,B) - ), - Bodies - ), - list2conj(Bodies,Body). - -generate_multi_hash_insert_constraint_bodies([],_,_,true). -generate_multi_hash_insert_constraint_bodies([Index|Indexes],FA,Susp,(Body,Bodies)) :- - multi_hash_store_name(FA,Index,StoreName), - multi_hash_key(FA,Index,Susp,KeyBody,Key), - make_get_store_goal(StoreName,Store,GetStoreGoal), - Body = - ( - KeyBody, - GetStoreGoal, % nb_getval(StoreName,Store), - insert_ht(Store,Key,Susp) - ), - generate_multi_hash_insert_constraint_bodies(Indexes,FA,Susp,Bodies). - -generate_delete_constraint(StoreType,FA,Clause) :- - make_name('$delete_from_store_',FA,ClauseName), - Head =.. [ClauseName,Susp], - generate_delete_constraint_body(StoreType,FA,Susp,Body), - Clause = (Head :- Body). - -generate_delete_constraint_body(default,C,Susp,Body) :- - get_target_module(Mod), - get_max_constraint_index(Total), - ( Total == 1 -> - generate_detach_body_1(C,Store,Susp,DetachBody), - Body = - ( - 'chr default_store'(Store), - DetachBody - ) - ; - generate_detach_body_n(C,Store,Susp,DetachBody), - Body = - ( - 'chr default_store'(Store), - DetachBody - ) - ). -generate_delete_constraint_body(multi_hash(Indexes),C,Susp,Body) :- - generate_multi_hash_delete_constraint_bodies(Indexes,C,Susp,Body). -generate_delete_constraint_body(global_ground,C,Susp,Body) :- - global_ground_store_name(C,StoreName), - make_get_store_goal(StoreName,Store,GetStoreGoal), - make_update_store_goal(StoreName,NStore,UpdateStoreGoal), - Body = - ( - GetStoreGoal, % nb_getval(StoreName,Store), - 'chr sbag_del_element'(Store,Susp,NStore), - UpdateStoreGoal % b_setval(StoreName,NStore) - ). -generate_delete_constraint_body(multi_store(StoreTypes),C,Susp,Body) :- - find_with_var_identity( - B, - [Susp], - ( - member(ST,StoreTypes), - chr_translate:generate_delete_constraint_body(ST,C,Susp,B) - ), - Bodies - ), - list2conj(Bodies,Body). - -generate_multi_hash_delete_constraint_bodies([],_,_,true). -generate_multi_hash_delete_constraint_bodies([Index|Indexes],FA,Susp,(Body,Bodies)) :- - multi_hash_store_name(FA,Index,StoreName), - multi_hash_key(FA,Index,Susp,KeyBody,Key), - make_get_store_goal(StoreName,Store,GetStoreGoal), - Body = - ( - KeyBody, - GetStoreGoal, % nb_getval(StoreName,Store), - delete_ht(Store,Key,Susp) - ), - generate_multi_hash_delete_constraint_bodies(Indexes,FA,Susp,Bodies). - -generate_delete_constraint_call(FA,Susp,Call) :- - make_name('$delete_from_store_',FA,Functor), - Call =.. [Functor,Susp]. - -generate_insert_constraint_call(FA,Susp,Call) :- - make_name('$insert_in_store_',FA,Functor), - Call =.. [Functor,Susp]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -generate_store_code(Constraints,[Enumerate|L]) :- - enumerate_stores_code(Constraints,Enumerate), - generate_store_code(Constraints,L,[]). - -generate_store_code([],L,L). -generate_store_code([C|Cs],L,T) :- - get_store_type(C,StoreType), - generate_store_code(StoreType,C,L,L1), - generate_store_code(Cs,L1,T). - -generate_store_code(default,_,L,L). -generate_store_code(multi_hash(Indexes),C,L,T) :- - multi_hash_store_initialisations(Indexes,C,L,L1), - multi_hash_via_lookups(Indexes,C,L1,T). -generate_store_code(global_ground,C,L,T) :- - global_ground_store_initialisation(C,L,T). -generate_store_code(multi_store(StoreTypes),C,L,T) :- - multi_store_generate_store_code(StoreTypes,C,L,T). - -multi_store_generate_store_code([],_,L,L). -multi_store_generate_store_code([ST|STs],C,L,T) :- - generate_store_code(ST,C,L,L1), - multi_store_generate_store_code(STs,C,L1,T). - -multi_hash_store_initialisations([],_,L,L). -multi_hash_store_initialisations([Index|Indexes],FA,L,T) :- - multi_hash_store_name(FA,Index,StoreName), - make_init_store_goal(StoreName,HT,InitStoreGoal), - L = [(:- (new_ht(HT),InitStoreGoal)) | L1], - multi_hash_store_initialisations(Indexes,FA,L1,T). - -global_ground_store_initialisation(C,L,T) :- - global_ground_store_name(C,StoreName), - make_init_store_goal(StoreName,[],InitStoreGoal), - L = [(:- InitStoreGoal)|T]. - -multi_hash_via_lookups([],_,L,L). -multi_hash_via_lookups([Index|Indexes],C,L,T) :- - multi_hash_via_lookup_name(C,Index,PredName), - Head =.. [PredName,Key,SuspsList], - multi_hash_store_name(C,Index,StoreName), - make_get_store_goal(StoreName,HT,GetStoreGoal), - Body = - ( - GetStoreGoal, % nb_getval(StoreName,HT), - lookup_ht(HT,Key,SuspsList) - ), - L = [(Head :- Body)|L1], - multi_hash_via_lookups(Indexes,C,L1,T). - -multi_hash_via_lookup_name(F/A,Index,Name) :- - ( integer(Index) -> - IndexName = Index - ; is_list(Index) -> - atom_concat_list(Index,IndexName) - ), - atom_concat_list(['$via1_multi_hash_',F,(/),A,'-',IndexName],Name). - -multi_hash_store_name(F/A,Index,Name) :- - get_target_module(Mod), - ( integer(Index) -> - IndexName = Index - ; is_list(Index) -> - atom_concat_list(Index,IndexName) - ), - atom_concat_list(['$chr_store_multi_hash_',Mod,(:),F,(/),A,'-',IndexName],Name). - -multi_hash_key(F/A,Index,Susp,KeyBody,Key) :- - ( ( integer(Index) -> - I = Index - ; - Index = [I] - ) -> - SuspIndex is I + 6, - KeyBody = arg(SuspIndex,Susp,Key) - ; is_list(Index) -> - sort(Index,Indexes), - find_with_var_identity(arg(J,Susp,KeyI)-KeyI,[Susp],(member(I,Indexes),J is I + 6),ArgKeyPairs), - pairup(Bodies,Keys,ArgKeyPairs), - Key =.. [k|Keys], - list2conj(Bodies,KeyBody) - ). - -multi_hash_key_args(Index,Head,KeyArgs) :- - ( integer(Index) -> - arg(Index,Head,Arg), - KeyArgs = [Arg] - ; is_list(Index) -> - sort(Index,Indexes), - term_variables(Head,Vars), - find_with_var_identity(Arg,Vars,(member(I,Indexes), arg(I,Head,Arg)),KeyArgs) - ). - -global_ground_store_name(F/A,Name) :- - get_target_module(Mod), - atom_concat_list(['$chr_store_global_ground_',Mod,(:),F,(/),A],Name). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -enumerate_stores_code(Constraints,Clause) :- - Head = '$enumerate_suspensions'(Susp), - enumerate_store_bodies(Constraints,Susp,Bodies), - list2disj(Bodies,Body), - Clause = (Head :- Body). - -enumerate_store_bodies([],_,[]). -enumerate_store_bodies([C|Cs],Susp,L) :- - ( is_attached(C) -> - get_store_type(C,StoreType), - enumerate_store_body(StoreType,C,Susp,B), - L = [B|T] - ; - L = T - ), - enumerate_store_bodies(Cs,Susp,T). - -enumerate_store_body(default,C,Susp,Body) :- - get_constraint_index(C,Index), - get_target_module(Mod), - get_max_constraint_index(MaxIndex), - Body1 = - ( - 'chr default_store'(GlobalStore), - get_attr(GlobalStore,Mod,Attr) - ), - ( MaxIndex > 1 -> - NIndex is Index + 1, - Body2 = - ( - arg(NIndex,Attr,List), - 'chr sbag_member'(Susp,List) - ) - ; - Body2 = 'chr sbag_member'(Susp,Attr) - ), - Body = (Body1,Body2). -enumerate_store_body(multi_hash([Index|_]),C,Susp,Body) :- - multi_hash_enumerate_store_body(Index,C,Susp,Body). -enumerate_store_body(global_ground,C,Susp,Body) :- - global_ground_store_name(C,StoreName), - make_get_store_goal(StoreName,List,GetStoreGoal), - Body = - ( - GetStoreGoal, % nb_getval(StoreName,List), - 'chr sbag_member'(Susp,List) - ). -enumerate_store_body(multi_store(STs),C,Susp,Body) :- - once(( - member(ST,STs), - enumerate_store_body(ST,C,Susp,Body) - )). - -multi_hash_enumerate_store_body(I,C,Susp,B) :- - multi_hash_store_name(C,I,StoreName), - make_get_store_goal(StoreName,HT,GetStoreGoal), - B = - ( - GetStoreGoal, % nb_getval(StoreName,HT), - value_ht(HT,Susp) - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -check_attachments(Constraints) :- - ( chr_pp_flag(check_attachments,on) -> - check_constraint_attachments(Constraints) - ; - true - ). - -check_constraint_attachments([]). -check_constraint_attachments([C|Cs]) :- - check_constraint_attachment(C), - check_constraint_attachments(Cs). - -check_constraint_attachment(C) :- - get_max_occurrence(C,MO), - check_occurrences_attachment(C,1,MO). - -check_occurrences_attachment(C,O,MO) :- - ( O > MO -> - true - ; - check_occurrence_attachment(C,O), - NO is O + 1, - check_occurrences_attachment(C,NO,MO) - ). - -check_occurrence_attachment(C,O) :- - get_occurrence(C,O,RuleNb,ID), - get_rule(RuleNb,PragmaRule), - PragmaRule = pragma(rule(Heads1,Heads2,Guard,Body),ids(IDs1,IDs2),_,_,_), - ( select2(ID,Head1,IDs1,Heads1,RIDs1,RHeads1) -> - check_attachment_head1(Head1,ID,RuleNb,Heads1,Heads2,Guard) - ; select2(ID,Head2,IDs2,Heads2,RIDs2,RHeads2) -> - check_attachment_head2(Head2,ID,RuleNb,Heads1,Body) - ). - -check_attachment_head1(C,ID,RuleNb,H1,H2,G) :- - functor(C,F,A), - ( H1 == [C], - H2 == [], - G == true, - C =.. [_|L], - no_matching(L,[]), - \+ is_passive(RuleNb,ID) -> - attached(F/A,no) - ; - attached(F/A,maybe) - ). - -no_matching([],_). -no_matching([X|Xs],Prev) :- - var(X), - \+ memberchk_eq(X,Prev), - no_matching(Xs,[X|Prev]). - -check_attachment_head2(C,ID,RuleNb,H1,B) :- - functor(C,F,A), - ( is_passive(RuleNb,ID) -> - attached(F/A,maybe) - ; H1 \== [], - B == true -> - attached(F/A,maybe) - ; - attached(F/A,yes) - ). - -all_attached([]). -all_attached([C|Cs]) :- - functor(C,F,A), - is_attached(F/A), - all_attached(Cs). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -set_constraint_indices([],M) :- - N is M - 1, - max_constraint_index(N). -set_constraint_indices([C|Cs],N) :- - ( ( may_trigger(C) ; is_attached(C), get_store_type(C,default)) -> - constraint_index(C,N), - M is N + 1, - set_constraint_indices(Cs,M) - ; - set_constraint_indices(Cs,N) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ ____ _ _ _ _ -%% | _ \ _ _| | ___ / ___|___ _ __ ___ _ __ (_) | __ _| |_(_) ___ _ __ -%% | |_) | | | | |/ _ \ | | / _ \| '_ ` _ \| '_ \| | |/ _` | __| |/ _ \| '_ \ -%% | _ <| |_| | | __/ | |__| (_) | | | | | | |_) | | | (_| | |_| | (_) | | | | -%% |_| \_\\__,_|_|\___| \____\___/|_| |_| |_| .__/|_|_|\__,_|\__|_|\___/|_| |_| -%% |_| - -constraints_code(Constraints,Rules,Clauses) :- - post_constraints(Constraints,1), - constraints_code1(1,Rules,L,[]), - clean_clauses(L,Clauses). - -%% Add global data -post_constraints([],MaxIndex1) :- - MaxIndex is MaxIndex1 - 1, - constraint_count(MaxIndex). -post_constraints([F/A|Cs],N) :- - constraint(F/A,N), - M is N + 1, - post_constraints(Cs,M). -constraints_code1(I,Rules,L,T) :- - get_constraint_count(N), - ( I > N -> - T = L - ; - constraint_code(I,Rules,L,T1), - J is I + 1, - constraints_code1(J,Rules,T1,T) - ). - -%% Generate code for a single CHR constraint -constraint_code(I, Rules, L, T) :- - get_constraint(Constraint,I), - constraint_prelude(Constraint,Clause), - L = [Clause | L1], - Id1 = [0], - rules_code(Rules,I,Id1,Id2,L1,L2), - gen_cond_attach_clause(Constraint,Id2,L2,T). - -%% Generate prelude predicate for a constraint. -%% f(...) :- f/a_0(...,Susp). -constraint_prelude(F/A, Clause) :- - vars_susp(A,Vars,Susp,VarsSusp), - Head =.. [ F | Vars], - build_head(F,A,[0],VarsSusp,Delegate), - get_target_module(Mod), - FTerm =.. [F|Vars], - ( chr_pp_flag(debugable,on) -> - Clause = - ( Head :- - allocate_constraint(Mod : Delegate, Susp, FTerm, Vars), - ( - 'chr debug_event'(call(Susp)), - Delegate - ; - 'chr debug_event'(fail(Susp)), !, - fail - ), - ( - 'chr debug_event'(exit(Susp)) - ; - 'chr debug_event'(redo(Susp)), - fail - ) - ) - ; - Clause = ( Head :- Delegate ) - ). - -gen_cond_attach_clause(F/A,Id,L,T) :- - ( is_attached(F/A) -> - ( Id == [0] -> - ( may_trigger(F/A) -> - gen_cond_attach_goal(F/A,Body,AllArgs,Args,Susp) - ; - gen_insert_constraint_internal_goal(F/A,Body,AllArgs,Args,Susp) - ) - ; vars_susp(A,Args,Susp,AllArgs), - gen_uncond_attach_goal(F/A,Susp,Body,_) - ), - ( chr_pp_flag(debugable,on) -> - Constraint =.. [F|Args], - DebugEvent = 'chr debug_event'(insert(Constraint#Susp)) - ; - DebugEvent = true - ), - build_head(F,A,Id,AllArgs,Head), - Clause = ( Head :- DebugEvent,Body ), - L = [Clause | T] - ; - L = T - ). - -gen_cond_attach_goal(F/A,Goal,AllArgs,Args,Susp) :- - vars_susp(A,Args,Susp,AllArgs), - build_head(F,A,[0],AllArgs,Closure), - ( may_trigger(F/A) -> - make_name('attach_',F/A,AttachF), - Attach =.. [AttachF,Vars,Susp] - ; - Attach = true - ), - get_target_module(Mod), - FTerm =.. [F|Args], - generate_insert_constraint_call(F/A,Susp,InsertCall), - Goal = - ( - ( var(Susp) -> - insert_constraint_internal(Stored,Vars,Susp,Mod:Closure,FTerm,Args) - ; - activate_constraint(Stored,Vars,Susp,_) - ), - ( Stored == yes -> - InsertCall, - Attach - ; - true - ) - ). - -gen_insert_constraint_internal_goal(F/A,Goal,AllArgs,Args,Susp) :- - vars_susp(A,Args,Susp,AllArgs), - build_head(F,A,[0],AllArgs,Closure), - ( may_trigger(F/A) -> - make_name('attach_',F/A,AttachF), - Attach =.. [AttachF,Vars,Susp] - ; - Attach = true - ), - get_target_module(Mod), - FTerm =.. [F|Args], - generate_insert_constraint_call(F/A,Susp,InsertCall), - Goal = - ( - insert_constraint_internal(_,Vars,Susp,Mod:Closure,FTerm,Args), - InsertCall, - Attach - ). - -gen_uncond_attach_goal(FA,Susp,AttachGoal,Generation) :- - ( may_trigger(FA) -> - make_name('attach_',FA,AttachF), - Attach =.. [AttachF,Vars,Susp] - ; - Attach = true - ), - generate_insert_constraint_call(FA,Susp,InsertCall), - AttachGoal = - ( - activate_constraint(Stored,Vars, Susp, Generation), - ( Stored == yes -> - InsertCall, - Attach - ; - true - ) - ). - -%% Generate all the code for a constraint based on all CHR rules -rules_code([],_,Id,Id,L,L). -rules_code([R |Rs],I,Id1,Id3,L,T) :- - rule_code(R,I,Id1,Id2,L,T1), - rules_code(Rs,I,Id2,Id3,T1,T). - -%% Generate code for a constraint based on a single CHR rule -rule_code(PragmaRule,I,Id1,Id2,L,T) :- - PragmaRule = pragma(Rule,HeadIDs,_Pragmas,_Name,_RuleNb), - HeadIDs = ids(Head1IDs,Head2IDs), - Rule = rule(Head1,Head2,_,_), - heads1_code(Head1,[],Head1IDs,[],PragmaRule,I,Id1,L,L1), - heads2_code(Head2,[],Head2IDs,[],PragmaRule,I,Id1,Id2,L1,T). - -%% Generate code based on all the removed heads of a CHR rule -heads1_code([],_,_,_,_,_,_,L,L). -heads1_code([Head|Heads],RestHeads,[HeadID|HeadIDs],RestIDs,PragmaRule,I,Id,L,T) :- - PragmaRule = pragma(Rule,_,_Pragmas,_Name,RuleNb), - get_constraint(F/A,I), - ( functor(Head,F,A), - \+ is_passive(RuleNb,HeadID), - \+ check_unnecessary_active(Head,RestHeads,Rule), - all_attached(Heads), - all_attached(RestHeads), - Rule = rule(_,Heads2,_,_), - all_attached(Heads2) -> - append(Heads,RestHeads,OtherHeads), - append(HeadIDs,RestIDs,OtherIDs), - head1_code(Head,OtherHeads,OtherIDs,PragmaRule,F/A,I,Id,L,L1) - ; - L = L1 - ), - heads1_code(Heads,[Head|RestHeads],HeadIDs,[HeadID|RestIDs],PragmaRule,I,Id,L1,T). - -%% Generate code based on one removed head of a CHR rule -head1_code(Head,OtherHeads,OtherIDs,PragmaRule,FA,I,Id,L,T) :- - PragmaRule = pragma(Rule,_,_,_Name,RuleNb), - Rule = rule(_,Head2,_,_), - ( Head2 == [] -> - reorder_heads(RuleNb,Head,OtherHeads,OtherIDs,NOtherHeads,NOtherIDs), - simplification_code(Head,NOtherHeads,NOtherIDs,PragmaRule,FA,Id,L,T) - ; - simpagation_head1_code(Head,OtherHeads,OtherIDs,PragmaRule,FA,Id,L,T) - ). - -%% Generate code based on all the persistent heads of a CHR rule -heads2_code([],_,_,_,_,_,Id,Id,L,L). -heads2_code([Head|Heads],RestHeads,[HeadID|HeadIDs],RestIDs,PragmaRule,I,Id1,Id3,L,T) :- - PragmaRule = pragma(Rule,_,_Pragmas,_Name,RuleNb), - get_constraint(F/A,I), - ( functor(Head,F,A), - \+ is_passive(RuleNb,HeadID), - \+ check_unnecessary_active(Head,RestHeads,Rule), - \+ set_semantics_rule(PragmaRule), - all_attached(Heads), - all_attached(RestHeads), - Rule = rule(Heads1,_,_,_), - all_attached(Heads1) -> - append(Heads,RestHeads,OtherHeads), - append(HeadIDs,RestIDs,OtherIDs), - length(Heads,RestHeadNb), - head2_code(Head,OtherHeads,OtherIDs,PragmaRule,RestHeadNb,F/A,Id1,L,L0), - inc_id(Id1,Id2), - gen_alloc_inc_clause(F/A,Id1,L0,L1) - ; - L = L1, - Id2 = Id1 - ), - heads2_code(Heads,[Head|RestHeads],HeadIDs,[HeadID|RestIDs],PragmaRule,I,Id2,Id3,L1,T). - -%% Generate code based on one persistent head of a CHR rule -head2_code(Head,OtherHeads,OtherIDs,PragmaRule,RestHeadNb,FA,Id,L,T) :- - PragmaRule = pragma(Rule,_,_,_Name,RuleNb), - Rule = rule(Head1,_,_,_), - ( Head1 == [] -> - reorder_heads(RuleNb,Head,OtherHeads,OtherIDs,NOtherHeads,_), - propagation_code(Head,NOtherHeads,Rule,RuleNb,RestHeadNb,FA,Id,L,T) - ; - simpagation_head2_code(Head,OtherHeads,OtherIDs,PragmaRule,FA,Id,L,T) - ). - -gen_alloc_inc_clause(F/A,Id,L,T) :- - vars_susp(A,Vars,Susp,VarsSusp), - build_head(F,A,Id,VarsSusp,Head), - inc_id(Id,IncId), - build_head(F,A,IncId,VarsSusp,CallHead), - gen_allocation(Id,Vars,Susp,F/A,VarsSusp,ConditionalAlloc), - Clause = - ( - Head :- - ConditionalAlloc, - CallHead - ), - L = [Clause|T]. - -gen_cond_allocation(Vars,Susp,FA,VarsSusp,ConstraintAllocationGoal) :- - gen_allocation(Vars,Susp,FA,VarsSusp,UncondConstraintAllocationGoal), - ConstraintAllocationGoal = - ( var(Susp) -> - UncondConstraintAllocationGoal - ; - true - ). -gen_allocation(Vars,Susp,F/A,VarsSusp,ConstraintAllocationGoal) :- - build_head(F,A,[0],VarsSusp,Term), - get_target_module(Mod), - FTerm =.. [F|Vars], - ConstraintAllocationGoal = allocate_constraint(Mod : Term, Susp, FTerm, Vars). - -gen_allocation(Id,Vars,Susp,FA,VarsSusp,ConstraintAllocationGoal) :- - ( Id == [0] -> - ( is_attached(FA) -> - ( may_trigger(FA) -> - gen_cond_allocation(Vars,Susp,FA,VarsSusp,ConstraintAllocationGoal) - ; - gen_allocation(Vars,Susp,FA,VarsSusp,ConstraintAllocationGoal) - ) - ; - ConstraintAllocationGoal = true - ) - ; - ConstraintAllocationGoal = true - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -guard_via_reschedule(Retrievals,GuardList,Prelude,Goal) :- - ( chr_pp_flag(guard_via_reschedule,on) -> - guard_via_reschedule_main(Retrievals,GuardList,Prelude,Goal) - ; - append(Retrievals,GuardList,GoalList), - list2conj(GoalList,Goal) - ). - -guard_via_reschedule_main(Retrievals,GuardList,Prelude,Goal) :- - initialize_unit_dictionary(Prelude,Dict), - build_units(Retrievals,GuardList,Dict,Units), - dependency_reorder(Units,NUnits), - units2goal(NUnits,Goal). - -units2goal([],true). -units2goal([unit(_,Goal,_,_)|Units],(Goal,Goals)) :- - units2goal(Units,Goals). - -dependency_reorder(Units,NUnits) :- - dependency_reorder(Units,[],NUnits). - -dependency_reorder([],Acc,Result) :- - reverse(Acc,Result). - -dependency_reorder([Unit|Units],Acc,Result) :- - Unit = unit(_GID,_Goal,Type,GIDs), - ( Type == fixed -> - NAcc = [Unit|Acc] - ; - dependency_insert(Acc,Unit,GIDs,NAcc) - ), - dependency_reorder(Units,NAcc,Result). - -dependency_insert([],Unit,_,[Unit]). -dependency_insert([X|Xs],Unit,GIDs,L) :- - X = unit(GID,_,_,_), - ( memberchk(GID,GIDs) -> - L = [Unit,X|Xs] - ; - L = [X | T], - dependency_insert(Xs,Unit,GIDs,T) - ). - -build_units(Retrievals,Guard,InitialDict,Units) :- - build_retrieval_units(Retrievals,1,N,InitialDict,Dict,Units,Tail), - build_guard_units(Guard,N,Dict,Tail). - -build_retrieval_units([],N,N,Dict,Dict,L,L). -build_retrieval_units([U|Us],N,M,Dict,NDict,L,T) :- - term_variables(U,Vs), - update_unit_dictionary(Vs,N,Dict,Dict1,[],GIDs), - L = [unit(N,U,movable,GIDs)|L1], - N1 is N + 1, - build_retrieval_units2(Us,N1,M,Dict1,NDict,L1,T). - -build_retrieval_units2([],N,N,Dict,Dict,L,L). -build_retrieval_units2([U|Us],N,M,Dict,NDict,L,T) :- - term_variables(U,Vs), - update_unit_dictionary(Vs,N,Dict,Dict1,[],GIDs), - L = [unit(N,U,fixed,GIDs)|L1], - N1 is N + 1, - build_retrieval_units(Us,N1,M,Dict1,NDict,L1,T). - -initialize_unit_dictionary(Term,Dict) :- - term_variables(Term,Vars), - pair_all_with(Vars,0,Dict). - -update_unit_dictionary([],_,Dict,Dict,GIDs,GIDs). -update_unit_dictionary([V|Vs],This,Dict,NDict,GIDs,NGIDs) :- - ( lookup_eq(Dict,V,GID) -> - ( (GID == This ; memberchk(GID,GIDs) ) -> - GIDs1 = GIDs - ; - GIDs1 = [GID|GIDs] - ), - Dict1 = Dict - ; - Dict1 = [V - This|Dict], - GIDs1 = GIDs - ), - update_unit_dictionary(Vs,This,Dict1,NDict,GIDs1,NGIDs). - -build_guard_units(Guard,N,Dict,Units) :- - ( Guard = [Goal] -> - Units = [unit(N,Goal,fixed,[])] - ; Guard = [Goal|Goals] -> - term_variables(Goal,Vs), - update_unit_dictionary2(Vs,N,Dict,NDict,[],GIDs), - Units = [unit(N,Goal,movable,GIDs)|RUnits], - N1 is N + 1, - build_guard_units(Goals,N1,NDict,RUnits) - ). - -update_unit_dictionary2([],_,Dict,Dict,GIDs,GIDs). -update_unit_dictionary2([V|Vs],This,Dict,NDict,GIDs,NGIDs) :- - ( lookup_eq(Dict,V,GID) -> - ( (GID == This ; memberchk(GID,GIDs) ) -> - GIDs1 = GIDs - ; - GIDs1 = [GID|GIDs] - ), - Dict1 = [V - This|Dict] - ; - Dict1 = [V - This|Dict], - GIDs1 = GIDs - ), - update_unit_dictionary2(Vs,This,Dict1,NDict,GIDs1,NGIDs). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ ____ _ _ -%% / ___| ___| |_ / ___| ___ _ __ ___ __ _ _ __ | |_(_) ___ ___ _ -%% \___ \ / _ \ __| \___ \ / _ \ '_ ` _ \ / _` | '_ \| __| |/ __/ __(_) -%% ___) | __/ |_ ___) | __/ | | | | | (_| | | | | |_| | (__\__ \_ -%% |____/ \___|\__| |____/ \___|_| |_| |_|\__,_|_| |_|\__|_|\___|___(_) -%% -%% _ _ _ ___ __ -%% | | | |_ __ (_) __ _ _ _ ___ |_ _|_ __ / _| ___ _ __ ___ _ __ ___ ___ -%% | | | | '_ \| |/ _` | | | |/ _ \ | || '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \ -%% | |_| | | | | | (_| | |_| | __/ | || | | | _| __/ | | __/ | | | (_| __/ -%% \___/|_| |_|_|\__, |\__,_|\___| |___|_| |_|_| \___|_| \___|_| |_|\___\___| -%% |_| -unique_analyse_optimise(Rules,NRules) :- - ( chr_pp_flag(unique_analyse_optimise,on) -> - unique_analyse_optimise_main(Rules,1,[],NRules) - ; - NRules = Rules - ). - -unique_analyse_optimise_main([],_,_,[]). -unique_analyse_optimise_main([PRule|PRules],N,PatternList,[NPRule|NPRules]) :- - ( discover_unique_pattern(PRule,N,Pattern) -> - NPatternList = [Pattern|PatternList] - ; - NPatternList = PatternList - ), - PRule = pragma(Rule,Ids,Pragmas,Name,RuleNb), - Rule = rule(H1,H2,_,_), - Ids = ids(Ids1,Ids2), - apply_unique_patterns_to_constraints(H1,Ids1,NPatternList,MorePragmas1), - apply_unique_patterns_to_constraints(H2,Ids2,NPatternList,MorePragmas2), - globalize_unique_pragmas(MorePragmas1,RuleNb), - globalize_unique_pragmas(MorePragmas2,RuleNb), - append([MorePragmas1,MorePragmas2,Pragmas],NPragmas), - NPRule = pragma(Rule,Ids,NPragmas,Name,RuleNb), - N1 is N + 1, - unique_analyse_optimise_main(PRules,N1,NPatternList,NPRules). - -globalize_unique_pragmas([],_). -globalize_unique_pragmas([unique(ID,Vars)|R],RuleNb) :- - pragma_unique(RuleNb,ID,Vars), - globalize_unique_pragmas(R,RuleNb). - -apply_unique_patterns_to_constraints([],_,_,[]). -apply_unique_patterns_to_constraints([C|Cs],[Id|Ids],Patterns,Pragmas) :- - ( member(Pattern,Patterns), - apply_unique_pattern(C,Id,Pattern,Pragma) -> - Pragmas = [Pragma | RPragmas] - ; - Pragmas = RPragmas - ), - apply_unique_patterns_to_constraints(Cs,Ids,Patterns,RPragmas). - -apply_unique_pattern(Constraint,Id,Pattern,Pragma) :- - Pattern = unique(PatternConstraint,PatternKey), - subsumes(Constraint,PatternConstraint,Unifier), - find_with_var_identity( V, - Unifier - , - ( - member(T,PatternKey), - lookup_eq(Unifier,T,Term), - term_variables(Term,Vs), - member(V,Vs) - ), - Vars2), - sort(Vars2,Vars3), - Vars = Vars3, - Pragma = unique(Id,Vars). - -% subsumes(+Term1, +Term2, -Unifier) -% -% If Term1 is a more general term than Term2 (e.g. has a larger -% part instantiated), unify Unifier with a list Var-Value of -% variables from Term2 and their corresponding values in Term1. - -subsumes(Term1,Term2,Unifier) :- - empty_ds(S0), - subsumes_aux(Term1,Term2,S0,S), - ds_to_list(S,L), - build_unifier(L,Unifier). - -subsumes_aux(Term1, Term2, S0, S) :- - ( compound(Term2), - functor(Term2, F, N) - -> compound(Term1), functor(Term1, F, N), - subsumes_aux(N, Term1, Term2, S0, S) - ; Term1 == Term2 - -> S = S0 - ; var(Term2), - get_ds(Term1,S0,V) - -> V == Term2, S = S0 - ; var(Term2), - put_ds(Term1, S0, Term2, S) - ). - -subsumes_aux(0, _, _, S, S) :- ! . -subsumes_aux(N, T1, T2, S0, S) :- - arg(N, T1, T1x), - arg(N, T2, T2x), - subsumes_aux(T1x, T2x, S0, S1), - M is N-1, - subsumes_aux(M, T1, T2, S1, S). - -build_unifier([],[]). -build_unifier([X-V|R],[V - X | T]) :- - build_unifier(R,T). - -discover_unique_pattern(PragmaRule,RuleNb,Pattern) :- - PragmaRule = pragma(Rule,_,_Pragmas,Name,RuleNb), - Rule = rule(H1,H2,Guard,_), - ( H1 = [C1], - H2 = [C2] -> - true - ; H1 = [C1,C2], - H2 == [] -> - true - ), - check_unique_constraints(C1,C2,Guard,RuleNb,List), - term_variables(C1,Vs), - select_pragma_unique_variables(List,Vs,Key), - Pattern0 = unique(C1,Key), - copy_term_nat(Pattern0,Pattern), - ( verbosity_on -> - format('Found unique pattern ~w in rule ~d~@\n', - [Pattern,RuleNb,(Name=yes(N) -> write(": "),write(N) ; true)]) - ; - true - ). - -select_pragma_unique_variables([],_,[]). -select_pragma_unique_variables([X-Y|R],Vs,L) :- - ( X == Y -> - L = [X|T] - ; - once(( - \+ memberchk_eq(X,Vs) - ; - \+ memberchk_eq(Y,Vs) - )), - L = T - ), - select_pragma_unique_variables(R,Vs,T). - -check_unique_constraints(C1,C2,G,RuleNb,List) :- - \+ any_passive_head(RuleNb), - variable_replacement(C1-C2,C2-C1,List), - copy_with_variable_replacement(G,OtherG,List), - negate_b(G,NotG), - once(entails_b(NotG,OtherG)). - -check_unnecessary_active(Constraint,Previous,Rule) :- - ( chr_pp_flag(check_unnecessary_active,full) -> - check_unnecessary_active_main(Constraint,Previous,Rule) - ; chr_pp_flag(check_unnecessary_active,simplification), - Rule = rule(_,[],_,_) -> - check_unnecessary_active_main(Constraint,Previous,Rule) - ; - fail - ). - -check_unnecessary_active_main(Constraint,Previous,Rule) :- - member(Other,Previous), - variable_replacement(Other,Constraint,List), - copy_with_variable_replacement(Rule,Rule2,List), - identical_rules(Rule,Rule2), ! . - -set_semantics_rule(PragmaRule) :- - ( chr_pp_flag(set_semantics_rule,on) -> - set_semantics_rule_main(PragmaRule) - ; - fail - ). - -set_semantics_rule_main(PragmaRule) :- - PragmaRule = pragma(Rule,IDs,Pragmas,_,RuleNb), - Rule = rule([C1],[C2],true,_), - IDs = ids([ID1],[ID2]), - once(member(unique(ID1,L1),Pragmas)), - once(member(unique(ID2,L2),Pragmas)), - L1 == L2, - \+ is_passive(RuleNb,ID1). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _____ _ _ -%% | _ \ _ _| | ___ | ____|__ _ _ _(_)_ ____ _| | ___ _ __ ___ ___ -%% | |_) | | | | |/ _ \ | _| / _` | | | | \ \ / / _` | |/ _ \ '_ \ / __/ _ \ -%% | _ <| |_| | | __/ | |__| (_| | |_| | |\ V / (_| | | __/ | | | (_| __/ -%% |_| \_\\__,_|_|\___| |_____\__, |\__,_|_| \_/ \__,_|_|\___|_| |_|\___\___| -%% |_| -% have to check for no duplicates in value list - -% check wether two rules are identical - -identical_rules(rule(H11,H21,G1,B1),rule(H12,H22,G2,B2)) :- - G1 == G2, - identical_bodies(B1,B2), - permutation(H11,P1), - P1 == H12, - permutation(H21,P2), - P2 == H22. - -identical_bodies(B1,B2) :- - ( B1 = (X1 = Y1), - B2 = (X2 = Y2) -> - ( X1 == X2, - Y1 == Y2 - ; X1 == Y2, - X2 == Y1 - ), - ! - ; B1 == B2 - ). - -% replace variables in list - -copy_with_variable_replacement(X,Y,L) :- - ( var(X) -> - ( lookup_eq(L,X,Y) -> - true - ; X = Y - ) - ; functor(X,F,A), - functor(Y,F,A), - X =.. [_|XArgs], - Y =.. [_|YArgs], - copy_with_variable_replacement_l(XArgs,YArgs,L) - ). - -copy_with_variable_replacement_l([],[],_). -copy_with_variable_replacement_l([X|Xs],[Y|Ys],L) :- - copy_with_variable_replacement(X,Y,L), - copy_with_variable_replacement_l(Xs,Ys,L). - -%% build variable replacement list - -variable_replacement(X,Y,L) :- - variable_replacement(X,Y,[],L). - -variable_replacement(X,Y,L1,L2) :- - ( var(X) -> - var(Y), - ( lookup_eq(L1,X,Z) -> - Z == Y, - L2 = L1 - ; L2 = [X-Y|L1] - ) - ; X =.. [F|XArgs], - nonvar(Y), - Y =.. [F|YArgs], - variable_replacement_l(XArgs,YArgs,L1,L2) - ). - -variable_replacement_l([],[],L,L). -variable_replacement_l([X|Xs],[Y|Ys],L1,L3) :- - variable_replacement(X,Y,L1,L2), - variable_replacement_l(Xs,Ys,L2,L3). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ __ _ _ _ -%% / ___|(_)_ __ ___ _ __ | (_)/ _(_) ___ __ _| |_(_) ___ _ __ -%% \___ \| | '_ ` _ \| '_ \| | | |_| |/ __/ _` | __| |/ _ \| '_ \ -%% ___) | | | | | | | |_) | | | _| | (_| (_| | |_| | (_) | | | | -%% |____/|_|_| |_| |_| .__/|_|_|_| |_|\___\__,_|\__|_|\___/|_| |_| -%% |_| - -simplification_code(Head,RestHeads,RestIDs,PragmaRule,F/A,Id,L,T) :- - PragmaRule = pragma(Rule,_,Pragmas,_,_RuleNb), - head_info(Head,A,_Vars,Susp,HeadVars,HeadPairs), - build_head(F,A,Id,HeadVars,ClauseHead), - head_arg_matches(HeadPairs,[],FirstMatching,VarDict1), - - ( RestHeads == [] -> - Susps = [], - VarDict = VarDict1, - GetRestHeads = [] - ; - rest_heads_retrieval_and_matching(RestHeads,RestIDs,Pragmas,Head,GetRestHeads,Susps,VarDict1,VarDict) - ), - - guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy), - guard_via_reschedule(GetRestHeads,GuardCopyList,ClauseHead-FirstMatching,RescheduledTest), - - gen_uncond_susps_detachments(Susps,RestHeads,SuspsDetachments), - gen_cond_susp_detachment(Id,Susp,F/A,SuspDetachment), - - ( chr_pp_flag(debugable,on) -> - Rule = rule(_,_,Guard,Body), - my_term_copy(Guard - Body, VarDict, _, DebugGuard - DebugBody), - DebugTry = 'chr debug_event'( try([Susp|RestSusps],[],DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply([Susp|RestSusps],[],DebugGuard,DebugBody)) - ; - DebugTry = true, - DebugApply = true - ), - - Clause = ( ClauseHead :- - FirstMatching, - RescheduledTest, - DebugTry, - !, - DebugApply, - SuspsDetachments, - SuspDetachment, - BodyCopy - ), - L = [Clause | T]. - -head_arg_matches(Pairs,VarDict,Goal,NVarDict) :- - head_arg_matches_(Pairs,VarDict,GoalList,NVarDict), - list2conj(GoalList,Goal). - -head_arg_matches_([],VarDict,[],VarDict). -head_arg_matches_([Arg-Var| Rest],VarDict,GoalList,NVarDict) :- - ( var(Arg) -> - ( lookup_eq(VarDict,Arg,OtherVar) -> - GoalList = [Var == OtherVar | RestGoalList], - VarDict1 = VarDict - ; VarDict1 = [Arg-Var | VarDict], - GoalList = RestGoalList - ), - Pairs = Rest - ; atomic(Arg) -> - GoalList = [ Var == Arg | RestGoalList], - VarDict = VarDict1, - Pairs = Rest - ; Arg =.. [_|Args], - functor(Arg,Fct,N), - functor(Term,Fct,N), - Term =.. [_|Vars], - GoalList =[ nonvar(Var), Var = Term | RestGoalList ], - pairup(Args,Vars,NewPairs), - append(NewPairs,Rest,Pairs), - VarDict1 = VarDict - ), - head_arg_matches_(Pairs,VarDict1,RestGoalList,NVarDict). - -rest_heads_retrieval_and_matching(Heads,IDs,Pragmas,ActiveHead,GoalList,Susps,VarDict,NVarDict):- - rest_heads_retrieval_and_matching(Heads,IDs,Pragmas,ActiveHead,GoalList,Susps,VarDict,NVarDict,[],[],[]). - -rest_heads_retrieval_and_matching(Heads,IDs,Pragmas,ActiveHead,GoalList,Susps,VarDict,NVarDict,PrevHs,PrevSusps,AttrDict) :- - ( Heads = [_|_] -> - rest_heads_retrieval_and_matching_n(Heads,IDs,Pragmas,PrevHs,PrevSusps,ActiveHead,GoalList,Susps,VarDict,NVarDict,AttrDict) - ; - GoalList = [], - Susps = [], - VarDict = NVarDict - ). - -rest_heads_retrieval_and_matching_n([],_,_,_,_,_,[],[],VarDict,VarDict,AttrDict) :- - instantiate_pattern_goals(AttrDict). -rest_heads_retrieval_and_matching_n([H|Hs],[ID|IDs],Pragmas,PrevHs,PrevSusps,ActiveHead,[ViaGoal,Goal|Goals],[Susp|Susps],VarDict,NVarDict,AttrDict) :- - functor(H,F,A), - get_store_type(F/A,StoreType), - ( StoreType == default -> - passive_head_via(H,[ActiveHead|PrevHs],AttrDict,VarDict,ViaGoal,Attr,NewAttrDict), - get_max_constraint_index(N), - ( N == 1 -> - VarSusps = Attr - ; - get_constraint_index(F/A,Pos), - make_attr(N,_Mask,SuspsList,Attr), - nth1(Pos,SuspsList,VarSusps) - ) - ; - lookup_passive_head(StoreType,H,[ActiveHead|PrevHs],VarDict,ViaGoal,VarSusps), - NewAttrDict = AttrDict - ), - head_info(H,A,Vars,_,_,Pairs), - head_arg_matches(Pairs,VarDict,MatchingGoal,VarDict1), - Suspension =.. [suspension,_,State,_,_,_,_|Vars], - different_from_other_susps(H,Susp,PrevHs,PrevSusps,DiffSuspGoals), - create_get_mutable_ref(active,State,GetMutable), - Goal1 = - ( - 'chr sbag_member'(Susp,VarSusps), - Susp = Suspension, - GetMutable, - DiffSuspGoals, - MatchingGoal - ), - ( member(unique(ID,UniqueKeus),Pragmas), - check_unique_keys(UniqueKeus,VarDict) -> - Goal = (Goal1 -> true) - ; - Goal = Goal1 - ), - rest_heads_retrieval_and_matching_n(Hs,IDs,Pragmas,[H|PrevHs],[Susp|PrevSusps],ActiveHead,Goals,Susps,VarDict1,NVarDict,NewAttrDict). - -instantiate_pattern_goals([]). -instantiate_pattern_goals([_-attr(Attr,Bits,Goal)|Rest]) :- - get_max_constraint_index(N), - ( N == 1 -> - Goal = true - ; - make_attr(N,Mask,_,Attr), - or_list(Bits,Pattern), !, - Goal = (Mask /\ Pattern =:= Pattern) - ), - instantiate_pattern_goals(Rest). - - -check_unique_keys([],_). -check_unique_keys([V|Vs],Dict) :- - lookup_eq(Dict,V,_), - check_unique_keys(Vs,Dict). - -% Generates tests to ensure the found constraint differs from previously found constraints -% TODO: detect more cases where constraints need be different -different_from_other_susps(Head,Susp,Heads,Susps,DiffSuspGoals) :- - ( bagof(DiffSuspGoal, Pos ^ ( nth1(Pos,Heads,PreHead), \+ Head \= PreHead, nth1(Pos,Susps,PreSusp), DiffSuspGoal = (Susp \== PreSusp) ),DiffSuspGoalList) -> - list2conj(DiffSuspGoalList,DiffSuspGoals) - ; - DiffSuspGoals = true - ). - -passive_head_via(Head,PrevHeads,AttrDict,VarDict,Goal,Attr,NewAttrDict) :- - functor(Head,F,A), - get_constraint_index(F/A,Pos), - common_variables(Head,PrevHeads,CommonVars), - translate(CommonVars,VarDict,Vars), - or_pattern(Pos,Bit), - ( permutation(Vars,PermutedVars), - lookup_eq(AttrDict,PermutedVars,attr(Attr,Positions,_)) -> - member(Bit,Positions), !, - NewAttrDict = AttrDict, - Goal = true - ; - Goal = (Goal1, PatternGoal), - gen_get_mod_constraints(Vars,Goal1,Attr), - NewAttrDict = [Vars - attr(Attr,[Bit|_],PatternGoal) | AttrDict] - ). - -common_variables(T,Ts,Vs) :- - term_variables(T,V1), - term_variables(Ts,V2), - intersect_eq(V1,V2,Vs). - -gen_get_mod_constraints(L,Goal,Susps) :- - get_target_module(Mod), - ( L == [] -> - Goal = - ( 'chr default_store'(Global), - get_attr(Global,Mod,TSusps), - TSusps = Susps - ) - ; - ( L = [A] -> - VIA = 'chr via_1'(A,V) - ; ( L = [A,B] -> - VIA = 'chr via_2'(A,B,V) - ; VIA = 'chr via'(L,V) - ) - ), - Goal = - ( VIA, - get_attr(V,Mod,TSusps), - TSusps = Susps - ) - ). - -guard_body_copies(Rule,VarDict,GuardCopy,BodyCopy) :- - guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy), - list2conj(GuardCopyList,GuardCopy). - -guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy) :- - Rule = rule(_,_,Guard,Body), - conj2list(Guard,GuardList), - split_off_simple_guard(GuardList,VarDict,GuardPrefix,RestGuardList), - my_term_copy(GuardPrefix-RestGuardList,VarDict,VarDict2,GuardPrefixCopy-RestGuardListCopyCore), - - append(GuardPrefixCopy,[RestGuardCopy],GuardCopyList), - term_variables(RestGuardList,GuardVars), - term_variables(RestGuardListCopyCore,GuardCopyVars), - ( chr_pp_flag(guard_locks,on), - find_with_var_identity(('chr lock'(Y)) - ('chr unlock'(Y)), - VarDict, - (member(X,GuardVars), % X is a variable appearing in the original guard - lookup_eq(VarDict,X,Y), % translate X into new variable - memberchk_eq(Y,GuardCopyVars) % redundant check? or multiple entries for X possible? - ), - LocksUnlocks) - - -> - once(pairup(Locks,Unlocks,LocksUnlocks)) - ; - Locks = [], - Unlocks = [] - ), - list2conj(Locks,LockPhase), - list2conj(Unlocks,UnlockPhase), - list2conj(RestGuardListCopyCore,RestGuardCopyCore), - RestGuardCopy = (LockPhase,(RestGuardCopyCore,UnlockPhase)), - my_term_copy(Body,VarDict2,BodyCopy). - - -split_off_simple_guard([],_,[],[]). -split_off_simple_guard([G|Gs],VarDict,S,C) :- - ( simple_guard(G,VarDict) -> - S = [G|Ss], - split_off_simple_guard(Gs,VarDict,Ss,C) - ; - S = [], - C = [G|Gs] - ). - -% simple guard: cheap and benign (does not bind variables) -simple_guard(G,VarDict) :- - binds_b(G,Vars), - \+ (( member(V,Vars), - lookup_eq(VarDict,V,_) - )). - -my_term_copy(X,Dict,Y) :- - my_term_copy(X,Dict,_,Y). - -my_term_copy(X,Dict1,Dict2,Y) :- - ( var(X) -> - ( lookup_eq(Dict1,X,Y) -> - Dict2 = Dict1 - ; Dict2 = [X-Y|Dict1] - ) - ; functor(X,XF,XA), - functor(Y,XF,XA), - X =.. [_|XArgs], - Y =.. [_|YArgs], - my_term_copy_list(XArgs,Dict1,Dict2,YArgs) - ). - -my_term_copy_list([],Dict,Dict,[]). -my_term_copy_list([X|Xs],Dict1,Dict3,[Y|Ys]) :- - my_term_copy(X,Dict1,Dict2,Y), - my_term_copy_list(Xs,Dict2,Dict3,Ys). - -gen_cond_susp_detachment(Id,Susp,FA,SuspDetachment) :- - ( is_attached(FA) -> - ( Id == [0], \+ may_trigger(FA) -> - SuspDetachment = true - ; - gen_uncond_susp_detachment(Susp,FA,UnCondSuspDetachment), - SuspDetachment = - ( var(Susp) -> - true - ; UnCondSuspDetachment - ) - ) - ; - SuspDetachment = true - ). - -gen_uncond_susp_detachment(Susp,FA,SuspDetachment) :- - ( is_attached(FA) -> - ( may_trigger(FA) -> - make_name('detach_',FA,Fct), - Detach =.. [Fct,Vars,Susp] - ; - Detach = true - ), - ( chr_pp_flag(debugable,on) -> - DebugEvent = 'chr debug_event'(remove(Susp)) - ; - DebugEvent = true - ), - generate_delete_constraint_call(FA,Susp,DeleteCall), - SuspDetachment = - ( - DebugEvent, - remove_constraint_internal(Susp, Vars, Delete), - ( Delete == yes -> - DeleteCall, - Detach - ; - true - ) - ) - ; - SuspDetachment = true - ). - -gen_uncond_susps_detachments([],[],true). -gen_uncond_susps_detachments([Susp|Susps],[Term|Terms],(SuspDetachment,SuspsDetachments)) :- - functor(Term,F,A), - gen_uncond_susp_detachment(Susp,F/A,SuspDetachment), - gen_uncond_susps_detachments(Susps,Terms,SuspsDetachments). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ _ -%% / ___|(_)_ __ ___ _ __ __ _ __ _ __ _| |_(_) ___ _ __ / | -%% \___ \| | '_ ` _ \| '_ \ / _` |/ _` |/ _` | __| |/ _ \| '_ \ | | -%% ___) | | | | | | | |_) | (_| | (_| | (_| | |_| | (_) | | | | | | -%% |____/|_|_| |_| |_| .__/ \__,_|\__, |\__,_|\__|_|\___/|_| |_| |_| -%% |_| |___/ - -simpagation_head1_code(Head,RestHeads,OtherIDs,PragmaRule,F/A,Id,L,T) :- - PragmaRule = pragma(Rule,ids(_,Heads2IDs),Pragmas,_Name,RuleNb), - Rule = rule(_Heads,Heads2,Guard,Body), - - head_info(Head,A,_Vars,Susp,HeadVars,HeadPairs), - head_arg_matches(HeadPairs,[],FirstMatching,VarDict1), - - build_head(F,A,Id,HeadVars,ClauseHead), - - append(RestHeads,Heads2,Heads), - append(OtherIDs,Heads2IDs,IDs), - reorder_heads(RuleNb,Head,Heads,IDs,NHeads,NIDs), - rest_heads_retrieval_and_matching(NHeads,NIDs,Pragmas,Head,GetRestHeads,Susps,VarDict1,VarDict), - split_by_ids(NIDs,Susps,OtherIDs,Susps1,Susps2), - - guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy), - guard_via_reschedule(GetRestHeads,GuardCopyList,ClauseHead-FirstMatching,RescheduledTest), - - gen_uncond_susps_detachments(Susps1,RestHeads,SuspsDetachments), - gen_cond_susp_detachment(Id,Susp,F/A,SuspDetachment), - - ( chr_pp_flag(debugable,on) -> - my_term_copy(Guard - Body, VarDict, _, DebugGuard - DebugBody), - DebugTry = 'chr debug_event'( try([Susp|Susps1],Susps2,DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply([Susp|Susps1],Susps2,DebugGuard,DebugBody)) - ; - DebugTry = true, - DebugApply = true - ), - - Clause = ( ClauseHead :- - FirstMatching, - RescheduledTest, - DebugTry, - !, - DebugApply, - SuspsDetachments, - SuspDetachment, - BodyCopy - ), - L = [Clause | T]. - -split_by_ids([],[],_,[],[]). -split_by_ids([I|Is],[S|Ss],I1s,S1s,S2s) :- - ( memberchk_eq(I,I1s) -> - S1s = [S | R1s], - S2s = R2s - ; - S1s = R1s, - S2s = [S | R2s] - ), - split_by_ids(Is,Ss,I1s,R1s,R2s). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ ____ -%% / ___|(_)_ __ ___ _ __ __ _ __ _ __ _| |_(_) ___ _ __ |___ \ -%% \___ \| | '_ ` _ \| '_ \ / _` |/ _` |/ _` | __| |/ _ \| '_ \ __) | -%% ___) | | | | | | | |_) | (_| | (_| | (_| | |_| | (_) | | | | / __/ -%% |____/|_|_| |_| |_| .__/ \__,_|\__, |\__,_|\__|_|\___/|_| |_| |_____| -%% |_| |___/ - -%% Genereate prelude + worker predicate -%% prelude calls worker -%% worker iterates over one type of removed constraints -simpagation_head2_code(Head2,RestHeads2,RestIDs,PragmaRule,FA,Id,L,T) :- - PragmaRule = pragma(Rule,ids(IDs1,_),Pragmas,_Name,RuleNb), - Rule = rule(Heads1,_,Guard,Body), - reorder_heads(RuleNb,Head2,Heads1,IDs1,[Head1|RestHeads1],[ID1|RestIDs1]), % Heads1 = [Head1|RestHeads1], - % IDs1 = [ID1|RestIDs1], - simpagation_head2_prelude(Head2,Head1,[RestHeads2,Heads1,Guard,Body],FA,Id,L,L1), - extend_id(Id,Id2), - simpagation_head2_worker(Head2,Head1,ID1,RestHeads1,RestIDs1,RestHeads2,RestIDs,PragmaRule,FA,Id2,L1,T). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_prelude(Head,Head1,Rest,F/A,Id1,L,T) :- - head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs), - build_head(F,A,Id1,VarsSusp,ClauseHead), - head_arg_matches(HeadPairs,[],FirstMatching,VarDict), - - lookup_passive_head(Head1,[Head],VarDict,ModConstraintsGoal,AllSusps), - - gen_allocation(Id1,Vars,Susp,F/A,VarsSusp,ConstraintAllocationGoal), - - extend_id(Id1,DelegateId), - extra_active_delegate_variables(Head,Rest,VarDict,ExtraVars), - append([AllSusps|VarsSusp],ExtraVars,DelegateCallVars), - build_head(F,A,DelegateId,DelegateCallVars,Delegate), - - PreludeClause = - ( ClauseHead :- - FirstMatching, - ModConstraintsGoal, - !, - ConstraintAllocationGoal, - Delegate - ), - L = [PreludeClause|T]. - -extra_active_delegate_variables(Term,Terms,VarDict,Vars) :- - Term =.. [_|Args], - delegate_variables(Term,Terms,VarDict,Args,Vars). - -passive_delegate_variables(Term,PrevTerms,NextTerms,VarDict,Vars) :- - term_variables(PrevTerms,PrevVars), - delegate_variables(Term,NextTerms,VarDict,PrevVars,Vars). - -delegate_variables(Term,Terms,VarDict,PrevVars,Vars) :- - term_variables(Term,V1), - term_variables(Terms,V2), - intersect_eq(V1,V2,V3), - list_difference_eq(V3,PrevVars,V4), - translate(V4,VarDict,Vars). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_worker(Head2,Head1,ID1,RestHeads1,IDs1,RestHeads2,IDs2,PragmaRule,FA,Id,L,T) :- - PragmaRule = pragma(Rule,_,_,_,_), - Rule = rule(_,_,Guard,Body), - simpagation_head2_worker_end(Head2,[Head1,RestHeads1,RestHeads2,Guard,Body],FA,Id,L,L1), - simpagation_head2_worker_body(Head2,Head1,ID1,RestHeads1,IDs1,RestHeads2,IDs2,PragmaRule,FA,Id,L1,T). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_worker_body(Head2,Head1,ID1,RestHeads1,IDs1,RestHeads2,IDs2,PragmaRule,F/A,Id,L,T) :- - gen_var(OtherSusp), - gen_var(OtherSusps), - - head_info(Head2,A,_Vars,Susp,VarsSusp,Head2Pairs), - head_arg_matches(Head2Pairs,[],_,VarDict1), - - PragmaRule = pragma(Rule,_,Pragmas,_,RuleNb), - Rule = rule(_,_,Guard,Body), - extra_active_delegate_variables(Head2,[Head1,RestHeads1,RestHeads2,Guard,Body],VarDict1,ExtraVars), - append([[OtherSusp|OtherSusps]|VarsSusp],ExtraVars,HeadVars), - build_head(F,A,Id,HeadVars,ClauseHead), - - functor(Head1,_OtherF,OtherA), - head_info(Head1,OtherA,OtherVars,_,_,Head1Pairs), - head_arg_matches(Head1Pairs,VarDict1,FirstMatching,VarDict2), - - OtherSuspension =.. [suspension,_,OtherState,_,_,_,_|OtherVars], - create_get_mutable_ref(active,OtherState,GetMutable), - IteratorSuspTest = - ( OtherSusp = OtherSuspension, - GetMutable - ), - - ( (RestHeads1 \== [] ; RestHeads2 \== []) -> - append(RestHeads1,RestHeads2,RestHeads), - append(IDs1,IDs2,IDs), - reorder_heads(RuleNb,Head1-Head2,RestHeads,IDs,NRestHeads,NIDs), - rest_heads_retrieval_and_matching(NRestHeads,NIDs,Pragmas,[Head1,Head2],RestSuspsRetrieval,Susps,VarDict2,VarDict,[Head1],[OtherSusp],[]), - split_by_ids(NIDs,Susps,IDs1,Susps1,Susps2) - ; RestSuspsRetrieval = [], - Susps1 = [], - Susps2 = [], - VarDict = VarDict2 - ), - - gen_uncond_susps_detachments([OtherSusp | Susps1],[Head1|RestHeads1],Susps1Detachments), - - append([OtherSusps|VarsSusp],ExtraVars,RecursiveVars), - build_head(F,A,Id,RecursiveVars,RecursiveCall), - append([[]|VarsSusp],ExtraVars,RecursiveVars2), - build_head(F,A,Id,RecursiveVars2,RecursiveCall2), - - guard_body_copies2(Rule,VarDict,GuardCopyList,BodyCopy), - guard_via_reschedule(RestSuspsRetrieval,GuardCopyList,v(ClauseHead,IteratorSuspTest,FirstMatching),RescheduledTest), - ( BodyCopy \== true -> - gen_uncond_attach_goal(F/A,Susp,Attachment,Generation), - gen_state_cond_call(Susp,A,RecursiveCall,Generation,ConditionalRecursiveCall), - gen_state_cond_call(Susp,A,RecursiveCall2,Generation,ConditionalRecursiveCall2) - ; Attachment = true, - ConditionalRecursiveCall = RecursiveCall, - ConditionalRecursiveCall2 = RecursiveCall2 - ), - - ( chr_pp_flag(debugable,on) -> - my_term_copy(Guard - Body, VarDict, _, DebugGuard - DebugBody), - DebugTry = 'chr debug_event'( try([OtherSusp|Susps1],[Susp|Susps2],DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply([OtherSusp|Susps1],[Susp|Susps2],DebugGuard,DebugBody)) - ; - DebugTry = true, - DebugApply = true - ), - - ( member(unique(ID1,UniqueKeys), Pragmas), - check_unique_keys(UniqueKeys,VarDict1) -> - Clause = - ( ClauseHead :- - ( IteratorSuspTest, - FirstMatching -> - ( RescheduledTest, - DebugTry -> - DebugApply, - Susps1Detachments, - Attachment, - BodyCopy, - ConditionalRecursiveCall2 - ; - RecursiveCall2 - ) - ; - RecursiveCall - ) - ) - ; - Clause = - ( ClauseHead :- - ( IteratorSuspTest, - FirstMatching, - RescheduledTest, - DebugTry -> - DebugApply, - Susps1Detachments, - Attachment, - BodyCopy, - ConditionalRecursiveCall - ; - RecursiveCall - ) - ) - ), - L = [Clause | T]. - -gen_state_cond_call(Susp,N,Call,Generation,ConditionalCall) :- - length(Args,N), - Suspension =.. [suspension,_,State,_,NewGeneration,_,_|Args], - create_get_mutable_ref(active,State,GetState), - create_get_mutable_ref(Generation,NewGeneration,GetGeneration), - ConditionalCall = - ( Susp = Suspension, - GetState, - GetGeneration -> - 'chr update_mutable'(inactive,State), - Call - ; true - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -simpagation_head2_worker_end(Head,Rest,F/A,Id,L,T) :- - head_info(Head,A,_Vars,_Susp,VarsSusp,Pairs), - head_arg_matches(Pairs,[],_,VarDict), - extra_active_delegate_variables(Head,Rest,VarDict,ExtraVars), - append([[]|VarsSusp],ExtraVars,HeadVars), - build_head(F,A,Id,HeadVars,ClauseHead), - next_id(Id,ContinuationId), - build_head(F,A,ContinuationId,VarsSusp,ContinuationHead), - Clause = ( ClauseHead :- ContinuationHead ), - L = [Clause | T]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ -%% | _ \ _ __ ___ _ __ __ _ __ _ __ _| |_(_) ___ _ __ -%% | |_) | '__/ _ \| '_ \ / _` |/ _` |/ _` | __| |/ _ \| '_ \ -%% | __/| | | (_) | |_) | (_| | (_| | (_| | |_| | (_) | | | | -%% |_| |_| \___/| .__/ \__,_|\__, |\__,_|\__|_|\___/|_| |_| -%% |_| |___/ - -propagation_code(Head,RestHeads,Rule,RuleNb,RestHeadNb,FA,Id,L,T) :- - ( RestHeads == [] -> - propagation_single_headed(Head,Rule,RuleNb,FA,Id,L,T) - ; - propagation_multi_headed(Head,RestHeads,Rule,RuleNb,RestHeadNb,FA,Id,L,T) - ). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Single headed propagation -%% everything in a single clause -propagation_single_headed(Head,Rule,RuleNb,F/A,Id,L,T) :- - head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs), - build_head(F,A,Id,VarsSusp,ClauseHead), - - inc_id(Id,NextId), - build_head(F,A,NextId,VarsSusp,NextHead), - - NextCall = NextHead, - - head_arg_matches(HeadPairs,[],HeadMatching,VarDict), - guard_body_copies(Rule,VarDict,GuardCopy,BodyCopy), - gen_allocation(Id,Vars,Susp,F/A,VarsSusp,Allocation), - gen_uncond_attach_goal(F/A,Susp,Attachment,Generation), - - gen_state_cond_call(Susp,A,NextCall,Generation,ConditionalNextCall), - - ( chr_pp_flag(debugable,on) -> - Rule = rule(_,_,Guard,Body), - my_term_copy(Guard - Body, VarDict, _, DebugGuard - DebugBody), - DebugTry = 'chr debug_event'( try([],[Susp],DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply([],[Susp],DebugGuard,DebugBody)) - ; - DebugTry = true, - DebugApply = true - ), - - Clause = ( - ClauseHead :- - HeadMatching, - Allocation, - 'chr novel_production'(Susp,RuleNb), % optimisation of t(RuleNb,Susp) - GuardCopy, - DebugTry, - !, - DebugApply, - 'chr extend_history'(Susp,RuleNb), - Attachment, - BodyCopy, - ConditionalNextCall - ), - L = [Clause | T]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% multi headed propagation -%% prelude + predicates to accumulate the necessary combinations of suspended -%% constraints + predicate to execute the body -propagation_multi_headed(Head,RestHeads,Rule,RuleNb,RestHeadNb,FA,Id,L,T) :- - RestHeads = [First|Rest], - propagation_prelude(Head,RestHeads,Rule,FA,Id,L,L1), - extend_id(Id,ExtendedId), - propagation_nested_code(Rest,[First,Head],Rule,RuleNb,RestHeadNb,FA,ExtendedId,L1,T). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -propagation_prelude(Head,[First|Rest],Rule,F/A,Id,L,T) :- - head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs), - build_head(F,A,Id,VarsSusp,PreludeHead), - head_arg_matches(HeadPairs,[],FirstMatching,VarDict), - Rule = rule(_,_,Guard,Body), - extra_active_delegate_variables(Head,[First,Rest,Guard,Body],VarDict,ExtraVars), - - lookup_passive_head(First,[Head],VarDict,FirstSuspGoal,Susps), - - gen_allocation(Id,Vars,Susp,F/A,VarsSusp,CondAllocation), - - extend_id(Id,NestedId), - append([Susps|VarsSusp],ExtraVars,NestedVars), - build_head(F,A,NestedId,NestedVars,NestedHead), - NestedCall = NestedHead, - - Prelude = ( - PreludeHead :- - FirstMatching, - FirstSuspGoal, - !, - CondAllocation, - NestedCall - ), - L = [Prelude|T]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -propagation_nested_code([],[CurrentHead|PreHeads],Rule,RuleNb,RestHeadNb,FA,Id,L,T) :- - propagation_end([CurrentHead|PreHeads],[],Rule,FA,Id,L,L1), - propagation_body(CurrentHead,PreHeads,Rule,RuleNb,RestHeadNb,FA,Id,L1,T). - -propagation_nested_code([Head|RestHeads],PreHeads,Rule,RuleNb,RestHeadNb,FA,Id,L,T) :- - propagation_end(PreHeads,[Head|RestHeads],Rule,FA,Id,L,L1), - propagation_accumulator([Head|RestHeads],PreHeads,Rule,FA,Id,L1,L2), - inc_id(Id,IncId), - propagation_nested_code(RestHeads,[Head|PreHeads],Rule,RuleNb,RestHeadNb,FA,IncId,L2,T). - -propagation_body(CurrentHead,PreHeads,Rule,RuleNb,RestHeadNb,F/A,Id,L,T) :- - Rule = rule(_,_,Guard,Body), - get_prop_inner_loop_vars(PreHeads,[CurrentHead,Guard,Body],PreVarsAndSusps,VarDict1,Susp,RestSusps), - gen_var(OtherSusp), - gen_var(OtherSusps), - functor(CurrentHead,_OtherF,OtherA), - gen_vars(OtherA,OtherVars), - Suspension =.. [suspension,_,State,_,_,_,_|OtherVars], - create_get_mutable_ref(active,State,GetMutable), - CurrentSuspTest = ( - OtherSusp = Suspension, - GetMutable - ), - ClauseVars = [[OtherSusp|OtherSusps]|PreVarsAndSusps], - build_head(F,A,Id,ClauseVars,ClauseHead), - RecursiveVars = [OtherSusps|PreVarsAndSusps], - build_head(F,A,Id,RecursiveVars,RecursiveHead), - RecursiveCall = RecursiveHead, - CurrentHead =.. [_|OtherArgs], - pairup(OtherArgs,OtherVars,OtherPairs), - head_arg_matches(OtherPairs,VarDict1,Matching,VarDict), - - different_from_other_susps(CurrentHead,OtherSusp,PreHeads,RestSusps,DiffSuspGoals), - - guard_body_copies(Rule,VarDict,GuardCopy,BodyCopy), - gen_uncond_attach_goal(F/A,Susp,Attach,Generation), - gen_state_cond_call(Susp,A,RecursiveCall,Generation,ConditionalRecursiveCall), - - history_susps(RestHeadNb,[OtherSusp|RestSusps],Susp,[],HistorySusps), - bagof('chr novel_production'(X,Y),( member(X,HistorySusps), Y = TupleVar) ,NovelProductionsList), - list2conj(NovelProductionsList,NovelProductions), - Tuple =.. [t,RuleNb|HistorySusps], - - ( chr_pp_flag(debugable,on) -> - Rule = rule(_,_,Guard,Body), - my_term_copy(Guard - Body, VarDict, _, DebugGuard - DebugBody), - DebugTry = 'chr debug_event'( try([],[Susp,OtherSusp|RestSusps],DebugGuard,DebugBody)), - DebugApply = 'chr debug_event'(apply([],[Susp,OtherSusp|RestSusps],DebugGuard,DebugBody)) - ; - DebugTry = true, - DebugApply = true - ), - - Clause = ( - ClauseHead :- - ( CurrentSuspTest, - DiffSuspGoals, - Matching, - TupleVar = Tuple, - NovelProductions, - GuardCopy, - DebugTry -> - DebugApply, - 'chr extend_history'(Susp,TupleVar), - Attach, - BodyCopy, - ConditionalRecursiveCall - ; RecursiveCall - ) - ), - L = [Clause|T]. - -history_susps(Count,OtherSusps,Susp,Acc,HistorySusps) :- - ( Count == 0 -> - reverse(OtherSusps,ReversedSusps), - append(ReversedSusps,[Susp|Acc],HistorySusps) - ; - OtherSusps = [OtherSusp|RestOtherSusps], - NCount is Count - 1, - history_susps(NCount,RestOtherSusps,Susp,[OtherSusp|Acc],HistorySusps) - ). - -get_prop_inner_loop_vars([Head],Terms,HeadVars,VarDict,Susp,[]) :- - !, - functor(Head,_F,A), - head_info(Head,A,_Vars,Susp,VarsSusp,Pairs), - head_arg_matches(Pairs,[],_,VarDict), - extra_active_delegate_variables(Head,Terms,VarDict,ExtraVars), - append(VarsSusp,ExtraVars,HeadVars). -get_prop_inner_loop_vars([Head|Heads],Terms,VarsSusps,NVarDict,MainSusp,[Susp|RestSusps]) :- - get_prop_inner_loop_vars(Heads,[Head|Terms],RestVarsSusp,VarDict,MainSusp,RestSusps), - functor(Head,_F,A), - gen_var(Susps), - head_info(Head,A,_Vars,Susp,_VarsSusp,Pairs), - head_arg_matches(Pairs,VarDict,_,NVarDict), - passive_delegate_variables(Head,Heads,Terms,NVarDict,HeadVars), - append(HeadVars,[Susp,Susps|RestVarsSusp],VarsSusps). - -propagation_end([CurrentHead|PrevHeads],NextHeads,Rule,F/A,Id,L,T) :- - Rule = rule(_,_,Guard,Body), - gen_var_susp_list_for(PrevHeads,[CurrentHead,NextHeads,Guard,Body],_,VarsAndSusps,AllButFirst,FirstSusp), - - Vars = [ [] | VarsAndSusps], - - build_head(F,A,Id,Vars,Head), - - ( Id = [0|_] -> - next_id(Id,PrevId), - PrevVarsAndSusps = AllButFirst - ; - dec_id(Id,PrevId), - PrevVarsAndSusps = [FirstSusp|AllButFirst] - ), - - build_head(F,A,PrevId,PrevVarsAndSusps,PrevHead), - PredecessorCall = PrevHead, - - Clause = ( - Head :- - PredecessorCall - ), - L = [Clause | T]. - -gen_var_susp_list_for([Head],Terms,VarDict,HeadVars,VarsSusp,Susp) :- - !, - functor(Head,_F,A), - head_info(Head,A,_Vars,Susp,VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,[],_,VarDict), - extra_active_delegate_variables(Head,Terms,VarDict,ExtraVars), - append(VarsSusp,ExtraVars,HeadVars). -gen_var_susp_list_for([Head|Heads],Terms,NVarDict,VarsSusps,Rest,Susps) :- - gen_var_susp_list_for(Heads,[Head|Terms],VarDict,Rest,_,_), - functor(Head,_F,A), - gen_var(Susps), - head_info(Head,A,_Vars,Susp,_VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,VarDict,_,NVarDict), - passive_delegate_variables(Head,Heads,Terms,NVarDict,HeadVars), - append(HeadVars,[Susp,Susps|Rest],VarsSusps). - -propagation_accumulator([NextHead|RestHeads],[CurrentHead|PreHeads],Rule,F/A,Id,L,T) :- - Rule = rule(_,_,Guard,Body), - pre_vars_and_susps(PreHeads,[CurrentHead,NextHead,RestHeads,Guard,Body],PreVarsAndSusps,VarDict,PreSusps), - gen_var(OtherSusps), - functor(CurrentHead,_OtherF,OtherA), - gen_vars(OtherA,OtherVars), - head_info(CurrentHead,OtherA,OtherVars,OtherSusp,_VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,VarDict,FirstMatching,VarDict1), - - OtherSuspension =.. [suspension,_,State,_,_,_,_|OtherVars], - - different_from_other_susps(CurrentHead,OtherSusp,PreHeads,PreSusps,DiffSuspGoals), - create_get_mutable_ref(active,State,GetMutable), - CurrentSuspTest = ( - OtherSusp = OtherSuspension, - GetMutable, - DiffSuspGoals, - FirstMatching - ), - lookup_passive_head(NextHead,[CurrentHead|PreHeads],VarDict1,NextSuspGoal,NextSusps), - inc_id(Id,NestedId), - ClauseVars = [[OtherSusp|OtherSusps]|PreVarsAndSusps], - build_head(F,A,Id,ClauseVars,ClauseHead), - passive_delegate_variables(CurrentHead,PreHeads,[NextHead,RestHeads,Guard,Body],VarDict1,CurrentHeadVars), - append([NextSusps|CurrentHeadVars],[OtherSusp,OtherSusps|PreVarsAndSusps],NestedVars), - build_head(F,A,NestedId,NestedVars,NestedHead), - - RecursiveVars = [OtherSusps|PreVarsAndSusps], - build_head(F,A,Id,RecursiveVars,RecursiveHead), - Clause = ( - ClauseHead :- - ( CurrentSuspTest, - NextSuspGoal - -> - NestedHead - ; RecursiveHead - ) - ), - L = [Clause|T]. - -pre_vars_and_susps([Head],Terms,HeadVars,VarDict,[]) :- - !, - functor(Head,_F,A), - head_info(Head,A,_Vars,_Susp,VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,[],_,VarDict), - extra_active_delegate_variables(Head,Terms,VarDict,ExtraVars), - append(VarsSusp,ExtraVars,HeadVars). -pre_vars_and_susps([Head|Heads],Terms,NVSs,NVarDict,[Susp|Susps]) :- - pre_vars_and_susps(Heads,[Head|Terms],VSs,VarDict,Susps), - functor(Head,_F,A), - gen_var(NextSusps), - head_info(Head,A,_Vars,Susp,_VarsSusp,HeadPairs), - head_arg_matches(HeadPairs,VarDict,_,NVarDict), - passive_delegate_variables(Head,Heads,Terms,NVarDict,HeadVars), - append(HeadVars,[Susp,NextSusps|VSs],NVSs). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ _ _ _ -%% | _ \ __ _ ___ ___(_)_ _____ | | | | ___ __ _ __| | -%% | |_) / _` / __/ __| \ \ / / _ \ | |_| |/ _ \/ _` |/ _` | -%% | __/ (_| \__ \__ \ |\ V / __/ | _ | __/ (_| | (_| | -%% |_| \__,_|___/___/_| \_/ \___| |_| |_|\___|\__,_|\__,_| -%% -%% ____ _ _ _ -%% | _ \ ___| |_ _ __(_) _____ ____ _| | -%% | |_) / _ \ __| '__| |/ _ \ \ / / _` | | -%% | _ < __/ |_| | | | __/\ V / (_| | | -%% |_| \_\___|\__|_| |_|\___| \_/ \__,_|_| -%% -%% ____ _ _ -%% | _ \ ___ ___ _ __ __| | ___ _ __(_)_ __ __ _ -%% | |_) / _ \/ _ \| '__/ _` |/ _ \ '__| | '_ \ / _` | -%% | _ < __/ (_) | | | (_| | __/ | | | | | | (_| | -%% |_| \_\___|\___/|_| \__,_|\___|_| |_|_| |_|\__, | -%% |___/ - -reorder_heads(RuleNb,Head,RestHeads,RestIDs,NRestHeads,NRestIDs) :- - ( chr_pp_flag(reorder_heads,on) -> - reorder_heads_main(RuleNb,Head,RestHeads,RestIDs,NRestHeads,NRestIDs) - ; - NRestHeads = RestHeads, - NRestIDs = RestIDs - ). - -reorder_heads_main(RuleNb,Head,RestHeads,RestIDs,NRestHeads,NRestIDs) :- - term_variables(Head,Vars), - InitialData = entry([],[],Vars,RestHeads,RestIDs,RuleNb), - a_star(InitialData,FD^(chr_translate:final_data(FD)),N^EN^C^(chr_translate:expand_data(N,EN,C)),FinalData), - FinalData = entry(RNRestHeads,RNRestIDs,_,_,_,_), - reverse(RNRestHeads,NRestHeads), - reverse(RNRestIDs,NRestIDs). - -final_data(Entry) :- - Entry = entry(_,_,_,_,[],_). - -expand_data(Entry,NEntry,Cost) :- - Entry = entry(Heads,IDs,Vars,NHeads,NIDs,RuleNb), - term_variables(Entry,EVars), - NEntry = entry([Head1|Heads],[ID1|IDs],Vars1,NHeads1,NIDs1,RuleNb), - select2(Head1,ID1,NHeads,NIDs,NHeads1,NIDs1), - order_score(Head1,ID1,Vars,NHeads1,RuleNb,Cost), - term_variables([Head1|Vars],Vars1). - -order_score(Head,ID,KnownVars,RestHeads,RuleNb,Score) :- - functor(Head,F,A), - get_store_type(F/A,StoreType), - order_score(StoreType,Head,ID,KnownVars,RestHeads,RuleNb,Score). - -order_score(default,Head,_ID,KnownVars,RestHeads,RuleNb,Score) :- - term_variables(Head,HeadVars), - term_variables(RestHeads,RestVars), - order_score_vars(HeadVars,KnownVars,RestHeads,0,Score). -order_score(multi_hash(Indexes),Head,_ID,KnownVars,RestHeads,RuleNb,Score) :- - order_score_indexes(Indexes,Head,KnownVars,0,Score). -order_score(global_ground,Head,ID,_KnownVars,_RestHeads,RuleNb,Score) :- - functor(Head,F,A), - ( get_pragma_unique(RuleNb,ID,Vars), - Vars == [] -> - Score = 1 % guaranteed O(1) - ; A == 0 -> % flag constraint - Score = 10 % O(1)? [CHECK: no deleted/triggered/... constraints in store?] - ; A > 0 -> - Score = 100 - ). - -order_score(multi_store(StoreTypes),Head,ID,KnownVars,RestHeads,RuleNb,Score) :- - find_with_var_identity( - S, - t(Head,KnownVars,RestHeads), - ( member(ST,StoreTypes), chr_translate:order_score(ST,Head,ID,KnownVars,RestHeads,RuleNb,S) ), - Scores - ), - min_list(Scores,Score). - - -order_score_indexes([],_,_,Score,Score) :- - Score > 0. -order_score_indexes([I|Is],Head,KnownVars,Score,NScore) :- - multi_hash_key_args(I,Head,Args), - ( forall(Arg,Args,hprolog:memberchk_eq(Arg,KnownVars)) -> - Score1 is Score + 10 - ; - Score1 = Score - ), - order_score_indexes(Is,Head,KnownVars,Score1,NScore). - -order_score_vars([],_,_,Score,NScore) :- - ( Score == 0 -> - NScore = 0 - ; - NScore = Score - ). -order_score_vars([V|Vs],KnownVars,RestVars,Score,NScore) :- - ( memberchk_eq(V,KnownVars) -> - TScore is Score + 10 - ; memberchk_eq(V,RestVars) -> - TScore is Score + 100 - ; - TScore = Score - ), - order_score_vars(Vs,KnownVars,RestVars,TScore,NScore). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ___ _ _ _ -%% |_ _|_ __ | (_)_ __ (_)_ __ __ _ -%% | || '_ \| | | '_ \| | '_ \ / _` | -%% | || | | | | | | | | | | | | (_| | -%% |___|_| |_|_|_|_| |_|_|_| |_|\__, | -%% |___/ - -%% SWI begin -create_get_mutable_ref(V,M,GM) :- GM = (M = mutable(V)). -%% SWI end - -%% SICStus begin -%% create_get_mutable_ref(V,M,GM) :- GM = get_mutable(V,M). -%% SICStus end - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% _ _ _ _ _ _ _ -%% | | | | |_(_) (_) |_ _ _ -%% | | | | __| | | | __| | | | -%% | |_| | |_| | | | |_| |_| | -%% \___/ \__|_|_|_|\__|\__, | -%% |___/ - -gen_var(_). -gen_vars(N,Xs) :- - length(Xs,N). - -head_info(Head,A,Vars,Susp,VarsSusp,HeadPairs) :- - vars_susp(A,Vars,Susp,VarsSusp), - Head =.. [_|Args], - pairup(Args,Vars,HeadPairs). - -inc_id([N|Ns],[O|Ns]) :- - O is N + 1. -dec_id([N|Ns],[M|Ns]) :- - M is N - 1. - -extend_id(Id,[0|Id]). - -next_id([_,N|Ns],[O|Ns]) :- - O is N + 1. - -build_head(F,A,Id,Args,Head) :- - buildName(F,A,Id,Name), - Head =.. [Name|Args]. - -buildName(Fct,Aty,List,Result) :- - atom_concat(Fct, (/) ,FctSlash), - atomic_concat(FctSlash,Aty,FctSlashAty), - buildName_(List,FctSlashAty,Result). - -buildName_([],Name,Name). -buildName_([N|Ns],Name,Result) :- - buildName_(Ns,Name,Name1), - atom_concat(Name1,'__',NameDash), % '_' is a char :-( - atomic_concat(NameDash,N,Result). - -vars_susp(A,Vars,Susp,VarsSusp) :- - length(Vars,A), - append(Vars,[Susp],VarsSusp). - -make_attr(N,Mask,SuspsList,Attr) :- - length(SuspsList,N), - Attr =.. [v,Mask|SuspsList]. - -or_pattern(Pos,Pat) :- - Pow is Pos - 1, - Pat is 1 << Pow. % was 2 ** X - -and_pattern(Pos,Pat) :- - X is Pos - 1, - Y is 1 << X, % was 2 ** X - Pat is (-1)*(Y + 1). % because fx (-) is redefined - -conj2list(Conj,L) :- %% transform conjunctions to list - conj2list(Conj,L,[]). - -conj2list(Conj,L,T) :- - Conj = (G1,G2), !, - conj2list(G1,L,T1), - conj2list(G2,T1,T). -conj2list(G,[G | T],T). - -list2conj([],true). -list2conj([G],X) :- !, X = G. -list2conj([G|Gs],C) :- - ( G == true -> %% remove some redundant trues - list2conj(Gs,C) - ; - C = (G,R), - list2conj(Gs,R) - ). - -list2disj([],fail). -list2disj([G],X) :- !, X = G. -list2disj([G|Gs],C) :- - ( G == fail -> %% remove some redundant fails - list2disj(Gs,C) - ; - C = (G;R), - list2disj(Gs,R) - ). - -atom_concat_list([X],X) :- ! . -atom_concat_list([X|Xs],A) :- - atom_concat_list(Xs,B), - atomic_concat(X,B,A). - -atomic_concat(A,B,C) :- - make_atom(A,AA), - make_atom(B,BB), - atom_concat(AA,BB,C). - -make_atom(A,AA) :- - ( - atom(A) -> - AA = A - ; - number(A) -> - number_codes(A,AL), - atom_codes(AA,AL) - ). - - -make_name(Prefix,F/A,Name) :- - atom_concat_list([Prefix,F,(/),A],Name). - -set_elems([],_). -set_elems([X|Xs],X) :- - set_elems(Xs,X). - -member2([X|_],[Y|_],X-Y). -member2([_|Xs],[_|Ys],P) :- - member2(Xs,Ys,P). - -select2(X, Y, [X|Xs], [Y|Ys], Xs, Ys). -select2(X, Y, [X1|Xs], [Y1|Ys], [X1|NXs], [Y1|NYs]) :- - select2(X, Y, Xs, Ys, NXs, NYs). - -pair_all_with([],_,[]). -pair_all_with([X|Xs],Y,[X-Y|Rest]) :- - pair_all_with(Xs,Y,Rest). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -lookup_passive_head(Head,PreJoin,VarDict,Goal,AllSusps) :- - functor(Head,F,A), - get_store_type(F/A,StoreType), - lookup_passive_head(StoreType,Head,PreJoin,VarDict,Goal,AllSusps). - -lookup_passive_head(default,Head,PreJoin,VarDict,Goal,AllSusps) :- - passive_head_via(Head,PreJoin,[],VarDict,Goal,Attr,AttrDict), - instantiate_pattern_goals(AttrDict), - get_max_constraint_index(N), - ( N == 1 -> - AllSusps = Attr - ; - functor(Head,F,A), - get_constraint_index(F/A,Pos), - make_attr(N,_,SuspsList,Attr), - nth1(Pos,SuspsList,AllSusps) - ). -lookup_passive_head(multi_hash(Indexes),Head,_PreJoin,VarDict,Goal,AllSusps) :- - once(( - member(Index,Indexes), - multi_hash_key_args(Index,Head,KeyArgs), - translate(KeyArgs,VarDict,KeyArgCopies) - )), - ( KeyArgCopies = [KeyCopy] -> - true - ; - KeyCopy =.. [k|KeyArgCopies] - ), - functor(Head,F,A), - multi_hash_via_lookup_name(F/A,Index,ViaName), - Goal =.. [ViaName,KeyCopy,AllSusps], - update_store_type(F/A,multi_hash([Index])). -lookup_passive_head(global_ground,Head,PreJoin,_VarDict,Goal,AllSusps) :- - functor(Head,F,A), - global_ground_store_name(F/A,StoreName), - make_get_store_goal(StoreName,AllSusps,Goal), % Goal = nb_getval(StoreName,AllSusps), - update_store_type(F/A,global_ground). -lookup_passive_head(multi_store(StoreTypes),Head,PreJoin,VarDict,Goal,AllSusps) :- - once(( - member(ST,StoreTypes), - lookup_passive_head(ST,Head,PreJoin,VarDict,Goal,AllSusps) - )). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -assume_constraint_stores([]). -assume_constraint_stores([C|Cs]) :- - ( \+ may_trigger(C), - is_attached(C), - get_store_type(C,default) -> - get_indexed_arguments(C,IndexedArgs), - findall(Index,(sublist(Index,IndexedArgs), Index \== []),Indexes), - assumed_store_type(C,multi_store([multi_hash(Indexes),global_ground])) - ; - true - ), - assume_constraint_stores(Cs). - -get_indexed_arguments(C,IndexedArgs) :- - C = F/A, - get_indexed_arguments(1,A,C,IndexedArgs). - -get_indexed_arguments(I,N,C,L) :- - ( I > N -> - L = [] - ; ( is_indexed_argument(C,I) -> - L = [I|T] - ; - L = T - ), - J is I + 1, - get_indexed_arguments(J,N,C,T) - ). - -validate_store_type_assumptions([]). -validate_store_type_assumptions([C|Cs]) :- - validate_store_type_assumption(C), - validate_store_type_assumptions(Cs). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% SWI begin -verbosity_on :- prolog_flag(verbose,V), V == yes. -%% SWI end - -%% SICStus begin -%% verbosity_on. % at the moment -%% SICStus end diff --git a/LGPL/chr/clean_code.pl b/LGPL/chr/clean_code.pl deleted file mode 100644 index 7548bab08..000000000 --- a/LGPL/chr/clean_code.pl +++ /dev/null @@ -1,224 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Author: Tom Schrijvers -% Email: Tom.Schrijvers@cs.kuleuven.be -% Copyright: K.U.Leuven 2004 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ____ _ ____ _ _ -%% / ___|___ __| | ___ / ___| | ___ __ _ _ __ (_)_ __ __ _ -%% | | / _ \ / _` |/ _ \ | | | |/ _ \/ _` | '_ \| | '_ \ / _` | -%% | |__| (_) | (_| | __/ | |___| | __/ (_| | | | | | | | | (_| | -%% \____\___/ \__,_|\___| \____|_|\___|\__,_|_| |_|_|_| |_|\__, | -%% |___/ -%% -%% -%% To be done: -%% inline clauses - -:- module(clean_code, - [ - clean_clauses/2 - ]). - -:- use_module(hprolog). - -clean_clauses(Clauses,NClauses) :- - clean_clauses1(Clauses,Clauses1), - merge_clauses(Clauses1,NClauses). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% CLEAN CLAUSES -% -% - move neck unification into the head of the clause -% - drop true body -% - specialize control flow goal wrt true and fail -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -clean_clauses1([],[]). -clean_clauses1([C|Cs],[NC|NCs]) :- - clean_clause(C,NC), - clean_clauses1(Cs,NCs). - -clean_clause(Clause,NClause) :- - ( Clause = (Head :- Body) -> - clean_goal(Body,Body1), - move_unification_into_head(Head,Body1,NHead,NBody), - ( NBody == true -> - NClause = NHead - ; - NClause = (NHead :- NBody) - ) - ; Clause = '$source_location'(File,Line) : ActualClause -> - NClause = '$source_location'(File,Line) : NActualClause, - clean_clause(ActualClause,NActualClause) - ; - NClause = Clause - ). - -clean_goal(Goal,NGoal) :- - var(Goal), !, - NGoal = Goal. -clean_goal((G1,G2),NGoal) :- - !, - clean_goal(G1,NG1), - clean_goal(G2,NG2), - ( NG1 == true -> - NGoal = NG2 - ; NG2 == true -> - NGoal = NG1 - ; - NGoal = (NG1,NG2) - ). -clean_goal((If -> Then ; Else),NGoal) :- - !, - clean_goal(If,NIf), - ( NIf == true -> - clean_goal(Then,NThen), - NGoal = NThen - ; NIf == fail -> - clean_goal(Else,NElse), - NGoal = NElse - ; - clean_goal(Then,NThen), - clean_goal(Else,NElse), - NGoal = (NIf -> NThen; NElse) - ). -clean_goal((G1 ; G2),NGoal) :- - !, - clean_goal(G1,NG1), - clean_goal(G2,NG2), - ( NG1 == fail -> - NGoal = NG2 - ; NG2 == fail -> - NGoal = NG1 - ; - NGoal = (NG1 ; NG2) - ). -clean_goal(once(G),NGoal) :- - !, - clean_goal(G,NG), - ( NG == true -> - NGoal = true - ; NG == fail -> - NGoal = fail - ; - NGoal = once(NG) - ). -clean_goal((G1 -> G2),NGoal) :- - !, - clean_goal(G1,NG1), - ( NG1 == true -> - clean_goal(G2,NGoal) - ; NG1 == fail -> - NGoal = fail - ; - clean_goal(G2,NG2), - NGoal = (NG1 -> NG2) - ). -clean_goal(Goal,Goal). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -move_unification_into_head(Head,Body,NHead,NBody) :- - conj2list(Body,BodyList), - move_unification_into_head_(BodyList,Head,NHead,NBody). - -move_unification_into_head_([],Head,Head,true). -move_unification_into_head_([G|Gs],Head,NHead,NBody) :- - ( nonvar(G), G = (X = Y) -> - term_variables(Gs,GsVars), - ( var(X), ( \+ memberchk_eq(X,GsVars) ; atomic(Y)) -> - X = Y, - move_unification_into_head_(Gs,Head,NHead,NBody) - ; var(Y), (\+ memberchk_eq(Y,GsVars) ; atomic(X)) -> - X = Y, - move_unification_into_head_(Gs,Head,NHead,NBody) - ; - Head = NHead, - list2conj([G|Gs],NBody) - ) - ; - Head = NHead, - list2conj([G|Gs],NBody) - ). - - -conj2list(Conj,L) :- %% transform conjunctions to list - conj2list(Conj,L,[]). - -conj2list(G,L,T) :- - var(G), !, - L = [G|T]. -conj2list(true,L,L) :- !. -conj2list(Conj,L,T) :- - Conj = (G1,G2), !, - conj2list(G1,L,T1), - conj2list(G2,T1,T). -conj2list(G,[G | T],T). - -list2conj([],true). -list2conj([G],X) :- !, X = G. -list2conj([G|Gs],C) :- - ( G == true -> %% remove some redundant trues - list2conj(Gs,C) - ; - C = (G,R), - list2conj(Gs,R) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% MERGE CLAUSES -% -% Find common prefixes of successive clauses and share them. -% -% Note: we assume that the prefix does not generate a side effect. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -merge_clauses([],[]). -merge_clauses([C],[C]). -merge_clauses([X,Y|Clauses],NClauses) :- - ( merge_two_clauses(X,Y,Clause) -> - merge_clauses([Clause|Clauses],NClauses) - ; - NClauses = [X|RClauses], - merge_clauses([Y|Clauses],RClauses) - ). - -merge_two_clauses('$source_location'(F1,L1) : C1, - '$source_location'(_F2,_L2) : C2, - Result) :- !, - merge_two_clauses(C1,C2,C), - Result = '$source_location'(F1,L1) : C. -merge_two_clauses((H1 :- B1), (H2 :- B2), (H :- B)) :- - H1 =@= H2, - H1 = H, - conj2list(B1,List1), - conj2list(B2,List2), - merge_lists(List1,List2,H1,H2,Unifier,List,NList1,NList2), - List \= [], - H1 = H2, - call(Unifier), - list2conj(List,Prefix), - list2conj(NList1,NB1), - ( NList2 == (!) -> - B = Prefix - ; - list2conj(NList2,NB2), - B = (Prefix,(NB1 ; NB2)) - ). - -merge_lists([],[],_,_,true,[],[],[]). -merge_lists([],L2,_,_,true,[],[],L2). -merge_lists([!|Xs],_,_,_,true,[!|Xs],[],!) :- !. -merge_lists([X|Xs],[],_,_,true,[],[X|Xs],[]). -merge_lists([X|Xs],[Y|Ys],H1,H2,Unifier,Common,N1,N2) :- - ( H1-X =@= H2-Y -> - Unifier = (X = Y, RUnifier), - Common = [X|NCommon], - merge_lists(Xs,Ys,H1/X,H2/Y,RUnifier,NCommon,N1,N2) - ; - Unifier = true, - Common = [], - N1 = [X|Xs], - N2 = [Y|Ys] - ). diff --git a/LGPL/chr/find.pl b/LGPL/chr/find.pl deleted file mode 100644 index a30135afd..000000000 --- a/LGPL/chr/find.pl +++ /dev/null @@ -1,75 +0,0 @@ -/* $Id: find.pl,v 1.3 2008-03-13 14:38:01 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Bart Demoen, Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -:- module(chr_find, - [ - find_with_var_identity/4, - forall/3, - forsome/3 - ]). - -:- use_module(library(lists)). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -:- meta_predicate - find_with_var_identity(?, +, :, -), - forall(-, +, :), - forsome(-, +, :). - -find_with_var_identity(Template, IdVars, Goal, Answers) :- - Key = foo(IdVars), - copy_term_nat(Template-Key-Goal,TemplateC-KeyC-GoalC), - findall(KeyC - TemplateC, GoalC, As), - smash(As,Key,Answers). - -smash([],_,[]). -smash([Key-T|R],Key,[T|NR]) :- smash(R,Key,NR). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -forall(X,L,G) :- - \+ (member(X,L), \+ call(G)). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -forsome(X,L,G) :- - member(X,L), - call(G), !. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -:- dynamic - user:goal_expansion/2. -:- multifile - user:goal_expansion/2. - -user:goal_expansion(forall(Element,List,Test), GoalOut) :- - nonvar(Test), - Test =.. [Functor,Arg], - Arg == Element, - GoalOut = once(maplist(Functor,List)). diff --git a/LGPL/chr/guard_entailment.chr b/LGPL/chr/guard_entailment.chr deleted file mode 100644 index 680b08b5f..000000000 --- a/LGPL/chr/guard_entailment.chr +++ /dev/null @@ -1,511 +0,0 @@ -:- module(guard_entailment, - [ entails_guard/2, - simplify_guards/5 - ]). -:- include(chr_op). -:- use_module(hprolog). -:- use_module(builtins). -:- use_module(chr_compiler_errors). -:- chr_option(debug, off). -:- chr_option(optimize, full). -:- chr_option(verbosity,off). -%:- chr_option(dynattr,on). -:- chr_constraint known/1, test/1, cleanup/0, variables/1. -entails_guard(A, B) :- - copy_term_nat((A, B), (C, F)), - term_variables(C, D), - variables(D), - sort(C, E), - entails_guard2(E), !, - test(F), !, - cleanup. -entails_guard2([]). -entails_guard2([A|B]) :- - known(A), - entails_guard2(B). -simplify_guards(A, H, B, G, I) :- - copy_term_nat((A, B), (C, E)), - term_variables(C, D), - variables(D), - sort(C,Z), - entails_guard2(Z), !, - simplify(E, F), - simplified(B, F, G, H, I), !, - cleanup. -simplified([], [], [], A, A). -simplified([A|B], [keep|C], [A|D], E, F) :- - simplified(B, C, D, E, F). -simplified([_|_], [fail|_], fail, A, A). -simplified([A|B], [true|L], [I|M], F, J) :- - builtins:binds_b(A, C), - term_variables(B, D), - intersect_eq(C, D, E), !, - ( E=[] - -> term_variables(F, G), - intersect_eq(C, G, H), !, - ( H=[] - -> I=true, - J=K - ; I=true, - J= (A, K) - ) - ; I=A, - J=K - ), - simplified(B, L, M, F, K). -simplify([], []). -simplify([A|D], [B|E]) :- - ( \+try(true, A) - -> B=true - ; builtins:negate_b(A, C), - ( \+try(true, C) - -> B=fail - ; B=keep - ) - ), - known(A), - simplify(D, E). -try(A, B) :- - ( known(A) - -> true - ; chr_error(internal, 'Entailment Checker: try/2.\n', []) - ), - ( test(B) - -> fail - ; true - ). -add_args_unif([], [], true). -add_args_unif([A|C], [B|D], (A=B, E)) :- - add_args_unif(C, D, E). -add_args_nunif([], [], fail). -add_args_nunif([A|C], [B|D], (A\=B;E)) :- - add_args_nunif(C, D, E). -add_args_nmatch([], [], fail). -add_args_nmatch([A|C], [B|D], (A\==B;E)) :- - add_args_nmatch(C, D, E). -all_unique_vars(A, B) :- - all_unique_vars(A, B, []). -all_unique_vars([], _, _). -all_unique_vars([A|D], B, C) :- - var(A), - \+memberchk_eq(A, B), - \+memberchk_eq(A, C), - all_unique_vars(D, [A|C]). -:- chr_constraint'test/1_1_$default'/1, 'test/1_1_$special_,/2'/2, 'test/1_1_$special_\\+/1'/1, 'test/1_1_$special_integer/1'/1, 'test/1_1_$special_float/1'/1, 'test/1_1_$special_number/1'/1, 'test/1_1_$special_ground/1'/1, 'test/1_1_$special_=:=/2'/2, 'test/1_1_$special_==/2'/2, 'test/1_1_$special_true/0'/0, 'test/1_1_$special_functor/3'/3, 'test/1_1_$special_=/2'/2, 'test/1_1_$special_;/2'/2, 'test/1_1_$special_is/2'/2, 'test/1_1_$special_=/2'/2, 'test/1_1_$special_>/2'/2, 'test/1_1_$special_=\\=/2'/2, 'test/1_1_$special_==/2'/2, 'known/1_1_$special_>/2'/2, 'known/1_1_$special_='test/1_1_$special_,/2'(A, B). -test(\+A)<=>'test/1_1_$special_\\+/1'(A). -test(integer(A))<=>'test/1_1_$special_integer/1'(A). -test(float(A))<=>'test/1_1_$special_float/1'(A). -test(number(A))<=>'test/1_1_$special_number/1'(A). -test(ground(A))<=>'test/1_1_$special_ground/1'(A). -test(A=:=B)<=>'test/1_1_$special_=:=/2'(A, B). -test(A==B)<=>'test/1_1_$special_==/2'(A, B). -test(true)<=>'test/1_1_$special_true/0'. -test(functor(A, B, C))<=>'test/1_1_$special_functor/3'(A, B, C). -test(A=B)<=>'test/1_1_$special_=/2'(A, B). -test((A;B))<=>'test/1_1_$special_;/2'(A, B). -test(A is B)<=>'test/1_1_$special_is/2'(A, B). -test(A'test/1_1_$special_=B)<=>'test/1_1_$special_>=/2'(A, B). -test(A>B)<=>'test/1_1_$special_>/2'(A, B). -test(A=\=B)<=>'test/1_1_$special_=\\=/2'(A, B). -test(A='test/1_1_$special_='test/1_1_$special_\\==/2'(A, B). -test(A)<=>'test/1_1_$default'(A). -known((A;B))<=>'known/1_1_$special_;/2'(A, B). -known(nonvar(A))<=>'known/1_1_$special_nonvar/1'(A). -known(var(A))<=>'known/1_1_$special_var/1'(A). -known(atom(A))<=>'known/1_1_$special_atom/1'(A). -known(atomic(A))<=>'known/1_1_$special_atomic/1'(A). -known(compound(A))<=>'known/1_1_$special_compound/1'(A). -known(ground(A))<=>'known/1_1_$special_ground/1'(A). -known(integer(A))<=>'known/1_1_$special_integer/1'(A). -known(float(A))<=>'known/1_1_$special_float/1'(A). -known(number(A))<=>'known/1_1_$special_number/1'(A). -known(A=\=B)<=>'known/1_1_$special_=\\=/2'(A, B). -known(\+A)<=>'known/1_1_$special_\\+/1'(A). -known(functor(A, B, C))<=>'known/1_1_$special_functor/3'(A, B, C). -known(A\=B)<=>'known/1_1_$special_\\=/2'(A, B). -known(A=B)<=>'known/1_1_$special_=/2'(A, B). -known((A, B))<=>'known/1_1_$special_,/2'(A, B). -known(A\==B)<=>'known/1_1_$special_\\==/2'(A, B). -known(A==B)<=>'known/1_1_$special_==/2'(A, B). -known(A is B)<=>'known/1_1_$special_is/2'(A, B). -known(A'known/1_1_$special_=B)<=>'known/1_1_$special_>=/2'(A, B). -known(A>B)<=>'known/1_1_$special_>/2'(A, B). -known(A='known/1_1_$special_='known/1_1_$special_=:=/2'(A, B). -known(fail)<=>'known/1_1_$special_fail/0'. -known(A)<=>'known/1_1_$default'(A). -'known/1_1_$special_;/2'(A, B)\'known/1_1_$special_;/2'(A, B)<=>true. -'known/1_1_$special_nonvar/1'(A)\'known/1_1_$special_nonvar/1'(A)<=>true. -'known/1_1_$special_var/1'(A)\'known/1_1_$special_var/1'(A)<=>true. -'known/1_1_$special_atom/1'(A)\'known/1_1_$special_atom/1'(A)<=>true. -'known/1_1_$special_atomic/1'(A)\'known/1_1_$special_atomic/1'(A)<=>true. -'known/1_1_$special_compound/1'(A)\'known/1_1_$special_compound/1'(A)<=>true. -'known/1_1_$special_ground/1'(A)\'known/1_1_$special_ground/1'(A)<=>true. -'known/1_1_$special_integer/1'(A)\'known/1_1_$special_integer/1'(A)<=>true. -'known/1_1_$special_float/1'(A)\'known/1_1_$special_float/1'(A)<=>true. -'known/1_1_$special_number/1'(A)\'known/1_1_$special_number/1'(A)<=>true. -'known/1_1_$special_=\\=/2'(A, B)\'known/1_1_$special_=\\=/2'(A, B)<=>true. -'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_\\+/1'(A)<=>true. -'known/1_1_$special_functor/3'(A, B, C)\'known/1_1_$special_functor/3'(A, B, C)<=>true. -'known/1_1_$special_\\=/2'(A, B)\'known/1_1_$special_\\=/2'(A, B)<=>true. -'known/1_1_$special_=/2'(A, B)\'known/1_1_$special_=/2'(A, B)<=>true. -'known/1_1_$special_,/2'(A, B)\'known/1_1_$special_,/2'(A, B)<=>true. -'known/1_1_$special_\\==/2'(A, B)\'known/1_1_$special_\\==/2'(A, B)<=>true. -'known/1_1_$special_==/2'(A, B)\'known/1_1_$special_==/2'(A, B)<=>true. -'known/1_1_$special_is/2'(A, B)\'known/1_1_$special_is/2'(A, B)<=>true. -'known/1_1_$special_true. -'known/1_1_$special_>=/2'(A, B)\'known/1_1_$special_>=/2'(A, B)<=>true. -'known/1_1_$special_>/2'(A, B)\'known/1_1_$special_>/2'(A, B)<=>true. -'known/1_1_$special_=true. -'known/1_1_$special_=:=/2'(A, B)\'known/1_1_$special_=:=/2'(A, B)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_fail/0'<=>true. -'known/1_1_$default'(A)\'known/1_1_$default'(A)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_,/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_\\+/1'(_)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_integer/1'(_)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_float/1'(_)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_number/1'(_)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_ground/1'(_)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_=:=/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_==/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_true/0'<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_functor/3'(_, _, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_=/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_;/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_is/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_true. -'known/1_1_$special_fail/0'\'test/1_1_$special_>=/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_>/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_=\\=/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$special_=true. -'known/1_1_$special_fail/0'\'test/1_1_$special_\\==/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$default'(_)<=>true. -'known/1_1_$special_;/2'(A, B)\'test/1_1_$special_;/2'(A, B)<=>true. -'known/1_1_$special_nonvar/1'(A)\'test/1_1_$default'(nonvar(A))<=>true. -'known/1_1_$special_var/1'(A)\'test/1_1_$default'(var(A))<=>true. -'known/1_1_$special_atom/1'(A)\'test/1_1_$default'(atom(A))<=>true. -'known/1_1_$special_atomic/1'(A)\'test/1_1_$default'(atomic(A))<=>true. -'known/1_1_$special_compound/1'(A)\'test/1_1_$default'(compound(A))<=>true. -'known/1_1_$special_ground/1'(A)\'test/1_1_$special_ground/1'(A)<=>true. -'known/1_1_$special_integer/1'(A)\'test/1_1_$special_integer/1'(A)<=>true. -'known/1_1_$special_float/1'(A)\'test/1_1_$special_float/1'(A)<=>true. -'known/1_1_$special_number/1'(A)\'test/1_1_$special_number/1'(A)<=>true. -'known/1_1_$special_=\\=/2'(A, B)\'test/1_1_$special_=\\=/2'(A, B)<=>true. -'known/1_1_$special_\\+/1'(A)\'test/1_1_$special_\\+/1'(A)<=>true. -'known/1_1_$special_functor/3'(A, B, C)\'test/1_1_$special_functor/3'(A, B, C)<=>true. -'known/1_1_$special_\\=/2'(A, B)\'test/1_1_$default'(A\=B)<=>true. -'known/1_1_$special_=/2'(A, B)\'test/1_1_$special_=/2'(A, B)<=>true. -'known/1_1_$special_,/2'(A, B)\'test/1_1_$special_,/2'(A, B)<=>true. -'known/1_1_$special_\\==/2'(A, B)\'test/1_1_$special_\\==/2'(A, B)<=>true. -'known/1_1_$special_==/2'(A, B)\'test/1_1_$special_==/2'(A, B)<=>true. -'known/1_1_$special_is/2'(A, B)\'test/1_1_$special_is/2'(A, B)<=>true. -'known/1_1_$special_true. -'known/1_1_$special_>=/2'(A, B)\'test/1_1_$special_>=/2'(A, B)<=>true. -'known/1_1_$special_>/2'(A, B)\'test/1_1_$special_>/2'(A, B)<=>true. -'known/1_1_$special_=true. -'known/1_1_$special_=:=/2'(A, B)\'test/1_1_$special_=:=/2'(A, B)<=>true. -'known/1_1_$special_fail/0'\'test/1_1_$default'(fail)<=>true. -'known/1_1_$default'(A)\'test/1_1_$default'(A)<=>true. -'test/1_1_$special_\\==/2'(F, A)<=>nonvar(A), functor(A, C, B)|A=..[_|E], length(D, B), G=..[C|D], add_args_nmatch(D, E, H), I= (\+functor(F, C, B);functor(F, C, B), F=G, H), test(I). -'test/1_1_$special_\\==/2'(A, B)<=>nonvar(A)|'test/1_1_$special_\\==/2'(B, A). -'known/1_1_$special_=:=/2'(A, B)\'test/1_1_$special_=true. -'known/1_1_$special_=:=/2'(A, C)\'test/1_1_$special_=number(B), number(C), C=number(B), number(C), B=number(B), number(C), C=number(B), number(C), C=number(B), number(C), B>C|true. -'known/1_1_$special_=number(B), number(C), C/2'(B, A)<=>'known/1_1_$special_=/2'(B, A)<=>'known/1_1_$special_='known/1_1_$special_='known/1_1_$special_=:=/2'(A, B). -'test/1_1_$special_>/2'(B, A)<=>'test/1_1_$special_=/2'(B, A)<=>'test/1_1_$special_='test/1_1_$special_,/2'(A='test/1_1_$special_=:=/2'(A, B). -'known/1_1_$special_==/2'(A, B)==>number(A)|'known/1_1_$special_=:=/2'(A, B). -'known/1_1_$special_==/2'(B, A)==>number(A)|'known/1_1_$special_=:=/2'(B, A). -'known/1_1_$special_\\==/2'(A, B)==>number(A)|'known/1_1_$special_=\\=/2'(A, B). -'known/1_1_$special_\\==/2'(B, A)==>number(A)|'known/1_1_$special_=\\=/2'(B, A). -'known/1_1_$special_fail/0'\'known/1_1_$special_;/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_nonvar/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_var/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_atom/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_atomic/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_compound/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_ground/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_integer/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_float/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_number/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_=\\=/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_\\+/1'(_)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_functor/3'(_, _, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_\\=/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_=/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_,/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_\\==/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_==/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_is/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_true. -'known/1_1_$special_fail/0'\'known/1_1_$special_>=/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_>/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_=true. -'known/1_1_$special_fail/0'\'known/1_1_$special_=:=/2'(_, _)<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$special_fail/0'<=>true. -'known/1_1_$special_fail/0'\'known/1_1_$default'(_)<=>true. -'known/1_1_$special_,/2'(A, B)<=>known(A), known(B). -'known/1_1_$special_=:=/2'(A, A)<=>true. -'known/1_1_$special_==/2'(A, A)<=>true. -'known/1_1_$special_=true. -'known/1_1_$special_=/2'(A, A)<=>true. -'known/1_1_$special_=/2'(A, B)<=>var(A)|A=B. -'known/1_1_$special_=/2'(B, A)<=>var(A)|B=A. -'known/1_1_$special_\\=/2'(A, B)<=>ground(A), ground(B), A=B|'known/1_1_$special_fail/0'. -variables(E), 'known/1_1_$special_functor/3'(A, B, C)<=>var(A), ground(B), ground(C)|functor(A, B, C), A=..[_|D], append(D, E, F), variables(F). -'known/1_1_$special_functor/3'(A, B, C)<=>nonvar(A), \+functor(A, B, C)|'known/1_1_$special_fail/0'. -'known/1_1_$special_\\+/1'(functor(A, B, C))<=>nonvar(A), functor(A, B, C)|'known/1_1_$special_fail/0'. -'known/1_1_$special_functor/3'(A, B, C), 'known/1_1_$special_functor/3'(A, D, E)<=>nonvar(B), nonvar(C), nonvar(D), nonvar(E)|'known/1_1_$special_fail/0'. -'known/1_1_$special_\\=/2'(A, A)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_=/2'(A, B)<=>nonvar(A), nonvar(B), functor(A, C, D)|functor(B, C, D), A=B->true;'known/1_1_$special_fail/0'. -'known/1_1_$special_\\=/2'(A, B)<=>var(A), nonvar(B), functor(B, D, C), C>0|length(E, C), B=..[D|F], G=..[D|E], add_args_nunif(F, E, H), I= (\+functor(A, D, C);A=G, H), known(I). -'known/1_1_$special_\\=/2'(A, B)<=>nonvar(A), nonvar(B), functor(A, C, D)|functor(B, C, D)->A=..[C|E], B=..[C|F], add_args_nunif(E, F, G), known(G);true. -'known/1_1_$special_\\=/2'(B, A)==>'known/1_1_$special_\\=/2'(A, B). -'known/1_1_$special_=number(A), number(B), A>B|'known/1_1_$special_fail/0'. -'known/1_1_$special_=number(B), number(C), B=number(B), number(C), B='known/1_1_$special_=:=/2'(B, A). -'known/1_1_$special_='known/1_1_$special_='known/1_1_$special_=\\=/2'(A, C). -'known/1_1_$special_=:=/2'(A, B)<=>number(A), number(B), A=\=B|'known/1_1_$special_fail/0'. -'known/1_1_$special_=\\=/2'(A, B)<=>number(A), number(B), A=:=B|'known/1_1_$special_fail/0'. -'known/1_1_$special_=\\=/2'(A, A)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_=:=/2'(A, B), 'known/1_1_$special_=\\=/2'(A, B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_=:=/2'(B, A), 'known/1_1_$special_=:=/2'(A, C)==>B\==C|'known/1_1_$special_=:=/2'(B, C). -'known/1_1_$special_=:=/2'(B, A)==>'known/1_1_$special_=:=/2'(A, B). -'known/1_1_$special_=\\=/2'(B, A)==>'known/1_1_$special_=\\=/2'(A, B). -'known/1_1_$special_number/1'(A)<=>nonvar(A), \+number(A)|'known/1_1_$special_fail/0'. -'known/1_1_$special_float/1'(A)<=>nonvar(A), \+float(A)|'known/1_1_$special_fail/0'. -'known/1_1_$special_integer/1'(A)<=>nonvar(A), \+integer(A)|'known/1_1_$special_fail/0'. -'known/1_1_$special_integer/1'(A)==>'known/1_1_$special_number/1'(A). -'known/1_1_$special_float/1'(A)==>'known/1_1_$special_number/1'(A). -'known/1_1_$special_;/2'(A, B), 'known/1_1_$special_\\+/1'((A;B))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_nonvar/1'(A), 'known/1_1_$special_\\+/1'(nonvar(A))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_var/1'(A), 'known/1_1_$special_\\+/1'(var(A))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_atom/1'(A), 'known/1_1_$special_\\+/1'(atom(A))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_atomic/1'(A), 'known/1_1_$special_\\+/1'(atomic(A))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_compound/1'(A), 'known/1_1_$special_\\+/1'(compound(A))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_ground/1'(A), 'known/1_1_$special_\\+/1'(ground(A))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_integer/1'(A), 'known/1_1_$special_\\+/1'(integer(A))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_float/1'(A), 'known/1_1_$special_\\+/1'(float(A))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_number/1'(A), 'known/1_1_$special_\\+/1'(number(A))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_=\\=/2'(A, B), 'known/1_1_$special_\\+/1'(A=\=B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_\\+/1'(A), 'known/1_1_$special_\\+/1'(\+A)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_functor/3'(A, B, C), 'known/1_1_$special_\\+/1'(functor(A, B, C))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_\\=/2'(A, B), 'known/1_1_$special_\\+/1'(A\=B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_=/2'(A, B), 'known/1_1_$special_\\+/1'(A=B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_,/2'(A, B), 'known/1_1_$special_\\+/1'((A, B))<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_\\==/2'(A, B), 'known/1_1_$special_\\+/1'(A\==B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_==/2'(A, B), 'known/1_1_$special_\\+/1'(A==B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_is/2'(A, B), 'known/1_1_$special_\\+/1'(A is B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_'known/1_1_$special_fail/0'. -'known/1_1_$special_>=/2'(A, B), 'known/1_1_$special_\\+/1'(A>=B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_>/2'(A, B), 'known/1_1_$special_\\+/1'(A>B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_='known/1_1_$special_fail/0'. -'known/1_1_$special_=:=/2'(A, B), 'known/1_1_$special_\\+/1'(A=:=B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_fail/0', 'known/1_1_$special_\\+/1'(fail)<=>'known/1_1_$special_fail/0'. -'known/1_1_$default'(A), 'known/1_1_$special_\\+/1'(A)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_\\==/2'(A, B), 'known/1_1_$special_==/2'(A, B)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_==/2'(B, A), 'known/1_1_$special_==/2'(A, C)==>'known/1_1_$special_==/2'(B, C). -'known/1_1_$special_==/2'(B, A), 'known/1_1_$special_\\==/2'(A, C)==>'known/1_1_$special_\\==/2'(B, C). -'known/1_1_$special_==/2'(B, A)==>'known/1_1_$special_==/2'(A, B). -'known/1_1_$special_\\==/2'(B, A)==>'known/1_1_$special_\\==/2'(A, B). -'known/1_1_$special_\\==/2'(A, A)==>'known/1_1_$special_fail/0'. -'known/1_1_$special_\\==/2'(A, B)<=>nonvar(A), nonvar(B), functor(A, C, D)|functor(B, C, D)->A=..[C|E], B=..[C|F], add_args_nmatch(E, F, G), known(G);true. -'known/1_1_$special_==/2'(A, B)==>'known/1_1_$special_=/2'(A, B). -'known/1_1_$special_ground/1'(A)==>'known/1_1_$special_nonvar/1'(A). -'known/1_1_$special_compound/1'(A)==>'known/1_1_$special_nonvar/1'(A). -'known/1_1_$special_atomic/1'(A)==>'known/1_1_$special_nonvar/1'(A). -'known/1_1_$special_number/1'(A)==>'known/1_1_$special_nonvar/1'(A). -'known/1_1_$special_atom/1'(A)==>'known/1_1_$special_nonvar/1'(A). -'known/1_1_$special_var/1'(A), 'known/1_1_$special_nonvar/1'(A)<=>'known/1_1_$special_fail/0'. -'known/1_1_$special_;/2'(A, B)\'known/1_1_$special_;/2'(\+ (A;B), C)<=>known(C). -'known/1_1_$special_nonvar/1'(A)\'known/1_1_$special_;/2'(\+nonvar(A), B)<=>known(B). -'known/1_1_$special_var/1'(A)\'known/1_1_$special_;/2'(\+var(A), B)<=>known(B). -'known/1_1_$special_atom/1'(A)\'known/1_1_$special_;/2'(\+atom(A), B)<=>known(B). -'known/1_1_$special_atomic/1'(A)\'known/1_1_$special_;/2'(\+atomic(A), B)<=>known(B). -'known/1_1_$special_compound/1'(A)\'known/1_1_$special_;/2'(\+compound(A), B)<=>known(B). -'known/1_1_$special_ground/1'(A)\'known/1_1_$special_;/2'(\+ground(A), B)<=>known(B). -'known/1_1_$special_integer/1'(A)\'known/1_1_$special_;/2'(\+integer(A), B)<=>known(B). -'known/1_1_$special_float/1'(A)\'known/1_1_$special_;/2'(\+float(A), B)<=>known(B). -'known/1_1_$special_number/1'(A)\'known/1_1_$special_;/2'(\+number(A), B)<=>known(B). -'known/1_1_$special_=\\=/2'(A, B)\'known/1_1_$special_;/2'(\+A=\=B, C)<=>known(C). -'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_;/2'(\+ \+A, B)<=>known(B). -'known/1_1_$special_functor/3'(A, B, C)\'known/1_1_$special_;/2'(\+functor(A, B, C), D)<=>known(D). -'known/1_1_$special_\\=/2'(A, B)\'known/1_1_$special_;/2'(\+A\=B, C)<=>known(C). -'known/1_1_$special_=/2'(A, B)\'known/1_1_$special_;/2'(\+A=B, C)<=>known(C). -'known/1_1_$special_,/2'(A, B)\'known/1_1_$special_;/2'(\+ (A, B), C)<=>known(C). -'known/1_1_$special_\\==/2'(A, B)\'known/1_1_$special_;/2'(\+A\==B, C)<=>known(C). -'known/1_1_$special_==/2'(A, B)\'known/1_1_$special_;/2'(\+A==B, C)<=>known(C). -'known/1_1_$special_is/2'(A, B)\'known/1_1_$special_;/2'(\+A is B, C)<=>known(C). -'known/1_1_$special_known(C). -'known/1_1_$special_>=/2'(A, B)\'known/1_1_$special_;/2'(\+A>=B, C)<=>known(C). -'known/1_1_$special_>/2'(A, B)\'known/1_1_$special_;/2'(\+A>B, C)<=>known(C). -'known/1_1_$special_=known(C). -'known/1_1_$special_=:=/2'(A, B)\'known/1_1_$special_;/2'(\+A=:=B, C)<=>known(C). -'known/1_1_$special_fail/0'\'known/1_1_$special_;/2'(\+fail, A)<=>known(A). -'known/1_1_$default'(A)\'known/1_1_$special_;/2'(\+A, B)<=>known(B). -'known/1_1_$special_;/2'(A, B)\'known/1_1_$special_;/2'((\+ (A;B), _), C)<=>known(C). -'known/1_1_$special_nonvar/1'(A)\'known/1_1_$special_;/2'((\+nonvar(A), _), B)<=>known(B). -'known/1_1_$special_var/1'(A)\'known/1_1_$special_;/2'((\+var(A), _), B)<=>known(B). -'known/1_1_$special_atom/1'(A)\'known/1_1_$special_;/2'((\+atom(A), _), B)<=>known(B). -'known/1_1_$special_atomic/1'(A)\'known/1_1_$special_;/2'((\+atomic(A), _), B)<=>known(B). -'known/1_1_$special_compound/1'(A)\'known/1_1_$special_;/2'((\+compound(A), _), B)<=>known(B). -'known/1_1_$special_ground/1'(A)\'known/1_1_$special_;/2'((\+ground(A), _), B)<=>known(B). -'known/1_1_$special_integer/1'(A)\'known/1_1_$special_;/2'((\+integer(A), _), B)<=>known(B). -'known/1_1_$special_float/1'(A)\'known/1_1_$special_;/2'((\+float(A), _), B)<=>known(B). -'known/1_1_$special_number/1'(A)\'known/1_1_$special_;/2'((\+number(A), _), B)<=>known(B). -'known/1_1_$special_=\\=/2'(A, B)\'known/1_1_$special_;/2'((\+A=\=B, _), C)<=>known(C). -'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_;/2'((\+ \+A, _), B)<=>known(B). -'known/1_1_$special_functor/3'(A, B, C)\'known/1_1_$special_;/2'((\+functor(A, B, C), _), D)<=>known(D). -'known/1_1_$special_\\=/2'(A, B)\'known/1_1_$special_;/2'((\+A\=B, _), C)<=>known(C). -'known/1_1_$special_=/2'(A, B)\'known/1_1_$special_;/2'((\+A=B, _), C)<=>known(C). -'known/1_1_$special_,/2'(A, B)\'known/1_1_$special_;/2'((\+ (A, B), _), C)<=>known(C). -'known/1_1_$special_\\==/2'(A, B)\'known/1_1_$special_;/2'((\+A\==B, _), C)<=>known(C). -'known/1_1_$special_==/2'(A, B)\'known/1_1_$special_;/2'((\+A==B, _), C)<=>known(C). -'known/1_1_$special_is/2'(A, B)\'known/1_1_$special_;/2'((\+A is B, _), C)<=>known(C). -'known/1_1_$special_known(C). -'known/1_1_$special_>=/2'(A, B)\'known/1_1_$special_;/2'((\+A>=B, _), C)<=>known(C). -'known/1_1_$special_>/2'(A, B)\'known/1_1_$special_;/2'((\+A>B, _), C)<=>known(C). -'known/1_1_$special_=known(C). -'known/1_1_$special_=:=/2'(A, B)\'known/1_1_$special_;/2'((\+A=:=B, _), C)<=>known(C). -'known/1_1_$special_fail/0'\'known/1_1_$special_;/2'((\+fail, _), A)<=>known(A). -'known/1_1_$default'(A)\'known/1_1_$special_;/2'((\+A, _), B)<=>known(B). -'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_;/2'(A, B)<=>known(B). -'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_;/2'((A, _), B)<=>known(B). -'known/1_1_$special_;/2'(fail, A)<=>known(A). -'known/1_1_$special_;/2'(A, fail)<=>known(A). -'known/1_1_$special_;/2'(true, _)<=>true. -'known/1_1_$special_;/2'(_, true)<=>true. -'known/1_1_$special_functor/3'(A, _, _)\'known/1_1_$special_;/2'(\+functor(A, _, _), _)<=>true. -'known/1_1_$special_;/2'(\+functor(A, B, C), D)<=>nonvar(A), functor(A, B, C)|known(D). -'known/1_1_$special_;/2'(\+functor(A, B, C), _)<=>nonvar(A), \+functor(A, B, C)|true. -'test/1_1_$special_;/2'(fail, A)<=>test(A). -'test/1_1_$special_;/2'(A, fail)<=>test(A). -% 'test/1_1_$special_=/2'(A, B)<=>A=B|A=B. -'test/1_1_$special_=/2'(A, B)<=>ground(A), ground(B)|A=B. -% 'test/1_1_$special_=/2'(A, B)<=>nonvar(A), var(B)|'test/1_1_$special_=/2'(B, A). -% variables(F)\'test/1_1_$special_=/2'(A, B)<=>var(A), nonvar(B), functor(B, D, C), C>0, B=..[D|E], \+all_unique_vars(E, F)|G= (functor(A, D, C), A=B), test(G). - -% variables(F) \ 'test/1_1_$special_=/2'(A, B) <=> -% var(A), -% nonvar(B), -% \+ memberchk_eq(A,F), -% functor(B, C, D), -% B=..[C|_] -% | -% E=functor(A, C, D), -% test(E). -% 'test/1_1_$special_=/2'(A, B)<=>nonvar(A), nonvar(B), functor(B, C, D), B=..[C|F]|functor(A, C, D), A=..[C|E], add_args_unif(E, F, G), test(G). -variables(D)\'test/1_1_$special_functor/3'(A, B, C)<=>var(A), ground(B), ground(C), \+memberchk_eq(A, D)|functor(A, B, C). -'test/1_1_$special_true/0'<=>true. -'test/1_1_$special_==/2'(A, B)<=>A==B|true. -'test/1_1_$special_=:=/2'(A, B)<=>A==B|true. -'test/1_1_$special_=A==B|true. -'test/1_1_$special_=ground(A), ground(B), A=ground(A), ground(B), A>B|fail. -'test/1_1_$special_=:=/2'(A, B)<=>ground(A), ground(B), A=:=B|true. -'test/1_1_$special_=:=/2'(A, B)<=>ground(A), ground(B), A=\=B|fail. -'test/1_1_$special_=\\=/2'(A, B)<=>ground(A), ground(B), A=\=B|true. -'test/1_1_$special_=\\=/2'(A, B)<=>ground(A), ground(B), A=:=B|fail. -'test/1_1_$special_functor/3'(A, B, C)<=>nonvar(A), functor(A, B, C)|true. -'test/1_1_$special_functor/3'(A, _, _)<=>nonvar(A)|fail. -'test/1_1_$special_ground/1'(A)<=>ground(A)|true. -'test/1_1_$special_number/1'(A)<=>number(A)|true. -'test/1_1_$special_float/1'(A)<=>float(A)|true. -'test/1_1_$special_integer/1'(A)<=>integer(A)|true. -'test/1_1_$special_number/1'(A)<=>nonvar(A)|fail. -'test/1_1_$special_float/1'(A)<=>nonvar(A)|fail. -'test/1_1_$special_integer/1'(A)<=>nonvar(A)|fail. -'test/1_1_$special_\\+/1'(functor(A, B, C))<=>nonvar(A), functor(A, B, C)|fail. -'test/1_1_$special_\\+/1'(functor(A, _, _))<=>nonvar(A)|true. -'test/1_1_$special_\\+/1'(ground(A))<=>ground(A)|fail. -'test/1_1_$special_\\+/1'(number(A))<=>number(A)|fail. -'test/1_1_$special_\\+/1'(float(A))<=>float(A)|fail. -'test/1_1_$special_\\+/1'(integer(A))<=>integer(A)|fail. -'test/1_1_$special_\\+/1'(number(A))<=>nonvar(A)|true. -'test/1_1_$special_\\+/1'(float(A))<=>nonvar(A)|true. -'test/1_1_$special_\\+/1'(integer(A))<=>nonvar(A)|true. -'test/1_1_$special_,/2'(A, B)<=>test(A), known(A), test(B). -'test/1_1_$special_;/2'(A, B)<=>true|negate_b(A, D), negate_b(B, C), (known(C), test(A);known(D), test(B)). -'test/1_1_$special_,/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, (B, C)), !, negate_b(A, D), known(D), \+try(E, (B, C)). -'test/1_1_$special_\\+/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, \+B), !, negate_b(A, C), known(C), \+try(D, \+B). -'test/1_1_$special_integer/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, integer(B)), !, negate_b(A, C), known(C), \+try(D, integer(B)). -'test/1_1_$special_float/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, float(B)), !, negate_b(A, C), known(C), \+try(D, float(B)). -'test/1_1_$special_number/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, number(B)), !, negate_b(A, C), known(C), \+try(D, number(B)). -'test/1_1_$special_ground/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, ground(B)), !, negate_b(A, C), known(C), \+try(D, ground(B)). -'test/1_1_$special_=:=/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B=:=C), !, negate_b(A, D), known(D), \+try(E, B=:=C). -'test/1_1_$special_==/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B==C), !, negate_b(A, D), known(D), \+try(E, B==C). -'test/1_1_$special_true/0', 'known/1_1_$special_;/2'(A, C)<=>true|\+try(A, true), !, negate_b(A, B), known(B), \+try(C, true). -'test/1_1_$special_functor/3'(B, C, D), 'known/1_1_$special_;/2'(A, F)<=>true|\+try(A, functor(B, C, D)), !, negate_b(A, E), known(E), \+try(F, functor(B, C, D)). -'test/1_1_$special_=/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B=C), !, negate_b(A, D), known(D), \+try(E, B=C). -'test/1_1_$special_;/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, (B;C)), !, negate_b(A, D), known(D), \+try(E, (B;C)). -'test/1_1_$special_is/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B is C), !, negate_b(A, D), known(D), \+try(E, B is C). -'test/1_1_$special_true|\+try(A, B=/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B>=C), !, negate_b(A, D), known(D), \+try(E, B>=C). -'test/1_1_$special_>/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B>C), !, negate_b(A, D), known(D), \+try(E, B>C). -'test/1_1_$special_=\\=/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B=\=C), !, negate_b(A, D), known(D), \+try(E, B=\=C). -'test/1_1_$special_=true|\+try(A, B=true|\+try(A, B\==C), !, negate_b(A, D), known(D), \+try(E, B\==C). -'test/1_1_$default'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, B), !, negate_b(A, C), known(C), \+try(D, B). -'test/1_1_$special_,/2'(_, _)<=>fail. -'test/1_1_$special_\\+/1'(_)<=>fail. -'test/1_1_$special_integer/1'(_)<=>fail. -'test/1_1_$special_float/1'(_)<=>fail. -'test/1_1_$special_number/1'(_)<=>fail. -'test/1_1_$special_ground/1'(_)<=>fail. -'test/1_1_$special_=:=/2'(_, _)<=>fail. -'test/1_1_$special_==/2'(_, _)<=>fail. -'test/1_1_$special_true/0'<=>fail. -'test/1_1_$special_functor/3'(_, _, _)<=>fail. -'test/1_1_$special_=/2'(_, _)<=>fail. -'test/1_1_$special_;/2'(_, _)<=>fail. -'test/1_1_$special_is/2'(_, _)<=>fail. -'test/1_1_$special_fail. -'test/1_1_$special_>=/2'(_, _)<=>fail. -'test/1_1_$special_>/2'(_, _)<=>fail. -'test/1_1_$special_=\\=/2'(_, _)<=>fail. -'test/1_1_$special_=fail. -'test/1_1_$special_\\==/2'(_, _)<=>fail. -'test/1_1_$default'(_)<=>fail. -cleanup\'known/1_1_$special_;/2'(_, _)<=>true. -cleanup\'known/1_1_$special_nonvar/1'(_)<=>true. -cleanup\'known/1_1_$special_var/1'(_)<=>true. -cleanup\'known/1_1_$special_atom/1'(_)<=>true. -cleanup\'known/1_1_$special_atomic/1'(_)<=>true. -cleanup\'known/1_1_$special_compound/1'(_)<=>true. -cleanup\'known/1_1_$special_ground/1'(_)<=>true. -cleanup\'known/1_1_$special_integer/1'(_)<=>true. -cleanup\'known/1_1_$special_float/1'(_)<=>true. -cleanup\'known/1_1_$special_number/1'(_)<=>true. -cleanup\'known/1_1_$special_=\\=/2'(_, _)<=>true. -cleanup\'known/1_1_$special_\\+/1'(_)<=>true. -cleanup\'known/1_1_$special_functor/3'(_, _, _)<=>true. -cleanup\'known/1_1_$special_\\=/2'(_, _)<=>true. -cleanup\'known/1_1_$special_=/2'(_, _)<=>true. -cleanup\'known/1_1_$special_,/2'(_, _)<=>true. -cleanup\'known/1_1_$special_\\==/2'(_, _)<=>true. -cleanup\'known/1_1_$special_==/2'(_, _)<=>true. -cleanup\'known/1_1_$special_is/2'(_, _)<=>true. -cleanup\'known/1_1_$special_true. -cleanup\'known/1_1_$special_>=/2'(_, _)<=>true. -cleanup\'known/1_1_$special_>/2'(_, _)<=>true. -cleanup\'known/1_1_$special_=true. -cleanup\'known/1_1_$special_=:=/2'(_, _)<=>true. -cleanup\'known/1_1_$special_fail/0'<=>true. -cleanup\'known/1_1_$default'(_)<=>true. -cleanup\variables(_)<=>true. -cleanup<=>true. diff --git a/LGPL/chr/guard_entailment.pl b/LGPL/chr/guard_entailment.pl deleted file mode 100644 index a9d9d6c88..000000000 --- a/LGPL/chr/guard_entailment.pl +++ /dev/null @@ -1,18061 +0,0 @@ -/* Generated by CHR bootstrap compiler - From: guard_entailment.chr - Date: Wed Mar 26 03:31:54 2008 - - - DO NOT EDIT. EDIT THE CHR FILE INSTEAD -*/ - -:-module(guard_entailment,[entails_guard/2,simplify_guards/5]). -:-use_module(chr_runtime). -:-style_check(-discontiguous). -:-include(chr_op). -:-use_module(hprolog). -:-use_module(builtins). -:-use_module(chr_compiler_errors). -entails_guard(A,B) :- - copy_term_nat((A,B),(C,D)), - term_variables(C,E), - variables(E), - sort(C,F), - entails_guard2(F), - !, - test(D), - !, - cleanup. -entails_guard2([]). -entails_guard2([A|B]) :- - known(A), - entails_guard2(B). -simplify_guards(A,B,C,D,E) :- - copy_term_nat((A,C),(F,G)), - term_variables(F,H), - variables(H), - sort(F,I), - entails_guard2(I), - !, - simplify(G,J), - simplified(C,J,D,B,E), - !, - cleanup. -simplified([],[],[],A,A). -simplified([A|B],[keep|C],[A|D],E,F) :- - simplified(B,C,D,E,F). -simplified([_|_],[fail|_],fail,A,A). -simplified([A|B],[true|C],[D|E],F,G) :- - builtins:binds_b(A,H), - term_variables(B,I), - intersect_eq(H,I,J), - !, - ( J=[] -> - term_variables(F,K), - intersect_eq(H,K,L), - !, - ( L=[] -> - D=true, - G=M - ; - D=true, - G=(A,M) - ) - ; - D=A, - G=M - ), - simplified(B,C,E,F,M). -simplify([],[]). -simplify([A|B],[C|D]) :- - ( \+try(true,A) -> - C=true - ; - builtins:negate_b(A,E), - ( \+try(true,E) -> - C=fail - ; - C=keep - ) - ), - known(A), - simplify(B,D). -try(A,B) :- - ( known(A) -> - true - ; - chr_error(internal,'Entailment Checker: try/2. -',[]) - ), - ( test(B) -> - fail - ; - true - ). -add_args_unif([],[],true). -add_args_unif([A|B],[C|D],(A=C,E)) :- - add_args_unif(B,D,E). -add_args_nunif([],[],fail). -add_args_nunif([A|B],[C|D],(A\=C;E)) :- - add_args_nunif(B,D,E). -add_args_nmatch([],[],fail). -add_args_nmatch([A|B],[C|D],(A\==C;E)) :- - add_args_nmatch(B,D,E). -all_unique_vars(A,B) :- - all_unique_vars(A,B,[]). -all_unique_vars([],_,_). -all_unique_vars([A|B],C,D) :- - var(A), - \+memberchk_eq(A,C), - \+memberchk_eq(A,D), - all_unique_vars(B,[A|D]). -:-use_module(chr(chr_runtime)). -attach_variables___1([],_). -attach_variables___1([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\1=:=1 -> - B1=v(Y,[C|D],E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/1, - B1=v(Z,[C],E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(1,[C],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[])) - ), - attach_variables___1(B,C). -detach_variables___1([],_). -detach_variables___1([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\1=:=1 -> - 'chr sbag_del_element'(D,C,A1), - ( A1==[] -> - Z is Y/\ -2, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,[],E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,A1,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - detach_variables___1(B,C). -'attach_known/1_1_$default___1'([],_). -'attach_known/1_1_$default___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\2=:=2 -> - B1=v(Y,D,[C|E],F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/2, - B1=v(Z,D,[C],F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(2,[],[C],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$default___1'(B,C). -'detach_known/1_1_$default___1'([],_). -'detach_known/1_1_$default___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\2=:=2 -> - 'chr sbag_del_element'(E,C,A1), - ( A1==[] -> - Z is Y/\ -3, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,[],F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,A1,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$default___1'(B,C). -'attach_known/1_1_$special_;/2___2'([],_). -'attach_known/1_1_$special_;/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\4=:=4 -> - B1=v(Y,D,E,[C|F],G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/4, - B1=v(Z,D,E,[C],G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(4,[],[],[C],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_;/2___2'(B,C). -'detach_known/1_1_$special_;/2___2'([],_). -'detach_known/1_1_$special_;/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\4=:=4 -> - 'chr sbag_del_element'(F,C,A1), - ( A1==[] -> - Z is Y/\ -5, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,[],G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,A1,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_;/2___2'(B,C). -'attach_known/1_1_$special_nonvar/1___1'([],_). -'attach_known/1_1_$special_nonvar/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\8=:=8 -> - B1=v(Y,D,E,F,[C|G],H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/8, - B1=v(Z,D,E,F,[C],H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(8,[],[],[],[C],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_nonvar/1___1'(B,C). -'detach_known/1_1_$special_nonvar/1___1'([],_). -'detach_known/1_1_$special_nonvar/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\8=:=8 -> - 'chr sbag_del_element'(G,C,A1), - ( A1==[] -> - Z is Y/\ -9, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,[],H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,A1,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_nonvar/1___1'(B,C). -'attach_known/1_1_$special_var/1___1'([],_). -'attach_known/1_1_$special_var/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\16=:=16 -> - B1=v(Y,D,E,F,G,[C|H],I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/16, - B1=v(Z,D,E,F,G,[C],I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(16,[],[],[],[],[C],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_var/1___1'(B,C). -'detach_known/1_1_$special_var/1___1'([],_). -'detach_known/1_1_$special_var/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\16=:=16 -> - 'chr sbag_del_element'(H,C,A1), - ( A1==[] -> - Z is Y/\ -17, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,[],I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,A1,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_var/1___1'(B,C). -'attach_known/1_1_$special_atom/1___1'([],_). -'attach_known/1_1_$special_atom/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\32=:=32 -> - B1=v(Y,D,E,F,G,H,[C|I],J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/32, - B1=v(Z,D,E,F,G,H,[C],J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(32,[],[],[],[],[],[C],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_atom/1___1'(B,C). -'detach_known/1_1_$special_atom/1___1'([],_). -'detach_known/1_1_$special_atom/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\32=:=32 -> - 'chr sbag_del_element'(I,C,A1), - ( A1==[] -> - Z is Y/\ -33, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,[],J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,A1,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_atom/1___1'(B,C). -'attach_known/1_1_$special_atomic/1___1'([],_). -'attach_known/1_1_$special_atomic/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\64=:=64 -> - B1=v(Y,D,E,F,G,H,I,[C|J],K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/64, - B1=v(Z,D,E,F,G,H,I,[C],K,L,M,N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(64,[],[],[],[],[],[],[C],[],[],[],[],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_atomic/1___1'(B,C). -'detach_known/1_1_$special_atomic/1___1'([],_). -'detach_known/1_1_$special_atomic/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\64=:=64 -> - 'chr sbag_del_element'(J,C,A1), - ( A1==[] -> - Z is Y/\ -65, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,[],K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,A1,K,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_atomic/1___1'(B,C). -'attach_known/1_1_$special_compound/1___1'([],_). -'attach_known/1_1_$special_compound/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\128=:=128 -> - B1=v(Y,D,E,F,G,H,I,J,[C|K],L,M,N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/128, - B1=v(Z,D,E,F,G,H,I,J,[C],L,M,N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(128,[],[],[],[],[],[],[],[C],[],[],[],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_compound/1___1'(B,C). -'detach_known/1_1_$special_compound/1___1'([],_). -'detach_known/1_1_$special_compound/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\128=:=128 -> - 'chr sbag_del_element'(K,C,A1), - ( A1==[] -> - Z is Y/\ -129, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,[],L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,A1,L,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_compound/1___1'(B,C). -'attach_known/1_1_$special_ground/1___1'([],_). -'attach_known/1_1_$special_ground/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\256=:=256 -> - B1=v(Y,D,E,F,G,H,I,J,K,[C|L],M,N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/256, - B1=v(Z,D,E,F,G,H,I,J,K,[C],M,N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(256,[],[],[],[],[],[],[],[],[C],[],[],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_ground/1___1'(B,C). -'detach_known/1_1_$special_ground/1___1'([],_). -'detach_known/1_1_$special_ground/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\256=:=256 -> - 'chr sbag_del_element'(L,C,A1), - ( A1==[] -> - Z is Y/\ -257, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,[],M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,A1,M,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_ground/1___1'(B,C). -'attach_known/1_1_$special_integer/1___1'([],_). -'attach_known/1_1_$special_integer/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\512=:=512 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,[C|M],N,O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/512, - B1=v(Z,D,E,F,G,H,I,J,K,L,[C],N,O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(512,[],[],[],[],[],[],[],[],[],[C],[],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_integer/1___1'(B,C). -'detach_known/1_1_$special_integer/1___1'([],_). -'detach_known/1_1_$special_integer/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\512=:=512 -> - 'chr sbag_del_element'(M,C,A1), - ( A1==[] -> - Z is Y/\ -513, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,[],N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,A1,N,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_integer/1___1'(B,C). -'attach_known/1_1_$special_float/1___1'([],_). -'attach_known/1_1_$special_float/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\1024=:=1024 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,[C|N],O,P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/1024, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,[C],O,P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(1024,[],[],[],[],[],[],[],[],[],[],[C],[],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_float/1___1'(B,C). -'detach_known/1_1_$special_float/1___1'([],_). -'detach_known/1_1_$special_float/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\1024=:=1024 -> - 'chr sbag_del_element'(N,C,A1), - ( A1==[] -> - Z is Y/\ -1025, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,[],O,P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,A1,O,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_float/1___1'(B,C). -'attach_known/1_1_$special_number/1___1'([],_). -'attach_known/1_1_$special_number/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\2048=:=2048 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,[C|O],P,Q,R,S,T,U,V,W,X) - ; - Z is Y\/2048, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,[C],P,Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(2048,[],[],[],[],[],[],[],[],[],[],[],[C],[],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_number/1___1'(B,C). -'detach_known/1_1_$special_number/1___1'([],_). -'detach_known/1_1_$special_number/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\2048=:=2048 -> - 'chr sbag_del_element'(O,C,A1), - ( A1==[] -> - Z is Y/\ -2049, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,[],P,Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,A1,P,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_number/1___1'(B,C). -'attach_known/1_1_$special_=\\=/2___2'([],_). -'attach_known/1_1_$special_=\\=/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\4096=:=4096 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,[C|P],Q,R,S,T,U,V,W,X) - ; - Z is Y\/4096, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,O,[C],Q,R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(4096,[],[],[],[],[],[],[],[],[],[],[],[],[C],[],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_=\\=/2___2'(B,C). -'detach_known/1_1_$special_=\\=/2___2'([],_). -'detach_known/1_1_$special_=\\=/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\4096=:=4096 -> - 'chr sbag_del_element'(P,C,A1), - ( A1==[] -> - Z is Y/\ -4097, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,O,[],Q,R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,O,A1,Q,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_=\\=/2___2'(B,C). -'attach_known/1_1_$special_\\+/1___1'([],_). -'attach_known/1_1_$special_\\+/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\8192=:=8192 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,[C|Q],R,S,T,U,V,W,X) - ; - Z is Y\/8192, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,[C],R,S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(8192,[],[],[],[],[],[],[],[],[],[],[],[],[],[C],[],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_\\+/1___1'(B,C). -'detach_known/1_1_$special_\\+/1___1'([],_). -'detach_known/1_1_$special_\\+/1___1'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\8192=:=8192 -> - 'chr sbag_del_element'(Q,C,A1), - ( A1==[] -> - Z is Y/\ -8193, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,[],R,S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,A1,R,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_\\+/1___1'(B,C). -'attach_known/1_1_$special_functor/3___3'([],_). -'attach_known/1_1_$special_functor/3___3'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\16384=:=16384 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,[C|R],S,T,U,V,W,X) - ; - Z is Y\/16384, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,[C],S,T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(16384,[],[],[],[],[],[],[],[],[],[],[],[],[],[],[C],[],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_functor/3___3'(B,C). -'detach_known/1_1_$special_functor/3___3'([],_). -'detach_known/1_1_$special_functor/3___3'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\16384=:=16384 -> - 'chr sbag_del_element'(R,C,A1), - ( A1==[] -> - Z is Y/\ -16385, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,[],S,T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,A1,S,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_functor/3___3'(B,C). -'attach_known/1_1_$special_\\=/2___2'([],_). -'attach_known/1_1_$special_\\=/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\32768=:=32768 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,[C|S],T,U,V,W,X) - ; - Z is Y\/32768, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,[C],T,U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(32768,[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[C],[],[],[],[],[])) - ), - 'attach_known/1_1_$special_\\=/2___2'(B,C). -'detach_known/1_1_$special_\\=/2___2'([],_). -'detach_known/1_1_$special_\\=/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\32768=:=32768 -> - 'chr sbag_del_element'(S,C,A1), - ( A1==[] -> - Z is Y/\ -32769, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,[],T,U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,A1,T,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_\\=/2___2'(B,C). -'attach_known/1_1_$special_=/2___2'([],_). -'attach_known/1_1_$special_=/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\65536=:=65536 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,[C|T],U,V,W,X) - ; - Z is Y\/65536, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,[C],U,V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(65536,[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[C],[],[],[],[])) - ), - 'attach_known/1_1_$special_=/2___2'(B,C). -'detach_known/1_1_$special_=/2___2'([],_). -'detach_known/1_1_$special_=/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\65536=:=65536 -> - 'chr sbag_del_element'(T,C,A1), - ( A1==[] -> - Z is Y/\ -65537, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,[],U,V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,A1,U,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_=/2___2'(B,C). -'attach_known/1_1_$special_\\==/2___2'([],_). -'attach_known/1_1_$special_\\==/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\131072=:=131072 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,[C|U],V,W,X) - ; - Z is Y\/131072, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,[C],V,W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(131072,[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[C],[],[],[])) - ), - 'attach_known/1_1_$special_\\==/2___2'(B,C). -'detach_known/1_1_$special_\\==/2___2'([],_). -'detach_known/1_1_$special_\\==/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\131072=:=131072 -> - 'chr sbag_del_element'(U,C,A1), - ( A1==[] -> - Z is Y/\ -131073, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,[],V,W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,A1,V,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_\\==/2___2'(B,C). -'attach_known/1_1_$special_==/2___2'([],_). -'attach_known/1_1_$special_==/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,A1) -> - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\262144=:=262144 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,[C|V],W,X) - ; - Z is Y\/262144, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,[C],W,X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(262144,[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[C],[],[])) - ), - 'attach_known/1_1_$special_==/2___2'(B,C). -'detach_known/1_1_$special_==/2___2'([],_). -'detach_known/1_1_$special_==/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\262144=:=262144 -> - 'chr sbag_del_element'(V,C,A1), - ( A1==[] -> - Z is Y/\ -262145, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,[],W,X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,A1,W,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_==/2___2'(B,C). -'attach_known/1_1_$special_= - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\524288=:=524288 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,[C|W],X) - ; - Z is Y\/524288, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,[C],X) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(524288,[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[C],[])) - ), - 'attach_known/1_1_$special_= - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\524288=:=524288 -> - 'chr sbag_del_element'(W,C,A1), - ( A1==[] -> - Z is Y/\ -524289, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,[],X)) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,A1,X)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_= - A1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\1048576=:=1048576 -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,[C|X]) - ; - Z is Y\/1048576, - B1=v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,[C]) - ), - put_attr(A,guard_entailment,B1) - ; - put_attr(A,guard_entailment,v(1048576,[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[C])) - ), - 'attach_known/1_1_$special_=:=/2___2'(B,C). -'detach_known/1_1_$special_=:=/2___2'([],_). -'detach_known/1_1_$special_=:=/2___2'([A|B],C) :- - ( get_attr(A,guard_entailment,B1) -> - B1=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - ( Y/\1048576=:=1048576 -> - 'chr sbag_del_element'(X,C,A1), - ( A1==[] -> - Z is Y/\ -1048577, - ( Z==0 -> - del_attr(A,guard_entailment) - ; - put_attr(A,guard_entailment,v(Z,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,[])) - ) - ; - put_attr(A,guard_entailment,v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,A1)) - ) - ; - true - ) - ; - true - ), - 'detach_known/1_1_$special_=:=/2___2'(B,C). -attach_increment([],_). -attach_increment([B|C],A) :- - 'chr not_locked'(B), - ( get_attr(B,guard_entailment,M3) -> - A=v(Y,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X), - M3=v(U1,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1), - sort(Z,V1), - 'chr merge_attributes'(D,V1,W1), - sort(A1,X1), - 'chr merge_attributes'(E,X1,Y1), - sort(B1,Z1), - 'chr merge_attributes'(F,Z1,A2), - sort(C1,B2), - 'chr merge_attributes'(G,B2,C2), - sort(D1,D2), - 'chr merge_attributes'(H,D2,E2), - sort(E1,F2), - 'chr merge_attributes'(I,F2,G2), - sort(F1,H2), - 'chr merge_attributes'(J,H2,I2), - sort(G1,J2), - 'chr merge_attributes'(K,J2,K2), - sort(H1,L2), - 'chr merge_attributes'(L,L2,M2), - sort(I1,N2), - 'chr merge_attributes'(M,N2,O2), - sort(J1,P2), - 'chr merge_attributes'(N,P2,Q2), - sort(K1,R2), - 'chr merge_attributes'(O,R2,S2), - sort(L1,T2), - 'chr merge_attributes'(P,T2,U2), - sort(M1,V2), - 'chr merge_attributes'(Q,V2,W2), - sort(N1,X2), - 'chr merge_attributes'(R,X2,Y2), - sort(O1,Z2), - 'chr merge_attributes'(S,Z2,A3), - sort(P1,B3), - 'chr merge_attributes'(T,B3,C3), - sort(Q1,D3), - 'chr merge_attributes'(U,D3,E3), - sort(R1,F3), - 'chr merge_attributes'(V,F3,G3), - sort(S1,H3), - 'chr merge_attributes'(W,H3,I3), - sort(T1,J3), - 'chr merge_attributes'(X,J3,K3), - L3 is Y\/U1, - put_attr(B,guard_entailment,v(L3,W1,Y1,A2,C2,E2,G2,I2,K2,M2,O2,Q2,S2,U2,W2,Y2,A3,C3,E3,G3,I3,K3)) - ; - put_attr(B,guard_entailment,A) - ), - attach_increment(C,A). -attr_unify_hook(v(W,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V),A) :- - sort(B,X), - sort(C,Y), - sort(D,Z), - sort(E,A1), - sort(F,B1), - sort(G,C1), - sort(H,D1), - sort(I,E1), - sort(J,F1), - sort(K,G1), - sort(L,H1), - sort(M,I1), - sort(N,J1), - sort(O,K1), - sort(P,L1), - sort(Q,M1), - sort(R,N1), - sort(S,O1), - sort(T,P1), - sort(U,Q1), - sort(V,R1), - ( var(A) -> - ( get_attr(A,guard_entailment,F4) -> - F4=v(N2,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2), - sort(S1,O2), - 'chr merge_attributes'(X,O2,P2), - sort(T1,Q2), - 'chr merge_attributes'(Y,Q2,R2), - sort(U1,S2), - 'chr merge_attributes'(Z,S2,T2), - sort(V1,U2), - 'chr merge_attributes'(A1,U2,V2), - sort(W1,W2), - 'chr merge_attributes'(B1,W2,X2), - sort(X1,Y2), - 'chr merge_attributes'(C1,Y2,Z2), - sort(Y1,A3), - 'chr merge_attributes'(D1,A3,B3), - sort(Z1,C3), - 'chr merge_attributes'(E1,C3,D3), - sort(A2,E3), - 'chr merge_attributes'(F1,E3,F3), - sort(B2,G3), - 'chr merge_attributes'(G1,G3,H3), - sort(C2,I3), - 'chr merge_attributes'(H1,I3,J3), - sort(D2,K3), - 'chr merge_attributes'(I1,K3,L3), - sort(E2,M3), - 'chr merge_attributes'(J1,M3,N3), - sort(F2,O3), - 'chr merge_attributes'(K1,O3,P3), - sort(G2,Q3), - 'chr merge_attributes'(L1,Q3,R3), - sort(H2,S3), - 'chr merge_attributes'(M1,S3,T3), - sort(I2,U3), - 'chr merge_attributes'(N1,U3,V3), - sort(J2,W3), - 'chr merge_attributes'(O1,W3,X3), - sort(K2,Y3), - 'chr merge_attributes'(P1,Y3,Z3), - sort(L2,A4), - 'chr merge_attributes'(Q1,A4,B4), - sort(M2,C4), - 'chr merge_attributes'(R1,C4,D4), - E4 is W\/N2, - put_attr(A,guard_entailment,v(E4,P2,R2,T2,V2,X2,Z2,B3,D3,F3,H3,J3,L3,N3,P3,R3,T3,V3,X3,Z3,B4,D4)), - '$run_suspensions_variables___1'(X), - '$run_suspensions_known/1_1_$default___1'(Y), - '$run_suspensions_known/1_1_$special_;/2___2'(T2), - '$run_suspensions_known/1_1_$special_nonvar/1___1'(A1), - '$run_suspensions_known/1_1_$special_var/1___1'(B1), - '$run_suspensions_known/1_1_$special_atom/1___1'(C1), - '$run_suspensions_known/1_1_$special_atomic/1___1'(D1), - '$run_suspensions_known/1_1_$special_compound/1___1'(E1), - '$run_suspensions_known/1_1_$special_ground/1___1'(F1), - '$run_suspensions_known/1_1_$special_integer/1___1'(H3), - '$run_suspensions_known/1_1_$special_float/1___1'(J3), - '$run_suspensions_known/1_1_$special_number/1___1'(L3), - '$run_suspensions_known/1_1_$special_=\\=/2___2'(N3), - '$run_suspensions_known/1_1_$special_\\+/1___1'(P3), - '$run_suspensions_known/1_1_$special_functor/3___3'(R3), - '$run_suspensions_known/1_1_$special_\\=/2___2'(T3), - '$run_suspensions_known/1_1_$special_=/2___2'(V3), - '$run_suspensions_known/1_1_$special_\\==/2___2'(X3), - '$run_suspensions_known/1_1_$special_==/2___2'(Z3), - '$run_suspensions_known/1_1_$special_= - term_variables(A,G4), - attach_increment(G4,v(W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1)) - ; - true - ), - '$run_suspensions_variables___1'(X), - '$run_suspensions_known/1_1_$default___1'(Y), - '$run_suspensions_known/1_1_$special_;/2___2'(Z), - '$run_suspensions_known/1_1_$special_nonvar/1___1'(A1), - '$run_suspensions_known/1_1_$special_var/1___1'(B1), - '$run_suspensions_known/1_1_$special_atom/1___1'(C1), - '$run_suspensions_known/1_1_$special_atomic/1___1'(D1), - '$run_suspensions_known/1_1_$special_compound/1___1'(E1), - '$run_suspensions_known/1_1_$special_ground/1___1'(F1), - '$run_suspensions_known/1_1_$special_integer/1___1'(G1), - '$run_suspensions_known/1_1_$special_float/1___1'(H1), - '$run_suspensions_known/1_1_$special_number/1___1'(I1), - '$run_suspensions_known/1_1_$special_=\\=/2___2'(J1), - '$run_suspensions_known/1_1_$special_\\+/1___1'(K1), - '$run_suspensions_known/1_1_$special_functor/3___3'(L1), - '$run_suspensions_known/1_1_$special_\\=/2___2'(M1), - '$run_suspensions_known/1_1_$special_=/2___2'(N1), - '$run_suspensions_known/1_1_$special_\\==/2___2'(O1), - '$run_suspensions_known/1_1_$special_==/2___2'(P1), - '$run_suspensions_known/1_1_$special_= - fail - ; - true - ). -'$extend_history'(A,B) :- - arg(3,A,C), - hprolog:put_ds(B,C,x,D), - setarg(3,A,D). -'$run_suspensions_variables___1'([]). -'$run_suspensions_variables___1'([A|B]) :- - A=suspension(_,C,_,D), - ( C==active -> - setarg(2,A,triggered), - variables___1__0(D,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_variables___1'(B). -'$run_suspensions_known/1_1_$default___1'([]). -'$run_suspensions_known/1_1_$default___1'([A|B]) :- - A=suspension(_,C,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(3,A,F), - 'known/1_1_$default___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$default___1'(B). -'$run_suspensions_known/1_1_$special_;/2___2'([]). -'$run_suspensions_known/1_1_$special_;/2___2'([A|B]) :- - A=suspension(_,C,D,_,E,F), - ( C==active -> - setarg(2,A,triggered), - G is D+1, - setarg(3,A,G), - 'known/1_1_$special_;/2___2__0'(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_;/2___2'(B). -'$run_suspensions_known/1_1_$special_nonvar/1___1'([]). -'$run_suspensions_known/1_1_$special_nonvar/1___1'([A|B]) :- - A=suspension(_,C,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(3,A,F), - 'known/1_1_$special_nonvar/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_nonvar/1___1'(B). -'$run_suspensions_known/1_1_$special_var/1___1'([]). -'$run_suspensions_known/1_1_$special_var/1___1'([A|B]) :- - A=suspension(_,C,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(3,A,F), - 'known/1_1_$special_var/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_var/1___1'(B). -'$run_suspensions_known/1_1_$special_atom/1___1'([]). -'$run_suspensions_known/1_1_$special_atom/1___1'([A|B]) :- - A=suspension(_,C,_,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(4,A,F), - 'known/1_1_$special_atom/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_atom/1___1'(B). -'$run_suspensions_known/1_1_$special_atomic/1___1'([]). -'$run_suspensions_known/1_1_$special_atomic/1___1'([A|B]) :- - A=suspension(_,C,_,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(4,A,F), - 'known/1_1_$special_atomic/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_atomic/1___1'(B). -'$run_suspensions_known/1_1_$special_compound/1___1'([]). -'$run_suspensions_known/1_1_$special_compound/1___1'([A|B]) :- - A=suspension(_,C,_,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(4,A,F), - 'known/1_1_$special_compound/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_compound/1___1'(B). -'$run_suspensions_known/1_1_$special_ground/1___1'([]). -'$run_suspensions_known/1_1_$special_ground/1___1'([A|B]) :- - A=suspension(_,C,_,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(4,A,F), - 'known/1_1_$special_ground/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_ground/1___1'(B). -'$run_suspensions_known/1_1_$special_integer/1___1'([]). -'$run_suspensions_known/1_1_$special_integer/1___1'([A|B]) :- - A=suspension(_,C,_,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(4,A,F), - 'known/1_1_$special_integer/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_integer/1___1'(B). -'$run_suspensions_known/1_1_$special_float/1___1'([]). -'$run_suspensions_known/1_1_$special_float/1___1'([A|B]) :- - A=suspension(_,C,_,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(4,A,F), - 'known/1_1_$special_float/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_float/1___1'(B). -'$run_suspensions_known/1_1_$special_number/1___1'([]). -'$run_suspensions_known/1_1_$special_number/1___1'([A|B]) :- - A=suspension(_,C,_,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(4,A,F), - 'known/1_1_$special_number/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_number/1___1'(B). -'$run_suspensions_known/1_1_$special_=\\=/2___2'([]). -'$run_suspensions_known/1_1_$special_=\\=/2___2'([A|B]) :- - A=suspension(_,C,_,D,_,E,F), - ( C==active -> - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - 'known/1_1_$special_=\\=/2___2__0'(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_=\\=/2___2'(B). -'$run_suspensions_known/1_1_$special_\\+/1___1'([]). -'$run_suspensions_known/1_1_$special_\\+/1___1'([A|B]) :- - A=suspension(_,C,D,_,E), - ( C==active -> - setarg(2,A,triggered), - F is D+1, - setarg(3,A,F), - 'known/1_1_$special_\\+/1___1__0'(E,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_\\+/1___1'(B). -'$run_suspensions_known/1_1_$special_functor/3___3'([]). -'$run_suspensions_known/1_1_$special_functor/3___3'([A|B]) :- - A=suspension(_,C,D,_,E,F,G), - ( C==active -> - setarg(2,A,triggered), - H is D+1, - setarg(3,A,H), - 'known/1_1_$special_functor/3___3__0'(E,F,G,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_functor/3___3'(B). -'$run_suspensions_known/1_1_$special_\\=/2___2'([]). -'$run_suspensions_known/1_1_$special_\\=/2___2'([A|B]) :- - A=suspension(_,C,_,D,_,E,F), - ( C==active -> - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - 'known/1_1_$special_\\=/2___2__0'(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_\\=/2___2'(B). -'$run_suspensions_known/1_1_$special_=/2___2'([]). -'$run_suspensions_known/1_1_$special_=/2___2'([A|B]) :- - A=suspension(_,C,D,_,E,F), - ( C==active -> - setarg(2,A,triggered), - G is D+1, - setarg(3,A,G), - 'known/1_1_$special_=/2___2__0'(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_=/2___2'(B). -'$run_suspensions_known/1_1_$special_\\==/2___2'([]). -'$run_suspensions_known/1_1_$special_\\==/2___2'([A|B]) :- - A=suspension(_,C,_,D,_,E,F), - ( C==active -> - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - 'known/1_1_$special_\\==/2___2__0'(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_\\==/2___2'(B). -'$run_suspensions_known/1_1_$special_==/2___2'([]). -'$run_suspensions_known/1_1_$special_==/2___2'([A|B]) :- - A=suspension(_,C,_,D,_,E,F), - ( C==active -> - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - 'known/1_1_$special_==/2___2__0'(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_==/2___2'(B). -'$run_suspensions_known/1_1_$special_= - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - 'known/1_1_$special_= - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_= - setarg(2,A,triggered), - G is D+1, - setarg(4,A,G), - 'known/1_1_$special_=:=/2___2__0'(E,F,A), - ( C==triggered -> - setarg(2,A,active) - ; - true - ) - ; - true - ), - '$run_suspensions_known/1_1_$special_=:=/2___2'(B). -'$enumerate_constraints'(A) :- - ( nonvar(A) -> - functor(A,B,_), - '$enumerate_constraints'(B,A) - ; - '$enumerate_constraints'(_,A) - ). -'$enumerate_constraints'(variables,A) :- - nb_getval('$chr_store_global_list_guard_entailment____variables___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,D), - A=variables(D). -'$enumerate_constraints'('known/1_1_$default',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D), - A='known/1_1_$default'(D). -'$enumerate_constraints'('known/1_1_$special_;/2',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D,E), - A='known/1_1_$special_;/2'(D,E). -'$enumerate_constraints'('known/1_1_$special_nonvar/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D), - A='known/1_1_$special_nonvar/1'(D). -'$enumerate_constraints'('known/1_1_$special_var/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D), - A='known/1_1_$special_var/1'(D). -'$enumerate_constraints'('known/1_1_$special_atom/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D), - A='known/1_1_$special_atom/1'(D). -'$enumerate_constraints'('known/1_1_$special_atomic/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D), - A='known/1_1_$special_atomic/1'(D). -'$enumerate_constraints'('known/1_1_$special_compound/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D), - A='known/1_1_$special_compound/1'(D). -'$enumerate_constraints'('known/1_1_$special_ground/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D), - A='known/1_1_$special_ground/1'(D). -'$enumerate_constraints'('known/1_1_$special_integer/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D), - A='known/1_1_$special_integer/1'(D). -'$enumerate_constraints'('known/1_1_$special_float/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D), - A='known/1_1_$special_float/1'(D). -'$enumerate_constraints'('known/1_1_$special_number/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D), - A='known/1_1_$special_number/1'(D). -'$enumerate_constraints'('known/1_1_$special_=\\=/2',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D,E), - A='known/1_1_$special_=\\=/2'(D,E). -'$enumerate_constraints'('known/1_1_$special_\\+/1',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D), - A='known/1_1_$special_\\+/1'(D). -'$enumerate_constraints'('known/1_1_$special_functor/3',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D,E,F), - A='known/1_1_$special_functor/3'(D,E,F). -'$enumerate_constraints'('known/1_1_$special_\\=/2',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D,E), - A='known/1_1_$special_\\=/2'(D,E). -'$enumerate_constraints'('known/1_1_$special_=/2',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,D,E), - A='known/1_1_$special_=/2'(D,E). -'$enumerate_constraints'('known/1_1_$special_\\==/2',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D,E), - A='known/1_1_$special_\\==/2'(D,E). -'$enumerate_constraints'('known/1_1_$special_==/2',A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',C), - 'chr sbag_member'(B,C), - B=suspension(_,_,_,_,_,D,E), - A='known/1_1_$special_==/2'(D,E). -'$enumerate_constraints'('known/1_1_$special_==H1), - !, - 'known/1_1_$special_>=/2'(G1,H1) - ) - ; - A=(I1>J1), - !, - 'known/1_1_$special_>/2'(I1,J1) - ) - ; - A=(K1==N), - !, - 'test/1_1_$special_>=/2'(M,N) - ) - ; - A=(O>P), - !, - 'test/1_1_$special_>/2'(O,P) - ) - ; - A=(Q=\=R), - !, - 'test/1_1_$special_=\\=/2'(Q,R) - ) - ; - A=(S= - A=suspension(_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(C,A), - cleanup___0__0__0__1(B) - ; - cleanup___0__0__0__1(B) - ). -cleanup :- - cleanup___0__1. -cleanup___0__1 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',A), - !, - cleanup___0__1__0__2(A). -cleanup___0__1__0__2([]) :- - cleanup___0__2. -cleanup___0__1__0__2([A|B]) :- - ( A=suspension(_,active,_,_,_) -> - A=suspension(_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_nonvar/1___1'(C,A), - cleanup___0__1__0__2(B) - ; - cleanup___0__1__0__2(B) - ). -cleanup___0__1 :- - cleanup___0__2. -cleanup___0__2 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',A), - !, - cleanup___0__2__0__3(A). -cleanup___0__2__0__3([]) :- - cleanup___0__3. -cleanup___0__2__0__3([A|B]) :- - ( A=suspension(_,active,_,_,_) -> - A=suspension(_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_var/1___1'(C,A), - cleanup___0__2__0__3(B) - ; - cleanup___0__2__0__3(B) - ). -cleanup___0__2 :- - cleanup___0__3. -cleanup___0__3 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',A), - !, - cleanup___0__3__0__4(A). -cleanup___0__3__0__4([]) :- - cleanup___0__4. -cleanup___0__3__0__4([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_atom/1___1'(C,A), - cleanup___0__3__0__4(B) - ; - cleanup___0__3__0__4(B) - ). -cleanup___0__3 :- - cleanup___0__4. -cleanup___0__4 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',A), - !, - cleanup___0__4__0__5(A). -cleanup___0__4__0__5([]) :- - cleanup___0__5. -cleanup___0__4__0__5([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_atomic/1___1'(C,A), - cleanup___0__4__0__5(B) - ; - cleanup___0__4__0__5(B) - ). -cleanup___0__4 :- - cleanup___0__5. -cleanup___0__5 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',A), - !, - cleanup___0__5__0__6(A). -cleanup___0__5__0__6([]) :- - cleanup___0__6. -cleanup___0__5__0__6([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_compound/1___1'(C,A), - cleanup___0__5__0__6(B) - ; - cleanup___0__5__0__6(B) - ). -cleanup___0__5 :- - cleanup___0__6. -cleanup___0__6 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',A), - !, - cleanup___0__6__0__7(A). -cleanup___0__6__0__7([]) :- - cleanup___0__7. -cleanup___0__6__0__7([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_ground/1___1'(C,A), - cleanup___0__6__0__7(B) - ; - cleanup___0__6__0__7(B) - ). -cleanup___0__6 :- - cleanup___0__7. -cleanup___0__7 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',A), - !, - cleanup___0__7__0__8(A). -cleanup___0__7__0__8([]) :- - cleanup___0__8. -cleanup___0__7__0__8([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_integer/1___1'(C,A), - cleanup___0__7__0__8(B) - ; - cleanup___0__7__0__8(B) - ). -cleanup___0__7 :- - cleanup___0__8. -cleanup___0__8 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',A), - !, - cleanup___0__8__0__9(A). -cleanup___0__8__0__9([]) :- - cleanup___0__9. -cleanup___0__8__0__9([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_float/1___1'(C,A), - cleanup___0__8__0__9(B) - ; - cleanup___0__8__0__9(B) - ). -cleanup___0__8 :- - cleanup___0__9. -cleanup___0__9 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',A), - !, - cleanup___0__9__0__10(A). -cleanup___0__9__0__10([]) :- - cleanup___0__10. -cleanup___0__9__0__10([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_number/1___1'(C,A), - cleanup___0__9__0__10(B) - ; - cleanup___0__9__0__10(B) - ). -cleanup___0__9 :- - cleanup___0__10. -cleanup___0__10 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',A), - !, - cleanup___0__10__0__11(A). -cleanup___0__10__0__11([]) :- - cleanup___0__11. -cleanup___0__10__0__11([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(C,A), - cleanup___0__10__0__11(B) - ; - cleanup___0__10__0__11(B) - ). -cleanup___0__10 :- - cleanup___0__11. -cleanup___0__11 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',A), - !, - cleanup___0__11__0__12(A). -cleanup___0__11__0__12([]) :- - cleanup___0__12. -cleanup___0__11__0__12([A|B]) :- - ( A=suspension(_,active,_,_,_) -> - A=suspension(_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(C,A), - cleanup___0__11__0__12(B) - ; - cleanup___0__11__0__12(B) - ). -cleanup___0__11 :- - cleanup___0__12. -cleanup___0__12 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',A), - !, - cleanup___0__12__0__13(A). -cleanup___0__12__0__13([]) :- - cleanup___0__13. -cleanup___0__12__0__13([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,H,I,J), - setarg(2,A,removed), - term_variables(term(H,I,J),C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(C,A), - cleanup___0__12__0__13(B) - ; - cleanup___0__12__0__13(B) - ). -cleanup___0__12 :- - cleanup___0__13. -cleanup___0__13 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',A), - !, - cleanup___0__13__0__14(A). -cleanup___0__13__0__14([]) :- - cleanup___0__14. -cleanup___0__13__0__14([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(C,A), - cleanup___0__13__0__14(B) - ; - cleanup___0__13__0__14(B) - ). -cleanup___0__13 :- - cleanup___0__14. -cleanup___0__14 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',A), - !, - cleanup___0__14__0__15(A). -cleanup___0__14__0__15([]) :- - cleanup___0__15. -cleanup___0__14__0__15([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(C,A), - cleanup___0__14__0__15(B) - ; - cleanup___0__14__0__15(B) - ). -cleanup___0__14 :- - cleanup___0__15. -cleanup___0__15 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',A), - !, - cleanup___0__15__0__17(A). -cleanup___0__15__0__17([]) :- - cleanup___0__16. -cleanup___0__15__0__17([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_\\==/2___2'(C,A), - cleanup___0__15__0__17(B) - ; - cleanup___0__15__0__17(B) - ). -cleanup___0__15 :- - cleanup___0__16. -cleanup___0__16 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',A), - !, - cleanup___0__16__0__18(A). -cleanup___0__16__0__18([]) :- - cleanup___0__17. -cleanup___0__16__0__18([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_==/2___2'(C,A), - cleanup___0__16__0__18(B) - ; - cleanup___0__16__0__18(B) - ). -cleanup___0__16 :- - cleanup___0__17. -cleanup___0__17 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_= - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(C,A), - cleanup___0__18__0__24(B) - ; - cleanup___0__18__0__24(B) - ). -cleanup___0__18 :- - cleanup___0__19. -cleanup___0__19 :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',A), - !, - cleanup___0__19__0__25(A). -cleanup___0__19__0__25([]) :- - cleanup___0__20. -cleanup___0__19__0__25([A|B]) :- - ( A=suspension(_,active,_) -> - setarg(2,A,removed), - arg(3,A,C), - ( var(C) -> - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',D), - D=[_|E], - b_setval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',E), - ( E=[F|_] -> - setarg(3,F,_) - ; - true - ) - ; - C=[_,_|E], - setarg(2,C,E), - ( E=[F|_] -> - setarg(3,F,C) - ; - true - ) - ), - cleanup___0__19__0__25(B) - ; - cleanup___0__19__0__25(B) - ). -cleanup___0__19 :- - cleanup___0__20. -cleanup___0__20 :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',A), - !, - cleanup___0__20__0__26(A). -cleanup___0__20__0__26([]) :- - cleanup___0__21. -cleanup___0__20__0__26([A|B]) :- - ( A=suspension(_,active,_,_,_) -> - A=suspension(_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$default___1'(C,A), - cleanup___0__20__0__26(B) - ; - cleanup___0__20__0__26(B) - ). -cleanup___0__20 :- - cleanup___0__21. -cleanup___0__21 :- - nb_getval('$chr_store_global_list_guard_entailment____variables___1',A), - !, - cleanup___0__21__0__27(A). -cleanup___0__21__0__27([]) :- - cleanup___0__22. -cleanup___0__21__0__27([A|B]) :- - ( A=suspension(_,active,_,_) -> - A=suspension(_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(3,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____variables___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____variables___1',F), - ( F=[G|_] -> - setarg(3,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(3,G,D) - ; - true - ) - ), - detach_variables___1(C,A), - cleanup___0__21__0__27(B) - ; - cleanup___0__21__0__27(B) - ). -cleanup___0__21 :- - cleanup___0__22. -cleanup___0__22. -variables(A) :- - variables___1__0(A,_). -variables___1__0(A,B) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',G), - 'chr sbag_member'(C,G), - C=suspension(_,active,_,_,D,E,F), - ground(F), - ground(E), - var(D), - !, - C=suspension(_,_,_,_,U,V,W), - setarg(2,C,removed), - term_variables(term(U,V,W),J), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(J,C), - ( var(B) -> - true - ; - B=suspension(_,_,_,P), - setarg(2,B,removed), - term_variables(P,K), - arg(3,B,L), - ( var(L) -> - nb_getval('$chr_store_global_list_guard_entailment____variables___1',M), - M=[_|N], - b_setval('$chr_store_global_list_guard_entailment____variables___1',N), - ( N=[O|_] -> - setarg(3,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(3,O,L) - ; - true - ) - ), - detach_variables___1(K,B) - ), - functor(D,E,F), - D=..[_|H], - append(H,A,I), - variables(I). -variables___1__0(A,B) :- - ( var(B) -> - B=suspension(D,active,_,A), - term_variables(A,C), - 'chr none_locked'(C), - 'chr gen_id'(D), - nb_getval('$chr_store_global_list_guard_entailment____variables___1',E), - F=[B|E], - b_setval('$chr_store_global_list_guard_entailment____variables___1',F), - ( E=[G|_] -> - setarg(3,G,F) - ; - true - ), - attach_variables___1(C,B) - ; - setarg(2,B,active) - ). -'test/1_1_$default'(_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$default'(A) :- - nonvar(A), - ( - ( - ( - ( - ( - A=nonvar(B), - ( 'chr newvia_1'(B,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==B, - ! - ; - A=var(H), - ( 'chr newvia_1'(H,L) -> - get_attr(L,guard_entailment,M), - M=v(_,_,_,_,_,K,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',K) - ), - 'chr sbag_member'(I,K), - I=suspension(_,active,_,_,J), - J==H, - ! - ) - ; - A=atom(N), - ( 'chr newvia_1'(N,R) -> - get_attr(R,guard_entailment,S), - S=v(_,_,_,_,_,_,Q,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',Q) - ), - 'chr sbag_member'(O,Q), - O=suspension(_,active,_,_,_,P), - P==N, - ! - ) - ; - A=atomic(T), - ( 'chr newvia_1'(T,X) -> - get_attr(X,guard_entailment,Y), - Y=v(_,_,_,_,_,_,_,W,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',W) - ), - 'chr sbag_member'(U,W), - U=suspension(_,active,_,_,_,V), - V==T, - ! - ) - ; - A=compound(Z), - ( 'chr newvia_1'(Z,D1) -> - get_attr(D1,guard_entailment,E1), - E1=v(_,_,_,_,_,_,_,_,C1,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',C1) - ), - 'chr sbag_member'(A1,C1), - A1=suspension(_,active,_,_,_,B1), - B1==Z, - ! - ) - ; - A=(F1\=G1), - ( 'chr newvia_2'(F1,G1,L1) -> - get_attr(L1,guard_entailment,M1), - M1=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,K1,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',K1) - ), - 'chr sbag_member'(H1,K1), - H1=suspension(_,active,_,_,_,I1,J1), - I1==F1, - J1==G1, - ! - ). -'test/1_1_$default'(A) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',D) - ), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,C), - C==A, - !. -'test/1_1_$default'(A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - 'chr sbag_member'(B,E), - B=suspension(_,active,_,_,C,D), - !, - B=suspension(_,_,_,_,L,M), - setarg(2,B,removed), - term_variables(term(L,M),G), - arg(4,B,H), - ( var(H) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I), - I=[_|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - ( J=[K|_] -> - setarg(4,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(4,K,H) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(G,B), - \+try(C,A), - !, - negate_b(C,F), - known(F), - \+try(D,A). -'test/1_1_$default'(_) :- - fail. -'test/1_1_$special_,/2'(_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_,/2'(A,B) :- - test(A), - known(A), - test(B). -'test/1_1_$special_\\+/1'(_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_\\+/1'(A) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',D) - ), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,C), - C==A, - !. -'test/1_1_$special_\\+/1'(A) :- - nonvar(A), - ( - ( - ( - ( - ( - ( - ( - A=functor(B,C,D), - nonvar(B), - ( - 'chr lock'(B), - 'chr lock'(C), - 'chr lock'(D), - functor(B,C,D), - 'chr unlock'(B), - 'chr unlock'(C), - 'chr unlock'(D), - !, - fail - ; - ! - ) - ; - A=ground(E), - ground(E), - !, - fail - ) - ; - A=number(F), - number(F), - !, - fail - ) - ; - A=float(G), - float(G), - !, - fail - ) - ; - A=integer(H), - integer(H), - !, - fail - ) - ; - A=number(I), - nonvar(I), - ! - ) - ; - A=float(J), - nonvar(J), - ! - ) - ; - A=integer(K), - nonvar(K), - ! - ). -'test/1_1_$special_\\+/1'(A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - 'chr sbag_member'(B,E), - B=suspension(_,active,_,_,C,D), - !, - B=suspension(_,_,_,_,L,M), - setarg(2,B,removed), - term_variables(term(L,M),G), - arg(4,B,H), - ( var(H) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I), - I=[_|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - ( J=[K|_] -> - setarg(4,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(4,K,H) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(G,B), - \+try(C,\+A), - !, - negate_b(C,F), - known(F), - \+try(D,\+A). -'test/1_1_$special_\\+/1'(_) :- - fail. -'test/1_1_$special_integer/1'(_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_integer/1'(A) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,D,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',D) - ), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,_,C), - C==A, - !. -'test/1_1_$special_integer/1'(A) :- - integer(A), - !. -'test/1_1_$special_integer/1'(A) :- - nonvar(A), - !, - fail. -'test/1_1_$special_integer/1'(A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - 'chr sbag_member'(B,E), - B=suspension(_,active,_,_,C,D), - !, - B=suspension(_,_,_,_,L,M), - setarg(2,B,removed), - term_variables(term(L,M),G), - arg(4,B,H), - ( var(H) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I), - I=[_|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - ( J=[K|_] -> - setarg(4,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(4,K,H) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(G,B), - \+try(C,integer(A)), - !, - negate_b(C,F), - known(F), - \+try(D,integer(A)). -'test/1_1_$special_integer/1'(_) :- - fail. -'test/1_1_$special_float/1'(_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_float/1'(A) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,D,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',D) - ), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,_,C), - C==A, - !. -'test/1_1_$special_float/1'(A) :- - float(A), - !. -'test/1_1_$special_float/1'(A) :- - nonvar(A), - !, - fail. -'test/1_1_$special_float/1'(A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - 'chr sbag_member'(B,E), - B=suspension(_,active,_,_,C,D), - !, - B=suspension(_,_,_,_,L,M), - setarg(2,B,removed), - term_variables(term(L,M),G), - arg(4,B,H), - ( var(H) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I), - I=[_|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - ( J=[K|_] -> - setarg(4,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(4,K,H) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(G,B), - \+try(C,float(A)), - !, - negate_b(C,F), - known(F), - \+try(D,float(A)). -'test/1_1_$special_float/1'(_) :- - fail. -'test/1_1_$special_number/1'(_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_number/1'(A) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,D,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',D) - ), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,_,C), - C==A, - !. -'test/1_1_$special_number/1'(A) :- - number(A), - !. -'test/1_1_$special_number/1'(A) :- - nonvar(A), - !, - fail. -'test/1_1_$special_number/1'(A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - 'chr sbag_member'(B,E), - B=suspension(_,active,_,_,C,D), - !, - B=suspension(_,_,_,_,L,M), - setarg(2,B,removed), - term_variables(term(L,M),G), - arg(4,B,H), - ( var(H) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I), - I=[_|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - ( J=[K|_] -> - setarg(4,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(4,K,H) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(G,B), - \+try(C,number(A)), - !, - negate_b(C,F), - known(F), - \+try(D,number(A)). -'test/1_1_$special_number/1'(_) :- - fail. -'test/1_1_$special_ground/1'(_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_ground/1'(A) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',D) - ), - 'chr sbag_member'(B,D), - B=suspension(_,active,_,_,_,C), - C==A, - !. -'test/1_1_$special_ground/1'(A) :- - ground(A), - !. -'test/1_1_$special_ground/1'(A) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - 'chr sbag_member'(B,E), - B=suspension(_,active,_,_,C,D), - !, - B=suspension(_,_,_,_,L,M), - setarg(2,B,removed), - term_variables(term(L,M),G), - arg(4,B,H), - ( var(H) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I), - I=[_|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - ( J=[K|_] -> - setarg(4,K,_) - ; - true - ) - ; - H=[_,_|J], - setarg(2,H,J), - ( J=[K|_] -> - setarg(4,K,H) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(G,B), - \+try(C,ground(A)), - !, - negate_b(C,F), - known(F), - \+try(D,ground(A)). -'test/1_1_$special_ground/1'(_) :- - fail. -'test/1_1_$special_=:=/2'(_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_=:=/2'(A,B) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',F) - ), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - D==A, - E==B, - !. -'test/1_1_$special_=:=/2'(A,B) :- - A==B, - !. -'test/1_1_$special_=:=/2'(A,B) :- - ground(B), - ground(A), - ( - A=:=B, - ! - ; - !, - fail - ). -'test/1_1_$special_=:=/2'(A,B) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,D,E), - !, - C=suspension(_,_,_,_,M,N), - setarg(2,C,removed), - term_variables(term(M,N),H), - arg(4,C,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H,C), - \+try(D,A=:=B), - !, - negate_b(D,G), - known(G), - \+try(E,A=:=B). -'test/1_1_$special_=:=/2'(_,_) :- - fail. -'test/1_1_$special_==/2'(_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_==/2'(A,B) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',F) - ), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - D==A, - E==B, - !. -'test/1_1_$special_==/2'(A,B) :- - A==B, - !. -'test/1_1_$special_==/2'(A,B) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,D,E), - !, - C=suspension(_,_,_,_,M,N), - setarg(2,C,removed), - term_variables(term(M,N),H), - arg(4,C,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H,C), - \+try(D,A==B), - !, - negate_b(D,G), - known(G), - \+try(E,A==B). -'test/1_1_$special_==/2'(_,_) :- - fail. -'test/1_1_$special_true/0' :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_true/0'. -'test/1_1_$special_functor/3'(_,_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_functor/3'(A,B,C) :- - ( 'chr newvia'([A,B,C],I) -> - get_attr(I,guard_entailment,J), - J=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,H,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',H) - ), - 'chr sbag_member'(D,H), - D=suspension(_,active,_,_,E,F,G), - E==A, - F==B, - G==C, - !. -'test/1_1_$special_functor/3'(A,B,C) :- - ground(C), - ground(B), - var(A), - nb_getval('$chr_store_global_list_guard_entailment____variables___1',F), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,E), - 'chr lock'(A), - 'chr lock'(E), - \+memberchk_eq(A,E), - 'chr unlock'(A), - 'chr unlock'(E), - !, - functor(A,B,C). -'test/1_1_$special_functor/3'(A,B,C) :- - nonvar(A), - ( - 'chr lock'(A), - 'chr lock'(B), - 'chr lock'(C), - functor(A,B,C), - 'chr unlock'(A), - 'chr unlock'(B), - 'chr unlock'(C), - ! - ; - !, - fail - ). -'test/1_1_$special_functor/3'(A,B,C) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',G), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - !, - D=suspension(_,_,_,_,N,O), - setarg(2,D,removed), - term_variables(term(N,O),I), - arg(4,D,J), - ( var(J) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K), - K=[_|L], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',L), - ( L=[M|_] -> - setarg(4,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(4,M,J) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,D), - \+try(E,functor(A,B,C)), - !, - negate_b(E,H), - known(H), - \+try(F,functor(A,B,C)). -'test/1_1_$special_functor/3'(_,_,_) :- - fail. -'test/1_1_$special_=/2'(_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_=/2'(A,B) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',F) - ), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,D,E), - D==A, - E==B, - !. -'test/1_1_$special_=/2'(A,B) :- - ground(B), - ground(A), - !, - A=B. -'test/1_1_$special_=/2'(A,B) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,D,E), - !, - C=suspension(_,_,_,_,M,N), - setarg(2,C,removed), - term_variables(term(M,N),H), - arg(4,C,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H,C), - \+try(D,A=B), - !, - negate_b(D,G), - known(G), - \+try(E,A=B). -'test/1_1_$special_=/2'(_,_) :- - fail. -'test/1_1_$special_;/2'(_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_;/2'(A,B) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,F,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F) - ), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,D,E), - D==A, - E==B, - !. -'test/1_1_$special_;/2'(A,B) :- - A==fail, - !, - test(B). -'test/1_1_$special_;/2'(A,B) :- - B==fail, - !, - test(A). -'test/1_1_$special_;/2'(A,B) :- - negate_b(A,C), - negate_b(B,D), - ( - known(D), - test(A) - ; - known(C), - test(B) - ). -'test/1_1_$special_is/2'(_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_is/2'(A,B) :- - 'test/1_1_$special_=:=/2'(A,B). -'test/1_1_$special_=/2'(_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_>=/2'(A,B) :- - 'test/1_1_$special_=/2'(_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'test/1_1_$special_>/2'(A,B) :- - 'test/1_1_$special_ - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',F) - ), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - D==A, - E==B, - !. -'test/1_1_$special_=\\=/2'(A,B) :- - number(B), - ( 'chr newvia_1'(A,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=E, - ! - ; - E==A, - number(D), - B - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H,C), - \+try(D,A=\=B), - !, - negate_b(D,G), - known(G), - \+try(E,A=\=B). -'test/1_1_$special_=\\=/2'(_,_) :- - fail. -'test/1_1_$special_= - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',F) - ), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - D==A, - E==B, - !. -'test/1_1_$special_= - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',F) - ), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - D==A, - number(E), - E= - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',F) - ), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - D==B, - number(E), - A= - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H,C), - \+try(D,A= - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',F) - ), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,_,D,E), - D==A, - E==B, - !. -'test/1_1_$special_\\==/2'(A,B) :- - nonvar(B), - 'chr lock'(B), - functor(B,C,D), - 'chr unlock'(B), - !, - B=..[_|E], - length(F,D), - G=..[C|F], - add_args_nmatch(F,E,H), - I=(\+functor(A,C,D);functor(A,C,D),A=G,H), - test(I). -'test/1_1_$special_\\==/2'(A,B) :- - nonvar(A), - !, - 'test/1_1_$special_\\==/2'(B,A). -'test/1_1_$special_\\==/2'(A,B) :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - 'chr sbag_member'(C,F), - C=suspension(_,active,_,_,D,E), - !, - C=suspension(_,_,_,_,M,N), - setarg(2,C,removed), - term_variables(term(M,N),H), - arg(4,C,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H,C), - \+try(D,A\==B), - !, - negate_b(D,G), - known(G), - \+try(E,A\==B). -'test/1_1_$special_\\==/2'(_,_) :- - fail. -'known/1_1_$default'(A) :- - 'known/1_1_$default___1__0'(A,_). -'known/1_1_$default___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(4,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$default___1'(H,B) - ) - ). -'known/1_1_$default___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(4,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$default___1'(D,A) - ) - ). -'known/1_1_$default___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==A, - !, - C=suspension(_,_,_,_,T), - setarg(2,C,removed), - term_variables(T,H), - arg(4,C,P), - ( var(P) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',Q), - Q=[_|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - ( R=[S|_] -> - setarg(4,S,_) - ; - true - ) - ; - P=[_,_|R], - setarg(2,P,R), - ( R=[S|_] -> - setarg(4,S,P) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(H,C), - ( var(B) -> - true - ; - B=suspension(_,N,_,_,O), - setarg(2,B,removed), - ( N==not_stored_yet -> - I=[] - ; - term_variables(O,I), - arg(4,B,J), - ( var(J) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',K), - K=[_|L], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',L), - ( L=[M|_] -> - setarg(4,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(4,M,J) - ; - true - ) - ), - 'detach_known/1_1_$default___1'(I,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$default___1__0'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - ( var(B) -> - B=suspension(F,not_stored_yet,0,_,A), - 'chr gen_id'(F) - ; - true - ), - 'known/1_1_$default___1__0__0__6'(C,A,B). -'known/1_1_$default___1__0__0__6'([],B,A) :- - 'known/1_1_$default___1__1'(B,A). -'known/1_1_$default___1__0__0__6'([E|G],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - F==A -> - E=suspension(_,_,_,_,U,V), - setarg(2,E,removed), - term_variables(term(U,V),H), - arg(4,E,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H,E), - arg(2,B,L), - setarg(2,B,active), - arg(3,B,K), - J is K+1, - setarg(3,B,J), - ( L==not_stored_yet -> - B=suspension(_,_,_,_,M), - term_variables(M,I), - 'chr none_locked'(I), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',N), - O=[B|N], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',O), - ( N=[P|_] -> - setarg(4,P,O) - ; - true - ), - 'attach_known/1_1_$default___1'(I,B) - ; - true - ), - known(D), - ( B=suspension(_,active,J,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$default___1__0__0__6'(G,A,B) - ; - true - ) - ; - 'known/1_1_$default___1__0__0__6'(G,A,B) - ). -'known/1_1_$default___1__0'(A,B) :- - ( var(B) -> - B=suspension(C,not_stored_yet,0,_,A), - 'chr gen_id'(C) - ; - true - ), - 'known/1_1_$default___1__1'(A,B). -'known/1_1_$default___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$default___1__1__0__7'(C,A,B). -'known/1_1_$default___1__1__0__7'([],B,A) :- - 'known/1_1_$default___1__2'(B,A). -'known/1_1_$default___1__1__0__7'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(3,B,L), - K is L+1, - setarg(3,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - 'attach_known/1_1_$default___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$default___1__1__0__7'(H,A,B) - ; - true - ) - ; - 'known/1_1_$default___1__1__0__7'(H,A,B) - ). -'known/1_1_$default___1__1'(A,B) :- - 'known/1_1_$default___1__2'(A,B). -'known/1_1_$default___1__2'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(3,A,D), - C is D+1, - setarg(3,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',H), - ( G=[I|_] -> - setarg(4,I,H) - ; - true - ), - 'attach_known/1_1_$default___1'(B,A) - ; - true - ). -'known/1_1_$special_;/2'(A,B) :- - 'known/1_1_$special_;/2___2__0'(A,B,_). -'known/1_1_$special_;/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,G,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - E==A, - F==B, - !, - ( var(C) -> - true - ; - C=suspension(_,O,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(4,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',M), - ( M=[N|_] -> - setarg(4,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(4,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,C) - ) - ). -'known/1_1_$special_;/2___2__0'(_,_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,J,K), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(4,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(D,A) - ) - ). -'known/1_1_$special_;/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - nonvar(E), - E=(I;J), - I==A, - J==B, - !, - D=suspension(_,_,_,_,X), - setarg(2,D,removed), - term_variables(X,K), - arg(4,D,T), - ( var(T) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',U), - U=[_|V], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V), - ( V=[W|_] -> - setarg(4,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(4,W,T) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(K,D), - ( var(C) -> - true - ; - C=suspension(_,Q,_,_,R,S), - setarg(2,C,removed), - ( Q==not_stored_yet -> - L=[] - ; - term_variables(term(R,S),L), - arg(4,C,M), - ( var(M) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',N), - N=[_|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',O), - ( O=[P|_] -> - setarg(4,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(4,P,M) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_;/2___2__0'(A,B,C) :- - nonvar(A), - A=(\+D), - nonvar(D), - D=(E;F), - ( 'chr newvia_2'(E,F,K) -> - get_attr(K,guard_entailment,L), - L=v(_,_,_,J,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J) - ), - 'chr sbag_member'(G,J), - G=suspension(_,active,_,_,H,I), - H==E, - I==F, - !, - ( var(C) -> - true - ; - C=suspension(_,R,_,_,S,T), - setarg(2,C,removed), - ( R==not_stored_yet -> - M=[] - ; - term_variables(term(S,T),M), - arg(4,C,N), - ( var(N) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',O), - O=[_|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',P), - ( P=[Q|_] -> - setarg(4,Q,_) - ; - true - ) - ; - N=[_,_|P], - setarg(2,N,P), - ( P=[Q|_] -> - setarg(4,Q,N) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(M,C) - ) - ), - known(B). -'known/1_1_$special_;/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - ( var(C) -> - C=suspension(G,not_stored_yet,0,_,A,B), - 'chr gen_id'(G) - ; - true - ), - 'known/1_1_$special_;/2___2__0__0__7'(D,A,B,C). -'known/1_1_$special_;/2___2__0__0__7'([],B,C,A) :- - 'known/1_1_$special_;/2___2__1'(B,C,A). -'known/1_1_$special_;/2___2__0__0__7'([F|J],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(\+G), - nonvar(G), - G=(H;I), - H==A, - I==B -> - F=suspension(_,_,_,_,Y,Z), - setarg(2,F,removed), - term_variables(term(Y,Z),K), - arg(4,F,U), - ( var(U) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V), - V=[_|W], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - ( W=[X|_] -> - setarg(4,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(4,X,U) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(K,F), - arg(2,C,O), - setarg(2,C,active), - arg(3,C,N), - M is N+1, - setarg(3,C,M), - ( O==not_stored_yet -> - C=suspension(_,_,_,_,P,Q), - term_variables(term(P,Q),L), - 'chr none_locked'(L), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',R), - S=[C|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - ( R=[T|_] -> - setarg(4,T,S) - ; - true - ), - 'attach_known/1_1_$special_;/2___2'(L,C) - ; - true - ), - known(E), - ( C=suspension(_,active,M,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_;/2___2__0__0__7'(J,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_;/2___2__0__0__7'(J,A,B,C) - ). -'known/1_1_$special_;/2___2__0'(A,B,C) :- - ( var(C) -> - C=suspension(D,not_stored_yet,0,_,A,B), - 'chr gen_id'(D) - ; - true - ), - 'known/1_1_$special_;/2___2__1'(A,B,C). -'known/1_1_$special_;/2___2__1'(A,B,C) :- - nonvar(A), - ( - A=(\+D), - ( - nonvar(D), - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - D=nonvar(E), - ( 'chr newvia_1'(E,I) -> - get_attr(I,guard_entailment,J), - J=v(_,_,_,_,H,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',H) - ), - 'chr sbag_member'(F,H), - F=suspension(_,active,_,_,G), - G==E, - !, - ( var(C) -> - true - ; - C=suspension(_,Q11,_,_,R11,S11), - setarg(2,C,removed), - ( Q11==not_stored_yet -> - K=[] - ; - term_variables(term(R11,S11),K), - arg(4,C,M11), - ( var(M11) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',N11), - N11=[_|O11], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',O11), - ( O11=[P11|_] -> - setarg(4,P11,_) - ; - true - ) - ; - M11=[_,_|O11], - setarg(2,M11,O11), - ( O11=[P11|_] -> - setarg(4,P11,M11) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(K,C) - ) - ), - known(B) - ; - D=var(L), - ( 'chr newvia_1'(L,P) -> - get_attr(P,guard_entailment,Q), - Q=v(_,_,_,_,_,O,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',O) - ), - 'chr sbag_member'(M,O), - M=suspension(_,active,_,_,N), - N==L, - !, - ( var(C) -> - true - ; - C=suspension(_,J11,_,_,K11,L11), - setarg(2,C,removed), - ( J11==not_stored_yet -> - R=[] - ; - term_variables(term(K11,L11),R), - arg(4,C,F11), - ( var(F11) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',G11), - G11=[_|H11], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',H11), - ( H11=[I11|_] -> - setarg(4,I11,_) - ; - true - ) - ; - F11=[_,_|H11], - setarg(2,F11,H11), - ( H11=[I11|_] -> - setarg(4,I11,F11) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(R,C) - ) - ), - known(B) - ) - ; - D=atom(S), - ( 'chr newvia_1'(S,W) -> - get_attr(W,guard_entailment,X), - X=v(_,_,_,_,_,_,V,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',V) - ), - 'chr sbag_member'(T,V), - T=suspension(_,active,_,_,_,U), - U==S, - !, - ( var(C) -> - true - ; - C=suspension(_,C11,_,_,D11,E11), - setarg(2,C,removed), - ( C11==not_stored_yet -> - Y=[] - ; - term_variables(term(D11,E11),Y), - arg(4,C,Y10), - ( var(Y10) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Z10), - Z10=[_|A11], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',A11), - ( A11=[B11|_] -> - setarg(4,B11,_) - ; - true - ) - ; - Y10=[_,_|A11], - setarg(2,Y10,A11), - ( A11=[B11|_] -> - setarg(4,B11,Y10) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(Y,C) - ) - ), - known(B) - ) - ; - D=atomic(Z), - ( 'chr newvia_1'(Z,D1) -> - get_attr(D1,guard_entailment,E1), - E1=v(_,_,_,_,_,_,_,C1,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',C1) - ), - 'chr sbag_member'(A1,C1), - A1=suspension(_,active,_,_,_,B1), - B1==Z, - !, - ( var(C) -> - true - ; - C=suspension(_,V10,_,_,W10,X10), - setarg(2,C,removed), - ( V10==not_stored_yet -> - F1=[] - ; - term_variables(term(W10,X10),F1), - arg(4,C,R10), - ( var(R10) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S10), - S10=[_|T10], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T10), - ( T10=[U10|_] -> - setarg(4,U10,_) - ; - true - ) - ; - R10=[_,_|T10], - setarg(2,R10,T10), - ( T10=[U10|_] -> - setarg(4,U10,R10) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(F1,C) - ) - ), - known(B) - ) - ; - D=compound(G1), - ( 'chr newvia_1'(G1,K1) -> - get_attr(K1,guard_entailment,L1), - L1=v(_,_,_,_,_,_,_,_,J1,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',J1) - ), - 'chr sbag_member'(H1,J1), - H1=suspension(_,active,_,_,_,I1), - I1==G1, - !, - ( var(C) -> - true - ; - C=suspension(_,O10,_,_,P10,Q10), - setarg(2,C,removed), - ( O10==not_stored_yet -> - M1=[] - ; - term_variables(term(P10,Q10),M1), - arg(4,C,K10), - ( var(K10) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',L10), - L10=[_|M10], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',M10), - ( M10=[N10|_] -> - setarg(4,N10,_) - ; - true - ) - ; - K10=[_,_|M10], - setarg(2,K10,M10), - ( M10=[N10|_] -> - setarg(4,N10,K10) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(M1,C) - ) - ), - known(B) - ) - ; - D=ground(N1), - ( 'chr newvia_1'(N1,R1) -> - get_attr(R1,guard_entailment,S1), - S1=v(_,_,_,_,_,_,_,_,_,Q1,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',Q1) - ), - 'chr sbag_member'(O1,Q1), - O1=suspension(_,active,_,_,_,P1), - P1==N1, - !, - ( var(C) -> - true - ; - C=suspension(_,H10,_,_,I10,J10), - setarg(2,C,removed), - ( H10==not_stored_yet -> - T1=[] - ; - term_variables(term(I10,J10),T1), - arg(4,C,D10), - ( var(D10) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E10), - E10=[_|F10], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F10), - ( F10=[G10|_] -> - setarg(4,G10,_) - ; - true - ) - ; - D10=[_,_|F10], - setarg(2,D10,F10), - ( F10=[G10|_] -> - setarg(4,G10,D10) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(T1,C) - ) - ), - known(B) - ) - ; - D=integer(U1), - ( 'chr newvia_1'(U1,Y1) -> - get_attr(Y1,guard_entailment,Z1), - Z1=v(_,_,_,_,_,_,_,_,_,_,X1,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',X1) - ), - 'chr sbag_member'(V1,X1), - V1=suspension(_,active,_,_,_,W1), - W1==U1, - !, - ( var(C) -> - true - ; - C=suspension(_,A10,_,_,B10,C10), - setarg(2,C,removed), - ( A10==not_stored_yet -> - A2=[] - ; - term_variables(term(B10,C10),A2), - arg(4,C,W9), - ( var(W9) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X9), - X9=[_|Y9], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Y9), - ( Y9=[Z9|_] -> - setarg(4,Z9,_) - ; - true - ) - ; - W9=[_,_|Y9], - setarg(2,W9,Y9), - ( Y9=[Z9|_] -> - setarg(4,Z9,W9) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(A2,C) - ) - ), - known(B) - ) - ; - D=float(B2), - ( 'chr newvia_1'(B2,F2) -> - get_attr(F2,guard_entailment,G2), - G2=v(_,_,_,_,_,_,_,_,_,_,_,E2,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',E2) - ), - 'chr sbag_member'(C2,E2), - C2=suspension(_,active,_,_,_,D2), - D2==B2, - !, - ( var(C) -> - true - ; - C=suspension(_,T9,_,_,U9,V9), - setarg(2,C,removed), - ( T9==not_stored_yet -> - H2=[] - ; - term_variables(term(U9,V9),H2), - arg(4,C,P9), - ( var(P9) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Q9), - Q9=[_|R9], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',R9), - ( R9=[S9|_] -> - setarg(4,S9,_) - ; - true - ) - ; - P9=[_,_|R9], - setarg(2,P9,R9), - ( R9=[S9|_] -> - setarg(4,S9,P9) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H2,C) - ) - ), - known(B) - ) - ; - D=number(I2), - ( 'chr newvia_1'(I2,M2) -> - get_attr(M2,guard_entailment,N2), - N2=v(_,_,_,_,_,_,_,_,_,_,_,_,L2,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',L2) - ), - 'chr sbag_member'(J2,L2), - J2=suspension(_,active,_,_,_,K2), - K2==I2, - !, - ( var(C) -> - true - ; - C=suspension(_,M9,_,_,N9,O9), - setarg(2,C,removed), - ( M9==not_stored_yet -> - O2=[] - ; - term_variables(term(N9,O9),O2), - arg(4,C,I9), - ( var(I9) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J9), - J9=[_|K9], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K9), - ( K9=[L9|_] -> - setarg(4,L9,_) - ; - true - ) - ; - I9=[_,_|K9], - setarg(2,I9,K9), - ( K9=[L9|_] -> - setarg(4,L9,I9) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(O2,C) - ) - ), - known(B) - ) - ; - D=(P2=\=Q2), - ( 'chr newvia_2'(P2,Q2,V2) -> - get_attr(V2,guard_entailment,W2), - W2=v(_,_,_,_,_,_,_,_,_,_,_,_,_,U2,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',U2) - ), - 'chr sbag_member'(R2,U2), - R2=suspension(_,active,_,_,_,S2,T2), - S2==P2, - T2==Q2, - !, - ( var(C) -> - true - ; - C=suspension(_,F9,_,_,G9,H9), - setarg(2,C,removed), - ( F9==not_stored_yet -> - X2=[] - ; - term_variables(term(G9,H9),X2), - arg(4,C,B9), - ( var(B9) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C9), - C9=[_|D9], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D9), - ( D9=[E9|_] -> - setarg(4,E9,_) - ; - true - ) - ; - B9=[_,_|D9], - setarg(2,B9,D9), - ( D9=[E9|_] -> - setarg(4,E9,B9) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(X2,C) - ) - ), - known(B) - ) - ; - D=(\+Y2), - ( 'chr newvia_1'(Y2,C3) -> - get_attr(C3,guard_entailment,D3), - D3=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,B3,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',B3) - ), - 'chr sbag_member'(Z2,B3), - Z2=suspension(_,active,_,_,A3), - A3==Y2, - !, - ( var(C) -> - true - ; - C=suspension(_,Y8,_,_,Z8,A9), - setarg(2,C,removed), - ( Y8==not_stored_yet -> - E3=[] - ; - term_variables(term(Z8,A9),E3), - arg(4,C,U8), - ( var(U8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V8), - V8=[_|W8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W8), - ( W8=[X8|_] -> - setarg(4,X8,_) - ; - true - ) - ; - U8=[_,_|W8], - setarg(2,U8,W8), - ( W8=[X8|_] -> - setarg(4,X8,U8) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(E3,C) - ) - ), - known(B) - ) - ; - D=functor(F3,G3,H3), - ( 'chr newvia'([F3,G3,H3],N3) -> - get_attr(N3,guard_entailment,O3), - O3=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,M3,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',M3) - ), - 'chr sbag_member'(I3,M3), - I3=suspension(_,active,_,_,J3,K3,L3), - J3==F3, - K3==G3, - L3==H3, - !, - ( var(C) -> - true - ; - C=suspension(_,R8,_,_,S8,T8), - setarg(2,C,removed), - ( R8==not_stored_yet -> - P3=[] - ; - term_variables(term(S8,T8),P3), - arg(4,C,N8), - ( var(N8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',O8), - O8=[_|P8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',P8), - ( P8=[Q8|_] -> - setarg(4,Q8,_) - ; - true - ) - ; - N8=[_,_|P8], - setarg(2,N8,P8), - ( P8=[Q8|_] -> - setarg(4,Q8,N8) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(P3,C) - ) - ), - known(B) - ) - ; - D=(Q3\=R3), - ( 'chr newvia_2'(Q3,R3,W3) -> - get_attr(W3,guard_entailment,X3), - X3=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,V3,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',V3) - ), - 'chr sbag_member'(S3,V3), - S3=suspension(_,active,_,_,_,T3,U3), - T3==Q3, - U3==R3, - !, - ( var(C) -> - true - ; - C=suspension(_,K8,_,_,L8,M8), - setarg(2,C,removed), - ( K8==not_stored_yet -> - Y3=[] - ; - term_variables(term(L8,M8),Y3), - arg(4,C,G8), - ( var(G8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',H8), - H8=[_|I8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I8), - ( I8=[J8|_] -> - setarg(4,J8,_) - ; - true - ) - ; - G8=[_,_|I8], - setarg(2,G8,I8), - ( I8=[J8|_] -> - setarg(4,J8,G8) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(Y3,C) - ) - ), - known(B) - ) - ; - D=(Z3=A4), - ( 'chr newvia_2'(Z3,A4,F4) -> - get_attr(F4,guard_entailment,G4), - G4=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E4,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',E4) - ), - 'chr sbag_member'(B4,E4), - B4=suspension(_,active,_,_,C4,D4), - C4==Z3, - D4==A4, - !, - ( var(C) -> - true - ; - C=suspension(_,D8,_,_,E8,F8), - setarg(2,C,removed), - ( D8==not_stored_yet -> - H4=[] - ; - term_variables(term(E8,F8),H4), - arg(4,C,Z7), - ( var(Z7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',A8), - A8=[_|B8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',B8), - ( B8=[C8|_] -> - setarg(4,C8,_) - ; - true - ) - ; - Z7=[_,_|B8], - setarg(2,Z7,B8), - ( B8=[C8|_] -> - setarg(4,C8,Z7) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H4,C) - ) - ), - known(B) - ) - ; - D=(I4\==J4), - ( 'chr newvia_2'(I4,J4,O4) -> - get_attr(O4,guard_entailment,P4), - P4=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,N4,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',N4) - ), - 'chr sbag_member'(K4,N4), - K4=suspension(_,active,_,_,_,L4,M4), - L4==I4, - M4==J4, - !, - ( var(C) -> - true - ; - C=suspension(_,W7,_,_,X7,Y7), - setarg(2,C,removed), - ( W7==not_stored_yet -> - Q4=[] - ; - term_variables(term(X7,Y7),Q4), - arg(4,C,S7), - ( var(S7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T7), - T7=[_|U7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U7), - ( U7=[V7|_] -> - setarg(4,V7,_) - ; - true - ) - ; - S7=[_,_|U7], - setarg(2,S7,U7), - ( U7=[V7|_] -> - setarg(4,V7,S7) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(Q4,C) - ) - ), - known(B) - ) - ; - D=(R4==S4), - ( 'chr newvia_2'(R4,S4,X4) -> - get_attr(X4,guard_entailment,Y4), - Y4=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,W4,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',W4) - ), - 'chr sbag_member'(T4,W4), - T4=suspension(_,active,_,_,_,U4,V4), - U4==R4, - V4==S4, - !, - ( var(C) -> - true - ; - C=suspension(_,P7,_,_,Q7,R7), - setarg(2,C,removed), - ( P7==not_stored_yet -> - Z4=[] - ; - term_variables(term(Q7,R7),Z4), - arg(4,C,L7), - ( var(L7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',M7), - M7=[_|N7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',N7), - ( N7=[O7|_] -> - setarg(4,O7,_) - ; - true - ) - ; - L7=[_,_|N7], - setarg(2,L7,N7), - ( N7=[O7|_] -> - setarg(4,O7,L7) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(Z4,C) - ) - ), - known(B) - ) - ; - D=(A5= - get_attr(G5,guard_entailment,H5), - H5=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F5,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - true - ; - C=suspension(_,I7,_,_,J7,K7), - setarg(2,C,removed), - ( I7==not_stored_yet -> - I5=[] - ; - term_variables(term(J7,K7),I5), - arg(4,C,E7), - ( var(E7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F7), - F7=[_|G7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',G7), - ( G7=[H7|_] -> - setarg(4,H7,_) - ; - true - ) - ; - E7=[_,_|G7], - setarg(2,E7,G7), - ( G7=[H7|_] -> - setarg(4,H7,E7) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I5,C) - ) - ), - known(B) - ) - ; - D=(J5=:=K5), - ( 'chr newvia_2'(J5,K5,P5) -> - get_attr(P5,guard_entailment,Q5), - Q5=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,O5) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',O5) - ), - 'chr sbag_member'(L5,O5), - L5=suspension(_,active,_,_,_,M5,N5), - M5==J5, - N5==K5, - !, - ( var(C) -> - true - ; - C=suspension(_,B7,_,_,C7,D7), - setarg(2,C,removed), - ( B7==not_stored_yet -> - R5=[] - ; - term_variables(term(C7,D7),R5), - arg(4,C,X6), - ( var(X6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Y6), - Y6=[_|Z6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Z6), - ( Z6=[A7|_] -> - setarg(4,A7,_) - ; - true - ) - ; - X6=[_,_|Z6], - setarg(2,X6,Z6), - ( Z6=[A7|_] -> - setarg(4,A7,X6) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(R5,C) - ) - ), - known(B) - ) - ; - ( 'chr newvia_1'(D,V5) -> - get_attr(V5,guard_entailment,W5), - W5=v(_,_,U5,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',U5) - ), - 'chr sbag_member'(S5,U5), - S5=suspension(_,active,_,_,T5), - T5==D, - !, - ( var(C) -> - true - ; - C=suspension(_,U6,_,_,V6,W6), - setarg(2,C,removed), - ( U6==not_stored_yet -> - X5=[] - ; - term_variables(term(V6,W6),X5), - arg(4,C,Q6), - ( var(Q6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',R6), - R6=[_|S6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S6), - ( S6=[T6|_] -> - setarg(4,T6,_) - ; - true - ) - ; - Q6=[_,_|S6], - setarg(2,Q6,S6), - ( S6=[T6|_] -> - setarg(4,T6,Q6) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(X5,C) - ) - ), - known(B) - ) - ; - A=(Y5,_), - nonvar(Y5), - Y5=(\+Z5), - nonvar(Z5), - Z5=(A6;B6), - ( 'chr newvia_2'(A6,B6,G6) -> - get_attr(G6,guard_entailment,H6), - H6=v(_,_,_,F6,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F6) - ), - 'chr sbag_member'(C6,F6), - C6=suspension(_,active,_,_,D6,E6), - D6==A6, - E6==B6, - !, - ( var(C) -> - true - ; - C=suspension(_,N6,_,_,O6,P6), - setarg(2,C,removed), - ( N6==not_stored_yet -> - I6=[] - ; - term_variables(term(O6,P6),I6), - arg(4,C,J6), - ( var(J6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K6), - K6=[_|L6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',L6), - ( L6=[M6|_] -> - setarg(4,M6,_) - ; - true - ) - ; - J6=[_,_|L6], - setarg(2,J6,L6), - ( L6=[M6|_] -> - setarg(4,M6,J6) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I6,C) - ) - ), - known(B) - ). -'known/1_1_$special_;/2___2__1'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_;/2___2__1__0__34'(D,A,B,C). -'known/1_1_$special_;/2___2__1__0__34'([],B,C,A) :- - 'known/1_1_$special_;/2___2__2'(B,C,A). -'known/1_1_$special_;/2___2__1__0__34'([F|K],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(G,_), - nonvar(G), - G=(\+H), - nonvar(H), - H=(I;J), - I==A, - J==B -> - F=suspension(_,_,_,_,Z,A1), - setarg(2,F,removed), - term_variables(term(Z,A1),L), - arg(4,F,V), - ( var(V) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - W=[_|X], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X), - ( X=[Y|_] -> - setarg(4,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(4,Y,V) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,F), - arg(2,C,P), - setarg(2,C,active), - arg(3,C,O), - N is O+1, - setarg(3,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,Q,R), - term_variables(term(Q,R),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - T=[C|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( S=[U|_] -> - setarg(4,U,T) - ; - true - ), - 'attach_known/1_1_$special_;/2___2'(M,C) - ; - true - ), - known(E), - ( C=suspension(_,active,N,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_;/2___2__1__0__34'(K,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_;/2___2__1__0__34'(K,A,B,C) - ). -'known/1_1_$special_;/2___2__1'(A,B,C) :- - 'known/1_1_$special_;/2___2__2'(A,B,C). -'known/1_1_$special_;/2___2__2'(A,B,C) :- - nonvar(A), - A=(D,_), - nonvar(D), - D=(\+E), - ( - nonvar(E), - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - E=nonvar(F), - ( 'chr newvia_1'(F,J) -> - get_attr(J,guard_entailment,K), - K=v(_,_,_,_,I,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',I) - ), - 'chr sbag_member'(G,I), - G=suspension(_,active,_,_,H), - H==F, - !, - ( var(C) -> - true - ; - C=suspension(_,Z10,_,_,A11,B11), - setarg(2,C,removed), - ( Z10==not_stored_yet -> - L=[] - ; - term_variables(term(A11,B11),L), - arg(4,C,V10), - ( var(V10) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W10), - W10=[_|X10], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X10), - ( X10=[Y10|_] -> - setarg(4,Y10,_) - ; - true - ) - ; - V10=[_,_|X10], - setarg(2,V10,X10), - ( X10=[Y10|_] -> - setarg(4,Y10,V10) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,C) - ) - ), - known(B) - ; - E=var(M), - ( 'chr newvia_1'(M,Q) -> - get_attr(Q,guard_entailment,R), - R=v(_,_,_,_,_,P,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',P) - ), - 'chr sbag_member'(N,P), - N=suspension(_,active,_,_,O), - O==M, - !, - ( var(C) -> - true - ; - C=suspension(_,S10,_,_,T10,U10), - setarg(2,C,removed), - ( S10==not_stored_yet -> - S=[] - ; - term_variables(term(T10,U10),S), - arg(4,C,O10), - ( var(O10) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',P10), - P10=[_|Q10], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Q10), - ( Q10=[R10|_] -> - setarg(4,R10,_) - ; - true - ) - ; - O10=[_,_|Q10], - setarg(2,O10,Q10), - ( Q10=[R10|_] -> - setarg(4,R10,O10) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(S,C) - ) - ), - known(B) - ) - ; - E=atom(T), - ( 'chr newvia_1'(T,X) -> - get_attr(X,guard_entailment,Y), - Y=v(_,_,_,_,_,_,W,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',W) - ), - 'chr sbag_member'(U,W), - U=suspension(_,active,_,_,_,V), - V==T, - !, - ( var(C) -> - true - ; - C=suspension(_,L10,_,_,M10,N10), - setarg(2,C,removed), - ( L10==not_stored_yet -> - Z=[] - ; - term_variables(term(M10,N10),Z), - arg(4,C,H10), - ( var(H10) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I10), - I10=[_|J10], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J10), - ( J10=[K10|_] -> - setarg(4,K10,_) - ; - true - ) - ; - H10=[_,_|J10], - setarg(2,H10,J10), - ( J10=[K10|_] -> - setarg(4,K10,H10) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(Z,C) - ) - ), - known(B) - ) - ; - E=atomic(A1), - ( 'chr newvia_1'(A1,E1) -> - get_attr(E1,guard_entailment,F1), - F1=v(_,_,_,_,_,_,_,D1,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',D1) - ), - 'chr sbag_member'(B1,D1), - B1=suspension(_,active,_,_,_,C1), - C1==A1, - !, - ( var(C) -> - true - ; - C=suspension(_,E10,_,_,F10,G10), - setarg(2,C,removed), - ( E10==not_stored_yet -> - G1=[] - ; - term_variables(term(F10,G10),G1), - arg(4,C,A10), - ( var(A10) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',B10), - B10=[_|C10], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C10), - ( C10=[D10|_] -> - setarg(4,D10,_) - ; - true - ) - ; - A10=[_,_|C10], - setarg(2,A10,C10), - ( C10=[D10|_] -> - setarg(4,D10,A10) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(G1,C) - ) - ), - known(B) - ) - ; - E=compound(H1), - ( 'chr newvia_1'(H1,L1) -> - get_attr(L1,guard_entailment,M1), - M1=v(_,_,_,_,_,_,_,_,K1,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',K1) - ), - 'chr sbag_member'(I1,K1), - I1=suspension(_,active,_,_,_,J1), - J1==H1, - !, - ( var(C) -> - true - ; - C=suspension(_,X9,_,_,Y9,Z9), - setarg(2,C,removed), - ( X9==not_stored_yet -> - N1=[] - ; - term_variables(term(Y9,Z9),N1), - arg(4,C,T9), - ( var(T9) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U9), - U9=[_|V9], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V9), - ( V9=[W9|_] -> - setarg(4,W9,_) - ; - true - ) - ; - T9=[_,_|V9], - setarg(2,T9,V9), - ( V9=[W9|_] -> - setarg(4,W9,T9) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(N1,C) - ) - ), - known(B) - ) - ; - E=ground(O1), - ( 'chr newvia_1'(O1,S1) -> - get_attr(S1,guard_entailment,T1), - T1=v(_,_,_,_,_,_,_,_,_,R1,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',R1) - ), - 'chr sbag_member'(P1,R1), - P1=suspension(_,active,_,_,_,Q1), - Q1==O1, - !, - ( var(C) -> - true - ; - C=suspension(_,Q9,_,_,R9,S9), - setarg(2,C,removed), - ( Q9==not_stored_yet -> - U1=[] - ; - term_variables(term(R9,S9),U1), - arg(4,C,M9), - ( var(M9) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',N9), - N9=[_|O9], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',O9), - ( O9=[P9|_] -> - setarg(4,P9,_) - ; - true - ) - ; - M9=[_,_|O9], - setarg(2,M9,O9), - ( O9=[P9|_] -> - setarg(4,P9,M9) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(U1,C) - ) - ), - known(B) - ) - ; - E=integer(V1), - ( 'chr newvia_1'(V1,Z1) -> - get_attr(Z1,guard_entailment,A2), - A2=v(_,_,_,_,_,_,_,_,_,_,Y1,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',Y1) - ), - 'chr sbag_member'(W1,Y1), - W1=suspension(_,active,_,_,_,X1), - X1==V1, - !, - ( var(C) -> - true - ; - C=suspension(_,J9,_,_,K9,L9), - setarg(2,C,removed), - ( J9==not_stored_yet -> - B2=[] - ; - term_variables(term(K9,L9),B2), - arg(4,C,F9), - ( var(F9) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',G9), - G9=[_|H9], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',H9), - ( H9=[I9|_] -> - setarg(4,I9,_) - ; - true - ) - ; - F9=[_,_|H9], - setarg(2,F9,H9), - ( H9=[I9|_] -> - setarg(4,I9,F9) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(B2,C) - ) - ), - known(B) - ) - ; - E=float(C2), - ( 'chr newvia_1'(C2,G2) -> - get_attr(G2,guard_entailment,H2), - H2=v(_,_,_,_,_,_,_,_,_,_,_,F2,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',F2) - ), - 'chr sbag_member'(D2,F2), - D2=suspension(_,active,_,_,_,E2), - E2==C2, - !, - ( var(C) -> - true - ; - C=suspension(_,C9,_,_,D9,E9), - setarg(2,C,removed), - ( C9==not_stored_yet -> - I2=[] - ; - term_variables(term(D9,E9),I2), - arg(4,C,Y8), - ( var(Y8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Z8), - Z8=[_|A9], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',A9), - ( A9=[B9|_] -> - setarg(4,B9,_) - ; - true - ) - ; - Y8=[_,_|A9], - setarg(2,Y8,A9), - ( A9=[B9|_] -> - setarg(4,B9,Y8) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I2,C) - ) - ), - known(B) - ) - ; - E=number(J2), - ( 'chr newvia_1'(J2,N2) -> - get_attr(N2,guard_entailment,O2), - O2=v(_,_,_,_,_,_,_,_,_,_,_,_,M2,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',M2) - ), - 'chr sbag_member'(K2,M2), - K2=suspension(_,active,_,_,_,L2), - L2==J2, - !, - ( var(C) -> - true - ; - C=suspension(_,V8,_,_,W8,X8), - setarg(2,C,removed), - ( V8==not_stored_yet -> - P2=[] - ; - term_variables(term(W8,X8),P2), - arg(4,C,R8), - ( var(R8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S8), - S8=[_|T8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T8), - ( T8=[U8|_] -> - setarg(4,U8,_) - ; - true - ) - ; - R8=[_,_|T8], - setarg(2,R8,T8), - ( T8=[U8|_] -> - setarg(4,U8,R8) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(P2,C) - ) - ), - known(B) - ) - ; - E=(Q2=\=R2), - ( 'chr newvia_2'(Q2,R2,W2) -> - get_attr(W2,guard_entailment,X2), - X2=v(_,_,_,_,_,_,_,_,_,_,_,_,_,V2,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',V2) - ), - 'chr sbag_member'(S2,V2), - S2=suspension(_,active,_,_,_,T2,U2), - T2==Q2, - U2==R2, - !, - ( var(C) -> - true - ; - C=suspension(_,O8,_,_,P8,Q8), - setarg(2,C,removed), - ( O8==not_stored_yet -> - Y2=[] - ; - term_variables(term(P8,Q8),Y2), - arg(4,C,K8), - ( var(K8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',L8), - L8=[_|M8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',M8), - ( M8=[N8|_] -> - setarg(4,N8,_) - ; - true - ) - ; - K8=[_,_|M8], - setarg(2,K8,M8), - ( M8=[N8|_] -> - setarg(4,N8,K8) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(Y2,C) - ) - ), - known(B) - ) - ; - E=(\+Z2), - ( 'chr newvia_1'(Z2,D3) -> - get_attr(D3,guard_entailment,E3), - E3=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,C3,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',C3) - ), - 'chr sbag_member'(A3,C3), - A3=suspension(_,active,_,_,B3), - B3==Z2, - !, - ( var(C) -> - true - ; - C=suspension(_,H8,_,_,I8,J8), - setarg(2,C,removed), - ( H8==not_stored_yet -> - F3=[] - ; - term_variables(term(I8,J8),F3), - arg(4,C,D8), - ( var(D8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E8), - E8=[_|F8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F8), - ( F8=[G8|_] -> - setarg(4,G8,_) - ; - true - ) - ; - D8=[_,_|F8], - setarg(2,D8,F8), - ( F8=[G8|_] -> - setarg(4,G8,D8) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(F3,C) - ) - ), - known(B) - ) - ; - E=functor(G3,H3,I3), - ( 'chr newvia'([G3,H3,I3],O3) -> - get_attr(O3,guard_entailment,P3), - P3=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,N3,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',N3) - ), - 'chr sbag_member'(J3,N3), - J3=suspension(_,active,_,_,K3,L3,M3), - K3==G3, - L3==H3, - M3==I3, - !, - ( var(C) -> - true - ; - C=suspension(_,A8,_,_,B8,C8), - setarg(2,C,removed), - ( A8==not_stored_yet -> - Q3=[] - ; - term_variables(term(B8,C8),Q3), - arg(4,C,W7), - ( var(W7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X7), - X7=[_|Y7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Y7), - ( Y7=[Z7|_] -> - setarg(4,Z7,_) - ; - true - ) - ; - W7=[_,_|Y7], - setarg(2,W7,Y7), - ( Y7=[Z7|_] -> - setarg(4,Z7,W7) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(Q3,C) - ) - ), - known(B) - ) - ; - E=(R3\=S3), - ( 'chr newvia_2'(R3,S3,X3) -> - get_attr(X3,guard_entailment,Y3), - Y3=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,W3,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',W3) - ), - 'chr sbag_member'(T3,W3), - T3=suspension(_,active,_,_,_,U3,V3), - U3==R3, - V3==S3, - !, - ( var(C) -> - true - ; - C=suspension(_,T7,_,_,U7,V7), - setarg(2,C,removed), - ( T7==not_stored_yet -> - Z3=[] - ; - term_variables(term(U7,V7),Z3), - arg(4,C,P7), - ( var(P7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Q7), - Q7=[_|R7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',R7), - ( R7=[S7|_] -> - setarg(4,S7,_) - ; - true - ) - ; - P7=[_,_|R7], - setarg(2,P7,R7), - ( R7=[S7|_] -> - setarg(4,S7,P7) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(Z3,C) - ) - ), - known(B) - ) - ; - E=(A4=B4), - ( 'chr newvia_2'(A4,B4,G4) -> - get_attr(G4,guard_entailment,H4), - H4=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F4,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',F4) - ), - 'chr sbag_member'(C4,F4), - C4=suspension(_,active,_,_,D4,E4), - D4==A4, - E4==B4, - !, - ( var(C) -> - true - ; - C=suspension(_,M7,_,_,N7,O7), - setarg(2,C,removed), - ( M7==not_stored_yet -> - I4=[] - ; - term_variables(term(N7,O7),I4), - arg(4,C,I7), - ( var(I7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J7), - J7=[_|K7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K7), - ( K7=[L7|_] -> - setarg(4,L7,_) - ; - true - ) - ; - I7=[_,_|K7], - setarg(2,I7,K7), - ( K7=[L7|_] -> - setarg(4,L7,I7) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I4,C) - ) - ), - known(B) - ) - ; - E=(J4\==K4), - ( 'chr newvia_2'(J4,K4,P4) -> - get_attr(P4,guard_entailment,Q4), - Q4=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,O4,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',O4) - ), - 'chr sbag_member'(L4,O4), - L4=suspension(_,active,_,_,_,M4,N4), - M4==J4, - N4==K4, - !, - ( var(C) -> - true - ; - C=suspension(_,F7,_,_,G7,H7), - setarg(2,C,removed), - ( F7==not_stored_yet -> - R4=[] - ; - term_variables(term(G7,H7),R4), - arg(4,C,B7), - ( var(B7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C7), - C7=[_|D7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D7), - ( D7=[E7|_] -> - setarg(4,E7,_) - ; - true - ) - ; - B7=[_,_|D7], - setarg(2,B7,D7), - ( D7=[E7|_] -> - setarg(4,E7,B7) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(R4,C) - ) - ), - known(B) - ) - ; - E=(S4==T4), - ( 'chr newvia_2'(S4,T4,Y4) -> - get_attr(Y4,guard_entailment,Z4), - Z4=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X4,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',X4) - ), - 'chr sbag_member'(U4,X4), - U4=suspension(_,active,_,_,_,V4,W4), - V4==S4, - W4==T4, - !, - ( var(C) -> - true - ; - C=suspension(_,Y6,_,_,Z6,A7), - setarg(2,C,removed), - ( Y6==not_stored_yet -> - A5=[] - ; - term_variables(term(Z6,A7),A5), - arg(4,C,U6), - ( var(U6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V6), - V6=[_|W6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W6), - ( W6=[X6|_] -> - setarg(4,X6,_) - ; - true - ) - ; - U6=[_,_|W6], - setarg(2,U6,W6), - ( W6=[X6|_] -> - setarg(4,X6,U6) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(A5,C) - ) - ), - known(B) - ) - ; - E=(B5= - get_attr(H5,guard_entailment,I5), - I5=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G5,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - true - ; - C=suspension(_,R6,_,_,S6,T6), - setarg(2,C,removed), - ( R6==not_stored_yet -> - J5=[] - ; - term_variables(term(S6,T6),J5), - arg(4,C,N6), - ( var(N6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',O6), - O6=[_|P6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',P6), - ( P6=[Q6|_] -> - setarg(4,Q6,_) - ; - true - ) - ; - N6=[_,_|P6], - setarg(2,N6,P6), - ( P6=[Q6|_] -> - setarg(4,Q6,N6) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J5,C) - ) - ), - known(B) - ) - ; - E=(K5=:=L5), - ( 'chr newvia_2'(K5,L5,Q5) -> - get_attr(Q5,guard_entailment,R5), - R5=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,P5) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',P5) - ), - 'chr sbag_member'(M5,P5), - M5=suspension(_,active,_,_,_,N5,O5), - N5==K5, - O5==L5, - !, - ( var(C) -> - true - ; - C=suspension(_,K6,_,_,L6,M6), - setarg(2,C,removed), - ( K6==not_stored_yet -> - S5=[] - ; - term_variables(term(L6,M6),S5), - arg(4,C,G6), - ( var(G6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',H6), - H6=[_|I6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I6), - ( I6=[J6|_] -> - setarg(4,J6,_) - ; - true - ) - ; - G6=[_,_|I6], - setarg(2,G6,I6), - ( I6=[J6|_] -> - setarg(4,J6,G6) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(S5,C) - ) - ), - known(B) - ) - ; - ( 'chr newvia_1'(E,W5) -> - get_attr(W5,guard_entailment,X5), - X5=v(_,_,V5,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',V5) - ), - 'chr sbag_member'(T5,V5), - T5=suspension(_,active,_,_,U5), - U5==E, - !, - ( var(C) -> - true - ; - C=suspension(_,D6,_,_,E6,F6), - setarg(2,C,removed), - ( D6==not_stored_yet -> - Y5=[] - ; - term_variables(term(E6,F6),Y5), - arg(4,C,Z5), - ( var(Z5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',A6), - A6=[_|B6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',B6), - ( B6=[C6|_] -> - setarg(4,C6,_) - ; - true - ) - ; - Z5=[_,_|B6], - setarg(2,Z5,B6), - ( B6=[C6|_] -> - setarg(4,C6,Z5) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(Y5,C) - ) - ), - known(B) - ). -'known/1_1_$special_;/2___2__2'(A,B,C) :- - ( 'chr newvia_1'(A,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - E==A, - !, - ( var(C) -> - true - ; - C=suspension(_,N,_,_,O,P), - setarg(2,C,removed), - ( N==not_stored_yet -> - I=[] - ; - term_variables(term(O,P),I), - arg(4,C,J), - ( var(J) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',K), - K=[_|L], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',L), - ( L=[M|_] -> - setarg(4,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(4,M,J) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,C) - ) - ), - known(B). -'known/1_1_$special_;/2___2__2'(A,B,C) :- - nonvar(A), - A=(D,_), - ( 'chr newvia_1'(D,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',G) - ), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,_,F), - F==D, - !, - ( var(C) -> - true - ; - C=suspension(_,O,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(4,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',M), - ( M=[N|_] -> - setarg(4,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(4,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,C) - ) - ), - known(B). -'known/1_1_$special_;/2___2__2'(A,B,C) :- - A==fail, - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(4,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(D,C) - ) - ), - known(B). -'known/1_1_$special_;/2___2__2'(A,B,C) :- - B==fail, - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(4,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(D,C) - ) - ), - known(A). -'known/1_1_$special_;/2___2__2'(A,_,B) :- - A==true, - !, - ( var(B) -> - true - ; - B=suspension(_,H,_,_,I,J), - setarg(2,B,removed), - ( H==not_stored_yet -> - C=[] - ; - term_variables(term(I,J),C), - arg(4,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(C,B) - ) - ). -'known/1_1_$special_;/2___2__2'(_,A,B) :- - A==true, - !, - ( var(B) -> - true - ; - B=suspension(_,H,_,_,I,J), - setarg(2,B,removed), - ( H==not_stored_yet -> - C=[] - ; - term_variables(term(I,J),C), - arg(4,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(C,B) - ) - ). -'known/1_1_$special_;/2___2__2'(A,B,C) :- - nonvar(A), - A=(\+D), - nonvar(D), - D=functor(E,F,G), - ( - ( - ( 'chr newvia_1'(E,K) -> - get_attr(K,guard_entailment,L), - L=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,J,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',J) - ), - 'chr sbag_member'(H,J), - H=suspension(_,active,_,_,I,_,_), - I==E, - !, - ( var(C) -> - true - ; - C=suspension(_,H1,_,_,I1,J1), - setarg(2,C,removed), - ( H1==not_stored_yet -> - M=[] - ; - term_variables(term(I1,J1),M), - arg(4,C,D1), - ( var(D1) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E1), - E1=[_|F1], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F1), - ( F1=[G1|_] -> - setarg(4,G1,_) - ; - true - ) - ; - D1=[_,_|F1], - setarg(2,D1,F1), - ( F1=[G1|_] -> - setarg(4,G1,D1) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(M,C) - ) - ) - ; - nonvar(E), - 'chr lock'(E), - 'chr lock'(F), - 'chr lock'(G), - functor(E,F,G), - 'chr unlock'(E), - 'chr unlock'(F), - 'chr unlock'(G), - !, - ( var(C) -> - true - ; - C=suspension(_,A1,_,_,B1,C1), - setarg(2,C,removed), - ( A1==not_stored_yet -> - N=[] - ; - term_variables(term(B1,C1),N), - arg(4,C,W), - ( var(W) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X), - X=[_|Y], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Y), - ( Y=[Z|_] -> - setarg(4,Z,_) - ; - true - ) - ; - W=[_,_|Y], - setarg(2,W,Y), - ( Y=[Z|_] -> - setarg(4,Z,W) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(N,C) - ) - ), - known(B) - ) - ; - nonvar(E), - 'chr lock'(E), - 'chr lock'(F), - 'chr lock'(G), - \+functor(E,F,G), - 'chr unlock'(E), - 'chr unlock'(F), - 'chr unlock'(G), - !, - ( var(C) -> - true - ; - C=suspension(_,T,_,_,U,V), - setarg(2,C,removed), - ( T==not_stored_yet -> - O=[] - ; - term_variables(term(U,V),O), - arg(4,C,P), - ( var(P) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Q), - Q=[_|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',R), - ( R=[S|_] -> - setarg(4,S,_) - ; - true - ) - ; - P=[_,_|R], - setarg(2,P,R), - ( R=[S|_] -> - setarg(4,S,P) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(O,C) - ) - ) - ). -'known/1_1_$special_;/2___2__2'(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(3,A,D), - C is D+1, - setarg(3,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,F,G), - term_variables(term(F,G),B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',H), - I=[A|H], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I), - ( H=[J|_] -> - setarg(4,J,I) - ; - true - ), - 'attach_known/1_1_$special_;/2___2'(B,A) - ; - true - ). -'known/1_1_$special_nonvar/1'(A) :- - 'known/1_1_$special_nonvar/1___1__0'(A,_). -'known/1_1_$special_nonvar/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(4,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_nonvar/1___1'(H,B) - ) - ). -'known/1_1_$special_nonvar/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(4,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_nonvar/1___1'(D,A) - ) - ). -'known/1_1_$special_nonvar/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=nonvar(H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(4,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',M), - ( M=[N|_] -> - setarg(4,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(4,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_nonvar/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_nonvar/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==A, - !, - C=suspension(_,_,_,_,T), - setarg(2,C,removed), - term_variables(T,H), - arg(4,C,P), - ( var(P) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',Q), - Q=[_|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',R), - ( R=[S|_] -> - setarg(4,S,_) - ; - true - ) - ; - P=[_,_|R], - setarg(2,P,R), - ( R=[S|_] -> - setarg(4,S,P) - ; - true - ) - ), - 'detach_known/1_1_$special_var/1___1'(H,C), - ( var(B) -> - true - ; - B=suspension(_,N,_,_,O), - setarg(2,B,removed), - ( N==not_stored_yet -> - I=[] - ; - term_variables(O,I), - arg(4,B,J), - ( var(J) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',K), - K=[_|L], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',L), - ( L=[M|_] -> - setarg(4,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(4,M,J) - ; - true - ) - ), - 'detach_known/1_1_$special_nonvar/1___1'(I,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_nonvar/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - ( var(B) -> - B=suspension(F,not_stored_yet,0,_,A), - 'chr gen_id'(F) - ; - true - ), - 'known/1_1_$special_nonvar/1___1__0__0__7'(C,A,B). -'known/1_1_$special_nonvar/1___1__0__0__7'([],B,A) :- - 'known/1_1_$special_nonvar/1___1__1'(B,A). -'known/1_1_$special_nonvar/1___1__0__0__7'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=nonvar(G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(3,B,L), - K is L+1, - setarg(3,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - 'attach_known/1_1_$special_nonvar/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_nonvar/1___1__0__0__7'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_nonvar/1___1__0__0__7'(H,A,B) - ). -'known/1_1_$special_nonvar/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(C,not_stored_yet,0,_,A), - 'chr gen_id'(C) - ; - true - ), - 'known/1_1_$special_nonvar/1___1__1'(A,B). -'known/1_1_$special_nonvar/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_nonvar/1___1__1__0__8'(C,A,B). -'known/1_1_$special_nonvar/1___1__1__0__8'([],B,A) :- - 'known/1_1_$special_nonvar/1___1__2'(B,A). -'known/1_1_$special_nonvar/1___1__1__0__8'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=nonvar(H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(3,B,M), - L is M+1, - setarg(3,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',Q), - ( P=[R|_] -> - setarg(4,R,Q) - ; - true - ), - 'attach_known/1_1_$special_nonvar/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_nonvar/1___1__1__0__8'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_nonvar/1___1__1__0__8'(I,A,B) - ). -'known/1_1_$special_nonvar/1___1__1'(A,B) :- - 'known/1_1_$special_nonvar/1___1__2'(A,B). -'known/1_1_$special_nonvar/1___1__2'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(3,A,D), - C is D+1, - setarg(3,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',H), - ( G=[I|_] -> - setarg(4,I,H) - ; - true - ), - 'attach_known/1_1_$special_nonvar/1___1'(B,A) - ; - true - ). -'known/1_1_$special_var/1'(A) :- - 'known/1_1_$special_var/1___1__0'(A,_). -'known/1_1_$special_var/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(4,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_var/1___1'(H,B) - ) - ). -'known/1_1_$special_var/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(4,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_var/1___1'(D,A) - ) - ). -'known/1_1_$special_var/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=var(H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(4,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',M), - ( M=[N|_] -> - setarg(4,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(4,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_var/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_var/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==A, - !, - C=suspension(_,_,_,_,T), - setarg(2,C,removed), - term_variables(T,H), - arg(4,C,P), - ( var(P) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',Q), - Q=[_|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',R), - ( R=[S|_] -> - setarg(4,S,_) - ; - true - ) - ; - P=[_,_|R], - setarg(2,P,R), - ( R=[S|_] -> - setarg(4,S,P) - ; - true - ) - ), - 'detach_known/1_1_$special_nonvar/1___1'(H,C), - ( var(B) -> - true - ; - B=suspension(_,N,_,_,O), - setarg(2,B,removed), - ( N==not_stored_yet -> - I=[] - ; - term_variables(O,I), - arg(4,B,J), - ( var(J) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',K), - K=[_|L], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',L), - ( L=[M|_] -> - setarg(4,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(4,M,J) - ; - true - ) - ), - 'detach_known/1_1_$special_var/1___1'(I,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_var/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - ( var(B) -> - B=suspension(F,not_stored_yet,0,_,A), - 'chr gen_id'(F) - ; - true - ), - 'known/1_1_$special_var/1___1__0__0__7'(C,A,B). -'known/1_1_$special_var/1___1__0__0__7'([],B,A) :- - 'known/1_1_$special_var/1___1__1'(B,A). -'known/1_1_$special_var/1___1__0__0__7'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=var(G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(3,B,L), - K is L+1, - setarg(3,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - 'attach_known/1_1_$special_var/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_var/1___1__0__0__7'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_var/1___1__0__0__7'(H,A,B) - ). -'known/1_1_$special_var/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(C,not_stored_yet,0,_,A), - 'chr gen_id'(C) - ; - true - ), - 'known/1_1_$special_var/1___1__1'(A,B). -'known/1_1_$special_var/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_var/1___1__1__0__8'(C,A,B). -'known/1_1_$special_var/1___1__1__0__8'([],B,A) :- - 'known/1_1_$special_var/1___1__2'(B,A). -'known/1_1_$special_var/1___1__1__0__8'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=var(H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(3,B,M), - L is M+1, - setarg(3,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',Q), - ( P=[R|_] -> - setarg(4,R,Q) - ; - true - ), - 'attach_known/1_1_$special_var/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_var/1___1__1__0__8'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_var/1___1__1__0__8'(I,A,B) - ). -'known/1_1_$special_var/1___1__1'(A,B) :- - 'known/1_1_$special_var/1___1__2'(A,B). -'known/1_1_$special_var/1___1__2'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(3,A,D), - C is D+1, - setarg(3,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',H), - ( G=[I|_] -> - setarg(4,I,H) - ; - true - ), - 'attach_known/1_1_$special_var/1___1'(B,A) - ; - true - ). -'known/1_1_$special_atom/1'(A) :- - 'known/1_1_$special_atom/1___1__0'(A,_). -'known/1_1_$special_atom/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(5,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',K), - ( K=[L|_] -> - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_atom/1___1'(H,B) - ) - ). -'known/1_1_$special_atom/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_atom/1___1'(D,A) - ) - ). -'known/1_1_$special_atom/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=atom(H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(5,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_atom/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_atom/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(E,not_stored_yet,t,0,_,A), - 'chr gen_id'(E) - ; - true - ), - ( - '$novel_production'(B,239), - !, - '$extend_history'(B,239), - arg(2,B,G), - setarg(2,B,active), - arg(4,B,F), - D is F+1, - setarg(4,B,D), - ( G==not_stored_yet -> - B=suspension(_,_,_,_,_,H), - term_variables(H,C), - 'chr none_locked'(C), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',I), - J=[B|I], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',J), - ( I=[K|_] -> - setarg(5,K,J) - ; - true - ), - 'attach_known/1_1_$special_atom/1___1'(C,B) - ; - true - ), - 'known/1_1_$special_nonvar/1'(A), - ( B=suspension(_,active,_,D,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_atom/1___1__1'(A,B) - ; - true - ) - ; - 'known/1_1_$special_atom/1___1__1'(A,B) - ). -'known/1_1_$special_atom/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_atom/1___1__1__0__7'(C,A,B). -'known/1_1_$special_atom/1___1__1__0__7'([],B,A) :- - 'known/1_1_$special_atom/1___1__2'(B,A). -'known/1_1_$special_atom/1___1__1__0__7'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=atom(G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(4,B,L), - K is L+1, - setarg(4,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_atom/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_atom/1___1__1__0__7'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_atom/1___1__1__0__7'(H,A,B) - ). -'known/1_1_$special_atom/1___1__1'(A,B) :- - 'known/1_1_$special_atom/1___1__2'(A,B). -'known/1_1_$special_atom/1___1__2'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_atom/1___1__2__0__8'(C,A,B). -'known/1_1_$special_atom/1___1__2__0__8'([],B,A) :- - 'known/1_1_$special_atom/1___1__3'(B,A). -'known/1_1_$special_atom/1___1__2__0__8'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=atom(H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(4,B,M), - L is M+1, - setarg(4,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - 'attach_known/1_1_$special_atom/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_atom/1___1__2__0__8'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_atom/1___1__2__0__8'(I,A,B) - ). -'known/1_1_$special_atom/1___1__2'(A,B) :- - 'known/1_1_$special_atom/1___1__3'(A,B). -'known/1_1_$special_atom/1___1__3'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',H), - ( G=[I|_] -> - setarg(5,I,H) - ; - true - ), - 'attach_known/1_1_$special_atom/1___1'(B,A) - ; - true - ). -'known/1_1_$special_atomic/1'(A) :- - 'known/1_1_$special_atomic/1___1__0'(A,_). -'known/1_1_$special_atomic/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(5,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',K), - ( K=[L|_] -> - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_atomic/1___1'(H,B) - ) - ). -'known/1_1_$special_atomic/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_atomic/1___1'(D,A) - ) - ). -'known/1_1_$special_atomic/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=atomic(H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(5,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_atomic/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_atomic/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(E,not_stored_yet,t,0,_,A), - 'chr gen_id'(E) - ; - true - ), - ( - '$novel_production'(B,237), - !, - '$extend_history'(B,237), - arg(2,B,G), - setarg(2,B,active), - arg(4,B,F), - D is F+1, - setarg(4,B,D), - ( G==not_stored_yet -> - B=suspension(_,_,_,_,_,H), - term_variables(H,C), - 'chr none_locked'(C), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',I), - J=[B|I], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',J), - ( I=[K|_] -> - setarg(5,K,J) - ; - true - ), - 'attach_known/1_1_$special_atomic/1___1'(C,B) - ; - true - ), - 'known/1_1_$special_nonvar/1'(A), - ( B=suspension(_,active,_,D,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_atomic/1___1__1'(A,B) - ; - true - ) - ; - 'known/1_1_$special_atomic/1___1__1'(A,B) - ). -'known/1_1_$special_atomic/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_atomic/1___1__1__0__7'(C,A,B). -'known/1_1_$special_atomic/1___1__1__0__7'([],B,A) :- - 'known/1_1_$special_atomic/1___1__2'(B,A). -'known/1_1_$special_atomic/1___1__1__0__7'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=atomic(G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(4,B,L), - K is L+1, - setarg(4,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_atomic/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_atomic/1___1__1__0__7'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_atomic/1___1__1__0__7'(H,A,B) - ). -'known/1_1_$special_atomic/1___1__1'(A,B) :- - 'known/1_1_$special_atomic/1___1__2'(A,B). -'known/1_1_$special_atomic/1___1__2'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_atomic/1___1__2__0__8'(C,A,B). -'known/1_1_$special_atomic/1___1__2__0__8'([],B,A) :- - 'known/1_1_$special_atomic/1___1__3'(B,A). -'known/1_1_$special_atomic/1___1__2__0__8'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=atomic(H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(4,B,M), - L is M+1, - setarg(4,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - 'attach_known/1_1_$special_atomic/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_atomic/1___1__2__0__8'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_atomic/1___1__2__0__8'(I,A,B) - ). -'known/1_1_$special_atomic/1___1__2'(A,B) :- - 'known/1_1_$special_atomic/1___1__3'(A,B). -'known/1_1_$special_atomic/1___1__3'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',H), - ( G=[I|_] -> - setarg(5,I,H) - ; - true - ), - 'attach_known/1_1_$special_atomic/1___1'(B,A) - ; - true - ). -'known/1_1_$special_compound/1'(A) :- - 'known/1_1_$special_compound/1___1__0'(A,_). -'known/1_1_$special_compound/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(5,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',K), - ( K=[L|_] -> - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_compound/1___1'(H,B) - ) - ). -'known/1_1_$special_compound/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_compound/1___1'(D,A) - ) - ). -'known/1_1_$special_compound/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=compound(H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(5,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_compound/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_compound/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(E,not_stored_yet,t,0,_,A), - 'chr gen_id'(E) - ; - true - ), - ( - '$novel_production'(B,236), - !, - '$extend_history'(B,236), - arg(2,B,G), - setarg(2,B,active), - arg(4,B,F), - D is F+1, - setarg(4,B,D), - ( G==not_stored_yet -> - B=suspension(_,_,_,_,_,H), - term_variables(H,C), - 'chr none_locked'(C), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',I), - J=[B|I], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',J), - ( I=[K|_] -> - setarg(5,K,J) - ; - true - ), - 'attach_known/1_1_$special_compound/1___1'(C,B) - ; - true - ), - 'known/1_1_$special_nonvar/1'(A), - ( B=suspension(_,active,_,D,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_compound/1___1__1'(A,B) - ; - true - ) - ; - 'known/1_1_$special_compound/1___1__1'(A,B) - ). -'known/1_1_$special_compound/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_compound/1___1__1__0__7'(C,A,B). -'known/1_1_$special_compound/1___1__1__0__7'([],B,A) :- - 'known/1_1_$special_compound/1___1__2'(B,A). -'known/1_1_$special_compound/1___1__1__0__7'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=compound(G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(4,B,L), - K is L+1, - setarg(4,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_compound/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_compound/1___1__1__0__7'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_compound/1___1__1__0__7'(H,A,B) - ). -'known/1_1_$special_compound/1___1__1'(A,B) :- - 'known/1_1_$special_compound/1___1__2'(A,B). -'known/1_1_$special_compound/1___1__2'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_compound/1___1__2__0__8'(C,A,B). -'known/1_1_$special_compound/1___1__2__0__8'([],B,A) :- - 'known/1_1_$special_compound/1___1__3'(B,A). -'known/1_1_$special_compound/1___1__2__0__8'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=compound(H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(4,B,M), - L is M+1, - setarg(4,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - 'attach_known/1_1_$special_compound/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_compound/1___1__2__0__8'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_compound/1___1__2__0__8'(I,A,B) - ). -'known/1_1_$special_compound/1___1__2'(A,B) :- - 'known/1_1_$special_compound/1___1__3'(A,B). -'known/1_1_$special_compound/1___1__3'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',H), - ( G=[I|_] -> - setarg(5,I,H) - ; - true - ), - 'attach_known/1_1_$special_compound/1___1'(B,A) - ; - true - ). -'known/1_1_$special_ground/1'(A) :- - 'known/1_1_$special_ground/1___1__0'(A,_). -'known/1_1_$special_ground/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(5,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',K), - ( K=[L|_] -> - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_ground/1___1'(H,B) - ) - ). -'known/1_1_$special_ground/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_ground/1___1'(D,A) - ) - ). -'known/1_1_$special_ground/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=ground(H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(5,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_ground/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_ground/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(E,not_stored_yet,t,0,_,A), - 'chr gen_id'(E) - ; - true - ), - ( - '$novel_production'(B,235), - !, - '$extend_history'(B,235), - arg(2,B,G), - setarg(2,B,active), - arg(4,B,F), - D is F+1, - setarg(4,B,D), - ( G==not_stored_yet -> - B=suspension(_,_,_,_,_,H), - term_variables(H,C), - 'chr none_locked'(C), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',I), - J=[B|I], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',J), - ( I=[K|_] -> - setarg(5,K,J) - ; - true - ), - 'attach_known/1_1_$special_ground/1___1'(C,B) - ; - true - ), - 'known/1_1_$special_nonvar/1'(A), - ( B=suspension(_,active,_,D,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_ground/1___1__1'(A,B) - ; - true - ) - ; - 'known/1_1_$special_ground/1___1__1'(A,B) - ). -'known/1_1_$special_ground/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_ground/1___1__1__0__7'(C,A,B). -'known/1_1_$special_ground/1___1__1__0__7'([],B,A) :- - 'known/1_1_$special_ground/1___1__2'(B,A). -'known/1_1_$special_ground/1___1__1__0__7'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=ground(G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(4,B,L), - K is L+1, - setarg(4,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_ground/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_ground/1___1__1__0__7'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_ground/1___1__1__0__7'(H,A,B) - ). -'known/1_1_$special_ground/1___1__1'(A,B) :- - 'known/1_1_$special_ground/1___1__2'(A,B). -'known/1_1_$special_ground/1___1__2'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_ground/1___1__2__0__8'(C,A,B). -'known/1_1_$special_ground/1___1__2__0__8'([],B,A) :- - 'known/1_1_$special_ground/1___1__3'(B,A). -'known/1_1_$special_ground/1___1__2__0__8'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=ground(H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(4,B,M), - L is M+1, - setarg(4,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - 'attach_known/1_1_$special_ground/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_ground/1___1__2__0__8'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_ground/1___1__2__0__8'(I,A,B) - ). -'known/1_1_$special_ground/1___1__2'(A,B) :- - 'known/1_1_$special_ground/1___1__3'(A,B). -'known/1_1_$special_ground/1___1__3'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',H), - ( G=[I|_] -> - setarg(5,I,H) - ; - true - ), - 'attach_known/1_1_$special_ground/1___1'(B,A) - ; - true - ). -'known/1_1_$special_integer/1'(A) :- - 'known/1_1_$special_integer/1___1__0'(A,_). -'known/1_1_$special_integer/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(5,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',K), - ( K=[L|_] -> - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_integer/1___1'(H,B) - ) - ). -'known/1_1_$special_integer/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_integer/1___1'(D,A) - ) - ). -'known/1_1_$special_integer/1___1__0'(A,B) :- - nonvar(A), - \+integer(A), - !, - ( var(B) -> - true - ; - B=suspension(_,H,_,_,_,I), - setarg(2,B,removed), - ( H==not_stored_yet -> - C=[] - ; - term_variables(I,C), - arg(5,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_integer/1___1'(C,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_integer/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(E,not_stored_yet,t,0,_,A), - 'chr gen_id'(E) - ; - true - ), - ( - '$novel_production'(B,199), - !, - '$extend_history'(B,199), - arg(2,B,G), - setarg(2,B,active), - arg(4,B,F), - D is F+1, - setarg(4,B,D), - ( G==not_stored_yet -> - B=suspension(_,_,_,_,_,H), - term_variables(H,C), - 'chr none_locked'(C), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',I), - J=[B|I], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',J), - ( I=[K|_] -> - setarg(5,K,J) - ; - true - ), - 'attach_known/1_1_$special_integer/1___1'(C,B) - ; - true - ), - 'known/1_1_$special_number/1'(A), - ( B=suspension(_,active,_,D,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_integer/1___1__1'(A,B) - ; - true - ) - ; - 'known/1_1_$special_integer/1___1__1'(A,B) - ). -'known/1_1_$special_integer/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=integer(H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(5,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_integer/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_integer/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_integer/1___1__1__0__8'(C,A,B). -'known/1_1_$special_integer/1___1__1__0__8'([],B,A) :- - 'known/1_1_$special_integer/1___1__2'(B,A). -'known/1_1_$special_integer/1___1__1__0__8'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=integer(G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(4,B,L), - K is L+1, - setarg(4,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_integer/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_integer/1___1__1__0__8'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_integer/1___1__1__0__8'(H,A,B) - ). -'known/1_1_$special_integer/1___1__1'(A,B) :- - 'known/1_1_$special_integer/1___1__2'(A,B). -'known/1_1_$special_integer/1___1__2'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_integer/1___1__2__0__9'(C,A,B). -'known/1_1_$special_integer/1___1__2__0__9'([],B,A) :- - 'known/1_1_$special_integer/1___1__3'(B,A). -'known/1_1_$special_integer/1___1__2__0__9'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=integer(H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(4,B,M), - L is M+1, - setarg(4,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - 'attach_known/1_1_$special_integer/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_integer/1___1__2__0__9'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_integer/1___1__2__0__9'(I,A,B) - ). -'known/1_1_$special_integer/1___1__2'(A,B) :- - 'known/1_1_$special_integer/1___1__3'(A,B). -'known/1_1_$special_integer/1___1__3'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',H), - ( G=[I|_] -> - setarg(5,I,H) - ; - true - ), - 'attach_known/1_1_$special_integer/1___1'(B,A) - ; - true - ). -'known/1_1_$special_float/1'(A) :- - 'known/1_1_$special_float/1___1__0'(A,_). -'known/1_1_$special_float/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(5,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',K), - ( K=[L|_] -> - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_float/1___1'(H,B) - ) - ). -'known/1_1_$special_float/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_float/1___1'(D,A) - ) - ). -'known/1_1_$special_float/1___1__0'(A,B) :- - nonvar(A), - \+float(A), - !, - ( var(B) -> - true - ; - B=suspension(_,H,_,_,_,I), - setarg(2,B,removed), - ( H==not_stored_yet -> - C=[] - ; - term_variables(I,C), - arg(5,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_float/1___1'(C,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_float/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(E,not_stored_yet,t,0,_,A), - 'chr gen_id'(E) - ; - true - ), - ( - '$novel_production'(B,200), - !, - '$extend_history'(B,200), - arg(2,B,G), - setarg(2,B,active), - arg(4,B,F), - D is F+1, - setarg(4,B,D), - ( G==not_stored_yet -> - B=suspension(_,_,_,_,_,H), - term_variables(H,C), - 'chr none_locked'(C), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',I), - J=[B|I], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',J), - ( I=[K|_] -> - setarg(5,K,J) - ; - true - ), - 'attach_known/1_1_$special_float/1___1'(C,B) - ; - true - ), - 'known/1_1_$special_number/1'(A), - ( B=suspension(_,active,_,D,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_float/1___1__1'(A,B) - ; - true - ) - ; - 'known/1_1_$special_float/1___1__1'(A,B) - ). -'known/1_1_$special_float/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=float(H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(5,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_float/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_float/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_float/1___1__1__0__8'(C,A,B). -'known/1_1_$special_float/1___1__1__0__8'([],B,A) :- - 'known/1_1_$special_float/1___1__2'(B,A). -'known/1_1_$special_float/1___1__1__0__8'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=float(G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(4,B,L), - K is L+1, - setarg(4,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_float/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_float/1___1__1__0__8'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_float/1___1__1__0__8'(H,A,B) - ). -'known/1_1_$special_float/1___1__1'(A,B) :- - 'known/1_1_$special_float/1___1__2'(A,B). -'known/1_1_$special_float/1___1__2'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_float/1___1__2__0__9'(C,A,B). -'known/1_1_$special_float/1___1__2__0__9'([],B,A) :- - 'known/1_1_$special_float/1___1__3'(B,A). -'known/1_1_$special_float/1___1__2__0__9'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=float(H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(4,B,M), - L is M+1, - setarg(4,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - 'attach_known/1_1_$special_float/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_float/1___1__2__0__9'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_float/1___1__2__0__9'(I,A,B) - ). -'known/1_1_$special_float/1___1__2'(A,B) :- - 'known/1_1_$special_float/1___1__3'(A,B). -'known/1_1_$special_float/1___1__3'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',H), - ( G=[I|_] -> - setarg(5,I,H) - ; - true - ), - 'attach_known/1_1_$special_float/1___1'(B,A) - ; - true - ). -'known/1_1_$special_number/1'(A) :- - 'known/1_1_$special_number/1___1__0'(A,_). -'known/1_1_$special_number/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(5,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',K), - ( K=[L|_] -> - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_number/1___1'(H,B) - ) - ). -'known/1_1_$special_number/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_number/1___1'(D,A) - ) - ). -'known/1_1_$special_number/1___1__0'(A,B) :- - nonvar(A), - \+number(A), - !, - ( var(B) -> - true - ; - B=suspension(_,H,_,_,_,I), - setarg(2,B,removed), - ( H==not_stored_yet -> - C=[] - ; - term_variables(I,C), - arg(5,B,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_number/1___1'(C,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_number/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=number(H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(5,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_number/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_number/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(E,not_stored_yet,t,0,_,A), - 'chr gen_id'(E) - ; - true - ), - ( - '$novel_production'(B,238), - !, - '$extend_history'(B,238), - arg(2,B,G), - setarg(2,B,active), - arg(4,B,F), - D is F+1, - setarg(4,B,D), - ( G==not_stored_yet -> - B=suspension(_,_,_,_,_,H), - term_variables(H,C), - 'chr none_locked'(C), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',I), - J=[B|I], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',J), - ( I=[K|_] -> - setarg(5,K,J) - ; - true - ), - 'attach_known/1_1_$special_number/1___1'(C,B) - ; - true - ), - 'known/1_1_$special_nonvar/1'(A), - ( B=suspension(_,active,_,D,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_number/1___1__1'(A,B) - ; - true - ) - ; - 'known/1_1_$special_number/1___1__1'(A,B) - ). -'known/1_1_$special_number/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_number/1___1__1__0__8'(C,A,B). -'known/1_1_$special_number/1___1__1__0__8'([],B,A) :- - 'known/1_1_$special_number/1___1__2'(B,A). -'known/1_1_$special_number/1___1__1__0__8'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=number(G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(4,B,L), - K is L+1, - setarg(4,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_number/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_number/1___1__1__0__8'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_number/1___1__1__0__8'(H,A,B) - ). -'known/1_1_$special_number/1___1__1'(A,B) :- - 'known/1_1_$special_number/1___1__2'(A,B). -'known/1_1_$special_number/1___1__2'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_number/1___1__2__0__9'(C,A,B). -'known/1_1_$special_number/1___1__2__0__9'([],B,A) :- - 'known/1_1_$special_number/1___1__3'(B,A). -'known/1_1_$special_number/1___1__2__0__9'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=number(H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(4,B,M), - L is M+1, - setarg(4,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',Q), - ( P=[R|_] -> - setarg(5,R,Q) - ; - true - ), - 'attach_known/1_1_$special_number/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,_,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_number/1___1__2__0__9'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_number/1___1__2__0__9'(I,A,B) - ). -'known/1_1_$special_number/1___1__2'(A,B) :- - 'known/1_1_$special_number/1___1__3'(A,B). -'known/1_1_$special_number/1___1__3'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',H), - ( G=[I|_] -> - setarg(5,I,H) - ; - true - ), - 'attach_known/1_1_$special_number/1___1'(B,A) - ; - true - ). -'known/1_1_$special_=\\=/2'(A,B) :- - 'known/1_1_$special_=\\=/2___2__0'(A,B,_). -'known/1_1_$special_=\\=/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - E==A, - F==B, - !, - ( var(C) -> - true - ; - C=suspension(_,O,_,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(5,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(J,C) - ) - ). -'known/1_1_$special_=\\=/2___2__0'(_,_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J,K), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(D,A) - ) - ). -'known/1_1_$special_=\\=/2___2__0'(A,B,C) :- - ( 'chr newvia_1'(B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,D,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',D) - ), - !, - ( var(C) -> - C=suspension(G,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(G) - ; - true - ), - 'known/1_1_$special_=\\=/2___2__0__0__5'(D,A,B,C). -'known/1_1_$special_=\\=/2___2__0__0__5'([],B,C,A) :- - 'known/1_1_$special_=\\=/2___2__1'(B,C,A). -'known/1_1_$special_=\\=/2___2__0__0__5'([F|J],B,C,A) :- - ( F=suspension(_,active,_,_,_,D,E), - D==C, - ( 'chr newvia_2'(C,E,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - 'known/1_1_$special_=\\=/2___2__0__1__5'(G,E,F,J,B,C,A) - ; - 'known/1_1_$special_=\\=/2___2__0__0__5'(J,B,C,A) - ). -'known/1_1_$special_=\\=/2___2__0__1__5'([],_,_,A,C,D,B) :- - 'known/1_1_$special_=\\=/2___2__0__0__5'(A,C,D,B). -'known/1_1_$special_=\\=/2___2__0__1__5'([I|M],F,A,B,D,E,C) :- - ( I=suspension(_,active,_,_,_,G,H), - G==E, - H==F, - ( 'chr newvia_2'(D,E,K) -> - get_attr(K,guard_entailment,L), - L=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,J,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - 'known/1_1_$special_=\\=/2___2__0__2__5'(J,I,M,F,A,B,D,E,C) - ; - 'known/1_1_$special_=\\=/2___2__0__1__5'(M,F,A,B,D,E,C) - ). -'known/1_1_$special_=\\=/2___2__0__2__5'([],_,A,G,B,C,E,F,D) :- - 'known/1_1_$special_=\\=/2___2__0__1__5'(A,G,B,C,E,F,D). -'known/1_1_$special_=\\=/2___2__0__2__5'([K|L],A,B,H,C,D,F,G,E) :- - ( K=suspension(_,active,_,_,_,I,J), - K\==A, - I==F, - J==G, - O=t(188,K,E,A,C), - '$novel_production'(K,O), - '$novel_production'(E,O), - '$novel_production'(A,O), - '$novel_production'(C,O) -> - '$extend_history'(E,O), - arg(2,E,Q), - setarg(2,E,active), - arg(4,E,P), - N is P+1, - setarg(4,E,N), - ( Q==not_stored_yet -> - E=suspension(_,_,_,_,_,R,S), - term_variables(term(R,S),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',T), - U=[E|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',U), - ( T=[V|_] -> - setarg(5,V,U) - ; - true - ), - 'attach_known/1_1_$special_=\\=/2___2'(M,E) - ; - true - ), - 'known/1_1_$special_=\\=/2'(F,H), - ( E=suspension(_,active,_,N,_,_,_) -> - setarg(2,E,inactive), - 'known/1_1_$special_=\\=/2___2__0__2__5'(L,A,B,H,C,D,F,G,E) - ; - true - ) - ; - 'known/1_1_$special_=\\=/2___2__0__2__5'(L,A,B,H,C,D,F,G,E) - ). -'known/1_1_$special_=\\=/2___2__0'(A,B,C) :- - ( var(C) -> - C=suspension(D,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(D) - ; - true - ), - 'known/1_1_$special_=\\=/2___2__1'(A,B,C). -'known/1_1_$special_=\\=/2___2__1'(A,B,C) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - 'known/1_1_$special_=\\=/2___2__1__1__6'(G,D,F,J,B,C,A) - ; - 'known/1_1_$special_=\\=/2___2__1__0__6'(J,B,C,A) - ). -'known/1_1_$special_=\\=/2___2__1__1__6'([],_,_,A,C,D,B) :- - 'known/1_1_$special_=\\=/2___2__1__0__6'(A,C,D,B). -'known/1_1_$special_=\\=/2___2__1__1__6'([I|M],F,A,B,D,E,C) :- - ( I=suspension(_,active,_,_,_,G,H), - I\==A, - G==D, - H==E, - ( 'chr newvia_2'(F,D,K) -> - get_attr(K,guard_entailment,L), - L=v(_,_,_,_,_,_,_,_,_,_,_,_,_,J,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',J) - ) -> - 'known/1_1_$special_=\\=/2___2__1__2__6'(J,I,M,F,A,B,D,E,C) - ; - 'known/1_1_$special_=\\=/2___2__1__1__6'(M,F,A,B,D,E,C) - ). -'known/1_1_$special_=\\=/2___2__1__2__6'([],_,A,G,B,C,E,F,D) :- - 'known/1_1_$special_=\\=/2___2__1__1__6'(A,G,B,C,E,F,D). -'known/1_1_$special_=\\=/2___2__1__2__6'([K|L],A,B,H,C,D,F,G,E) :- - ( K=suspension(_,active,_,_,_,I,J), - I==H, - J==F, - O=t(188,C,K,A,E), - '$novel_production'(C,O), - '$novel_production'(K,O), - '$novel_production'(A,O), - '$novel_production'(E,O) -> - '$extend_history'(E,O), - arg(2,E,Q), - setarg(2,E,active), - arg(4,E,P), - N is P+1, - setarg(4,E,N), - ( Q==not_stored_yet -> - E=suspension(_,_,_,_,_,R,S), - term_variables(term(R,S),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',T), - U=[E|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',U), - ( T=[V|_] -> - setarg(5,V,U) - ; - true - ), - 'attach_known/1_1_$special_=\\=/2___2'(M,E) - ; - true - ), - 'known/1_1_$special_=\\=/2'(H,G), - ( E=suspension(_,active,_,N,_,_,_) -> - setarg(2,E,inactive), - 'known/1_1_$special_=\\=/2___2__1__2__6'(L,A,B,H,C,D,F,G,E) - ; - true - ) - ; - 'known/1_1_$special_=\\=/2___2__1__2__6'(L,A,B,H,C,D,F,G,E) - ). -'known/1_1_$special_=\\=/2___2__1'(A,B,C) :- - 'known/1_1_$special_=\\=/2___2__2'(A,B,C). -'known/1_1_$special_=\\=/2___2__2'(A,B,C) :- - number(B), - number(A), - A=:=B, - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(D,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_=\\=/2___2__2'(A,B,C) :- - B==A, - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(D,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_=\\=/2___2__2'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - E==A, - F==B, - !, - D=suspension(_,_,_,_,_,W,X), - setarg(2,D,removed), - term_variables(term(W,X),J), - arg(5,D,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',U), - ( U=[V|_] -> - setarg(5,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(5,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(J,D), - ( var(C) -> - true - ; - C=suspension(_,P,_,_,_,Q,R), - setarg(2,C,removed), - ( P==not_stored_yet -> - K=[] - ; - term_variables(term(Q,R),K), - arg(5,C,L), - ( var(L) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',M), - M=[_|N], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',N), - ( N=[O|_] -> - setarg(5,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(5,O,L) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(K,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_=\\=/2___2__2'(A,B,C) :- - '$novel_production'(C,195), - !, - '$extend_history'(C,195), - arg(2,C,G), - setarg(2,C,active), - arg(4,C,F), - E is F+1, - setarg(4,C,E), - ( G==not_stored_yet -> - C=suspension(_,_,_,_,_,H,I), - term_variables(term(H,I),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',J), - K=[C|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',K), - ( J=[L|_] -> - setarg(5,L,K) - ; - true - ), - 'attach_known/1_1_$special_=\\=/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_=\\=/2'(B,A), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_=\\=/2___2__3'(A,B,C) - ; - true - ). -'known/1_1_$special_=\\=/2___2__2'(A,B,C) :- - 'known/1_1_$special_=\\=/2___2__3'(A,B,C). -'known/1_1_$special_=\\=/2___2__3'(A,B,C) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - nonvar(E), - E=(I=\=J), - I==A, - J==B, - !, - D=suspension(_,_,_,_,X), - setarg(2,D,removed), - term_variables(X,K), - arg(4,D,T), - ( var(T) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',U), - U=[_|V], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V), - ( V=[W|_] -> - setarg(4,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(4,W,T) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(K,D), - ( var(C) -> - true - ; - C=suspension(_,Q,_,_,_,R,S), - setarg(2,C,removed), - ( Q==not_stored_yet -> - L=[] - ; - term_variables(term(R,S),L), - arg(5,C,M), - ( var(M) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',N), - N=[_|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',O), - ( O=[P|_] -> - setarg(5,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(5,P,M) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(L,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_=\\=/2___2__3'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_=\\=/2___2__3__0__12'(D,A,B,C). -'known/1_1_$special_=\\=/2___2__3__0__12'([],B,C,A) :- - 'known/1_1_$special_=\\=/2___2__4'(B,C,A). -'known/1_1_$special_=\\=/2___2__3__0__12'([F|J],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(\+G), - nonvar(G), - G=(H=\=I), - H==A, - I==B -> - F=suspension(_,_,_,_,Y,Z), - setarg(2,F,removed), - term_variables(term(Y,Z),K), - arg(4,F,U), - ( var(U) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V), - V=[_|W], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - ( W=[X|_] -> - setarg(4,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(4,X,U) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(K,F), - arg(2,C,O), - setarg(2,C,active), - arg(4,C,N), - M is N+1, - setarg(4,C,M), - ( O==not_stored_yet -> - C=suspension(_,_,_,_,_,P,Q), - term_variables(term(P,Q),L), - 'chr none_locked'(L), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',R), - S=[C|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',S), - ( R=[T|_] -> - setarg(5,T,S) - ; - true - ), - 'attach_known/1_1_$special_=\\=/2___2'(L,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,M,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_=\\=/2___2__3__0__12'(J,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_=\\=/2___2__3__0__12'(J,A,B,C) - ). -'known/1_1_$special_=\\=/2___2__3'(A,B,C) :- - 'known/1_1_$special_=\\=/2___2__4'(A,B,C). -'known/1_1_$special_=\\=/2___2__4'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_=\\=/2___2__4__0__13'(D,A,B,C). -'known/1_1_$special_=\\=/2___2__4__0__13'([],B,C,A) :- - 'known/1_1_$special_=\\=/2___2__5'(B,C,A). -'known/1_1_$special_=\\=/2___2__4__0__13'([F|K],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(G,_), - nonvar(G), - G=(\+H), - nonvar(H), - H=(I=\=J), - I==A, - J==B -> - F=suspension(_,_,_,_,Z,A1), - setarg(2,F,removed), - term_variables(term(Z,A1),L), - arg(4,F,V), - ( var(V) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - W=[_|X], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X), - ( X=[Y|_] -> - setarg(4,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(4,Y,V) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,F), - arg(2,C,P), - setarg(2,C,active), - arg(4,C,O), - N is O+1, - setarg(4,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,_,Q,R), - term_variables(term(Q,R),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',S), - T=[C|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',T), - ( S=[U|_] -> - setarg(5,U,T) - ; - true - ), - 'attach_known/1_1_$special_=\\=/2___2'(M,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,N,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_=\\=/2___2__4__0__13'(K,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_=\\=/2___2__4__0__13'(K,A,B,C) - ). -'known/1_1_$special_=\\=/2___2__4'(A,B,C) :- - 'known/1_1_$special_=\\=/2___2__5'(A,B,C). -'known/1_1_$special_=\\=/2___2__5'(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F,G), - term_variables(term(F,G),B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',H), - I=[A|H], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',I), - ( H=[J|_] -> - setarg(5,J,I) - ; - true - ), - 'attach_known/1_1_$special_=\\=/2___2'(B,A) - ; - true - ). -'known/1_1_$special_\\+/1'(A) :- - 'known/1_1_$special_\\+/1___1__0'(A,_). -'known/1_1_$special_\\+/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==A, - !, - ( var(B) -> - true - ; - B=suspension(_,M,_,_,N), - setarg(2,B,removed), - ( M==not_stored_yet -> - H=[] - ; - term_variables(N,H), - arg(4,B,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',J), - J=[_|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',K), - ( K=[L|_] -> - setarg(4,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(4,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(H,B) - ) - ). -'known/1_1_$special_\\+/1___1__0'(_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,J), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(J,D), - arg(4,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(D,A) - ) - ). -'known/1_1_$special_\\+/1___1__0'(A,B) :- - nonvar(A), - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - ( - A=functor(C,D,E), - nonvar(C), - 'chr lock'(C), - 'chr lock'(D), - 'chr lock'(E), - functor(C,D,E), - 'chr unlock'(C), - 'chr unlock'(D), - 'chr unlock'(E), - !, - ( var(B) -> - true - ; - B=suspension(_,R8,_,_,S8), - setarg(2,B,removed), - ( R8==not_stored_yet -> - F=[] - ; - term_variables(S8,F), - arg(4,B,N8), - ( var(N8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',O8), - O8=[_|P8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',P8), - ( P8=[Q8|_] -> - setarg(4,Q8,_) - ; - true - ) - ; - N8=[_,_|P8], - setarg(2,N8,P8), - ( P8=[Q8|_] -> - setarg(4,Q8,N8) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(F,B) - ) - ), - 'known/1_1_$special_fail/0' - ; - A=(G;H), - ( 'chr newvia_2'(G,H,M) -> - get_attr(M,guard_entailment,N), - N=v(_,_,_,L,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',L) - ), - 'chr sbag_member'(I,L), - I=suspension(_,active,_,_,J,K), - J==G, - K==H, - !, - I=suspension(_,_,_,_,L8,M8), - setarg(2,I,removed), - term_variables(term(L8,M8),O), - arg(4,I,H8), - ( var(H8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',I8), - I8=[_|J8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',J8), - ( J8=[K8|_] -> - setarg(4,K8,_) - ; - true - ) - ; - H8=[_,_|J8], - setarg(2,H8,J8), - ( J8=[K8|_] -> - setarg(4,K8,H8) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(O,I), - ( var(B) -> - true - ; - B=suspension(_,F8,_,_,G8), - setarg(2,B,removed), - ( F8==not_stored_yet -> - P=[] - ; - term_variables(G8,P), - arg(4,B,B8), - ( var(B8) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',C8), - C8=[_|D8], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',D8), - ( D8=[E8|_] -> - setarg(4,E8,_) - ; - true - ) - ; - B8=[_,_|D8], - setarg(2,B8,D8), - ( D8=[E8|_] -> - setarg(4,E8,B8) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(P,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=nonvar(Q), - ( 'chr newvia_1'(Q,U) -> - get_attr(U,guard_entailment,V), - V=v(_,_,_,_,T,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',T) - ), - 'chr sbag_member'(R,T), - R=suspension(_,active,_,_,S), - S==Q, - !, - R=suspension(_,_,_,_,A8), - setarg(2,R,removed), - term_variables(A8,W), - arg(4,R,W7), - ( var(W7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',X7), - X7=[_|Y7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',Y7), - ( Y7=[Z7|_] -> - setarg(4,Z7,_) - ; - true - ) - ; - W7=[_,_|Y7], - setarg(2,W7,Y7), - ( Y7=[Z7|_] -> - setarg(4,Z7,W7) - ; - true - ) - ), - 'detach_known/1_1_$special_nonvar/1___1'(W,R), - ( var(B) -> - true - ; - B=suspension(_,U7,_,_,V7), - setarg(2,B,removed), - ( U7==not_stored_yet -> - X=[] - ; - term_variables(V7,X), - arg(4,B,Q7), - ( var(Q7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R7), - R7=[_|S7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S7), - ( S7=[T7|_] -> - setarg(4,T7,_) - ; - true - ) - ; - Q7=[_,_|S7], - setarg(2,Q7,S7), - ( S7=[T7|_] -> - setarg(4,T7,Q7) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(X,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=var(Y), - ( 'chr newvia_1'(Y,C1) -> - get_attr(C1,guard_entailment,D1), - D1=v(_,_,_,_,_,B1,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',B1) - ), - 'chr sbag_member'(Z,B1), - Z=suspension(_,active,_,_,A1), - A1==Y, - !, - Z=suspension(_,_,_,_,P7), - setarg(2,Z,removed), - term_variables(P7,E1), - arg(4,Z,L7), - ( var(L7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',M7), - M7=[_|N7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',N7), - ( N7=[O7|_] -> - setarg(4,O7,_) - ; - true - ) - ; - L7=[_,_|N7], - setarg(2,L7,N7), - ( N7=[O7|_] -> - setarg(4,O7,L7) - ; - true - ) - ), - 'detach_known/1_1_$special_var/1___1'(E1,Z), - ( var(B) -> - true - ; - B=suspension(_,J7,_,_,K7), - setarg(2,B,removed), - ( J7==not_stored_yet -> - F1=[] - ; - term_variables(K7,F1), - arg(4,B,F7), - ( var(F7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',G7), - G7=[_|H7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',H7), - ( H7=[I7|_] -> - setarg(4,I7,_) - ; - true - ) - ; - F7=[_,_|H7], - setarg(2,F7,H7), - ( H7=[I7|_] -> - setarg(4,I7,F7) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(F1,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=atom(G1), - ( 'chr newvia_1'(G1,K1) -> - get_attr(K1,guard_entailment,L1), - L1=v(_,_,_,_,_,_,J1,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',J1) - ), - 'chr sbag_member'(H1,J1), - H1=suspension(_,active,_,_,_,I1), - I1==G1, - !, - H1=suspension(_,_,_,_,_,E7), - setarg(2,H1,removed), - term_variables(E7,M1), - arg(5,H1,A7), - ( var(A7) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',B7), - B7=[_|C7], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',C7), - ( C7=[D7|_] -> - setarg(5,D7,_) - ; - true - ) - ; - A7=[_,_|C7], - setarg(2,A7,C7), - ( C7=[D7|_] -> - setarg(5,D7,A7) - ; - true - ) - ), - 'detach_known/1_1_$special_atom/1___1'(M1,H1), - ( var(B) -> - true - ; - B=suspension(_,Y6,_,_,Z6), - setarg(2,B,removed), - ( Y6==not_stored_yet -> - N1=[] - ; - term_variables(Z6,N1), - arg(4,B,U6), - ( var(U6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V6), - V6=[_|W6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',W6), - ( W6=[X6|_] -> - setarg(4,X6,_) - ; - true - ) - ; - U6=[_,_|W6], - setarg(2,U6,W6), - ( W6=[X6|_] -> - setarg(4,X6,U6) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(N1,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=atomic(O1), - ( 'chr newvia_1'(O1,S1) -> - get_attr(S1,guard_entailment,T1), - T1=v(_,_,_,_,_,_,_,R1,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',R1) - ), - 'chr sbag_member'(P1,R1), - P1=suspension(_,active,_,_,_,Q1), - Q1==O1, - !, - P1=suspension(_,_,_,_,_,T6), - setarg(2,P1,removed), - term_variables(T6,U1), - arg(5,P1,P6), - ( var(P6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',Q6), - Q6=[_|R6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',R6), - ( R6=[S6|_] -> - setarg(5,S6,_) - ; - true - ) - ; - P6=[_,_|R6], - setarg(2,P6,R6), - ( R6=[S6|_] -> - setarg(5,S6,P6) - ; - true - ) - ), - 'detach_known/1_1_$special_atomic/1___1'(U1,P1), - ( var(B) -> - true - ; - B=suspension(_,N6,_,_,O6), - setarg(2,B,removed), - ( N6==not_stored_yet -> - V1=[] - ; - term_variables(O6,V1), - arg(4,B,J6), - ( var(J6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',K6), - K6=[_|L6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',L6), - ( L6=[M6|_] -> - setarg(4,M6,_) - ; - true - ) - ; - J6=[_,_|L6], - setarg(2,J6,L6), - ( L6=[M6|_] -> - setarg(4,M6,J6) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(V1,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=compound(W1), - ( 'chr newvia_1'(W1,A2) -> - get_attr(A2,guard_entailment,B2), - B2=v(_,_,_,_,_,_,_,_,Z1,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',Z1) - ), - 'chr sbag_member'(X1,Z1), - X1=suspension(_,active,_,_,_,Y1), - Y1==W1, - !, - X1=suspension(_,_,_,_,_,I6), - setarg(2,X1,removed), - term_variables(I6,C2), - arg(5,X1,E6), - ( var(E6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',F6), - F6=[_|G6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',G6), - ( G6=[H6|_] -> - setarg(5,H6,_) - ; - true - ) - ; - E6=[_,_|G6], - setarg(2,E6,G6), - ( G6=[H6|_] -> - setarg(5,H6,E6) - ; - true - ) - ), - 'detach_known/1_1_$special_compound/1___1'(C2,X1), - ( var(B) -> - true - ; - B=suspension(_,C6,_,_,D6), - setarg(2,B,removed), - ( C6==not_stored_yet -> - D2=[] - ; - term_variables(D6,D2), - arg(4,B,Y5), - ( var(Y5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',Z5), - Z5=[_|A6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',A6), - ( A6=[B6|_] -> - setarg(4,B6,_) - ; - true - ) - ; - Y5=[_,_|A6], - setarg(2,Y5,A6), - ( A6=[B6|_] -> - setarg(4,B6,Y5) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(D2,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=ground(E2), - ( 'chr newvia_1'(E2,I2) -> - get_attr(I2,guard_entailment,J2), - J2=v(_,_,_,_,_,_,_,_,_,H2,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',H2) - ), - 'chr sbag_member'(F2,H2), - F2=suspension(_,active,_,_,_,G2), - G2==E2, - !, - F2=suspension(_,_,_,_,_,X5), - setarg(2,F2,removed), - term_variables(X5,K2), - arg(5,F2,T5), - ( var(T5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',U5), - U5=[_|V5], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',V5), - ( V5=[W5|_] -> - setarg(5,W5,_) - ; - true - ) - ; - T5=[_,_|V5], - setarg(2,T5,V5), - ( V5=[W5|_] -> - setarg(5,W5,T5) - ; - true - ) - ), - 'detach_known/1_1_$special_ground/1___1'(K2,F2), - ( var(B) -> - true - ; - B=suspension(_,R5,_,_,S5), - setarg(2,B,removed), - ( R5==not_stored_yet -> - L2=[] - ; - term_variables(S5,L2), - arg(4,B,N5), - ( var(N5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',O5), - O5=[_|P5], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',P5), - ( P5=[Q5|_] -> - setarg(4,Q5,_) - ; - true - ) - ; - N5=[_,_|P5], - setarg(2,N5,P5), - ( P5=[Q5|_] -> - setarg(4,Q5,N5) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(L2,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=integer(M2), - ( 'chr newvia_1'(M2,Q2) -> - get_attr(Q2,guard_entailment,R2), - R2=v(_,_,_,_,_,_,_,_,_,_,P2,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',P2) - ), - 'chr sbag_member'(N2,P2), - N2=suspension(_,active,_,_,_,O2), - O2==M2, - !, - N2=suspension(_,_,_,_,_,M5), - setarg(2,N2,removed), - term_variables(M5,S2), - arg(5,N2,I5), - ( var(I5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',J5), - J5=[_|K5], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',K5), - ( K5=[L5|_] -> - setarg(5,L5,_) - ; - true - ) - ; - I5=[_,_|K5], - setarg(2,I5,K5), - ( K5=[L5|_] -> - setarg(5,L5,I5) - ; - true - ) - ), - 'detach_known/1_1_$special_integer/1___1'(S2,N2), - ( var(B) -> - true - ; - B=suspension(_,G5,_,_,H5), - setarg(2,B,removed), - ( G5==not_stored_yet -> - T2=[] - ; - term_variables(H5,T2), - arg(4,B,C5), - ( var(C5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',D5), - D5=[_|E5], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E5), - ( E5=[F5|_] -> - setarg(4,F5,_) - ; - true - ) - ; - C5=[_,_|E5], - setarg(2,C5,E5), - ( E5=[F5|_] -> - setarg(4,F5,C5) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(T2,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=float(U2), - ( 'chr newvia_1'(U2,Y2) -> - get_attr(Y2,guard_entailment,Z2), - Z2=v(_,_,_,_,_,_,_,_,_,_,_,X2,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',X2) - ), - 'chr sbag_member'(V2,X2), - V2=suspension(_,active,_,_,_,W2), - W2==U2, - !, - V2=suspension(_,_,_,_,_,B5), - setarg(2,V2,removed), - term_variables(B5,A3), - arg(5,V2,X4), - ( var(X4) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',Y4), - Y4=[_|Z4], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',Z4), - ( Z4=[A5|_] -> - setarg(5,A5,_) - ; - true - ) - ; - X4=[_,_|Z4], - setarg(2,X4,Z4), - ( Z4=[A5|_] -> - setarg(5,A5,X4) - ; - true - ) - ), - 'detach_known/1_1_$special_float/1___1'(A3,V2), - ( var(B) -> - true - ; - B=suspension(_,V4,_,_,W4), - setarg(2,B,removed), - ( V4==not_stored_yet -> - B3=[] - ; - term_variables(W4,B3), - arg(4,B,R4), - ( var(R4) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S4), - S4=[_|T4], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',T4), - ( T4=[U4|_] -> - setarg(4,U4,_) - ; - true - ) - ; - R4=[_,_|T4], - setarg(2,R4,T4), - ( T4=[U4|_] -> - setarg(4,U4,R4) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(B3,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=number(C3), - ( 'chr newvia_1'(C3,G3) -> - get_attr(G3,guard_entailment,H3), - H3=v(_,_,_,_,_,_,_,_,_,_,_,_,F3,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',F3) - ), - 'chr sbag_member'(D3,F3), - D3=suspension(_,active,_,_,_,E3), - E3==C3, - !, - D3=suspension(_,_,_,_,_,Q4), - setarg(2,D3,removed), - term_variables(Q4,I3), - arg(5,D3,M4), - ( var(M4) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',N4), - N4=[_|O4], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',O4), - ( O4=[P4|_] -> - setarg(5,P4,_) - ; - true - ) - ; - M4=[_,_|O4], - setarg(2,M4,O4), - ( O4=[P4|_] -> - setarg(5,P4,M4) - ; - true - ) - ), - 'detach_known/1_1_$special_number/1___1'(I3,D3), - ( var(B) -> - true - ; - B=suspension(_,K4,_,_,L4), - setarg(2,B,removed), - ( K4==not_stored_yet -> - J3=[] - ; - term_variables(L4,J3), - arg(4,B,G4), - ( var(G4) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',H4), - H4=[_|I4], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',I4), - ( I4=[J4|_] -> - setarg(4,J4,_) - ; - true - ) - ; - G4=[_,_|I4], - setarg(2,G4,I4), - ( I4=[J4|_] -> - setarg(4,J4,G4) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(J3,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=(K3=\=L3), - ( 'chr newvia_2'(K3,L3,Q3) -> - get_attr(Q3,guard_entailment,R3), - R3=v(_,_,_,_,_,_,_,_,_,_,_,_,_,P3,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',P3) - ), - 'chr sbag_member'(M3,P3), - M3=suspension(_,active,_,_,_,N3,O3), - N3==K3, - O3==L3, - !, - M3=suspension(_,_,_,_,_,E4,F4), - setarg(2,M3,removed), - term_variables(term(E4,F4),S3), - arg(5,M3,A4), - ( var(A4) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',B4), - B4=[_|C4], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',C4), - ( C4=[D4|_] -> - setarg(5,D4,_) - ; - true - ) - ; - A4=[_,_|C4], - setarg(2,A4,C4), - ( C4=[D4|_] -> - setarg(5,D4,A4) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(S3,M3), - ( var(B) -> - true - ; - B=suspension(_,Y3,_,_,Z3), - setarg(2,B,removed), - ( Y3==not_stored_yet -> - T3=[] - ; - term_variables(Z3,T3), - arg(4,B,U3), - ( var(U3) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V3), - V3=[_|W3], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',W3), - ( W3=[X3|_] -> - setarg(4,X3,_) - ; - true - ) - ; - U3=[_,_|W3], - setarg(2,U3,W3), - ( W3=[X3|_] -> - setarg(4,X3,U3) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(T3,B) - ) - ), - 'known/1_1_$special_fail/0' - ). -'known/1_1_$special_\\+/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,E,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - nonvar(D), - D=(\+H), - H==A, - !, - C=suspension(_,_,_,_,U), - setarg(2,C,removed), - term_variables(U,I), - arg(4,C,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,C), - ( var(B) -> - true - ; - B=suspension(_,O,_,_,P), - setarg(2,B,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(P,J), - arg(4,B,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',M), - ( M=[N|_] -> - setarg(4,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(4,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_\\+/1___1__0'(A,B) :- - nonvar(A), - ( - ( - ( - ( - ( - ( - ( - A=(\+C), - ( 'chr newvia_1'(C,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - E==C, - !, - D=suspension(_,_,_,_,V6), - setarg(2,D,removed), - term_variables(V6,I), - arg(4,D,R6), - ( var(R6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S6), - S6=[_|T6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',T6), - ( T6=[U6|_] -> - setarg(4,U6,_) - ; - true - ) - ; - R6=[_,_|T6], - setarg(2,R6,T6), - ( T6=[U6|_] -> - setarg(4,U6,R6) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,D), - ( var(B) -> - true - ; - B=suspension(_,P6,_,_,Q6), - setarg(2,B,removed), - ( P6==not_stored_yet -> - J=[] - ; - term_variables(Q6,J), - arg(4,B,L6), - ( var(L6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',M6), - M6=[_|N6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',N6), - ( N6=[O6|_] -> - setarg(4,O6,_) - ; - true - ) - ; - L6=[_,_|N6], - setarg(2,L6,N6), - ( N6=[O6|_] -> - setarg(4,O6,L6) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(J,B) - ) - ), - 'known/1_1_$special_fail/0' - ; - A=functor(K,L,M), - ( 'chr newvia'([K,L,M],S) -> - get_attr(S,guard_entailment,T), - T=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,R,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',R) - ), - 'chr sbag_member'(N,R), - N=suspension(_,active,_,_,O,P,Q), - O==K, - P==L, - Q==M, - !, - N=suspension(_,_,_,_,I6,J6,K6), - setarg(2,N,removed), - term_variables(term(I6,J6,K6),U), - arg(4,N,E6), - ( var(E6) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',F6), - F6=[_|G6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',G6), - ( G6=[H6|_] -> - setarg(4,H6,_) - ; - true - ) - ; - E6=[_,_|G6], - setarg(2,E6,G6), - ( G6=[H6|_] -> - setarg(4,H6,E6) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(U,N), - ( var(B) -> - true - ; - B=suspension(_,C6,_,_,D6), - setarg(2,B,removed), - ( C6==not_stored_yet -> - V=[] - ; - term_variables(D6,V), - arg(4,B,Y5), - ( var(Y5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',Z5), - Z5=[_|A6], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',A6), - ( A6=[B6|_] -> - setarg(4,B6,_) - ; - true - ) - ; - Y5=[_,_|A6], - setarg(2,Y5,A6), - ( A6=[B6|_] -> - setarg(4,B6,Y5) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(V,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=(W\=X), - ( 'chr newvia_2'(W,X,C1) -> - get_attr(C1,guard_entailment,D1), - D1=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,B1,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',B1) - ), - 'chr sbag_member'(Y,B1), - Y=suspension(_,active,_,_,_,Z,A1), - Z==W, - A1==X, - !, - Y=suspension(_,_,_,_,_,W5,X5), - setarg(2,Y,removed), - term_variables(term(W5,X5),E1), - arg(5,Y,S5), - ( var(S5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',T5), - T5=[_|U5], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',U5), - ( U5=[V5|_] -> - setarg(5,V5,_) - ; - true - ) - ; - S5=[_,_|U5], - setarg(2,S5,U5), - ( U5=[V5|_] -> - setarg(5,V5,S5) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(E1,Y), - ( var(B) -> - true - ; - B=suspension(_,Q5,_,_,R5), - setarg(2,B,removed), - ( Q5==not_stored_yet -> - F1=[] - ; - term_variables(R5,F1), - arg(4,B,M5), - ( var(M5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',N5), - N5=[_|O5], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',O5), - ( O5=[P5|_] -> - setarg(4,P5,_) - ; - true - ) - ; - M5=[_,_|O5], - setarg(2,M5,O5), - ( O5=[P5|_] -> - setarg(4,P5,M5) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(F1,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=(G1=H1), - ( 'chr newvia_2'(G1,H1,M1) -> - get_attr(M1,guard_entailment,N1), - N1=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,L1,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',L1) - ), - 'chr sbag_member'(I1,L1), - I1=suspension(_,active,_,_,J1,K1), - J1==G1, - K1==H1, - !, - I1=suspension(_,_,_,_,K5,L5), - setarg(2,I1,removed), - term_variables(term(K5,L5),O1), - arg(4,I1,G5), - ( var(G5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',H5), - H5=[_|I5], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',I5), - ( I5=[J5|_] -> - setarg(4,J5,_) - ; - true - ) - ; - G5=[_,_|I5], - setarg(2,G5,I5), - ( I5=[J5|_] -> - setarg(4,J5,G5) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(O1,I1), - ( var(B) -> - true - ; - B=suspension(_,E5,_,_,F5), - setarg(2,B,removed), - ( E5==not_stored_yet -> - P1=[] - ; - term_variables(F5,P1), - arg(4,B,A5), - ( var(A5) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',B5), - B5=[_|C5], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',C5), - ( C5=[D5|_] -> - setarg(4,D5,_) - ; - true - ) - ; - A5=[_,_|C5], - setarg(2,A5,C5), - ( C5=[D5|_] -> - setarg(4,D5,A5) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(P1,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=(Q1\==R1), - ( 'chr newvia_2'(Q1,R1,W1) -> - get_attr(W1,guard_entailment,X1), - X1=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,V1,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',V1) - ), - 'chr sbag_member'(S1,V1), - S1=suspension(_,active,_,_,_,T1,U1), - T1==Q1, - U1==R1, - !, - S1=suspension(_,_,_,_,_,Y4,Z4), - setarg(2,S1,removed), - term_variables(term(Y4,Z4),Y1), - arg(5,S1,U4), - ( var(U4) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',V4), - V4=[_|W4], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',W4), - ( W4=[X4|_] -> - setarg(5,X4,_) - ; - true - ) - ; - U4=[_,_|W4], - setarg(2,U4,W4), - ( W4=[X4|_] -> - setarg(5,X4,U4) - ; - true - ) - ), - 'detach_known/1_1_$special_\\==/2___2'(Y1,S1), - ( var(B) -> - true - ; - B=suspension(_,S4,_,_,T4), - setarg(2,B,removed), - ( S4==not_stored_yet -> - Z1=[] - ; - term_variables(T4,Z1), - arg(4,B,O4), - ( var(O4) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',P4), - P4=[_|Q4], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',Q4), - ( Q4=[R4|_] -> - setarg(4,R4,_) - ; - true - ) - ; - O4=[_,_|Q4], - setarg(2,O4,Q4), - ( Q4=[R4|_] -> - setarg(4,R4,O4) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(Z1,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=(A2==B2), - ( 'chr newvia_2'(A2,B2,G2) -> - get_attr(G2,guard_entailment,H2), - H2=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,F2,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',F2) - ), - 'chr sbag_member'(C2,F2), - C2=suspension(_,active,_,_,_,D2,E2), - D2==A2, - E2==B2, - !, - C2=suspension(_,_,_,_,_,M4,N4), - setarg(2,C2,removed), - term_variables(term(M4,N4),I2), - arg(5,C2,I4), - ( var(I4) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',J4), - J4=[_|K4], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',K4), - ( K4=[L4|_] -> - setarg(5,L4,_) - ; - true - ) - ; - I4=[_,_|K4], - setarg(2,I4,K4), - ( K4=[L4|_] -> - setarg(5,L4,I4) - ; - true - ) - ), - 'detach_known/1_1_$special_==/2___2'(I2,C2), - ( var(B) -> - true - ; - B=suspension(_,G4,_,_,H4), - setarg(2,B,removed), - ( G4==not_stored_yet -> - J2=[] - ; - term_variables(H4,J2), - arg(4,B,C4), - ( var(C4) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',D4), - D4=[_|E4], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E4), - ( E4=[F4|_] -> - setarg(4,F4,_) - ; - true - ) - ; - C4=[_,_|E4], - setarg(2,C4,E4), - ( E4=[F4|_] -> - setarg(4,F4,C4) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(J2,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=(K2= - get_attr(Q2,guard_entailment,R2), - R2=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,P2,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,Z3,_) - ; - true - ) - ; - W3=[_,_|Y3], - setarg(2,W3,Y3), - ( Y3=[Z3|_] -> - setarg(5,Z3,W3) - ; - true - ) - ), - 'detach_known/1_1_$special_= - true - ; - B=suspension(_,U3,_,_,V3), - setarg(2,B,removed), - ( U3==not_stored_yet -> - T2=[] - ; - term_variables(V3,T2), - arg(4,B,Q3), - ( var(Q3) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',R3), - R3=[_|S3], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',S3), - ( S3=[T3|_] -> - setarg(4,T3,_) - ; - true - ) - ; - Q3=[_,_|S3], - setarg(2,Q3,S3), - ( S3=[T3|_] -> - setarg(4,T3,Q3) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(T2,B) - ) - ), - 'known/1_1_$special_fail/0' - ) - ; - A=(U2=:=V2), - ( 'chr newvia_2'(U2,V2,A3) -> - get_attr(A3,guard_entailment,B3), - B3=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,Z2) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',Z2) - ), - 'chr sbag_member'(W2,Z2), - W2=suspension(_,active,_,_,_,X2,Y2), - X2==U2, - Y2==V2, - !, - W2=suspension(_,_,_,_,_,O3,P3), - setarg(2,W2,removed), - term_variables(term(O3,P3),C3), - arg(5,W2,K3), - ( var(K3) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',L3), - L3=[_|M3], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',M3), - ( M3=[N3|_] -> - setarg(5,N3,_) - ; - true - ) - ; - K3=[_,_|M3], - setarg(2,K3,M3), - ( M3=[N3|_] -> - setarg(5,N3,K3) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(C3,W2), - ( var(B) -> - true - ; - B=suspension(_,I3,_,_,J3), - setarg(2,B,removed), - ( I3==not_stored_yet -> - D3=[] - ; - term_variables(J3,D3), - arg(4,B,E3), - ( var(E3) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F3), - F3=[_|G3], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',G3), - ( G3=[H3|_] -> - setarg(4,H3,_) - ; - true - ) - ; - E3=[_,_|G3], - setarg(2,E3,G3), - ( G3=[H3|_] -> - setarg(4,H3,E3) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(D3,B) - ) - ), - 'known/1_1_$special_fail/0' - ). -'known/1_1_$special_\\+/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',E) - ), - 'chr sbag_member'(C,E), - C=suspension(_,active,_,_,D), - D==A, - !, - C=suspension(_,_,_,_,T), - setarg(2,C,removed), - term_variables(T,H), - arg(4,C,P), - ( var(P) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',Q), - Q=[_|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',R), - ( R=[S|_] -> - setarg(4,S,_) - ; - true - ) - ; - P=[_,_|R], - setarg(2,P,R), - ( R=[S|_] -> - setarg(4,S,P) - ; - true - ) - ), - 'detach_known/1_1_$default___1'(H,C), - ( var(B) -> - true - ; - B=suspension(_,N,_,_,O), - setarg(2,B,removed), - ( N==not_stored_yet -> - I=[] - ; - term_variables(O,I), - arg(4,B,J), - ( var(J) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',K), - K=[_|L], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',L), - ( L=[M|_] -> - setarg(4,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(4,M,J) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(I,B) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_\\+/1___1__0'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - ( var(B) -> - B=suspension(F,not_stored_yet,0,_,A), - 'chr gen_id'(F) - ; - true - ), - 'known/1_1_$special_\\+/1___1__0__0__33'(C,A,B). -'known/1_1_$special_\\+/1___1__0__0__33'([],B,A) :- - 'known/1_1_$special_\\+/1___1__1'(B,A). -'known/1_1_$special_\\+/1___1__0__0__33'([E|H],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(\+F), - nonvar(F), - F=(\+G), - G==A -> - E=suspension(_,_,_,_,V,W), - setarg(2,E,removed), - term_variables(term(V,W),I), - arg(4,E,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - ( T=[U|_] -> - setarg(4,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(4,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(I,E), - arg(2,B,M), - setarg(2,B,active), - arg(3,B,L), - K is L+1, - setarg(3,B,K), - ( M==not_stored_yet -> - B=suspension(_,_,_,_,N), - term_variables(N,J), - 'chr none_locked'(J), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',O), - P=[B|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',P), - ( O=[Q|_] -> - setarg(4,Q,P) - ; - true - ), - 'attach_known/1_1_$special_\\+/1___1'(J,B) - ; - true - ), - known(D), - ( B=suspension(_,active,K,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_\\+/1___1__0__0__33'(H,A,B) - ; - true - ) - ; - 'known/1_1_$special_\\+/1___1__0__0__33'(H,A,B) - ). -'known/1_1_$special_\\+/1___1__0'(A,B) :- - ( var(B) -> - B=suspension(C,not_stored_yet,0,_,A), - 'chr gen_id'(C) - ; - true - ), - 'known/1_1_$special_\\+/1___1__1'(A,B). -'known/1_1_$special_\\+/1___1__1'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_\\+/1___1__1__0__34'(C,A,B). -'known/1_1_$special_\\+/1___1__1__0__34'([],B,A) :- - 'known/1_1_$special_\\+/1___1__2'(B,A). -'known/1_1_$special_\\+/1___1__1__0__34'([E|I],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - nonvar(F), - F=(\+G), - nonvar(G), - G=(\+H), - H==A -> - E=suspension(_,_,_,_,W,X), - setarg(2,E,removed), - term_variables(term(W,X),J), - arg(4,E,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',U), - ( U=[V|_] -> - setarg(4,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(4,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,E), - arg(2,B,N), - setarg(2,B,active), - arg(3,B,M), - L is M+1, - setarg(3,B,L), - ( N==not_stored_yet -> - B=suspension(_,_,_,_,O), - term_variables(O,K), - 'chr none_locked'(K), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',P), - Q=[B|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',Q), - ( P=[R|_] -> - setarg(4,R,Q) - ; - true - ), - 'attach_known/1_1_$special_\\+/1___1'(K,B) - ; - true - ), - known(D), - ( B=suspension(_,active,L,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_\\+/1___1__1__0__34'(I,A,B) - ; - true - ) - ; - 'known/1_1_$special_\\+/1___1__1__0__34'(I,A,B) - ). -'known/1_1_$special_\\+/1___1__1'(A,B) :- - 'known/1_1_$special_\\+/1___1__2'(A,B). -'known/1_1_$special_\\+/1___1__2'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_\\+/1___1__2__0__35'(C,A,B). -'known/1_1_$special_\\+/1___1__2__0__35'([],B,A) :- - 'known/1_1_$special_\\+/1___1__3'(B,A). -'known/1_1_$special_\\+/1___1__2__0__35'([E|F],A,B) :- - ( E=suspension(_,active,_,_,C,D), - C==A -> - E=suspension(_,_,_,_,T,U), - setarg(2,E,removed), - term_variables(term(T,U),G), - arg(4,E,P), - ( var(P) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Q), - Q=[_|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',R), - ( R=[S|_] -> - setarg(4,S,_) - ; - true - ) - ; - P=[_,_|R], - setarg(2,P,R), - ( R=[S|_] -> - setarg(4,S,P) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(G,E), - arg(2,B,K), - setarg(2,B,active), - arg(3,B,J), - I is J+1, - setarg(3,B,I), - ( K==not_stored_yet -> - B=suspension(_,_,_,_,L), - term_variables(L,H), - 'chr none_locked'(H), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',M), - N=[B|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',N), - ( M=[O|_] -> - setarg(4,O,N) - ; - true - ), - 'attach_known/1_1_$special_\\+/1___1'(H,B) - ; - true - ), - known(D), - ( B=suspension(_,active,I,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_\\+/1___1__2__0__35'(F,A,B) - ; - true - ) - ; - 'known/1_1_$special_\\+/1___1__2__0__35'(F,A,B) - ). -'known/1_1_$special_\\+/1___1__2'(A,B) :- - 'known/1_1_$special_\\+/1___1__3'(A,B). -'known/1_1_$special_\\+/1___1__3'(A,B) :- - ( 'chr newvia_1'(A,D) -> - get_attr(D,guard_entailment,E), - E=v(_,_,_,C,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',C) - ), - !, - 'known/1_1_$special_\\+/1___1__3__0__36'(C,A,B). -'known/1_1_$special_\\+/1___1__3__0__36'([],B,A) :- - 'known/1_1_$special_\\+/1___1__4'(B,A). -'known/1_1_$special_\\+/1___1__3__0__36'([E|G],A,B) :- - ( E=suspension(_,active,_,_,C,D), - nonvar(C), - C=(F,_), - F==A -> - E=suspension(_,_,_,_,U,V), - setarg(2,E,removed), - term_variables(term(U,V),H), - arg(4,E,Q), - ( var(Q) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',R), - R=[_|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',S), - ( S=[T|_] -> - setarg(4,T,_) - ; - true - ) - ; - Q=[_,_|S], - setarg(2,Q,S), - ( S=[T|_] -> - setarg(4,T,Q) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(H,E), - arg(2,B,L), - setarg(2,B,active), - arg(3,B,K), - J is K+1, - setarg(3,B,J), - ( L==not_stored_yet -> - B=suspension(_,_,_,_,M), - term_variables(M,I), - 'chr none_locked'(I), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',N), - O=[B|N], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',O), - ( N=[P|_] -> - setarg(4,P,O) - ; - true - ), - 'attach_known/1_1_$special_\\+/1___1'(I,B) - ; - true - ), - known(D), - ( B=suspension(_,active,J,_,_) -> - setarg(2,B,inactive), - 'known/1_1_$special_\\+/1___1__3__0__36'(G,A,B) - ; - true - ) - ; - 'known/1_1_$special_\\+/1___1__3__0__36'(G,A,B) - ). -'known/1_1_$special_\\+/1___1__3'(A,B) :- - 'known/1_1_$special_\\+/1___1__4'(A,B). -'known/1_1_$special_\\+/1___1__4'(_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(3,A,D), - C is D+1, - setarg(3,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,F), - term_variables(F,B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',G), - H=[A|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',H), - ( G=[I|_] -> - setarg(4,I,H) - ; - true - ), - 'attach_known/1_1_$special_\\+/1___1'(B,A) - ; - true - ). -'known/1_1_$special_functor/3'(A,B,C) :- - 'known/1_1_$special_functor/3___3__0'(A,B,C,_). -'known/1_1_$special_functor/3___3__0'(A,B,C,D) :- - ( 'chr newvia'([A,B,C],J) -> - get_attr(J,guard_entailment,K), - K=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,I,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',I) - ), - 'chr sbag_member'(E,I), - E=suspension(_,active,_,_,F,G,H), - F==A, - G==B, - H==C, - !, - ( var(D) -> - true - ; - D=suspension(_,Q,_,_,R,S,T), - setarg(2,D,removed), - ( Q==not_stored_yet -> - L=[] - ; - term_variables(term(R,S,T),L), - arg(4,D,M), - ( var(M) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',N), - N=[_|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',O), - ( O=[P|_] -> - setarg(4,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(4,P,M) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(L,D) - ) - ). -'known/1_1_$special_functor/3___3__0'(_,_,_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,J,K,L), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K,L),D), - arg(4,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(D,A) - ) - ). -'known/1_1_$special_functor/3___3__0'(A,B,C,D) :- - ground(C), - ground(B), - var(A), - nb_getval('$chr_store_global_list_guard_entailment____variables___1',G), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,F), - !, - E=suspension(_,_,_,X), - setarg(2,E,removed), - term_variables(X,J), - arg(3,E,T), - ( var(T) -> - nb_getval('$chr_store_global_list_guard_entailment____variables___1',U), - U=[_|V], - b_setval('$chr_store_global_list_guard_entailment____variables___1',V), - ( V=[W|_] -> - setarg(3,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(3,W,T) - ; - true - ) - ), - detach_variables___1(J,E), - ( var(D) -> - true - ; - D=suspension(_,P,_,_,Q,R,S), - setarg(2,D,removed), - ( P==not_stored_yet -> - K=[] - ; - term_variables(term(Q,R,S),K), - arg(4,D,L), - ( var(L) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',M), - M=[_|N], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',N), - ( N=[O|_] -> - setarg(4,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(4,O,L) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(K,D) - ) - ), - functor(A,B,C), - A=..[_|H], - append(H,F,I), - variables(I). -'known/1_1_$special_functor/3___3__0'(A,B,C,D) :- - nonvar(A), - 'chr lock'(A), - 'chr lock'(B), - 'chr lock'(C), - \+functor(A,B,C), - 'chr unlock'(A), - 'chr unlock'(B), - 'chr unlock'(C), - !, - ( var(D) -> - true - ; - D=suspension(_,J,_,_,K,L,M), - setarg(2,D,removed), - ( J==not_stored_yet -> - E=[] - ; - term_variables(term(K,L,M),E), - arg(4,D,F), - ( var(F) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',G), - G=[_|H], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',H), - ( H=[I|_] -> - setarg(4,I,_) - ; - true - ) - ; - F=[_,_|H], - setarg(2,F,H), - ( H=[I|_] -> - setarg(4,I,F) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(E,D) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_functor/3___3__0'(A,B,C,D) :- - nonvar(C), - nonvar(B), - ( 'chr newvia_1'(A,J) -> - get_attr(J,guard_entailment,K), - K=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,I,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',I) - ), - 'chr sbag_member'(E,I), - E=suspension(_,active,_,_,F,G,H), - F==A, - nonvar(H), - nonvar(G), - !, - E=suspension(_,_,_,_,Z,A1,B1), - setarg(2,E,removed), - term_variables(term(Z,A1,B1),L), - arg(4,E,V), - ( var(V) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',W), - W=[_|X], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',X), - ( X=[Y|_] -> - setarg(4,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(4,Y,V) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(L,E), - ( var(D) -> - true - ; - D=suspension(_,R,_,_,S,T,U), - setarg(2,D,removed), - ( R==not_stored_yet -> - M=[] - ; - term_variables(term(S,T,U),M), - arg(4,D,N), - ( var(N) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',O), - O=[_|P], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',P), - ( P=[Q|_] -> - setarg(4,Q,_) - ; - true - ) - ; - N=[_,_|P], - setarg(2,N,P), - ( P=[Q|_] -> - setarg(4,Q,N) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(M,D) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_functor/3___3__0'(A,B,C,D) :- - ( 'chr newvia'([A,B,C],H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',G) - ), - 'chr sbag_member'(E,G), - E=suspension(_,active,_,_,F), - nonvar(F), - F=functor(J,K,L), - J==A, - K==B, - L==C, - !, - E=suspension(_,_,_,_,A1), - setarg(2,E,removed), - term_variables(A1,M), - arg(4,E,W), - ( var(W) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',X), - X=[_|Y], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',Y), - ( Y=[Z|_] -> - setarg(4,Z,_) - ; - true - ) - ; - W=[_,_|Y], - setarg(2,W,Y), - ( Y=[Z|_] -> - setarg(4,Z,W) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(M,E), - ( var(D) -> - true - ; - D=suspension(_,S,_,_,T,U,V), - setarg(2,D,removed), - ( S==not_stored_yet -> - N=[] - ; - term_variables(term(T,U,V),N), - arg(4,D,O), - ( var(O) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',P), - P=[_|Q], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',Q), - ( Q=[R|_] -> - setarg(4,R,_) - ; - true - ) - ; - O=[_,_|Q], - setarg(2,O,Q), - ( Q=[R|_] -> - setarg(4,R,O) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(N,D) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_functor/3___3__0'(A,B,C,D) :- - ( 'chr newvia'([A,B,C],F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E) - ), - !, - ( var(D) -> - D=suspension(H,not_stored_yet,0,_,A,B,C), - 'chr gen_id'(H) - ; - true - ), - 'known/1_1_$special_functor/3___3__0__0__10'(E,A,B,C,D). -'known/1_1_$special_functor/3___3__0__0__10'([],B,C,D,A) :- - 'known/1_1_$special_functor/3___3__1'(B,C,D,A). -'known/1_1_$special_functor/3___3__0__0__10'([G|L],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - nonvar(E), - E=(\+H), - nonvar(H), - H=functor(I,J,K), - I==A, - J==B, - K==C -> - G=suspension(_,_,_,_,B1,C1), - setarg(2,G,removed), - term_variables(term(B1,C1),M), - arg(4,G,X), - ( var(X) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Y), - Y=[_|Z], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Z), - ( Z=[A1|_] -> - setarg(4,A1,_) - ; - true - ) - ; - X=[_,_|Z], - setarg(2,X,Z), - ( Z=[A1|_] -> - setarg(4,A1,X) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(M,G), - arg(2,D,Q), - setarg(2,D,active), - arg(3,D,P), - O is P+1, - setarg(3,D,O), - ( Q==not_stored_yet -> - D=suspension(_,_,_,_,R,S,T), - term_variables(term(R,S,T),N), - 'chr none_locked'(N), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',U), - V=[D|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',V), - ( U=[W|_] -> - setarg(4,W,V) - ; - true - ), - 'attach_known/1_1_$special_functor/3___3'(N,D) - ; - true - ), - known(F), - ( D=suspension(_,active,O,_,_,_,_) -> - setarg(2,D,inactive), - 'known/1_1_$special_functor/3___3__0__0__10'(L,A,B,C,D) - ; - true - ) - ; - 'known/1_1_$special_functor/3___3__0__0__10'(L,A,B,C,D) - ). -'known/1_1_$special_functor/3___3__0'(A,B,C,D) :- - ( var(D) -> - D=suspension(E,not_stored_yet,0,_,A,B,C), - 'chr gen_id'(E) - ; - true - ), - 'known/1_1_$special_functor/3___3__1'(A,B,C,D). -'known/1_1_$special_functor/3___3__1'(A,B,C,D) :- - ( 'chr newvia'([A,B,C],F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E) - ), - !, - 'known/1_1_$special_functor/3___3__1__0__11'(E,A,B,C,D). -'known/1_1_$special_functor/3___3__1__0__11'([],B,C,D,A) :- - 'known/1_1_$special_functor/3___3__2'(B,C,D,A). -'known/1_1_$special_functor/3___3__1__0__11'([G|M],A,B,C,D) :- - ( G=suspension(_,active,_,_,E,F), - nonvar(E), - E=(H,_), - nonvar(H), - H=(\+I), - nonvar(I), - I=functor(J,K,L), - J==A, - K==B, - L==C -> - G=suspension(_,_,_,_,C1,D1), - setarg(2,G,removed), - term_variables(term(C1,D1),N), - arg(4,G,Y), - ( var(Y) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',Z), - Z=[_|A1], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',A1), - ( A1=[B1|_] -> - setarg(4,B1,_) - ; - true - ) - ; - Y=[_,_|A1], - setarg(2,Y,A1), - ( A1=[B1|_] -> - setarg(4,B1,Y) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(N,G), - arg(2,D,R), - setarg(2,D,active), - arg(3,D,Q), - P is Q+1, - setarg(3,D,P), - ( R==not_stored_yet -> - D=suspension(_,_,_,_,S,T,U), - term_variables(term(S,T,U),O), - 'chr none_locked'(O), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',V), - W=[D|V], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',W), - ( V=[X|_] -> - setarg(4,X,W) - ; - true - ), - 'attach_known/1_1_$special_functor/3___3'(O,D) - ; - true - ), - known(F), - ( D=suspension(_,active,P,_,_,_,_) -> - setarg(2,D,inactive), - 'known/1_1_$special_functor/3___3__1__0__11'(M,A,B,C,D) - ; - true - ) - ; - 'known/1_1_$special_functor/3___3__1__0__11'(M,A,B,C,D) - ). -'known/1_1_$special_functor/3___3__1'(A,B,C,D) :- - 'known/1_1_$special_functor/3___3__2'(A,B,C,D). -'known/1_1_$special_functor/3___3__2'(A,B,C,D) :- - ( 'chr newvia_1'(A,F) -> - get_attr(F,guard_entailment,G), - G=v(_,_,_,E,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E) - ), - !, - 'known/1_1_$special_functor/3___3__2__0__12'(E,A,B,C,D). -'known/1_1_$special_functor/3___3__2__0__12'([],B,C,D,A) :- - 'known/1_1_$special_functor/3___3__3'(B,C,D,A). -'known/1_1_$special_functor/3___3__2__0__12'([F|I],A,B,C,D) :- - ( F=suspension(_,active,_,_,E,_), - nonvar(E), - E=(\+G), - nonvar(G), - G=functor(H,_,_), - H==A -> - F=suspension(_,_,_,_,O,P), - setarg(2,F,removed), - term_variables(term(O,P),J), - arg(4,F,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',M), - ( M=[N|_] -> - setarg(4,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(4,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(J,F), - 'known/1_1_$special_functor/3___3__2__0__12'(I,A,B,C,D) - ; - 'known/1_1_$special_functor/3___3__2__0__12'(I,A,B,C,D) - ). -'known/1_1_$special_functor/3___3__2'(A,B,C,D) :- - 'known/1_1_$special_functor/3___3__3'(A,B,C,D). -'known/1_1_$special_functor/3___3__3'(_,_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(3,A,D), - C is D+1, - setarg(3,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,F,G,H), - term_variables(term(F,G,H),B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',I), - J=[A|I], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',J), - ( I=[K|_] -> - setarg(4,K,J) - ; - true - ), - 'attach_known/1_1_$special_functor/3___3'(B,A) - ; - true - ). -'known/1_1_$special_\\=/2'(A,B) :- - 'known/1_1_$special_\\=/2___2__0'(A,B,_). -'known/1_1_$special_\\=/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - E==A, - F==B, - !, - ( var(C) -> - true - ; - C=suspension(_,O,_,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(5,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(J,C) - ) - ). -'known/1_1_$special_\\=/2___2__0'(_,_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J,K), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(D,A) - ) - ). -'known/1_1_$special_\\=/2___2__0'(A,B,C) :- - ground(B), - ground(A), - 'chr lock'(A), - 'chr lock'(B), - A=B, - 'chr unlock'(A), - 'chr unlock'(B), - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(D,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_\\=/2___2__0'(A,B,C) :- - B==A, - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(D,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_\\=/2___2__0'(A,B,C) :- - nonvar(B), - ( - var(A), - 'chr lock'(B), - functor(B,D,E), - E>0, - 'chr unlock'(B), - !, - ( var(C) -> - true - ; - C=suspension(_,C1,_,_,_,D1,E1), - setarg(2,C,removed), - ( C1==not_stored_yet -> - K=[] - ; - term_variables(term(D1,E1),K), - arg(5,C,Y), - ( var(Y) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',Z), - Z=[_|A1], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',A1), - ( A1=[B1|_] -> - setarg(5,B1,_) - ; - true - ) - ; - Y=[_,_|A1], - setarg(2,Y,A1), - ( A1=[B1|_] -> - setarg(5,B1,Y) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(K,C) - ) - ), - length(F,E), - B=..[D|G], - H=..[D|F], - add_args_nunif(G,F,I), - J=(\+functor(A,D,E);A=H,I), - known(J) - ; - nonvar(A), - 'chr lock'(A), - functor(A,L,M), - 'chr unlock'(A), - !, - ( var(C) -> - true - ; - C=suspension(_,V,_,_,_,W,X), - setarg(2,C,removed), - ( V==not_stored_yet -> - Q=[] - ; - term_variables(term(W,X),Q), - arg(5,C,R), - ( var(R) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',S), - S=[_|T], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',T), - ( T=[U|_] -> - setarg(5,U,_) - ; - true - ) - ; - R=[_,_|T], - setarg(2,R,T), - ( T=[U|_] -> - setarg(5,U,R) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(Q,C) - ) - ), - ( functor(B,L,M) -> - A=..[L|N], - B=..[L|O], - add_args_nunif(N,O,P), - known(P) - ; - true - ) - ). -'known/1_1_$special_\\=/2___2__0'(A,B,C) :- - ( var(C) -> - C=suspension(F,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(F) - ; - true - ), - ( - '$novel_production'(C,182), - !, - '$extend_history'(C,182), - arg(2,C,H), - setarg(2,C,active), - arg(4,C,G), - E is G+1, - setarg(4,C,E), - ( H==not_stored_yet -> - C=suspension(_,_,_,_,_,I,J), - term_variables(term(I,J),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',K), - L=[C|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',L), - ( K=[M|_] -> - setarg(5,M,L) - ; - true - ), - 'attach_known/1_1_$special_\\=/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_\\=/2'(B,A), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_\\=/2___2__1'(A,B,C) - ; - true - ) - ; - 'known/1_1_$special_\\=/2___2__1'(A,B,C) - ). -'known/1_1_$special_\\=/2___2__1'(A,B,C) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - nonvar(E), - E=(I\=J), - I==A, - J==B, - !, - D=suspension(_,_,_,_,X), - setarg(2,D,removed), - term_variables(X,K), - arg(4,D,T), - ( var(T) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',U), - U=[_|V], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V), - ( V=[W|_] -> - setarg(4,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(4,W,T) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(K,D), - ( var(C) -> - true - ; - C=suspension(_,Q,_,_,_,R,S), - setarg(2,C,removed), - ( Q==not_stored_yet -> - L=[] - ; - term_variables(term(R,S),L), - arg(5,C,M), - ( var(M) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',N), - N=[_|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',O), - ( O=[P|_] -> - setarg(5,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(5,P,M) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(L,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_\\=/2___2__1'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_\\=/2___2__1__0__11'(D,A,B,C). -'known/1_1_$special_\\=/2___2__1__0__11'([],B,C,A) :- - 'known/1_1_$special_\\=/2___2__2'(B,C,A). -'known/1_1_$special_\\=/2___2__1__0__11'([F|J],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(\+G), - nonvar(G), - G=(H\=I), - H==A, - I==B -> - F=suspension(_,_,_,_,Y,Z), - setarg(2,F,removed), - term_variables(term(Y,Z),K), - arg(4,F,U), - ( var(U) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V), - V=[_|W], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - ( W=[X|_] -> - setarg(4,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(4,X,U) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(K,F), - arg(2,C,O), - setarg(2,C,active), - arg(4,C,N), - M is N+1, - setarg(4,C,M), - ( O==not_stored_yet -> - C=suspension(_,_,_,_,_,P,Q), - term_variables(term(P,Q),L), - 'chr none_locked'(L), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',R), - S=[C|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',S), - ( R=[T|_] -> - setarg(5,T,S) - ; - true - ), - 'attach_known/1_1_$special_\\=/2___2'(L,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,M,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_\\=/2___2__1__0__11'(J,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_\\=/2___2__1__0__11'(J,A,B,C) - ). -'known/1_1_$special_\\=/2___2__1'(A,B,C) :- - 'known/1_1_$special_\\=/2___2__2'(A,B,C). -'known/1_1_$special_\\=/2___2__2'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_\\=/2___2__2__0__12'(D,A,B,C). -'known/1_1_$special_\\=/2___2__2__0__12'([],B,C,A) :- - 'known/1_1_$special_\\=/2___2__3'(B,C,A). -'known/1_1_$special_\\=/2___2__2__0__12'([F|K],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(G,_), - nonvar(G), - G=(\+H), - nonvar(H), - H=(I\=J), - I==A, - J==B -> - F=suspension(_,_,_,_,Z,A1), - setarg(2,F,removed), - term_variables(term(Z,A1),L), - arg(4,F,V), - ( var(V) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - W=[_|X], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X), - ( X=[Y|_] -> - setarg(4,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(4,Y,V) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,F), - arg(2,C,P), - setarg(2,C,active), - arg(4,C,O), - N is O+1, - setarg(4,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,_,Q,R), - term_variables(term(Q,R),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',S), - T=[C|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',T), - ( S=[U|_] -> - setarg(5,U,T) - ; - true - ), - 'attach_known/1_1_$special_\\=/2___2'(M,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,N,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_\\=/2___2__2__0__12'(K,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_\\=/2___2__2__0__12'(K,A,B,C) - ). -'known/1_1_$special_\\=/2___2__2'(A,B,C) :- - 'known/1_1_$special_\\=/2___2__3'(A,B,C). -'known/1_1_$special_\\=/2___2__3'(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F,G), - term_variables(term(F,G),B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',H), - I=[A|H], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',I), - ( H=[J|_] -> - setarg(5,J,I) - ; - true - ), - 'attach_known/1_1_$special_\\=/2___2'(B,A) - ; - true - ). -'known/1_1_$special_=/2'(A,B) :- - 'known/1_1_$special_=/2___2__0'(A,B,_). -'known/1_1_$special_=/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,E,F), - E==A, - F==B, - !, - ( var(C) -> - true - ; - C=suspension(_,O,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(4,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',M), - ( M=[N|_] -> - setarg(4,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(4,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(J,C) - ) - ). -'known/1_1_$special_=/2___2__0'(_,_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,J,K), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(4,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(D,A) - ) - ). -'known/1_1_$special_=/2___2__0'(A,B,C) :- - B==A, - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(4,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(D,C) - ) - ). -'known/1_1_$special_=/2___2__0'(A,B,C) :- - var(A), - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(4,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(D,C) - ) - ), - A=B. -'known/1_1_$special_=/2___2__0'(A,B,C) :- - var(B), - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(4,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',G), - ( G=[H|_] -> - setarg(4,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(4,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(D,C) - ) - ), - A=B. -'known/1_1_$special_=/2___2__0'(A,B,C) :- - 'chr lock'(A), - functor(A,D,E), - 'chr unlock'(A), - !, - ( var(C) -> - true - ; - C=suspension(_,K,_,_,L,M), - setarg(2,C,removed), - ( K==not_stored_yet -> - F=[] - ; - term_variables(term(L,M),F), - arg(4,C,G), - ( var(G) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',H), - H=[_|I], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',I), - ( I=[J|_] -> - setarg(4,J,_) - ; - true - ) - ; - G=[_,_|I], - setarg(2,G,I), - ( I=[J|_] -> - setarg(4,J,G) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(F,C) - ) - ), - ( functor(B,D,E), - A=B -> - true - ; - 'known/1_1_$special_fail/0' - ). -'known/1_1_$special_=/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - nonvar(E), - E=(I=J), - I==A, - J==B, - !, - D=suspension(_,_,_,_,X), - setarg(2,D,removed), - term_variables(X,K), - arg(4,D,T), - ( var(T) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',U), - U=[_|V], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V), - ( V=[W|_] -> - setarg(4,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(4,W,T) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(K,D), - ( var(C) -> - true - ; - C=suspension(_,Q,_,_,R,S), - setarg(2,C,removed), - ( Q==not_stored_yet -> - L=[] - ; - term_variables(term(R,S),L), - arg(4,C,M), - ( var(M) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',N), - N=[_|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',O), - ( O=[P|_] -> - setarg(4,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(4,P,M) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(L,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_=/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - ( var(C) -> - C=suspension(G,not_stored_yet,0,_,A,B), - 'chr gen_id'(G) - ; - true - ), - 'known/1_1_$special_=/2___2__0__0__10'(D,A,B,C). -'known/1_1_$special_=/2___2__0__0__10'([],B,C,A) :- - 'known/1_1_$special_=/2___2__1'(B,C,A). -'known/1_1_$special_=/2___2__0__0__10'([F|J],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(\+G), - nonvar(G), - G=(H=I), - H==A, - I==B -> - F=suspension(_,_,_,_,Y,Z), - setarg(2,F,removed), - term_variables(term(Y,Z),K), - arg(4,F,U), - ( var(U) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V), - V=[_|W], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - ( W=[X|_] -> - setarg(4,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(4,X,U) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(K,F), - arg(2,C,O), - setarg(2,C,active), - arg(3,C,N), - M is N+1, - setarg(3,C,M), - ( O==not_stored_yet -> - C=suspension(_,_,_,_,P,Q), - term_variables(term(P,Q),L), - 'chr none_locked'(L), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',R), - S=[C|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',S), - ( R=[T|_] -> - setarg(4,T,S) - ; - true - ), - 'attach_known/1_1_$special_=/2___2'(L,C) - ; - true - ), - known(E), - ( C=suspension(_,active,M,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_=/2___2__0__0__10'(J,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_=/2___2__0__0__10'(J,A,B,C) - ). -'known/1_1_$special_=/2___2__0'(A,B,C) :- - ( var(C) -> - C=suspension(D,not_stored_yet,0,_,A,B), - 'chr gen_id'(D) - ; - true - ), - 'known/1_1_$special_=/2___2__1'(A,B,C). -'known/1_1_$special_=/2___2__1'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_=/2___2__1__0__11'(D,A,B,C). -'known/1_1_$special_=/2___2__1__0__11'([],B,C,A) :- - 'known/1_1_$special_=/2___2__2'(B,C,A). -'known/1_1_$special_=/2___2__1__0__11'([F|K],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(G,_), - nonvar(G), - G=(\+H), - nonvar(H), - H=(I=J), - I==A, - J==B -> - F=suspension(_,_,_,_,Z,A1), - setarg(2,F,removed), - term_variables(term(Z,A1),L), - arg(4,F,V), - ( var(V) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - W=[_|X], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X), - ( X=[Y|_] -> - setarg(4,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(4,Y,V) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,F), - arg(2,C,P), - setarg(2,C,active), - arg(3,C,O), - N is O+1, - setarg(3,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,Q,R), - term_variables(term(Q,R),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',S), - T=[C|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',T), - ( S=[U|_] -> - setarg(4,U,T) - ; - true - ), - 'attach_known/1_1_$special_=/2___2'(M,C) - ; - true - ), - known(E), - ( C=suspension(_,active,N,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_=/2___2__1__0__11'(K,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_=/2___2__1__0__11'(K,A,B,C) - ). -'known/1_1_$special_=/2___2__1'(A,B,C) :- - 'known/1_1_$special_=/2___2__2'(A,B,C). -'known/1_1_$special_=/2___2__2'(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(3,A,D), - C is D+1, - setarg(3,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,F,G), - term_variables(term(F,G),B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',H), - I=[A|H], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',I), - ( H=[J|_] -> - setarg(4,J,I) - ; - true - ), - 'attach_known/1_1_$special_=/2___2'(B,A) - ; - true - ). -'known/1_1_$special_,/2'(_,_) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'known/1_1_$special_,/2'(A,B) :- - known(A), - known(B). -'known/1_1_$special_\\==/2'(A,B) :- - 'known/1_1_$special_\\==/2___2__0'(A,B,_). -'known/1_1_$special_\\==/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - E==A, - F==B, - !, - ( var(C) -> - true - ; - C=suspension(_,O,_,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(5,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_\\==/2___2'(J,C) - ) - ). -'known/1_1_$special_\\==/2___2__0'(A,B,C) :- - ( var(C) -> - C=suspension(F,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(F) - ; - true - ), - ( - '$novel_production'(C,138), - number(A), - !, - '$extend_history'(C,138), - arg(2,C,H), - setarg(2,C,active), - arg(4,C,G), - E is G+1, - setarg(4,C,E), - ( H==not_stored_yet -> - C=suspension(_,_,_,_,_,I,J), - term_variables(term(I,J),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',K), - L=[C|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',L), - ( K=[M|_] -> - setarg(5,M,L) - ; - true - ), - 'attach_known/1_1_$special_\\==/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_=\\=/2'(A,B), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_\\==/2___2__1'(A,B,C) - ; - true - ) - ; - 'known/1_1_$special_\\==/2___2__1'(A,B,C) - ). -'known/1_1_$special_\\==/2___2__1'(A,B,C) :- - '$novel_production'(C,139), - number(B), - !, - '$extend_history'(C,139), - arg(2,C,G), - setarg(2,C,active), - arg(4,C,F), - E is F+1, - setarg(4,C,E), - ( G==not_stored_yet -> - C=suspension(_,_,_,_,_,H,I), - term_variables(term(H,I),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',J), - K=[C|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',K), - ( J=[L|_] -> - setarg(5,L,K) - ; - true - ), - 'attach_known/1_1_$special_\\==/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_=\\=/2'(A,B), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_\\==/2___2__2'(A,B,C) - ; - true - ). -'known/1_1_$special_\\==/2___2__1'(A,B,C) :- - 'known/1_1_$special_\\==/2___2__2'(A,B,C). -'known/1_1_$special_\\==/2___2__2'(_,_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J,K), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_\\==/2___2'(D,A) - ) - ). -'known/1_1_$special_\\==/2___2__2'(A,B,C) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - nonvar(E), - E=(I\==J), - I==A, - J==B, - !, - D=suspension(_,_,_,_,X), - setarg(2,D,removed), - term_variables(X,K), - arg(4,D,T), - ( var(T) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',U), - U=[_|V], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V), - ( V=[W|_] -> - setarg(4,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(4,W,T) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(K,D), - ( var(C) -> - true - ; - C=suspension(_,Q,_,_,_,R,S), - setarg(2,C,removed), - ( Q==not_stored_yet -> - L=[] - ; - term_variables(term(R,S),L), - arg(5,C,M), - ( var(M) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',N), - N=[_|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',O), - ( O=[P|_] -> - setarg(5,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(5,P,M) - ; - true - ) - ), - 'detach_known/1_1_$special_\\==/2___2'(L,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_\\==/2___2__2'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - E==A, - F==B, - !, - D=suspension(_,_,_,_,_,W,X), - setarg(2,D,removed), - term_variables(term(W,X),J), - arg(5,D,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',U), - ( U=[V|_] -> - setarg(5,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(5,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_==/2___2'(J,D), - ( var(C) -> - true - ; - C=suspension(_,P,_,_,_,Q,R), - setarg(2,C,removed), - ( P==not_stored_yet -> - K=[] - ; - term_variables(term(Q,R),K), - arg(5,C,L), - ( var(L) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',M), - M=[_|N], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',N), - ( N=[O|_] -> - setarg(5,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(5,O,L) - ; - true - ) - ), - 'detach_known/1_1_$special_\\==/2___2'(K,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_\\==/2___2__2'(A,B,C) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',D) - ), - !, - 'known/1_1_$special_\\==/2___2__2__0__9'(D,A,B,C). -'known/1_1_$special_\\==/2___2__2__0__9'([],B,C,A) :- - 'known/1_1_$special_\\==/2___2__3'(B,C,A). -'known/1_1_$special_\\==/2___2__2__0__9'([F|G],B,C,A) :- - ( F=suspension(_,active,_,_,_,D,E), - E==B, - J=t(229,F,A), - '$novel_production'(F,J), - '$novel_production'(A,J) -> - '$extend_history'(A,J), - arg(2,A,L), - setarg(2,A,active), - arg(4,A,K), - I is K+1, - setarg(4,A,I), - ( L==not_stored_yet -> - A=suspension(_,_,_,_,_,M,N), - term_variables(term(M,N),H), - 'chr none_locked'(H), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',O), - P=[A|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_\\==/2___2'(H,A) - ; - true - ), - 'known/1_1_$special_\\==/2'(D,C), - ( A=suspension(_,active,_,I,_,_,_) -> - setarg(2,A,inactive), - 'known/1_1_$special_\\==/2___2__2__0__9'(G,B,C,A) - ; - true - ) - ; - 'known/1_1_$special_\\==/2___2__2__0__9'(G,B,C,A) - ). -'known/1_1_$special_\\==/2___2__2'(A,B,C) :- - 'known/1_1_$special_\\==/2___2__3'(A,B,C). -'known/1_1_$special_\\==/2___2__3'(A,B,C) :- - '$novel_production'(C,231), - !, - '$extend_history'(C,231), - arg(2,C,G), - setarg(2,C,active), - arg(4,C,F), - E is F+1, - setarg(4,C,E), - ( G==not_stored_yet -> - C=suspension(_,_,_,_,_,H,I), - term_variables(term(H,I),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',J), - K=[C|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',K), - ( J=[L|_] -> - setarg(5,L,K) - ; - true - ), - 'attach_known/1_1_$special_\\==/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_\\==/2'(B,A), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_\\==/2___2__4'(A,B,C) - ; - true - ). -'known/1_1_$special_\\==/2___2__3'(A,B,C) :- - 'known/1_1_$special_\\==/2___2__4'(A,B,C). -'known/1_1_$special_\\==/2___2__4'(A,B,C) :- - B==A, - '$novel_production'(C,232), - !, - '$extend_history'(C,232), - arg(2,C,G), - setarg(2,C,active), - arg(4,C,F), - E is F+1, - setarg(4,C,E), - ( G==not_stored_yet -> - C=suspension(_,_,_,_,_,H,I), - term_variables(term(H,I),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',J), - K=[C|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',K), - ( J=[L|_] -> - setarg(5,L,K) - ; - true - ), - 'attach_known/1_1_$special_\\==/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_fail/0', - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_\\==/2___2__5'(A,B,C) - ; - true - ). -'known/1_1_$special_\\==/2___2__4'(A,B,C) :- - 'known/1_1_$special_\\==/2___2__5'(A,B,C). -'known/1_1_$special_\\==/2___2__5'(A,B,C) :- - nonvar(B), - nonvar(A), - 'chr lock'(A), - functor(A,D,E), - 'chr unlock'(A), - !, - ( var(C) -> - true - ; - C=suspension(_,N,_,_,_,O,P), - setarg(2,C,removed), - ( N==not_stored_yet -> - I=[] - ; - term_variables(term(O,P),I), - arg(5,C,J), - ( var(J) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',K), - K=[_|L], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',L), - ( L=[M|_] -> - setarg(5,M,_) - ; - true - ) - ; - J=[_,_|L], - setarg(2,J,L), - ( L=[M|_] -> - setarg(5,M,J) - ; - true - ) - ), - 'detach_known/1_1_$special_\\==/2___2'(I,C) - ) - ), - ( functor(B,D,E) -> - A=..[D|F], - B=..[D|G], - add_args_nmatch(F,G,H), - known(H) - ; - true - ). -'known/1_1_$special_\\==/2___2__5'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_\\==/2___2__5__0__13'(D,A,B,C). -'known/1_1_$special_\\==/2___2__5__0__13'([],B,C,A) :- - 'known/1_1_$special_\\==/2___2__6'(B,C,A). -'known/1_1_$special_\\==/2___2__5__0__13'([F|J],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(\+G), - nonvar(G), - G=(H\==I), - H==A, - I==B -> - F=suspension(_,_,_,_,Y,Z), - setarg(2,F,removed), - term_variables(term(Y,Z),K), - arg(4,F,U), - ( var(U) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V), - V=[_|W], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - ( W=[X|_] -> - setarg(4,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(4,X,U) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(K,F), - arg(2,C,O), - setarg(2,C,active), - arg(4,C,N), - M is N+1, - setarg(4,C,M), - ( O==not_stored_yet -> - C=suspension(_,_,_,_,_,P,Q), - term_variables(term(P,Q),L), - 'chr none_locked'(L), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',R), - S=[C|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',S), - ( R=[T|_] -> - setarg(5,T,S) - ; - true - ), - 'attach_known/1_1_$special_\\==/2___2'(L,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,M,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_\\==/2___2__5__0__13'(J,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_\\==/2___2__5__0__13'(J,A,B,C) - ). -'known/1_1_$special_\\==/2___2__5'(A,B,C) :- - 'known/1_1_$special_\\==/2___2__6'(A,B,C). -'known/1_1_$special_\\==/2___2__6'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_\\==/2___2__6__0__14'(D,A,B,C). -'known/1_1_$special_\\==/2___2__6__0__14'([],B,C,A) :- - 'known/1_1_$special_\\==/2___2__7'(B,C,A). -'known/1_1_$special_\\==/2___2__6__0__14'([F|K],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(G,_), - nonvar(G), - G=(\+H), - nonvar(H), - H=(I\==J), - I==A, - J==B -> - F=suspension(_,_,_,_,Z,A1), - setarg(2,F,removed), - term_variables(term(Z,A1),L), - arg(4,F,V), - ( var(V) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - W=[_|X], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X), - ( X=[Y|_] -> - setarg(4,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(4,Y,V) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,F), - arg(2,C,P), - setarg(2,C,active), - arg(4,C,O), - N is O+1, - setarg(4,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,_,Q,R), - term_variables(term(Q,R),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',S), - T=[C|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',T), - ( S=[U|_] -> - setarg(5,U,T) - ; - true - ), - 'attach_known/1_1_$special_\\==/2___2'(M,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,N,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_\\==/2___2__6__0__14'(K,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_\\==/2___2__6__0__14'(K,A,B,C) - ). -'known/1_1_$special_\\==/2___2__6'(A,B,C) :- - 'known/1_1_$special_\\==/2___2__7'(A,B,C). -'known/1_1_$special_\\==/2___2__7'(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F,G), - term_variables(term(F,G),B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',H), - I=[A|H], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',I), - ( H=[J|_] -> - setarg(5,J,I) - ; - true - ), - 'attach_known/1_1_$special_\\==/2___2'(B,A) - ; - true - ). -'known/1_1_$special_==/2'(A,B) :- - 'known/1_1_$special_==/2___2__0'(A,B,_). -'known/1_1_$special_==/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - E==A, - F==B, - !, - ( var(C) -> - true - ; - C=suspension(_,O,_,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(5,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_==/2___2'(J,C) - ) - ). -'known/1_1_$special_==/2___2__0'(A,B,C) :- - ( var(C) -> - C=suspension(F,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(F) - ; - true - ), - ( - '$novel_production'(C,136), - number(A), - !, - '$extend_history'(C,136), - arg(2,C,H), - setarg(2,C,active), - arg(4,C,G), - E is G+1, - setarg(4,C,E), - ( H==not_stored_yet -> - C=suspension(_,_,_,_,_,I,J), - term_variables(term(I,J),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',K), - L=[C|K], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',L), - ( K=[M|_] -> - setarg(5,M,L) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_=:=/2'(A,B), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_==/2___2__1'(A,B,C) - ; - true - ) - ; - 'known/1_1_$special_==/2___2__1'(A,B,C) - ). -'known/1_1_$special_==/2___2__1'(A,B,C) :- - '$novel_production'(C,137), - number(B), - !, - '$extend_history'(C,137), - arg(2,C,G), - setarg(2,C,active), - arg(4,C,F), - E is F+1, - setarg(4,C,E), - ( G==not_stored_yet -> - C=suspension(_,_,_,_,_,H,I), - term_variables(term(H,I),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',J), - K=[C|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',K), - ( J=[L|_] -> - setarg(5,L,K) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_=:=/2'(A,B), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_==/2___2__2'(A,B,C) - ; - true - ). -'known/1_1_$special_==/2___2__1'(A,B,C) :- - 'known/1_1_$special_==/2___2__2'(A,B,C). -'known/1_1_$special_==/2___2__2'(_,_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J,K), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_==/2___2'(D,A) - ) - ). -'known/1_1_$special_==/2___2__2'(A,B,C) :- - B==A, - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_==/2___2'(D,C) - ) - ). -'known/1_1_$special_==/2___2__2'(A,B,C) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - nonvar(E), - E=(I==J), - I==A, - J==B, - !, - D=suspension(_,_,_,_,X), - setarg(2,D,removed), - term_variables(X,K), - arg(4,D,T), - ( var(T) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',U), - U=[_|V], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V), - ( V=[W|_] -> - setarg(4,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(4,W,T) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(K,D), - ( var(C) -> - true - ; - C=suspension(_,Q,_,_,_,R,S), - setarg(2,C,removed), - ( Q==not_stored_yet -> - L=[] - ; - term_variables(term(R,S),L), - arg(5,C,M), - ( var(M) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',N), - N=[_|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',O), - ( O=[P|_] -> - setarg(5,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(5,P,M) - ; - true - ) - ), - 'detach_known/1_1_$special_==/2___2'(L,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_==/2___2__2'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - E==A, - F==B, - !, - D=suspension(_,_,_,_,_,W,X), - setarg(2,D,removed), - term_variables(term(W,X),J), - arg(5,D,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',U), - ( U=[V|_] -> - setarg(5,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(5,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_\\==/2___2'(J,D), - ( var(C) -> - true - ; - C=suspension(_,P,_,_,_,Q,R), - setarg(2,C,removed), - ( P==not_stored_yet -> - K=[] - ; - term_variables(term(Q,R),K), - arg(5,C,L), - ( var(L) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',M), - M=[_|N], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',N), - ( N=[O|_] -> - setarg(5,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(5,O,L) - ; - true - ) - ), - 'detach_known/1_1_$special_==/2___2'(K,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_==/2___2__2'(A,B,C) :- - ( 'chr newvia_1'(B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',D) - ), - !, - 'known/1_1_$special_==/2___2__2__0__10'(D,A,B,C). -'known/1_1_$special_==/2___2__2__0__10'([],B,C,A) :- - 'known/1_1_$special_==/2___2__3'(B,C,A). -'known/1_1_$special_==/2___2__2__0__10'([F|G],B,C,A) :- - ( F=suspension(_,active,_,_,_,D,E), - D==C, - J=t(228,A,F), - '$novel_production'(A,J), - '$novel_production'(F,J) -> - '$extend_history'(A,J), - arg(2,A,L), - setarg(2,A,active), - arg(4,A,K), - I is K+1, - setarg(4,A,I), - ( L==not_stored_yet -> - A=suspension(_,_,_,_,_,M,N), - term_variables(term(M,N),H), - 'chr none_locked'(H), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',O), - P=[A|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(H,A) - ; - true - ), - 'known/1_1_$special_==/2'(B,E), - ( A=suspension(_,active,_,I,_,_,_) -> - setarg(2,A,inactive), - 'known/1_1_$special_==/2___2__2__0__10'(G,B,C,A) - ; - true - ) - ; - 'known/1_1_$special_==/2___2__2__0__10'(G,B,C,A) - ). -'known/1_1_$special_==/2___2__2'(A,B,C) :- - 'known/1_1_$special_==/2___2__3'(A,B,C). -'known/1_1_$special_==/2___2__3'(A,B,C) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',D) - ), - !, - 'known/1_1_$special_==/2___2__3__0__11'(D,A,B,C). -'known/1_1_$special_==/2___2__3__0__11'([],B,C,A) :- - 'known/1_1_$special_==/2___2__4'(B,C,A). -'known/1_1_$special_==/2___2__3__0__11'([F|G],B,C,A) :- - ( F=suspension(_,active,_,_,_,D,E), - E==B, - J=t(228,F,A), - '$novel_production'(F,J), - '$novel_production'(A,J) -> - '$extend_history'(A,J), - arg(2,A,L), - setarg(2,A,active), - arg(4,A,K), - I is K+1, - setarg(4,A,I), - ( L==not_stored_yet -> - A=suspension(_,_,_,_,_,M,N), - term_variables(term(M,N),H), - 'chr none_locked'(H), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',O), - P=[A|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(H,A) - ; - true - ), - 'known/1_1_$special_==/2'(D,C), - ( A=suspension(_,active,_,I,_,_,_) -> - setarg(2,A,inactive), - 'known/1_1_$special_==/2___2__3__0__11'(G,B,C,A) - ; - true - ) - ; - 'known/1_1_$special_==/2___2__3__0__11'(G,B,C,A) - ). -'known/1_1_$special_==/2___2__3'(A,B,C) :- - 'known/1_1_$special_==/2___2__4'(A,B,C). -'known/1_1_$special_==/2___2__4'(A,B,C) :- - ( 'chr newvia_1'(B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',D) - ), - !, - 'known/1_1_$special_==/2___2__4__0__12'(D,A,B,C). -'known/1_1_$special_==/2___2__4__0__12'([],B,C,A) :- - 'known/1_1_$special_==/2___2__5'(B,C,A). -'known/1_1_$special_==/2___2__4__0__12'([F|G],B,C,A) :- - ( F=suspension(_,active,_,_,_,D,E), - D==C, - J=t(229,A,F), - '$novel_production'(A,J), - '$novel_production'(F,J) -> - '$extend_history'(A,J), - arg(2,A,L), - setarg(2,A,active), - arg(4,A,K), - I is K+1, - setarg(4,A,I), - ( L==not_stored_yet -> - A=suspension(_,_,_,_,_,M,N), - term_variables(term(M,N),H), - 'chr none_locked'(H), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',O), - P=[A|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(H,A) - ; - true - ), - 'known/1_1_$special_\\==/2'(B,E), - ( A=suspension(_,active,_,I,_,_,_) -> - setarg(2,A,inactive), - 'known/1_1_$special_==/2___2__4__0__12'(G,B,C,A) - ; - true - ) - ; - 'known/1_1_$special_==/2___2__4__0__12'(G,B,C,A) - ). -'known/1_1_$special_==/2___2__4'(A,B,C) :- - 'known/1_1_$special_==/2___2__5'(A,B,C). -'known/1_1_$special_==/2___2__5'(A,B,C) :- - '$novel_production'(C,230), - !, - '$extend_history'(C,230), - arg(2,C,G), - setarg(2,C,active), - arg(4,C,F), - E is F+1, - setarg(4,C,E), - ( G==not_stored_yet -> - C=suspension(_,_,_,_,_,H,I), - term_variables(term(H,I),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',J), - K=[C|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',K), - ( J=[L|_] -> - setarg(5,L,K) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_==/2'(B,A), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_==/2___2__6'(A,B,C) - ; - true - ). -'known/1_1_$special_==/2___2__5'(A,B,C) :- - 'known/1_1_$special_==/2___2__6'(A,B,C). -'known/1_1_$special_==/2___2__6'(A,B,C) :- - '$novel_production'(C,234), - !, - '$extend_history'(C,234), - arg(2,C,G), - setarg(2,C,active), - arg(4,C,F), - E is F+1, - setarg(4,C,E), - ( G==not_stored_yet -> - C=suspension(_,_,_,_,_,H,I), - term_variables(term(H,I),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',J), - K=[C|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',K), - ( J=[L|_] -> - setarg(5,L,K) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_=/2'(A,B), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_==/2___2__7'(A,B,C) - ; - true - ). -'known/1_1_$special_==/2___2__6'(A,B,C) :- - 'known/1_1_$special_==/2___2__7'(A,B,C). -'known/1_1_$special_==/2___2__7'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_==/2___2__7__0__15'(D,A,B,C). -'known/1_1_$special_==/2___2__7__0__15'([],B,C,A) :- - 'known/1_1_$special_==/2___2__8'(B,C,A). -'known/1_1_$special_==/2___2__7__0__15'([F|J],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(\+G), - nonvar(G), - G=(H==I), - H==A, - I==B -> - F=suspension(_,_,_,_,Y,Z), - setarg(2,F,removed), - term_variables(term(Y,Z),K), - arg(4,F,U), - ( var(U) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V), - V=[_|W], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - ( W=[X|_] -> - setarg(4,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(4,X,U) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(K,F), - arg(2,C,O), - setarg(2,C,active), - arg(4,C,N), - M is N+1, - setarg(4,C,M), - ( O==not_stored_yet -> - C=suspension(_,_,_,_,_,P,Q), - term_variables(term(P,Q),L), - 'chr none_locked'(L), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',R), - S=[C|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',S), - ( R=[T|_] -> - setarg(5,T,S) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(L,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,M,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_==/2___2__7__0__15'(J,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_==/2___2__7__0__15'(J,A,B,C) - ). -'known/1_1_$special_==/2___2__7'(A,B,C) :- - 'known/1_1_$special_==/2___2__8'(A,B,C). -'known/1_1_$special_==/2___2__8'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_==/2___2__8__0__16'(D,A,B,C). -'known/1_1_$special_==/2___2__8__0__16'([],B,C,A) :- - 'known/1_1_$special_==/2___2__9'(B,C,A). -'known/1_1_$special_==/2___2__8__0__16'([F|K],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(G,_), - nonvar(G), - G=(\+H), - nonvar(H), - H=(I==J), - I==A, - J==B -> - F=suspension(_,_,_,_,Z,A1), - setarg(2,F,removed), - term_variables(term(Z,A1),L), - arg(4,F,V), - ( var(V) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - W=[_|X], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X), - ( X=[Y|_] -> - setarg(4,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(4,Y,V) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,F), - arg(2,C,P), - setarg(2,C,active), - arg(4,C,O), - N is O+1, - setarg(4,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,_,Q,R), - term_variables(term(Q,R),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',S), - T=[C|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',T), - ( S=[U|_] -> - setarg(5,U,T) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(M,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,N,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_==/2___2__8__0__16'(K,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_==/2___2__8__0__16'(K,A,B,C) - ). -'known/1_1_$special_==/2___2__8'(A,B,C) :- - 'known/1_1_$special_==/2___2__9'(A,B,C). -'known/1_1_$special_==/2___2__9'(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F,G), - term_variables(term(F,G),B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',H), - I=[A|H], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',I), - ( H=[J|_] -> - setarg(5,J,I) - ; - true - ), - 'attach_known/1_1_$special_==/2___2'(B,A) - ; - true - ). -'known/1_1_$special_is/2'(A,B) :- - 'known/1_1_$special_=:=/2'(A,B). -'known/1_1_$special_=/2'(A,B) :- - 'known/1_1_$special_=/2'(A,B) :- - 'known/1_1_$special_ - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - true - ; - C=suspension(_,O,_,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(5,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_= - true - ; - A=suspension(_,I,_,_,_,J,K), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_= - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=B, - !, - ( var(C) -> - true - ; - C=suspension(_,W,_,_,_,X,Y), - setarg(2,C,removed), - ( W==not_stored_yet -> - D=[] - ; - term_variables(term(X,Y),D), - arg(5,C,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(5,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_= - get_attr(I,guard_entailment,J), - J=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,H,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - true - ; - C=suspension(_,P,_,_,_,Q,R), - setarg(2,C,removed), - ( P==not_stored_yet -> - K=[] - ; - term_variables(term(Q,R),K), - arg(5,C,L), - ( var(L) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(5,O,L) - ; - true - ) - ), - 'detach_known/1_1_$special_= - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - F=suspension(_,_,_,_,_,M,N), - setarg(2,F,removed), - term_variables(term(M,N),H), - arg(5,F,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_= - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - true - ; - C=suspension(_,O,_,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(5,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_= - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - F=suspension(_,_,_,_,_,M,N), - setarg(2,F,removed), - term_variables(term(M,N),H), - arg(5,F,I), - ( var(I) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,L,_) - ; - true - ) - ; - I=[_,_|K], - setarg(2,I,K), - ( K=[L|_] -> - setarg(5,L,I) - ; - true - ) - ), - 'detach_known/1_1_$special_= - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(5,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_= - true - ; - C=suspension(_,P,_,_,_,Q,R), - setarg(2,C,removed), - ( P==not_stored_yet -> - K=[] - ; - term_variables(term(Q,R),K), - arg(5,C,L), - ( var(L) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(5,O,L) - ; - true - ) - ), - 'detach_known/1_1_$special_= - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - C=suspension(G,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(G) - ; - true - ), - 'known/1_1_$special_= - '$extend_history'(A,J), - arg(2,A,L), - setarg(2,A,active), - arg(4,A,K), - I is K+1, - setarg(4,A,I), - ( L==not_stored_yet -> - A=suspension(_,_,_,_,_,M,N), - term_variables(term(M,N),H), - 'chr none_locked'(H), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_= - setarg(2,A,inactive), - 'known/1_1_$special_= - C=suspension(D,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(D) - ; - true - ), - 'known/1_1_$special_= - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - '$extend_history'(A,J), - arg(2,A,L), - setarg(2,A,active), - arg(4,A,K), - I is K+1, - setarg(4,A,I), - ( L==not_stored_yet -> - A=suspension(_,_,_,_,_,M,N), - term_variables(term(M,N),H), - 'chr none_locked'(H), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_= - setarg(2,A,inactive), - 'known/1_1_$special_= - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,D,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',D) - ), - !, - 'known/1_1_$special_= - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - 'known/1_1_$special_= - get_attr(K,guard_entailment,L), - L=v(_,_,_,_,_,_,_,_,_,_,_,_,_,J,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',J) - ) -> - 'known/1_1_$special_= - '$extend_history'(E,O), - arg(2,E,Q), - setarg(2,E,active), - arg(4,E,P), - N is P+1, - setarg(4,E,N), - ( Q==not_stored_yet -> - E=suspension(_,_,_,_,_,R,S), - term_variables(term(R,S),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,V,U) - ; - true - ), - 'attach_known/1_1_$special_= - setarg(2,E,inactive), - 'known/1_1_$special_= - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',G) - ) -> - 'known/1_1_$special_= - get_attr(K,guard_entailment,L), - L=v(_,_,_,_,_,_,_,_,_,_,_,_,_,J,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',J) - ) -> - 'known/1_1_$special_= - '$extend_history'(E,O), - arg(2,E,Q), - setarg(2,E,active), - arg(4,E,P), - N is P+1, - setarg(4,E,N), - ( Q==not_stored_yet -> - E=suspension(_,_,_,_,_,R,S), - term_variables(term(R,S),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,V,U) - ; - true - ), - 'attach_known/1_1_$special_= - setarg(2,E,inactive), - 'known/1_1_$special_= - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - nonvar(E), - E=(I= - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',U), - U=[_|V], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V), - ( V=[W|_] -> - setarg(4,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(4,W,T) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(K,D), - ( var(C) -> - true - ; - C=suspension(_,Q,_,_,_,R,S), - setarg(2,C,removed), - ( Q==not_stored_yet -> - L=[] - ; - term_variables(term(R,S),L), - arg(5,C,M), - ( var(M) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(5,P,M) - ; - true - ) - ), - 'detach_known/1_1_$special_= - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_= - F=suspension(_,_,_,_,Y,Z), - setarg(2,F,removed), - term_variables(term(Y,Z),K), - arg(4,F,U), - ( var(U) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V), - V=[_|W], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - ( W=[X|_] -> - setarg(4,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(4,X,U) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(K,F), - arg(2,C,O), - setarg(2,C,active), - arg(4,C,N), - M is N+1, - setarg(4,C,M), - ( O==not_stored_yet -> - C=suspension(_,_,_,_,_,P,Q), - term_variables(term(P,Q),L), - 'chr none_locked'(L), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,T,S) - ; - true - ), - 'attach_known/1_1_$special_= - setarg(2,C,inactive), - 'known/1_1_$special_= - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_= - F=suspension(_,_,_,_,Z,A1), - setarg(2,F,removed), - term_variables(term(Z,A1),L), - arg(4,F,V), - ( var(V) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - W=[_|X], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X), - ( X=[Y|_] -> - setarg(4,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(4,Y,V) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,F), - arg(2,C,P), - setarg(2,C,active), - arg(4,C,O), - N is O+1, - setarg(4,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,_,Q,R), - term_variables(term(Q,R),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,U,T) - ; - true - ), - 'attach_known/1_1_$special_= - setarg(2,C,inactive), - 'known/1_1_$special_= - A=suspension(_,_,_,_,_,F,G), - term_variables(term(F,G),B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,J,I) - ; - true - ), - 'attach_known/1_1_$special_= - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,G) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - E==A, - F==B, - !, - ( var(C) -> - true - ; - C=suspension(_,O,_,_,_,P,Q), - setarg(2,C,removed), - ( O==not_stored_yet -> - J=[] - ; - term_variables(term(P,Q),J), - arg(5,C,K), - ( var(K) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',L), - L=[_|M], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',M), - ( M=[N|_] -> - setarg(5,N,_) - ; - true - ) - ; - K=[_,_|M], - setarg(2,K,M), - ( M=[N|_] -> - setarg(5,N,K) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(J,C) - ) - ). -'known/1_1_$special_=:=/2___2__0'(_,_,A) :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - 'chr sbag_member'(B,C), - B=suspension(_,active,_), - !, - ( var(A) -> - true - ; - A=suspension(_,I,_,_,_,J,K), - setarg(2,A,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,A,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(D,A) - ) - ). -'known/1_1_$special_=:=/2___2__0'(A,B,C) :- - B==A, - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(D,C) - ) - ). -'known/1_1_$special_=:=/2___2__0'(A,B,C) :- - number(B), - number(A), - A=\=B, - !, - ( var(C) -> - true - ; - C=suspension(_,I,_,_,_,J,K), - setarg(2,C,removed), - ( I==not_stored_yet -> - D=[] - ; - term_variables(term(J,K),D), - arg(5,C,E), - ( var(E) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',F), - F=[_|G], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',G), - ( G=[H|_] -> - setarg(5,H,_) - ; - true - ) - ; - E=[_,_|G], - setarg(2,E,G), - ( G=[H|_] -> - setarg(5,H,E) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(D,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_=:=/2___2__0'(A,B,C) :- - ( 'chr newvia_2'(A,B,H) -> - get_attr(H,guard_entailment,I), - I=v(_,_,_,_,_,_,_,_,_,_,_,_,_,G,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',G) - ), - 'chr sbag_member'(D,G), - D=suspension(_,active,_,_,_,E,F), - E==A, - F==B, - !, - D=suspension(_,_,_,_,_,W,X), - setarg(2,D,removed), - term_variables(term(W,X),J), - arg(5,D,S), - ( var(S) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',T), - T=[_|U], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',U), - ( U=[V|_] -> - setarg(5,V,_) - ; - true - ) - ; - S=[_,_|U], - setarg(2,S,U), - ( U=[V|_] -> - setarg(5,V,S) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(J,D), - ( var(C) -> - true - ; - C=suspension(_,P,_,_,_,Q,R), - setarg(2,C,removed), - ( P==not_stored_yet -> - K=[] - ; - term_variables(term(Q,R),K), - arg(5,C,L), - ( var(L) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',M), - M=[_|N], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',N), - ( N=[O|_] -> - setarg(5,O,_) - ; - true - ) - ; - L=[_,_|N], - setarg(2,L,N), - ( N=[O|_] -> - setarg(5,O,L) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(K,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_=:=/2___2__0'(A,B,C) :- - ( 'chr newvia_1'(B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',D) - ), - !, - ( var(C) -> - C=suspension(G,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(G) - ; - true - ), - 'known/1_1_$special_=:=/2___2__0__0__11'(D,A,B,C). -'known/1_1_$special_=:=/2___2__0__0__11'([],B,C,A) :- - 'known/1_1_$special_=:=/2___2__1'(B,C,A). -'known/1_1_$special_=:=/2___2__0__0__11'([F|G],B,C,A) :- - ( F=suspension(_,active,_,_,_,D,E), - D==C, - J=t(193,A,F), - '$novel_production'(A,J), - '$novel_production'(F,J), - B\==E -> - '$extend_history'(A,J), - arg(2,A,L), - setarg(2,A,active), - arg(4,A,K), - I is K+1, - setarg(4,A,I), - ( L==not_stored_yet -> - A=suspension(_,_,_,_,_,M,N), - term_variables(term(M,N),H), - 'chr none_locked'(H), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',O), - P=[A|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_=:=/2___2'(H,A) - ; - true - ), - 'known/1_1_$special_=:=/2'(B,E), - ( A=suspension(_,active,_,I,_,_,_) -> - setarg(2,A,inactive), - 'known/1_1_$special_=:=/2___2__0__0__11'(G,B,C,A) - ; - true - ) - ; - 'known/1_1_$special_=:=/2___2__0__0__11'(G,B,C,A) - ). -'known/1_1_$special_=:=/2___2__0'(A,B,C) :- - ( var(C) -> - C=suspension(D,not_stored_yet,t,0,_,A,B), - 'chr gen_id'(D) - ; - true - ), - 'known/1_1_$special_=:=/2___2__1'(A,B,C). -'known/1_1_$special_=:=/2___2__1'(A,B,C) :- - ( 'chr newvia_1'(A,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,D) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',D) - ), - !, - 'known/1_1_$special_=:=/2___2__1__0__12'(D,A,B,C). -'known/1_1_$special_=:=/2___2__1__0__12'([],B,C,A) :- - 'known/1_1_$special_=:=/2___2__2'(B,C,A). -'known/1_1_$special_=:=/2___2__1__0__12'([F|G],B,C,A) :- - ( F=suspension(_,active,_,_,_,D,E), - E==B, - J=t(193,F,A), - '$novel_production'(F,J), - '$novel_production'(A,J), - D\==C -> - '$extend_history'(A,J), - arg(2,A,L), - setarg(2,A,active), - arg(4,A,K), - I is K+1, - setarg(4,A,I), - ( L==not_stored_yet -> - A=suspension(_,_,_,_,_,M,N), - term_variables(term(M,N),H), - 'chr none_locked'(H), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',O), - P=[A|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',P), - ( O=[Q|_] -> - setarg(5,Q,P) - ; - true - ), - 'attach_known/1_1_$special_=:=/2___2'(H,A) - ; - true - ), - 'known/1_1_$special_=:=/2'(D,C), - ( A=suspension(_,active,_,I,_,_,_) -> - setarg(2,A,inactive), - 'known/1_1_$special_=:=/2___2__1__0__12'(G,B,C,A) - ; - true - ) - ; - 'known/1_1_$special_=:=/2___2__1__0__12'(G,B,C,A) - ). -'known/1_1_$special_=:=/2___2__1'(A,B,C) :- - 'known/1_1_$special_=:=/2___2__2'(A,B,C). -'known/1_1_$special_=:=/2___2__2'(A,B,C) :- - '$novel_production'(C,194), - !, - '$extend_history'(C,194), - arg(2,C,G), - setarg(2,C,active), - arg(4,C,F), - E is F+1, - setarg(4,C,E), - ( G==not_stored_yet -> - C=suspension(_,_,_,_,_,H,I), - term_variables(term(H,I),D), - 'chr none_locked'(D), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',J), - K=[C|J], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',K), - ( J=[L|_] -> - setarg(5,L,K) - ; - true - ), - 'attach_known/1_1_$special_=:=/2___2'(D,C) - ; - true - ), - 'known/1_1_$special_=:=/2'(B,A), - ( C=suspension(_,active,_,E,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_=:=/2___2__3'(A,B,C) - ; - true - ). -'known/1_1_$special_=:=/2___2__2'(A,B,C) :- - 'known/1_1_$special_=:=/2___2__3'(A,B,C). -'known/1_1_$special_=:=/2___2__3'(A,B,C) :- - ( 'chr newvia_2'(A,B,G) -> - get_attr(G,guard_entailment,H), - H=v(_,_,_,_,_,_,_,_,_,_,_,_,_,_,F,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F) - ), - 'chr sbag_member'(D,F), - D=suspension(_,active,_,_,E), - nonvar(E), - E=(I=:=J), - I==A, - J==B, - !, - D=suspension(_,_,_,_,X), - setarg(2,D,removed), - term_variables(X,K), - arg(4,D,T), - ( var(T) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',U), - U=[_|V], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',V), - ( V=[W|_] -> - setarg(4,W,_) - ; - true - ) - ; - T=[_,_|V], - setarg(2,T,V), - ( V=[W|_] -> - setarg(4,W,T) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(K,D), - ( var(C) -> - true - ; - C=suspension(_,Q,_,_,_,R,S), - setarg(2,C,removed), - ( Q==not_stored_yet -> - L=[] - ; - term_variables(term(R,S),L), - arg(5,C,M), - ( var(M) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',N), - N=[_|O], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',O), - ( O=[P|_] -> - setarg(5,P,_) - ; - true - ) - ; - M=[_,_|O], - setarg(2,M,O), - ( O=[P|_] -> - setarg(5,P,M) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(L,C) - ) - ), - 'known/1_1_$special_fail/0'. -'known/1_1_$special_=:=/2___2__3'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_=:=/2___2__3__0__15'(D,A,B,C). -'known/1_1_$special_=:=/2___2__3__0__15'([],B,C,A) :- - 'known/1_1_$special_=:=/2___2__4'(B,C,A). -'known/1_1_$special_=:=/2___2__3__0__15'([F|J],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(\+G), - nonvar(G), - G=(H=:=I), - H==A, - I==B -> - F=suspension(_,_,_,_,Y,Z), - setarg(2,F,removed), - term_variables(term(Y,Z),K), - arg(4,F,U), - ( var(U) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',V), - V=[_|W], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - ( W=[X|_] -> - setarg(4,X,_) - ; - true - ) - ; - U=[_,_|W], - setarg(2,U,W), - ( W=[X|_] -> - setarg(4,X,U) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(K,F), - arg(2,C,O), - setarg(2,C,active), - arg(4,C,N), - M is N+1, - setarg(4,C,M), - ( O==not_stored_yet -> - C=suspension(_,_,_,_,_,P,Q), - term_variables(term(P,Q),L), - 'chr none_locked'(L), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',R), - S=[C|R], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',S), - ( R=[T|_] -> - setarg(5,T,S) - ; - true - ), - 'attach_known/1_1_$special_=:=/2___2'(L,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,M,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_=:=/2___2__3__0__15'(J,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_=:=/2___2__3__0__15'(J,A,B,C) - ). -'known/1_1_$special_=:=/2___2__3'(A,B,C) :- - 'known/1_1_$special_=:=/2___2__4'(A,B,C). -'known/1_1_$special_=:=/2___2__4'(A,B,C) :- - ( 'chr newvia_2'(A,B,E) -> - get_attr(E,guard_entailment,F), - F=v(_,_,_,D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) - ; - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',D) - ), - !, - 'known/1_1_$special_=:=/2___2__4__0__16'(D,A,B,C). -'known/1_1_$special_=:=/2___2__4__0__16'([],B,C,A) :- - 'known/1_1_$special_=:=/2___2__5'(B,C,A). -'known/1_1_$special_=:=/2___2__4__0__16'([F|K],A,B,C) :- - ( F=suspension(_,active,_,_,D,E), - nonvar(D), - D=(G,_), - nonvar(G), - G=(\+H), - nonvar(H), - H=(I=:=J), - I==A, - J==B -> - F=suspension(_,_,_,_,Z,A1), - setarg(2,F,removed), - term_variables(term(Z,A1),L), - arg(4,F,V), - ( var(V) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',W), - W=[_|X], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',X), - ( X=[Y|_] -> - setarg(4,Y,_) - ; - true - ) - ; - V=[_,_|X], - setarg(2,V,X), - ( X=[Y|_] -> - setarg(4,Y,V) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(L,F), - arg(2,C,P), - setarg(2,C,active), - arg(4,C,O), - N is O+1, - setarg(4,C,N), - ( P==not_stored_yet -> - C=suspension(_,_,_,_,_,Q,R), - term_variables(term(Q,R),M), - 'chr none_locked'(M), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',S), - T=[C|S], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',T), - ( S=[U|_] -> - setarg(5,U,T) - ; - true - ), - 'attach_known/1_1_$special_=:=/2___2'(M,C) - ; - true - ), - known(E), - ( C=suspension(_,active,_,N,_,_,_) -> - setarg(2,C,inactive), - 'known/1_1_$special_=:=/2___2__4__0__16'(K,A,B,C) - ; - true - ) - ; - 'known/1_1_$special_=:=/2___2__4__0__16'(K,A,B,C) - ). -'known/1_1_$special_=:=/2___2__4'(A,B,C) :- - 'known/1_1_$special_=:=/2___2__5'(A,B,C). -'known/1_1_$special_=:=/2___2__5'(_,_,A) :- - arg(2,A,E), - setarg(2,A,active), - arg(4,A,D), - C is D+1, - setarg(4,A,C), - ( E==not_stored_yet -> - A=suspension(_,_,_,_,_,F,G), - term_variables(term(F,G),B), - 'chr none_locked'(B), - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',H), - I=[A|H], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',I), - ( H=[J|_] -> - setarg(5,J,I) - ; - true - ), - 'attach_known/1_1_$special_=:=/2___2'(B,A) - ; - true - ). -'known/1_1_$special_fail/0' :- - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',B), - 'chr sbag_member'(A,B), - A=suspension(_,active,_), - !. -'known/1_1_$special_fail/0' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',A), - !, - 'known/1_1_$special_fail/0___0__0__0__24'(A). -'known/1_1_$special_fail/0___0__0__0__24'([]) :- - 'known/1_1_$special_fail/0___0__1'. -'known/1_1_$special_fail/0___0__0__0__24'([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_;/2___2',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_;/2___2'(C,A), - 'known/1_1_$special_fail/0___0__0__0__24'(B) - ; - 'known/1_1_$special_fail/0___0__0__0__24'(B) - ). -'known/1_1_$special_fail/0' :- - 'known/1_1_$special_fail/0___0__1'. -'known/1_1_$special_fail/0___0__1' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',A), - !, - 'known/1_1_$special_fail/0___0__1__0__25'(A). -'known/1_1_$special_fail/0___0__1__0__25'([]) :- - 'known/1_1_$special_fail/0___0__2'. -'known/1_1_$special_fail/0___0__1__0__25'([A|B]) :- - ( A=suspension(_,active,_,_,_) -> - A=suspension(_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_nonvar/1___1',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_nonvar/1___1'(C,A), - 'known/1_1_$special_fail/0___0__1__0__25'(B) - ; - 'known/1_1_$special_fail/0___0__1__0__25'(B) - ). -'known/1_1_$special_fail/0___0__1' :- - 'known/1_1_$special_fail/0___0__2'. -'known/1_1_$special_fail/0___0__2' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',A), - !, - 'known/1_1_$special_fail/0___0__2__0__26'(A). -'known/1_1_$special_fail/0___0__2__0__26'([]) :- - 'known/1_1_$special_fail/0___0__3'. -'known/1_1_$special_fail/0___0__2__0__26'([A|B]) :- - ( A=suspension(_,active,_,_,_) -> - A=suspension(_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_var/1___1',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_var/1___1'(C,A), - 'known/1_1_$special_fail/0___0__2__0__26'(B) - ; - 'known/1_1_$special_fail/0___0__2__0__26'(B) - ). -'known/1_1_$special_fail/0___0__2' :- - 'known/1_1_$special_fail/0___0__3'. -'known/1_1_$special_fail/0___0__3' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',A), - !, - 'known/1_1_$special_fail/0___0__3__0__27'(A). -'known/1_1_$special_fail/0___0__3__0__27'([]) :- - 'known/1_1_$special_fail/0___0__4'. -'known/1_1_$special_fail/0___0__3__0__27'([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atom/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_atom/1___1'(C,A), - 'known/1_1_$special_fail/0___0__3__0__27'(B) - ; - 'known/1_1_$special_fail/0___0__3__0__27'(B) - ). -'known/1_1_$special_fail/0___0__3' :- - 'known/1_1_$special_fail/0___0__4'. -'known/1_1_$special_fail/0___0__4' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',A), - !, - 'known/1_1_$special_fail/0___0__4__0__28'(A). -'known/1_1_$special_fail/0___0__4__0__28'([]) :- - 'known/1_1_$special_fail/0___0__5'. -'known/1_1_$special_fail/0___0__4__0__28'([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_atomic/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_atomic/1___1'(C,A), - 'known/1_1_$special_fail/0___0__4__0__28'(B) - ; - 'known/1_1_$special_fail/0___0__4__0__28'(B) - ). -'known/1_1_$special_fail/0___0__4' :- - 'known/1_1_$special_fail/0___0__5'. -'known/1_1_$special_fail/0___0__5' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',A), - !, - 'known/1_1_$special_fail/0___0__5__0__29'(A). -'known/1_1_$special_fail/0___0__5__0__29'([]) :- - 'known/1_1_$special_fail/0___0__6'. -'known/1_1_$special_fail/0___0__5__0__29'([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_compound/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_compound/1___1'(C,A), - 'known/1_1_$special_fail/0___0__5__0__29'(B) - ; - 'known/1_1_$special_fail/0___0__5__0__29'(B) - ). -'known/1_1_$special_fail/0___0__5' :- - 'known/1_1_$special_fail/0___0__6'. -'known/1_1_$special_fail/0___0__6' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',A), - !, - 'known/1_1_$special_fail/0___0__6__0__30'(A). -'known/1_1_$special_fail/0___0__6__0__30'([]) :- - 'known/1_1_$special_fail/0___0__7'. -'known/1_1_$special_fail/0___0__6__0__30'([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_ground/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_ground/1___1'(C,A), - 'known/1_1_$special_fail/0___0__6__0__30'(B) - ; - 'known/1_1_$special_fail/0___0__6__0__30'(B) - ). -'known/1_1_$special_fail/0___0__6' :- - 'known/1_1_$special_fail/0___0__7'. -'known/1_1_$special_fail/0___0__7' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',A), - !, - 'known/1_1_$special_fail/0___0__7__0__31'(A). -'known/1_1_$special_fail/0___0__7__0__31'([]) :- - 'known/1_1_$special_fail/0___0__8'. -'known/1_1_$special_fail/0___0__7__0__31'([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_integer/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_integer/1___1'(C,A), - 'known/1_1_$special_fail/0___0__7__0__31'(B) - ; - 'known/1_1_$special_fail/0___0__7__0__31'(B) - ). -'known/1_1_$special_fail/0___0__7' :- - 'known/1_1_$special_fail/0___0__8'. -'known/1_1_$special_fail/0___0__8' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',A), - !, - 'known/1_1_$special_fail/0___0__8__0__32'(A). -'known/1_1_$special_fail/0___0__8__0__32'([]) :- - 'known/1_1_$special_fail/0___0__9'. -'known/1_1_$special_fail/0___0__8__0__32'([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_float/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_float/1___1'(C,A), - 'known/1_1_$special_fail/0___0__8__0__32'(B) - ; - 'known/1_1_$special_fail/0___0__8__0__32'(B) - ). -'known/1_1_$special_fail/0___0__8' :- - 'known/1_1_$special_fail/0___0__9'. -'known/1_1_$special_fail/0___0__9' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',A), - !, - 'known/1_1_$special_fail/0___0__9__0__33'(A). -'known/1_1_$special_fail/0___0__9__0__33'([]) :- - 'known/1_1_$special_fail/0___0__10'. -'known/1_1_$special_fail/0___0__9__0__33'([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_number/1___1',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_number/1___1'(C,A), - 'known/1_1_$special_fail/0___0__9__0__33'(B) - ; - 'known/1_1_$special_fail/0___0__9__0__33'(B) - ). -'known/1_1_$special_fail/0___0__9' :- - 'known/1_1_$special_fail/0___0__10'. -'known/1_1_$special_fail/0___0__10' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',A), - !, - 'known/1_1_$special_fail/0___0__10__0__34'(A). -'known/1_1_$special_fail/0___0__10__0__34'([]) :- - 'known/1_1_$special_fail/0___0__11'. -'known/1_1_$special_fail/0___0__10__0__34'([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=\\=/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_=\\=/2___2'(C,A), - 'known/1_1_$special_fail/0___0__10__0__34'(B) - ; - 'known/1_1_$special_fail/0___0__10__0__34'(B) - ). -'known/1_1_$special_fail/0___0__10' :- - 'known/1_1_$special_fail/0___0__11'. -'known/1_1_$special_fail/0___0__11' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',A), - !, - 'known/1_1_$special_fail/0___0__11__0__35'(A). -'known/1_1_$special_fail/0___0__11__0__35'([]) :- - 'known/1_1_$special_fail/0___0__12'. -'known/1_1_$special_fail/0___0__11__0__35'([A|B]) :- - ( A=suspension(_,active,_,_,_) -> - A=suspension(_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\+/1___1',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_\\+/1___1'(C,A), - 'known/1_1_$special_fail/0___0__11__0__35'(B) - ; - 'known/1_1_$special_fail/0___0__11__0__35'(B) - ). -'known/1_1_$special_fail/0___0__11' :- - 'known/1_1_$special_fail/0___0__12'. -'known/1_1_$special_fail/0___0__12' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',A), - !, - 'known/1_1_$special_fail/0___0__12__0__36'(A). -'known/1_1_$special_fail/0___0__12__0__36'([]) :- - 'known/1_1_$special_fail/0___0__13'. -'known/1_1_$special_fail/0___0__12__0__36'([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,H,I,J), - setarg(2,A,removed), - term_variables(term(H,I,J),C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_functor/3___3',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_functor/3___3'(C,A), - 'known/1_1_$special_fail/0___0__12__0__36'(B) - ; - 'known/1_1_$special_fail/0___0__12__0__36'(B) - ). -'known/1_1_$special_fail/0___0__12' :- - 'known/1_1_$special_fail/0___0__13'. -'known/1_1_$special_fail/0___0__13' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',A), - !, - 'known/1_1_$special_fail/0___0__13__0__37'(A). -'known/1_1_$special_fail/0___0__13__0__37'([]) :- - 'known/1_1_$special_fail/0___0__14'. -'known/1_1_$special_fail/0___0__13__0__37'([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\=/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_\\=/2___2'(C,A), - 'known/1_1_$special_fail/0___0__13__0__37'(B) - ; - 'known/1_1_$special_fail/0___0__13__0__37'(B) - ). -'known/1_1_$special_fail/0___0__13' :- - 'known/1_1_$special_fail/0___0__14'. -'known/1_1_$special_fail/0___0__14' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',A), - !, - 'known/1_1_$special_fail/0___0__14__0__38'(A). -'known/1_1_$special_fail/0___0__14__0__38'([]) :- - 'known/1_1_$special_fail/0___0__15'. -'known/1_1_$special_fail/0___0__14__0__38'([A|B]) :- - ( A=suspension(_,active,_,_,_,_) -> - A=suspension(_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=/2___2',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_=/2___2'(C,A), - 'known/1_1_$special_fail/0___0__14__0__38'(B) - ; - 'known/1_1_$special_fail/0___0__14__0__38'(B) - ). -'known/1_1_$special_fail/0___0__14' :- - 'known/1_1_$special_fail/0___0__15'. -'known/1_1_$special_fail/0___0__15' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',A), - !, - 'known/1_1_$special_fail/0___0__15__0__40'(A). -'known/1_1_$special_fail/0___0__15__0__40'([]) :- - 'known/1_1_$special_fail/0___0__16'. -'known/1_1_$special_fail/0___0__15__0__40'([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_\\==/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_\\==/2___2'(C,A), - 'known/1_1_$special_fail/0___0__15__0__40'(B) - ; - 'known/1_1_$special_fail/0___0__15__0__40'(B) - ). -'known/1_1_$special_fail/0___0__15' :- - 'known/1_1_$special_fail/0___0__16'. -'known/1_1_$special_fail/0___0__16' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',A), - !, - 'known/1_1_$special_fail/0___0__16__0__41'(A). -'known/1_1_$special_fail/0___0__16__0__41'([]) :- - 'known/1_1_$special_fail/0___0__17'. -'known/1_1_$special_fail/0___0__16__0__41'([A|B]) :- - ( A=suspension(_,active,_,_,_,_,_) -> - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_==/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_==/2___2'(C,A), - 'known/1_1_$special_fail/0___0__16__0__41'(B) - ; - 'known/1_1_$special_fail/0___0__16__0__41'(B) - ). -'known/1_1_$special_fail/0___0__16' :- - 'known/1_1_$special_fail/0___0__17'. -'known/1_1_$special_fail/0___0__17' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_= - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_= - A=suspension(_,_,_,_,_,H,I), - setarg(2,A,removed), - term_variables(term(H,I),C), - arg(5,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$special_=:=/2___2',F), - ( F=[G|_] -> - setarg(5,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(5,G,D) - ; - true - ) - ), - 'detach_known/1_1_$special_=:=/2___2'(C,A), - 'known/1_1_$special_fail/0___0__18__0__47'(B) - ; - 'known/1_1_$special_fail/0___0__18__0__47'(B) - ). -'known/1_1_$special_fail/0___0__18' :- - 'known/1_1_$special_fail/0___0__19'. -'known/1_1_$special_fail/0___0__19' :- - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',A), - !, - 'known/1_1_$special_fail/0___0__19__0__50'(A). -'known/1_1_$special_fail/0___0__19__0__50'([]) :- - 'known/1_1_$special_fail/0___0__20'. -'known/1_1_$special_fail/0___0__19__0__50'([A|B]) :- - ( A=suspension(_,active,_,_,_) -> - A=suspension(_,_,_,_,H), - setarg(2,A,removed), - term_variables(H,C), - arg(4,A,D), - ( var(D) -> - nb_getval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',E), - E=[_|F], - b_setval('$chr_store_global_list_guard_entailment____known/1_1_$default___1',F), - ( F=[G|_] -> - setarg(4,G,_) - ; - true - ) - ; - D=[_,_|F], - setarg(2,D,F), - ( F=[G|_] -> - setarg(4,G,D) - ; - true - ) - ), - 'detach_known/1_1_$default___1'(C,A), - 'known/1_1_$special_fail/0___0__19__0__50'(B) - ; - 'known/1_1_$special_fail/0___0__19__0__50'(B) - ). -'known/1_1_$special_fail/0___0__19' :- - 'known/1_1_$special_fail/0___0__20'. -'known/1_1_$special_fail/0___0__20' :- - A=suspension(B,active,_), - 'chr gen_id'(B), - nb_getval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',C), - D=[A|C], - b_setval('$chr_store_global_ground_guard_entailment____known/1_1_$special_fail/0___0',D), - ( C=[E|_] -> - setarg(3,E,D) - ; - true - ). -:-multifile chr:'$chr_module'/1. -chr:'$chr_module'(guard_entailment). -end_of_file. diff --git a/LGPL/chr/hprolog.pl b/LGPL/chr/hprolog.pl deleted file mode 100644 index 45f02a091..000000000 --- a/LGPL/chr/hprolog.pl +++ /dev/null @@ -1,192 +0,0 @@ -:- module(hprolog, - [ substitute_eq/4, % +OldVal, +OldList, +NewVal, -NewList - memberchk_eq/2, % +Val, +List - intersect_eq/3, % +List1, +List2, -Intersection - list_difference_eq/3, % +List, -Subtract, -Rest - take/3, % +N, +List, -FirstElements - drop/3, % +N, +List, -LastElements - split_at/4, % +N, +List, -FirstElements, -LastElements - max_go_list/2, % +List, -Max - or_list/2, % +ListOfInts, -BitwiseOr - sublist/2, % ?Sublist, +List - bounded_sublist/3, % ?Sublist, +List, +Bound - chr_delete/3, - init_store/2, - get_store/2, - update_store/2, - make_get_store_goal/3, - make_update_store_goal/3, - make_init_store_goal/3, - - empty_ds/1, - ds_to_list/2, - get_ds/3, - put_ds/4 -% lookup_ht1/4 - ]). -:- use_module(library(lists)). -:- use_module(library(assoc)). - -empty_ds(DS) :- empty_assoc(DS). -ds_to_list(DS,LIST) :- assoc_to_list(DS,LIST). -get_ds(A,B,C) :- get_assoc(A,B,C). -put_ds(A,B,C,D) :- put_assoc(A,B,C,D). - - -init_store(Name,Value) :- nb_setval(Name,Value). - -get_store(Name,Value) :- nb_getval(Name,Value). - -update_store(Name,Value) :- b_setval(Name,Value). - -make_init_store_goal(Name,Value,Goal) :- Goal = nb_setval(Name,Value). - -make_get_store_goal(Name,Value,Goal) :- Goal = nb_getval(Name,Value). - -make_update_store_goal(Name,Value,Goal) :- Goal = b_setval(Name,Value). - - - /******************************* - * MORE LIST OPERATIONS * - *******************************/ - -% substitute_eq(+OldVal, +OldList, +NewVal, -NewList) -% -% Substitute OldVal by NewVal in OldList and unify the result -% with NewList. - -substitute_eq(_, [], _, []) :- ! . -substitute_eq(X, [U|Us], Y, [V|Vs]) :- - ( X == U - -> V = Y, - substitute_eq(X, Us, Y, Vs) - ; V = U, - substitute_eq(X, Us, Y, Vs) - ). - -% memberchk_eq(+Val, +List) -% -% Deterministic check of membership using == rather than -% unification. - -memberchk_eq(X, [Y|Ys]) :- - ( X == Y - -> true - ; memberchk_eq(X, Ys) - ). - -% :- load_foreign_library(chr_support). - -% list_difference_eq(+List, -Subtract, -Rest) -% -% Delete all elements of Subtract from List and unify the result -% with Rest. Element comparision is done using ==/2. - -list_difference_eq([],_,[]). -list_difference_eq([X|Xs],Ys,L) :- - ( memberchk_eq(X,Ys) - -> list_difference_eq(Xs,Ys,L) - ; L = [X|T], - list_difference_eq(Xs,Ys,T) - ). - -% intersect_eq(+List1, +List2, -Intersection) -% -% Determine the intersection of two lists without unifying values. - -intersect_eq([], _, []). -intersect_eq([X|Xs], Ys, L) :- - ( memberchk_eq(X, Ys) - -> L = [X|T], - intersect_eq(Xs, Ys, T) - ; intersect_eq(Xs, Ys, L) - ). - - -% take(+N, +List, -FirstElements) -% -% Take the first N elements from List and unify this with -% FirstElements. The definition is based on the GNU-Prolog lists -% library. Implementation by Jan Wielemaker. - -take(0, _, []) :- !. -take(N, [H|TA], [H|TB]) :- - N > 0, - N2 is N - 1, - take(N2, TA, TB). - -% Drop the first N elements from List and unify the remainder with -% LastElements. - -drop(0,LastElements,LastElements) :- !. -drop(N,[_|Tail],LastElements) :- - N > 0, - N1 is N - 1, - drop(N1,Tail,LastElements). - -split_at(0,L,[],L) :- !. -split_at(N,[H|T],[H|L1],L2) :- - M is N -1, - split_at(M,T,L1,L2). - -% max_go_list(+List, -Max) -% -% Return the maximum of List in the standard order of terms. - -max_go_list([H|T], Max) :- - max_go_list(T, H, Max). - -max_go_list([], Max, Max). -max_go_list([H|T], X, Max) :- - ( H @=< X - -> max_go_list(T, X, Max) - ; max_go_list(T, H, Max) - ). - -% or_list(+ListOfInts, -BitwiseOr) -% -% Do a bitwise disjuction over all integer members of ListOfInts. - -or_list(L, Or) :- - or_list(L, 0, Or). - -or_list([], Or, Or). -or_list([H|T], Or0, Or) :- - Or1 is H \/ Or0, - or_list(T, Or1, Or). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -sublist(L, L). -sublist(Sub, [H|T]) :- - '$sublist1'(T, H, Sub). - -'$sublist1'(Sub, _, Sub). -'$sublist1'([H|T], _, Sub) :- - '$sublist1'(T, H, Sub). -'$sublist1'([H|T], X, [X|Sub]) :- - '$sublist1'(T, H, Sub). - -bounded_sublist(Sublist,_,_) :- - Sublist = []. -bounded_sublist(Sublist,[H|List],Bound) :- - Bound > 0, - ( - Sublist = [H|Rest], - NBound is Bound - 1, - bounded_sublist(Rest,List,NBound) - ; - bounded_sublist(Sublist,List,Bound) - ). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -chr_delete([], _, []). -chr_delete([H|T], X, L) :- - ( H==X -> - chr_delete(T, X, L) - ; L=[H|RT], - chr_delete(T, X, RT) - ). - diff --git a/LGPL/chr/listmap.pl b/LGPL/chr/listmap.pl deleted file mode 100644 index c2a6d5b2c..000000000 --- a/LGPL/chr/listmap.pl +++ /dev/null @@ -1,105 +0,0 @@ -/* $Id: listmap.pl,v 1.3 2008-03-13 14:38:01 vsc Exp $ - - Part of CHR (Constraint Handling Rules) - - Author: Tom Schrijvers - E-mail: Tom.Schrijvers@cs.kuleuven.be - WWW: http://www.swi-prolog.org - Copyright (C): 2003-2004, K.U. Leuven - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - As a special exception, if you link this library with other files, - compiled with a Free Software compiler, to produce an executable, this - library does not by itself cause the resulting executable to be covered - by the GNU General Public License. This exception does not however - invalidate any other reasons why the executable file might be covered by - the GNU General Public License. -*/ - -:- module(listmap, - [ - listmap_empty/1, - listmap_lookup/3, - listmap_insert/4, - listmap_remove/3, - listmap_merge/5 - ]). - -listmap_empty([]). - -listmap_lookup([K-V|R],Key,Q) :- - ( Key == K -> - Q = V - ; - Key @> K, - listmap_lookup(R,Key,Q) - ). - -listmap_insert([],Key,Value,[Key-Value]). -listmap_insert([P|R],Key,Value,ML) :- - P = K-_, - compare(C,Key,K), - ( C == (=) -> - ML = [K-Value|R] - ; C == (<) -> - ML = [Key-Value,P|R] - ; - ML = [P|Tail], - listmap_insert(R,Key,Value,Tail) - ). - -listmap_merge(ML1,ML2,F,G,ML) :- - ( ML1 == [] -> - ML = ML2 - ; ML2 == [] -> - ML = ML1 - ; - ML1 = [P1|R1], P1 = K1-V1, - ML2 = [P2|R2], P2 = K2-V2, - compare(C,K1,K2), - ( C == (=) -> - Call =.. [F,V1,V2,NV], - call(Call), - ML = [K1-NV|Tail], - listmap_merge(R1,R2,F,G,Tail) - ; C == (<) -> - Call =.. [G,V1,NV], - call(Call), - ML = [K1-NV|Tail], - listmap_merge(R1,ML2,F,G,Tail) - ; - Call =.. [G,V2,NV], - call(Call), - ML = [K2-NV|Tail], - listmap_merge(ML1,R2,F,G,Tail) - ) - ). - - -listmap_remove([],_,[]). -listmap_remove([P|R],Key,NLM) :- - P = K-_, - compare(C,Key,K), - ( C == (=) -> - NLM = R - ; C == (<) -> - NLM = [P|R] - ; - NLM = [P|Tail], - listmap_remove(R,Key,Tail) - ). - - diff --git a/LGPL/chr/pairlist.pl b/LGPL/chr/pairlist.pl deleted file mode 100644 index c709e57b3..000000000 --- a/LGPL/chr/pairlist.pl +++ /dev/null @@ -1,106 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% _ _ _ _ -%% _ __ __ _(_)_ __| (_)___| |_ -%% | '_ \ / _` | | '__| | / __| __| -%% | |_) | (_| | | | | | \__ \ |_ -%% | .__/ \__,_|_|_| |_|_|___/\__| -%% |_| -%% -%% * author: Tom Schrijvers - -:- module(pairlist,[ - fst_of_pairs/2, - lookup/3, - lookup_any/3, - lookup_eq/3, - lookup_any_eq/3, - pairup/3, - snd_of_pairs/2, - translate/3, - pairlist_delete_eq/3 - ]). - -fst_of_pairs([],[]). -fst_of_pairs([X-_|XYs],[X|Xs]) :- - fst_of_pairs(XYs,Xs). - -snd_of_pairs([],[]). -snd_of_pairs([_-Y|XYs],[Y|Ys]) :- - snd_of_pairs(XYs,Ys). - -pairup([],[],[]). -pairup([X|Xs],[Y|Ys],[X-Y|XYs]) :- - pairup(Xs,Ys,XYs). - -lookup([K - V | KVs],Key,Value) :- - ( K = Key -> - V = Value - ; - lookup(KVs,Key,Value) - ). - -lookup_any([K - V | KVs],Key,Value) :- - ( - K = Key, - V = Value - ; - lookup_any(KVs,Key,Value) - ). - -lookup_eq([K - V | KVs],Key,Value) :- - ( K == Key -> - V = Value - ; - lookup_eq(KVs,Key,Value) - ). - -lookup_any_eq([K - V | KVs],Key,Value) :- - ( - K == Key, - V = Value - ; - lookup_any_eq(KVs,Key,Value) - ). - -translate([],_,[]). -translate([X|Xs],Dict,[Y|Ys]) :- - lookup_eq(Dict,X,Y), - translate(Xs,Dict,Ys). - -pairlist_delete([], _, []). -pairlist_delete([K - V| KVs], Key, PL) :- - ( Key = K -> - PL = KVs - ; - PL = [ K - V | T ], - pairlist_delete(KVs, Key, T) - ). - -pairlist_delete_all([], _, []). -pairlist_delete_all([K - V| KVs], Key, PL) :- - ( Key = K -> - pairlist_delete_all(KVs, Key, PL) - - ; - PL = [ K - V | T ], - pairlist_delete_all(KVs, Key, T) - ). - -pairlist_delete_eq([], _, []). -pairlist_delete_eq([K - V| KVs], Key, PL) :- - ( Key == K -> - PL = KVs - ; - PL = [ K - V | T ], - pairlist_delete_eq(KVs, Key, T) - ). - -pairlist_delete_all_eq([], _, []). -pairlist_delete_all_eq([K - V| KVs], Key, PL) :- - ( Key == K -> - pairlist_delete_all_eq(KVs, Key, PL) - ; - PL = [ K - V | T ], - pairlist_delete_all_eq(KVs, Key, T) - ). -