:- 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 ---------------------- member__1(_141,_143) :- [_119] = _145, [list,_106] = _147, normalize_result([_145,_147], [_141,_143]). member__1(_215,_217) :- [_191] = _219, [list,_195] = _221, member([_191],[_195]), normalize_result([_219,_221], [_215,_217]). iota__1(_226,_228) :- [_201] = _230, [_205] = _232, iota1([num],[_201],[_205]), normalize_result([_230,_232], [_226,_228]). iota1__1(_149,_151,_153) :- [_129] = _155, [_129] = _157, [list] = _159, normalize_result([_155,_157,_159], [_149,_151,_153]). iota1__1(_362,_364,_366) :- [_313] = _368, [_332] = _370, [list,_336] = _372, 'my is'([_328],[[_313],[num]]), iota1([_328],[_332],[_336]), normalize_result([_368,_370,_372], [_362,_364,_366]). dif__1(_197,_199,_201,_203,_205) :- [list] = _207, [_163] = _209, [_167] = _211, [list] = _213, [list] = _215, normalize_result([_207,_209,_211,_213,_215], [_197,_199,_201,_203,_205]). dif__1(_593,_595,_597,_599,_601) :- [list,_542] = _603, [_546] = _605, [_550] = _607, [list,_554] = _609, [list,_558] = _611, 'my is'([_531],[[_546],[_507]]), 'my is'([_518],[[_550],[_531]]), dif([_542],[_546],[_550],[_554],[_558]), normalize_result([_603,_605,_607,_609,_611], [_593,_595,_597,_599,_601]). rev__1(_149,_151,_153) :- [list] = _155, [_133] = _157, [_133] = _159, normalize_result([_155,_157,_159], [_149,_151,_153]). rev__1(_279,_281,_283) :- [list,_246] = _285, [_227] = _287, [_256] = _289, rev([_246],[list,_227],[_256]), normalize_result([_285,_287,_289], [_279,_281,_283]). mergedelete__1(_149,_151,_153) :- [list] = _155, [_133] = _157, [_133] = _159, normalize_result([_155,_157,_159], [_149,_151,_153]). mergedelete__1(_279,_281,_283) :- [list,_248] = _285, [list,_252] = _287, [_256] = _289, mergedelete([_248],[_252],[_256]), normalize_result([_285,_287,_289], [_279,_281,_283]). mergedelete__1(_364,_366,_368) :- [list,_84] = _370, [list,_334] = _372, [list,_338] = _374, 'my >'([_310],[_319]), mergedelete([list,_84],[_334],[_338]), normalize_result([_370,_372,_374], [_364,_366,_368]). check__1(_207,_209,_211,_213,_215) :- [list] = _217, [_173] = _219, [_181] = _221, [_181] = _223, [_185] = _225, normalize_result([_217,_219,_221,_223,_225], [_207,_209,_211,_213,_215]). check__1(_717,_719,_721,_723,_725) :- [_612] = _727, [_616] = _729, [_642] = _731, [_678] = _733, [_620] = _735, 'my ='([_612],[list,_218]), dif([_612],[_616],[_620],[_638],[_654]), mergedelete([_638],[_642],[_674]), rev([_654],[list],[_670]), mergedelete([_670],[_674],[_678]), normalize_result([_727,_729,_731,_733,_735], [_717,_719,_721,_723,_725]). pds1__1(_174,_176,_178,_180) :- [list] = _182, [_147] = _184, [list] = _186, [_155] = _188, normalize_result([_182,_184,_186,_188], [_174,_176,_178,_180]). pds1__1(_544,_546,_548,_550) :- [_480] = _552, [_472] = _554, [list,_508] = _556, [_512] = _558, member([_476],[_480]), check([_472],[_476],[_480],[_498],[_512]), pds1([_498],[list,_472],[_508],[_512]), normalize_result([_552,_554,_556,_558], [_544,_546,_548,_550]). pds__1(_506,_508) :- [_428] = _510, [list,_474] = _512, 'my is'([_478],[[[_428],[[_428],[num]]],[num]]), iota([_478],[list,_464]), pds1([_464],[list,list],[_474],[_478]), normalize_result([_510,_512], [_506,_508]). pdsbm__1(_225,_227) :- [_197] = _229, [_183] = _231, pds([_197],[list,list,_183]), normalize_result([_229,_231], [_225,_227]). %---------------- Definitions of tabled preds -------------- :- table pdsbm__1/2. :- table pds__1/2. :- table pds1__1/4. :- table check__1/5. :- table mergedelete__1/3. :- table rev__1/3. :- table dif__1/5. :- table iota1__1/3. :- table iota__1/2. :- table member__1/2. pdsbm(_63,_65) :- pdsbm__1(_67,_69), unify_sets([_63,_65], [_67,_69]). pds(_63,_65) :- pds__1(_67,_69), unify_sets([_63,_65], [_67,_69]). pds1(_63,_65,_67,_69) :- pds1__1(_71,_73,_75,_77), unify_sets([_63,_65,_67,_69], [_71,_73,_75,_77]). check(_63,_65,_67,_69,_71) :- check__1(_73,_75,_77,_79,_81), unify_sets([_63,_65,_67,_69,_71], [_73,_75,_77,_79,_81]). mergedelete(_63,_65,_67) :- mergedelete__1(_69,_71,_73), unify_sets([_63,_65,_67], [_69,_71,_73]). rev(_63,_65,_67) :- rev__1(_69,_71,_73), unify_sets([_63,_65,_67], [_69,_71,_73]). dif(_63,_65,_67,_69,_71) :- dif__1(_73,_75,_77,_79,_81), unify_sets([_63,_65,_67,_69,_71], [_73,_75,_77,_79,_81]). iota1(_63,_65,_67) :- iota1__1(_69,_71,_73), unify_sets([_63,_65,_67], [_69,_71,_73]). iota(_63,_65) :- iota__1(_67,_69), unify_sets([_63,_65], [_67,_69]). member(_63,_65) :- member__1(_67,_69), unify_sets([_63,_65], [_67,_69]). %---------------- Tp --------------------------------------- tp :- pdsbm__1(_64,_66), fail. tp :- pds__1(_64,_66), fail. tp :- pds1__1(_64,_66,_68,_70), fail. tp :- check__1(_64,_66,_68,_70,_72), fail. tp :- mergedelete__1(_64,_66,_68), fail. tp :- rev__1(_64,_66,_68), fail. tp :- dif__1(_64,_66,_68,_70,_72), fail. tp :- iota1__1(_64,_66,_68), fail. tp :- iota__1(_64,_66), fail. tp :- member__1(_64,_66), 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 =\\='([num],[num]). 'my =__1'(X,X). 'my \\==__1'(_,_). 'my is__1'(num,num). %---------------- Show Result ------------------------------ show_facts :- pdsbm__1(_63,_65), numbervars([_63,_65]), write(pdsbm(_63,_65)), nl, fail. show_facts :- pds__1(_63,_65), numbervars([_63,_65]), write(pds(_63,_65)), nl, fail. show_facts :- pds1__1(_63,_65,_67,_69), numbervars([_63,_65,_67,_69]), write(pds1(_63,_65,_67,_69)), nl, fail. show_facts :- check__1(_63,_65,_67,_69,_71), numbervars([_63,_65,_67,_69,_71]), write(check(_63,_65,_67,_69,_71)), nl, fail. show_facts :- mergedelete__1(_63,_65,_67), numbervars([_63,_65,_67]), write(mergedelete(_63,_65,_67)), nl, fail. show_facts :- rev__1(_63,_65,_67), numbervars([_63,_65,_67]), write(rev(_63,_65,_67)), nl, fail. show_facts :- dif__1(_63,_65,_67,_69,_71), numbervars([_63,_65,_67,_69,_71]), write(dif(_63,_65,_67,_69,_71)), nl, fail. show_facts :- iota1__1(_63,_65,_67), numbervars([_63,_65,_67]), write(iota1(_63,_65,_67)), nl, fail. show_facts :- iota__1(_63,_65), numbervars([_63,_65]), write(iota(_63,_65)), nl, fail. show_facts :- member__1(_63,_65), numbervars([_63,_65]), write(member(_63,_65)), nl, fail. show_facts.