Ciao Preprocessor (integrated Alpha version)
 | This is an alpha distribution, meant only for testing. Please do let us 
 | know at ciaopp-bugclip.dia.fi.upm.es any problems you may have.

{Reading /tmp/tmpTt8AaX/mergesort.pl
}
{loaded in 3344.209 msec.}
{preprocessed for plai in 0.0 msec.}
{analyzed by plai using det with local-control off in 60.004 msec.}
{written file /tmp/tmpTt8AaX/mergesort_det_co.pl}
:- module(_1,[mergesort/2],[assertions]).

:- entry mergesort(A,B)
         : ground(A).

:- true pred mergesort(A,B)
         : ( native_props:mshare([[B]]), ground([A]), gnd(A), term(B) )
        => ( ground([A,B]), rt161(A), rt168(B) )
         + ( non_det, mut_exclusive ).

:- true pred mergesort(A,B)
         : ( native_props:mshare([[B]]), var(B), ground([A]), rt20(A), term(B) )
        => ( ground([A,B]), rt89(A), rt90(B) )
         + ( is_det, mut_exclusive ).

:- true pred mergesort(A,B)
         : ( native_props:mshare([[B]]), var(B), ground([A]), rt22(A), term(B) )
        => ( ground([A,B]), rt76(A), rt83(B) )
         + ( non_det, mut_exclusive ).

:- true pred mergesort(A,B)
         : ( native_props:mshare([[B]]), var(B), ground([A]), rt20(A), term(B) )
        => ( ground([A,B]), rt26(A), rt27(B) )
         + ( is_det, mut_exclusive ).

mergesort([],[]).
mergesort([X],[X]).
mergesort([X,Y|Xs],Ys) :-
        split([X,Y|Xs],X1s,X2s),
        mergesort(X1s,Y1s),
        mergesort(X2s,Y2s),
        merge(Y1s,Y2s,Ys).

:- true pred split([_2,_3|_4],_1,Zs)
         : ( native_props:mshare([[_1],[Zs]]), var(_1), var(Zs), ground([_2,_3,_4]), term(_1), term(Zs), gnd(_2), gnd(_3), gnd(_4) )
        => ( ground([_1,Zs,_2,_3,_4]), rt22(_1), rt20(Zs), gnd(_2), gnd(_3), rt17(_4) )
         + ( is_det, mut_exclusive ).

:- true pred split(_1,_2,Zs)
         : ( native_props:mshare([[_2],[Zs]]), var(_2), var(Zs), ground([_1]), rt6(_1), term(_2), term(Zs) )
        => ( ground([_1,_2,Zs]), rt21(_1), rt20(_2), rt15(Zs) )
         + ( is_det, mut_exclusive ).

:- true pred split(_1,_2,Zs)
         : ( native_props:mshare([[_2],[Zs]]), var(_2), var(Zs), ground([_1]), rt7(_1), term(_2), term(Zs) )
        => ( ground([_1,_2,Zs]), rt17(_1), rt15(_2), rt19(Zs) )
         + ( is_det, mut_exclusive ).

split([],[],[]).
split([X|Xs],[X|Ys],Zs) :-
        split(Xs,Zs,Ys).

:- true pred merge(_1,Xs,_2)
         : ( native_props:mshare([[_2]]), ground([_1,Xs]), rt91(_1), rt97(Xs), term(_2) )
        => ( ground([_1,Xs,_2]), rt148(_1), rt142(Xs), rt140(_2) )
         + ( non_det, not_mut_exclusive ).

:- true pred merge([_2|_3],Xs,_1)
         : ( native_props:mshare([[_1]]), ground([Xs,_2,_3]), rt125(Xs), term(_1), rt56(_2), rt121(_3) )
        => ( ground([Xs,_1,_2,_3]), rt127(Xs), rt126(_1), rt56(_2), rt121(_3) )
         + ( is_det, mut_exclusive ).

