:-module(_,[mmtx/3],[]). '$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 mmtx(_A,_B,_C):(nlilist(_A),nlilist(_B),var(_C)). :-pred mmtx(_A,_B,_C):(nlilist(_A),nlilist(_B),var(_C))=>nlilist(_C). :-pred mmtx_i(_A,_B,_C):(nlilist(_A),nlilist(_B),var(_C))=>nlilist(_C). :-pred multiply(_A,_1,_B):(nlilist(_A),nlist(_1))=>nlist(_B). :-pred vmul(_A,_B,Result):(nlist(_A),nlist(_B))=>num(Result). :-prop nlilist/1+regtype. :-prop nlist/1+regtype. mmtx(_1,_2,_3) :- 'mmtx$pre'(_1,_2,_3,_4,_5), 'mmtx$cls'(_1,_2,_3), 'mmtx$post'(_1,_2,_3,_4,_5). 'mmtx$pre'(_1,_2,_3,_7,_9) :- reify_check(nlilist(_1),[_1],_5), reify_check(nlilist(_2),[_2],_6), reify_check(var(_3),[_3],_4), _8 is _4/\(_5/\_6), _7 is _8, _9 is _8, _10 is _7\/_9, warn_if_false(_10,'CP'). 'mmtx$post'(_,_,_1,_3,_) :- reify_check(nlilist(_1),[_1],_2), _4 is _2, _5 is _3#1\/_4, _=1, _6 is _5, warn_if_false(_6,'AP'). 'mmtx$cls'(A,B,C) :- mmtx_i(A,B,C). mmtx_i(_2,_3,_4) :- 'mmtx_i$pre'(_2,_3,_4,_5), 'mmtx_i$cls'(_2,_3,_4), 'mmtx_i$post'(_2,_3,_4,_5). 'mmtx_i$pre'(_2,_3,_4,_8) :- reify_check(nlilist(_2),[_2],_6), reify_check(nlilist(_3),[_3],_7), reify_check(var(_4),[_4],_5), _9 is _5/\(_6/\_7), _8 is _9, _10 is _8, warn_if_false(_10,'CP'). 'mmtx_i$post'(_,_,_2,_4) :- reify_check(nlilist(_2),[_2],_3), _5 is _3, _6 is _4#1\/_5, _7 is _6, warn_if_false(_7,'AP'). 'mmtx_i$cls'([],_1,[]). 'mmtx_i$cls'([V0|Rest],V1,[Result|Others]) :- mmtx_i(Rest,V1,Others), multiply(V1,V0,Result). multiply(_2,_3,_4) :- 'multiply$pre'(_2,_3,_4,_5), 'multiply$cls'(_2,_3,_4), 'multiply$post'(_2,_3,_4,_5). 'multiply$pre'(_2,_3,_,_6) :- reify_check(nlilist(_2),[_2],_4), reify_check(nlist(_3),[_3],_5), _7 is _4/\_5, _6 is _7, _8 is _6, warn_if_false(_8,'CP'). 'multiply$post'(_,_,_2,_4) :- reify_check(nlist(_2),[_2],_3), _5 is _3, _6 is _4#1\/_5, _7 is _6, warn_if_false(_7,'AP'). 'multiply$cls'([],_1,[]). 'multiply$cls'([V0|Rest],V1,[Result|Others]) :- multiply(Rest,V1,Others), vmul(V0,V1,Result). vmul(_1,_2,_3) :- 'vmul$pre'(_1,_2,_3,_4), 'vmul$cls'(_1,_2,_3), 'vmul$post'(_1,_2,_3,_4). 'vmul$pre'(_1,_2,_,_5) :- reify_check(nlist(_1),[_1],_3), reify_check(nlist(_2),[_2],_4), _6 is _3/\_4, _5 is _6, _7 is _5, warn_if_false(_7,'CP'). 'vmul$post'(_,_,_1,_3) :- reify_check(num(_1),[_1],_2), _4 is _2, _5 is _3#1\/_4, _6 is _5, warn_if_false(_6,'AP'). 'vmul$cls'([],[],0). 'vmul$cls'([H1|T1],[H2|T2],Result) :- vmul(T1,T2,Newresult), Product is H1*H2, Result is Product+Newresult. nlilist([]). nlilist([X|Xs]) :- nlist(X), nlilist(Xs). nlist([]). nlist([X|Xs]) :- num(X), nlist(Xs).