:-module(_,[sift/2],[]). '$applied_packages'([prelude,nonpure,condcomp,assertions,regtypes,nativeprops,predefres(res_steps),resdefs,resdefs/resources_decl,basicmodes,argnames,rtchecks_shallow,expander]). :-add_clause_trans(expander_tr:expand_clause/4,9910). :-entry sift/2:intlist*var. :-pred sift(Is,Ps):(intlist(Is),var(Ps))=>intlist(Ps). :-pred sift_i(Is,Ps):(intlist(Is),var(Ps))=>intlist(Ps). :-pred remove(Is,P,Ps):(intlist(Is),int(P),var(Ps))=>intlist(Ps). :-prop intlist/1+regtype. sift(_1,_2) :- 'sift$pre'(_1,_2,_3,_4), 'sift$cls'(_1,_2), 'sift$post'(_1,_2,_3,_4). 'sift$pre'(_1,_2,_5,_7) :- reify_check(intlist(_1),[_1],_3), reify_check(var(_2),[_2],_4), _6 is _3/\_4, _5 is _6, _7 is _6, _8 is _5\/_7, warn_if_false(_8,'CP'). 'sift$post'(_,_1,_3,_) :- reify_check(intlist(_1),[_1],_2), _4 is _2, _5 is _3#1\/_4, _=1, _6 is _5, warn_if_false(_6,'AP'). 'sift$cls'(A,B) :- sift_i(A,B). sift_i(_1,_2) :- 'sift_i$pre'(_1,_2,_3), 'sift_i$cls'(_1,_2), 'sift_i$post'(_1,_2,_3). 'sift_i$pre'(_1,_2,_5) :- reify_check(intlist(_1),[_1],_3), reify_check(var(_2),[_2],_4), _6 is _3/\_4, _5 is _6, _7 is _5, warn_if_false(_7,'CP'). 'sift_i$post'(_,_1,_3) :- reify_check(intlist(_1),[_1],_2), _4 is _2, _5 is _3#1\/_4, _6 is _5, warn_if_false(_6,'AP'). 'sift_i$cls'([],[]). 'sift_i$cls'([I|Is],[I|Ps]) :- remove(Is,I,New), sift_i(New,Ps). remove(_1,_2,_3) :- 'remove$pre'(_1,_2,_3,_4), 'remove$cls'(_1,_2,_3), 'remove$post'(_1,_2,_3,_4). 'remove$pre'(_2,_1,_3,_7) :- reify_check(int(_1),[_1],_6), reify_check(intlist(_2),[_2],_5), reify_check(var(_3),[_3],_4), _8 is _4/\(_5/\_6), _7 is _8, _9 is _7, warn_if_false(_9,'CP'). 'remove$post'(_,_,_1,_3) :- reify_check(intlist(_1),[_1],_2), _4 is _2, _5 is _3#1\/_4, _6 is _5, warn_if_false(_6,'AP'). 'remove$cls'([],_,[]). 'remove$cls'([I|Is],P,Nis) :- IModP is I mod P, IModP=0, !, remove(Is,P,Nis). 'remove$cls'([I|Is],P,[I|Nis]) :- remove(Is,P,Nis). intlist([]). intlist([X|Xs]) :- int(X), intlist(Xs).