:- true pred merge(_1,[_2|_3],Xs)
         : ( native_props:mshare([[Xs]]), ground([_1,_2,_3]), rt100(_1), term(Xs), rt41(_2), rt104(_3) )
        => ( ground([_1,Xs,_2,_3]), rt132(_1), rt117(Xs), rt41(_2), rt136(_3) )
         + ( non_det, not_mut_exclusive ).

:- true pred merge(_1,Xs,_2)
         : ( native_props:mshare([[_2]]), var(_2), ground([_1,Xs]), rt24(_1), rt27(Xs), term(_2) )
        => ( ground([_1,Xs,_2]), rt67(_1), rt47(Xs), rt45(_2) )
         + ( non_det, not_mut_exclusive ).

:- true pred merge([_2|_3],Xs,_1)
         : ( native_props:mshare([[_1]]), var(_1), ground([Xs,_2,_3]), rt49(Xs), term(_1), rt56(_2), rt48(_3) )
        => ( ground([Xs,_1,_2,_3]), rt61(Xs), rt60(_1), rt56(_2), rt48(_3) )
         + ( is_det, mut_exclusive ).

:- true pred merge(_1,[_2|_3],Xs)
         : ( native_props:mshare([[Xs]]), var(Xs), ground([_1,_2,_3]), rt28(_1), term(Xs), rt41(_2), rt29(_3) )
        => ( ground([_1,Xs,_2,_3]), rt44(_1), rt43(Xs), rt41(_2), rt29(_3) )
         + ( is_det, mut_exclusive ).

merge([],Xs,Xs).
merge(Xs,[],Xs).
merge([X|Xs],[Y|Ys],[X|Zs]) :-
        le(X,Y),
        merge(Xs,[Y|Ys],Zs).
merge([X|Xs],[Y|Ys],[Y|Zs]) :-
        gt(X,Y),
        merge([X|Xs],Ys,Zs).

:- true pred gt(_1,_2)
         : ( ground([_1,_2]), gnd(_1), gnd(_2) )
        => ( ground([_1,_2]), rt56(_1), rt58(_2) )
         + ( is_det, mut_exclusive ).

gt(s(X),s(Y)) :-
        gt(X,Y).
gt(s(X),0).

:- true pred le(_1,_2)
         : ( ground([_1,_2]), gnd(_1), gnd(_2) )
        => ( ground([_1,_2]), rt39(_1), rt41(_2) )
         + ( is_det, mut_exclusive ).

le(s(X),s(Y)) :-
        le(X,Y).
le(0,s(Y)).
le(0,0).


:- regtype rt167/1.

rt167(A) :-
        gnd(A).


:- regtype rt166/1.

rt166(A) :-
        gnd(A).


:- regtype rt165/1.

rt165(A) :-
        gnd(A).


:- regtype rt164/1.

rt164([]).
rt164([A|B]) :-
        rt165(A),
        rt164(B).


:- regtype rt163/1.

rt163([]).
rt163([A|B]) :-
        rt165(A),
        rt164(B).


:- regtype rt162/1.

rt162([]).
rt162([A|B]) :-
        rt166(A),
        rt163(B).


:- regtype rt161/1.

rt161([]).
rt161([A|B]) :-
        rt167(A),
        rt162(B).


:- regtype rt173/1.

rt173(A) :-
        gnd(A).


:- regtype rt172/1.

rt172(0).
rt172(A) :-
        gnd(A).
rt172(s(A)) :-
        rt42(A).


:- regtype rt171/1.

rt171(0).
rt171(s(A)) :-
        rt172(A).


:- regtype rt170/1.

rt170([]).
rt170([A|B]) :-
        rt41(A),
        rt118(B).


:- regtype rt169/1.

rt169([]).
rt169([A|B]) :-
        rt171(A),
        rt170(B).


:- regtype rt168/1.

rt168([]).
rt168([A|B]) :-
        rt173(A),
        rt169(B).


:- regtype rt96/1.

rt96(A) :-
        gnd(A).


:- regtype rt92/1.

rt92([]).
rt92([A|B]) :-
        rt94(A),
        rt93(B).


:- regtype rt91/1.

rt91([A|B]) :-
        rt96(A),
        rt92(B).


:- regtype rt99/1.

