:- import set_unify/2 from set_unify. :- import numbervars/1 from num_vars. :- import normalize_result/2 from can_mono. test :- tp, fail. test :- writeln('=========== Result is ================'), nl, show_facts. unify_sets([],[]). unify_sets([A|As],[B|Bs]) :- set_unify(A,B), unify_sets(As,Bs). %---------------- Transformed program ---------------------- queens__1(_1177668,_1177676) :- [_1177524] = _1177684, [_1177568] = _1177692, perm([_1177524],[_1177568]), safe([_1177568]), normalize_result([_1177684,_1177692], [_1177668,_1177676]). perm__1(_1177136,_1177144) :- [list] = _1177152, [list] = _1177160, normalize_result([_1177152,_1177160], [_1177136,_1177144]). perm__1(_1177992,_1178000) :- [list,_1177008] = _1178008, [list,_1177900] = _1178016, delete([_1177812],[list,_1177008],[_1177884]), perm([_1177884],[_1177900]), normalize_result([_1178008,_1178016], [_1177992,_1178000]). delete__1(_1177332,_1177340,_1177348) :- [_1177228] = _1177356, [list,_1177268] = _1177364, [_1177268] = _1177372, normalize_result([_1177356,_1177364,_1177372], [_1177332,_1177340,_1177348]). delete__1(_1177788,_1177796,_1177804) :- [_1177664] = _1177812, [list,_1177680] = _1177820, [list,_1177696] = _1177828, delete([_1177664],[_1177680],[_1177696]), normalize_result([_1177812,_1177820,_1177828], [_1177788,_1177796,_1177804]). safe__1(_1177044) :- [list] = _1177052, normalize_result([_1177052], [_1177044]). safe__1(_1177672) :- [list,_1177592] = _1177680, noattack([_1177528],[_1177592],[num]), safe([_1177592]), normalize_result([_1177680], [_1177672]). noattack__1(_1177276,_1177284,_1177292) :- [_1177180] = _1177300, [list] = _1177308, [_1177212] = _1177316, normalize_result([_1177300,_1177308,_1177316], [_1177276,_1177284,_1177292]). noattack__1(_1179132,_1179140,_1179148) :- [_1178960] = _1179156, [list,_1178976] = _1179164, [_1178900] = _1179172, 'my =\\='([_1178960],[_1178768]), 'my =\\='([_1178960],[[_1178768],[_1178900]]), 'my =\\='([_1178768],[[_1178960],[_1178900]]), 'my is'([_1178992],[[_1178900],[num]]), noattack([_1178960],[_1178976],[_1178992]), normalize_result([_1179156,_1179164,_1179172], [_1179132,_1179140,_1179148]). %---------------- Definitions of tabled preds -------------- :- table noattack__1/3. :- table safe__1/1. :- table delete__1/3. :- table perm__1/2. :- table queens__1/2. noattack(_1176924,_1176932,_1176940) :- noattack__1(_1176948,_1176956,_1176964), unify_sets([_1176924,_1176932,_1176940], [_1176948,_1176956,_1176964]). safe(_1176924) :- safe__1(_1176932), unify_sets([_1176924], [_1176932]). delete(_1176924,_1176932,_1176940) :- delete__1(_1176948,_1176956,_1176964), unify_sets([_1176924,_1176932,_1176940], [_1176948,_1176956,_1176964]). perm(_1176924,_1176932) :- perm__1(_1176940,_1176948), unify_sets([_1176924,_1176932], [_1176940,_1176948]). queens(_1176924,_1176932) :- queens__1(_1176940,_1176948), unify_sets([_1176924,_1176932], [_1176940,_1176948]). %---------------- Tp --------------------------------------- tp :- noattack__1(_1176928,_1176936,_1176944), fail. tp :- safe__1(_1176928), fail. tp :- delete__1(_1176928,_1176936,_1176944), fail. tp :- perm__1(_1176928,_1176936), fail. tp :- queens__1(_1176928,_1176936), fail. tp. %---------------- Builtin Preds ---------------------------- 'my ='(X1,X2) :- 'my =_1'(Y1,Y2), unify_sets([X1,X2],[Y1,Y2]). 'my \\=='(X1,X2) :- 'my \\==__1'(Y1,Y2), unify_sets([X1,X2],[Y1,Y2]). 'my is'(X1,X2) :- 'my is__1'(Y1,Y2), unify_sets([X1,X2],[Y1,Y2]). 'my <'([num],[num]). 'my >'([num],[num]). 'my >='([num],[num]). 'my =<'([num],[num]). 'my =:='([num],[num]). 'my =\\='(X1,X2) :- 'my =\\=__1'(Y1,Y2), unify_sets([X1,X2],[Y1,Y2]). 'my =_1'(X,X). 'my \\==__1'(_,_). 'my is__1'(num,num). 'my =\\=__1'(num,num). %---------------- Show Result ------------------------------ show_facts :- noattack__1(_1176924,_1176932,_1176940), numbervars([_1176924,_1176932,_1176940]), write(noattack(_1176924,_1176932,_1176940)), nl, fail. show_facts :- safe__1(_1176924), numbervars([_1176924]), write(safe(_1176924)), nl, fail. show_facts :- delete__1(_1176924,_1176932,_1176940), numbervars([_1176924,_1176932,_1176940]), write(delete(_1176924,_1176932,_1176940)), nl, fail. show_facts :- perm__1(_1176924,_1176932), numbervars([_1176924,_1176932]), write(perm(_1176924,_1176932)), nl, fail. show_facts :- queens__1(_1176924,_1176932), numbervars([_1176924,_1176932]), write(queens(_1176924,_1176932)), nl, fail. show_facts.