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/tmpZxCxhL/mergesort_ap.pl
}
{loaded in 3408.213 msec.}
{preprocessed for plai in 0.0 msec.}
{analyzed by plai using det with local-control off in 88.005 msec.}
{written file /tmp/tmpZxCxhL/mergesort_ap_det_co.pl}
:- module(_1,[mergesort/3],[assertions]).

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

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

:- true pred mergesort(A,B,C)
         : ( native_props:mshare([[B],[C]]), var(B), ground([A]), rt21(A), term(B), rt23(C) )
        => ( native_props:mshare([[C]]), ground([A,B]), rt91(A), rt92(B), rt23(C) )
         + ( is_det, mut_exclusive ).

:- true pred mergesort(A,B,C)
         : ( native_props:mshare([[B],[C]]), var(B), ground([A]), rt24(A), term(B), rt23(C) )
        => ( native_props:mshare([[C]]), ground([A,B]), rt78(A), rt85(B), rt23(C) )
         + ( non_det, mut_exclusive ).

:- true pred mergesort(A,B,C)
         : ( native_props:mshare([[B],[C]]), var(B), ground([A]), rt21(A), term(B), rt23(C) )
        => ( native_props:mshare([[C]]), ground([A,B]), rt28(A), rt29(B), rt23(C) )
         + ( is_det, mut_exclusive ).

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

:- true pred split([_2,_3|_4],_1,Zs,[_5|_6])
         : ( native_props:mshare([[_1],[Zs],[_5],[_5,_6],[_6]]), var(_1), var(Zs), ground([_2,_3,_4]), term(_1), term(Zs), gnd(_2), gnd(_3), gnd(_4), term(_5), term(_6) )
        => ( native_props:mshare([[_5],[_5,_6],[_6]]), ground([_1,Zs,_2,_3,_4]), rt24(_1), rt21(Zs), gnd(_2), gnd(_3), rt18(_4), term(_5), rt23(_6) )
         + ( is_det, mut_exclusive ).

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

:- true pred split(_1,_2,Zs,Ls)
         : ( native_props:mshare([[_2],[Zs],[Ls]]), var(_2), var(Zs), ground([_1]), rt7(_1), term(_2), term(Zs), term(Ls) )
        => ( native_props:mshare([[Ls]]), ground([_1,_2,Zs]), rt18(_1), rt16(_2), rt20(Zs), term(Ls) )
         + ( is_det, mut_exclusive ).

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

:- true pred merge(_1,Xs,_2,[_3|_4])
         : ( native_props:mshare([[_2],[_2,_3],[_2,_3,_4],[_2,_4],[_3],[_3,_4],[_4]]), ground([_1,Xs]), rt93(_1), rt99(Xs), term(_2), term(_3), rt23(_4) )
        => ( native_props:mshare([[_3],[_3,_4],[_4]]), ground([_1,Xs,_2]), rt177(_1), rt187(Xs), rt176(_2), term(_3), term(_4) )
         + ( non_det, not_mut_exclusive ).

:- true pred merge([_2|_3],Xs,_1,Ls)
         : ( native_props:mshare([[_1],[_1,Ls],[Ls]]), ground([Xs,_2,_3]), rt135(Xs), term(_1), term(Ls), rt59(_2), rt131(_3) )
        => ( native_props:mshare([[Ls]]), ground([Xs,_1,_2,_3]), rt137(Xs), rt136(_1), term(Ls), rt59(_2), rt131(_3) )
         + ( is_det, mut_exclusive ).

:- true pred merge(_1,[_2|_3],Xs,Ls)
         : ( native_props:mshare([[Xs],[Xs,Ls],[Ls]]), ground([_1,_2,_3]), rt102(_1), term(Xs), rt23(Ls), rt43(_2), rt106(_3) )
        => ( native_props:mshare([[Ls]]), ground([_1,Xs,_2,_3]), rt153(_1), rt160(Xs), rt172(Ls), rt169(_2), rt171(_3) )
         + ( non_det, not_mut_exclusive ).

:- true pred merge(_1,[_2|_3],Xs,Ls)
         : ( native_props:mshare([[Xs],[Xs,Ls],[Ls]]), ground([_1,_2,_3]), rt110(_1), term(Xs), term(Ls), rt43(_2), rt106(_3) )
        => ( native_props:mshare([[Ls]]), ground([_1,Xs,_2,_3]), rt123(_1), rt127(Xs), term(Ls), rt141(_2), rt143(_3) )
         + ( non_det, not_mut_exclusive ).