rt99(A) :-
        gnd(A).


:- regtype rt98/1.

rt98([]).


:- regtype rt97/1.

rt97([A|B]) :-
        rt99(A),
        rt98(B).


:- regtype rt154/1.

rt154(0).
rt154(A) :-
        gnd(A).
rt154(s(A)) :-
        rt57(A).


:- regtype rt153/1.

rt153(0).
rt153(s(A)) :-
        rt154(A).


:- regtype rt152/1.

rt152(0).
rt152(A) :-
        gnd(A).
rt152(s(A)) :-
        rt95(A).


:- regtype rt151/1.

rt151(0).
rt151(s(A)) :-
        rt152(A).


:- regtype rt150/1.

rt150([]).
rt150([A|B]) :-
        rt94(A),
        rt93(B).


:- regtype rt149/1.

rt149([]).
rt149([A|B]) :-
        rt151(A),
        rt150(B).


:- regtype rt148/1.

rt148([A|B]) :-
        rt153(A),
        rt149(B).


:- regtype rt142/1.

rt142([A|B]) :-
        rt41(A),
        rt136(B).


:- regtype rt140/1.

rt140([A|B]) :-
        rt39(A),
        rt117(B).


:- regtype rt125/1.

rt125([]).


:- regtype rt56/1.

rt56(s(A)) :-
        rt57(A).


:- regtype rt124/1.

rt124(0).
rt124(A) :-
        gnd(A).
rt124(s(A)) :-
        rt95(A).


:- regtype rt123/1.

rt123(0).
rt123(s(A)) :-
        rt124(A).


:- regtype rt122/1.

rt122([]).
rt122([A|B]) :-
        rt94(A),
        rt93(B).


:- regtype rt121/1.

rt121([]).
rt121([A|B]) :-
        rt123(A),
        rt122(B).


:- regtype rt127/1.

rt127([]).


:- regtype rt126/1.

rt126([A|B]) :-
        rt56(A),
        rt121(B).


:- regtype rt59/1.

rt59(0).
rt59(s(A)) :-
        rt59(A).


:- regtype rt58/1.

rt58(0).
rt58(s(A)) :-
        rt59(A).


:- regtype rt103/1.

rt103(0).
rt103(A) :-
        gnd(A).
rt103(s(A)) :-
        rt95(A).


:- regtype rt102/1.

rt102(0).
rt102(s(A)) :-
        rt103(A).


:- regtype rt95/1.

rt95(0).
rt95(A) :-
        gnd(A).
rt95(s(A)) :-
        rt95(A).


:- regtype rt94/1.

rt94(0).
rt94(s(A)) :-
        rt95(A).


:- regtype rt93/1.

rt93([]).
rt93([A|B]) :-
        rt94(A),
        rt93(B).


:- regtype rt101/1.

rt101([]).
rt101([A|B]) :-
        rt94(A),
        rt93(B).


:- regtype rt100/1.

rt100([]).
rt100([A|B]) :-
        rt102(A),
        rt101(B).


:- regtype rt41/1.

rt41(0).
rt41(s(A)) :-
        rt42(A).


:- regtype rt104/1.

rt104([]).


:- regtype rt57/1.

rt57(A) :-
        gnd(A).
rt57(s(A)) :-
        rt57(A).


:- regtype rt135/1.

rt135(0).
rt135(A) :-
        gnd(A).
rt135(s(A)) :-
        rt57(A).


:- regtype rt134/1.

rt134(0).
rt134(s(A)) :-
        rt135(A).


:- regtype rt133/1.

rt133([]).
rt133([A|B]) :-
        rt134(A),
        rt133(B).


:- regtype rt132/1.

rt132([]).
rt132([A|B]) :-
        rt134(A),
        rt133(B).


:- regtype rt42/1.

rt42(0).
rt42(A) :-
        gnd(A).
rt42(s(A)) :-
        rt42(A).


:- regtype rt120/1.

rt120(0).
rt120(A) :-
        gnd(A).
rt120(s(A)) :-
        rt42(A).


:- regtype rt119/1.

rt119(0).
rt119(s(A)) :-
        rt120(A).


