:- use_module(library(cuda)).
:- use_module(library(lists)).
:- initialization(main).
main :-
Rule = ( db(Y, Z), db(X, Z), db(1, Z), X = Y ),
setof(a(X,Y), Z^Rule, L0), reverse(L0, RL0), writeln(RL0),
cuda_rule((a(X, Y) :- Rule ), Q),
cuda_eval(Q, L),
cuda_erase( Q ),
writeln(L).
main2 :-
Rule = ( db(Y, Z), db(X, Z), db(1, Z), X \= Y ),
db(1,a).
db(2,a).
db(5,b).
db(4,q).
db(6,w).
db(10,s).
/*
db(11,a).
db(12,a).
db(15,b).
db(14,q).
db(16,w).
db(110,s).
db(21,a).
db(22,a).
db(25,b).
db(24,q).
db(26,w).
db(210,s).
*/
:- cuda_extensional(db/2, _X).