:- true pred merge(_1,Xs,_2,[_3|_4])
         : ( native_props:mshare([[_2],[_3],[_3,_4],[_4]]), var(_2), ground([_1,Xs]), rt26(_1), rt29(Xs), term(_2), term(_3), rt23(_4) )
        => ( native_props:mshare([[_3],[_3,_4],[_4]]), ground([_1,Xs,_2]), rt48(_1), rt68(Xs), rt47(_2), term(_3), rt23(_4) )
         + ( non_det, not_mut_exclusive ).

:- true pred merge([_2|_3],Xs,_1,Ls)
         : ( native_props:mshare([[_1],[Ls]]), var(_1), ground([Xs,_2,_3]), rt51(Xs), term(_1), rt23(Ls), rt59(_2), rt50(_3) )
        => ( native_props:mshare([[Ls]]), ground([Xs,_1,_2,_3]), rt64(Xs), rt63(_1), rt23(Ls), rt59(_2), rt50(_3) )
         + ( is_det, mut_exclusive ).

:- true pred merge(_1,[_2|_3],Xs,Ls)
         : ( native_props:mshare([[Xs],[Ls]]), var(Xs), ground([_1,_2,_3]), rt30(_1), term(Xs), rt23(Ls), rt43(_2), rt31(_3) )
        => ( native_props:mshare([[Ls]]), ground([_1,Xs,_2,_3]), rt46(_1), rt45(Xs), rt23(Ls), rt43(_2), rt31(_3) )
         + ( is_det, mut_exclusive ).

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

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

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

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

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


:- regtype rt204/1.

rt204(A) :-
        gnd(A).


:- regtype rt203/1.

rt203(A) :-
        gnd(A).


:- regtype rt202/1.

rt202(A) :-
        gnd(A).


:- regtype rt201/1.

rt201([]).
rt201([A|B]) :-
        rt202(A),
        rt201(B).


:- regtype rt200/1.

rt200([]).
rt200([A|B]) :-
        rt202(A),
        rt201(B).


:- regtype rt199/1.

rt199([]).
rt199([A|B]) :-
        rt203(A),
        rt200(B).


:- regtype rt198/1.

rt198([]).
rt198([A|B]) :-
        rt204(A),
        rt199(B).


:- regtype rt210/1.

rt210(A) :-
        gnd(A).


:- regtype rt209/1.

rt209(0).
rt209(s(A)) :-
        rt44(A).


:- regtype rt208/1.

rt208(0).
rt208(s(A)) :-
        rt209(A).


:- regtype rt207/1.

rt207([]).
rt207([A|B]) :-
        rt208(A),
        rt207(B).


:- regtype rt206/1.

rt206([]).
rt206([A|B]) :-
        rt208(A),
        rt207(B).


:- regtype rt205/1.

rt205([]).
rt205([A|B]) :-
        rt210(A),
        rt206(B).


:- regtype rt98/1.

rt98(A) :-
        gnd(A).


:- regtype rt94/1.

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


:- regtype rt93/1.

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


:- regtype rt101/1.

rt101(A) :-
        gnd(A).


:- regtype rt100/1.

rt100([]).


:- regtype rt99/1.

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


:- regtype rt23/1.

rt23([A|B]) :-
        term(A),
        term(B).


:- regtype rt177/1.

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


:- regtype rt190/1.

rt190(0).
rt190(s(A)) :-
        rt62(A).


:- regtype rt189/1.

rt189(0).
rt189(s(A)) :-
        rt190(A).


:- regtype rt188/1.

rt188([]).


:- regtype rt187/1.

rt187([A|B]) :-
        rt189(A),
        rt188(B).


:- regtype rt176/1.

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


:- regtype rt135/1.

rt135([]).


:- regtype rt60/1.

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


:- regtype rt59/1.

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


:- regtype rt134/1.

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


:- regtype rt133/1.

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


:- regtype rt132/1.

rt132([]).
rt132([A|B]) :-
        rt96(A),
        rt95(B).


:- regtype rt131/1.

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


:- regtype rt137/1.

rt137([]).


:- regtype rt136/1.

rt136([A|B]) :-
        rt59(A),
        rt131(B).


:- regtype rt61/1.

rt61(0).
rt61(s(A)) :-
        rt62(A).


:- regtype rt105/1.

rt105(0).
rt105(s(A)) :-
        rt97(A).


:- regtype rt104/1.

rt104(0).
rt104(s(A)) :-
        rt105(A).


:- regtype rt103/1.

rt103([]).
rt103([A|B]) :-
        rt96(A),
        rt95(B).


:- regtype rt102/1.

rt102([]).
rt102([A|B]) :-
        rt104(A),
        rt103(B).


:- regtype rt43/1.

rt43(0).
rt43(s(A)) :-
        rt44(A).