:- regtype rt118/1.

rt118([]).
rt118([A|B]) :-
        rt41(A),
        rt118(B).


:- regtype rt117/1.

rt117([A|B]) :-
        rt119(A),
        rt118(B).


:- regtype rt136/1.

rt136([]).


:- regtype rt40/1.

rt40(0).
rt40(s(A)) :-
        rt40(A).


:- regtype rt39/1.

rt39(0).
rt39(s(A)) :-
        rt40(A).


:- regtype rt20/1.

rt20([A|B]) :-
        gnd(A),
        rt19(B).


:- regtype rt89/1.

rt89([A]) :-
        gnd(A).


:- regtype rt90/1.

rt90([A]) :-
        gnd(A).


:- regtype rt22/1.

rt22([A|B]) :-
        gnd(A),
        rt15(B).


:- regtype rt82/1.

rt82(A) :-
        gnd(A).


:- regtype rt81/1.

rt81(A) :-
        gnd(A).


:- regtype rt78/1.

rt78([]).
rt78([A|B]) :-
        rt81(A),
        rt78(B).


:- regtype rt77/1.

rt77([]).
rt77([A|B]) :-
        rt81(A),
        rt78(B).


:- regtype rt76/1.

rt76([A|B]) :-
        rt82(A),
        rt77(B).


:- regtype rt88/1.

rt88(A) :-
        gnd(A).


:- regtype rt87/1.

rt87(0).
rt87(A) :-
        gnd(A).
rt87(s(A)) :-
        rt87(A).


:- regtype rt86/1.

rt86(0).
rt86(s(A)) :-
        rt87(A).


:- regtype rt85/1.

rt85([]).
rt85([A|B]) :-
        rt86(A),
        rt85(B).


:- regtype rt84/1.

rt84([]).
rt84([A|B]) :-
        rt86(A),
        rt85(B).


:- regtype rt83/1.

rt83([A|B]) :-
        rt88(A),
        rt84(B).


:- regtype rt24/1.

rt24([A]) :-
        gnd(A).


:- regtype rt27/1.

rt27([A]) :-
        gnd(A).


:- regtype rt70/1.

rt70(0).
rt70(A) :-
        gnd(A).
rt70(s(A)) :-
        rt70(A).


:- regtype rt69/1.

rt69(0).
rt69(s(A)) :-
        rt70(A).


:- regtype rt68/1.

rt68([]).


:- regtype rt67/1.

rt67([A|B]) :-
        rt69(A),
        rt68(B).


:- regtype rt47/1.

rt47([A|B]) :-
        rt41(A),
        rt29(B).


:- regtype rt45/1.

rt45([A|B]) :-
        rt39(A),
        rt43(B).


:- regtype rt49/1.

rt49([]).


:- regtype rt48/1.

rt48([]).


:- regtype rt61/1.

rt61([]).


:- regtype rt60/1.

rt60([A|B]) :-
        rt56(A),
        rt48(B).


:- regtype rt28/1.

rt28([]).


:- regtype rt29/1.

rt29([]).


:- regtype rt44/1.

rt44([]).


:- regtype rt43/1.

rt43([A|B]) :-
        rt41(A),
        rt29(B).


:- regtype rt26/1.

rt26([A]) :-
        gnd(A).


:- regtype rt18/1.

rt18([]).
rt18([A|B]) :-
        gnd(A),
        rt18(B).


:- regtype rt17/1.

rt17([]).
rt17([A|B]) :-
        gnd(A),
        rt18(B).


:- regtype rt6/1.

rt6([A|B]) :-
        gnd(A),
        gnd(B).


:- regtype rt21/1.

rt21([A|B]) :-
        gnd(A),
        rt17(B).


:- regtype rt16/1.

rt16([]).
rt16([A|B]) :-
        gnd(A),
        rt16(B).


:- regtype rt15/1.

rt15([]).
rt15([A|B]) :-
        gnd(A),
        rt16(B).


:- regtype rt7/1.

rt7(A) :-
        gnd(A).


:- regtype rt19/1.

rt19([]).