:- regtype rt106/1.

rt106([]).


:- regtype rt156/1.

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


:- regtype rt155/1.

rt155(0).
rt155(s(A)) :-
        rt156(A).


:- regtype rt154/1.

rt154([]).
rt154([A|B]) :-
        rt155(A),
        rt154(B).


:- regtype rt153/1.

rt153([]).
rt153([A|B]) :-
        rt155(A),
        rt154(B).


:- regtype rt163/1.

rt163(0).
rt163(s(A)) :-
        rt44(A).


:- regtype rt162/1.

rt162(0).
rt162(s(A)) :-
        rt163(A).


:- regtype rt161/1.

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


:- regtype rt160/1.

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


:- regtype rt173/1.

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


:- regtype rt172/1.

rt172([A|B]) :-
        term(A),
        rt173(B).


:- regtype rt170/1.

rt170(0).
rt170(s(A)) :-
        rt62(A).


:- regtype rt169/1.

rt169(0).
rt169(s(A)) :-
        rt170(A).


:- regtype rt171/1.

rt171([]).


:- regtype rt113/1.

rt113(0).
rt113(s(A)) :-
        rt97(A).


:- regtype rt112/1.

rt112(0).
rt112(s(A)) :-
        rt113(A).


:- regtype rt97/1.

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


:- regtype rt96/1.

rt96(0).
rt96(s(A)) :-
        rt97(A).


:- regtype rt95/1.

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


:- regtype rt111/1.

rt111([]).
rt111([A|B]) :-
        rt96(A),
        rt95(B).


:- regtype rt110/1.

rt110([]).
rt110([A|B]) :-
        rt112(A),
        rt111(B).


:- regtype rt126/1.

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


:- regtype rt125/1.

rt125(0).
rt125(s(A)) :-
        rt126(A).


:- regtype rt124/1.

rt124([]).
rt124([A|B]) :-
        rt125(A),
        rt124(B).


:- regtype rt123/1.

rt123([]).
rt123([A|B]) :-
        rt125(A),
        rt124(B).


:- regtype rt44/1.

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


:- regtype rt130/1.

rt130(0).
rt130(s(A)) :-
        rt44(A).


:- regtype rt129/1.

rt129(0).
rt129(s(A)) :-
        rt130(A).


:- regtype rt128/1.

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


:- regtype rt127/1.

rt127([A|B]) :-
        rt129(A),
        rt128(B).


:- regtype rt62/1.

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


:- regtype rt142/1.

rt142(0).
rt142(s(A)) :-
        rt62(A).


:- regtype rt141/1.

rt141(0).
rt141(s(A)) :-
        rt142(A).


:- regtype rt143/1.

rt143([]).


:- regtype rt42/1.

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


:- regtype rt41/1.

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


:- regtype rt21/1.

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


:- regtype rt91/1.

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


:- regtype rt92/1.

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


:- regtype rt24/1.

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


:- regtype rt84/1.

rt84(A) :-
        gnd(A).


:- regtype rt83/1.

rt83(A) :-
        gnd(A).


:- regtype rt80/1.

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


:- regtype rt79/1.

rt79([]).
rt79([A|B]) :-
        rt83(A),
        rt80(B).


:- regtype rt78/1.

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


:- regtype rt90/1.

rt90(A) :-
        gnd(A).


:- regtype rt89/1.

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


:- regtype rt88/1.

rt88(0).
rt88(s(A)) :-
        rt89(A).


:- regtype rt87/1.

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


:- regtype rt86/1.

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


:- regtype rt85/1.

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


:- regtype rt26/1.

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


:- regtype rt29/1.

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


:- regtype rt48/1.

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


:- regtype rt71/1.

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


:- regtype rt70/1.

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


:- regtype rt69/1.

rt69([]).


:- regtype rt68/1.

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


:- regtype rt47/1.

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


:- regtype rt51/1.

rt51([]).


:- regtype rt50/1.

rt50([]).


:- regtype rt64/1.

rt64([]).


:- regtype rt63/1.

rt63([A|B]) :-
        rt59(A),
        rt50(B).


:- regtype rt30/1.

rt30([]).


:- regtype rt31/1.

rt31([]).


:- regtype rt46/1.

rt46([]).


:- regtype rt45/1.

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


:- regtype rt28/1.

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


:- regtype rt19/1.

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


:- regtype rt18/1.

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


:- regtype rt6/1.

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


:- regtype rt22/1.

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


:- regtype rt17/1.

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


:- regtype rt16/1.

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


:- regtype rt7/1.

rt7(A) :-
        gnd(A).


:- regtype rt20/1.

rt20([]).