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.

{loaded in 3432.214 msec.}
{preprocessed for plai in 0.0 msec.}
{analyzed by plai using det with local-control off in 64.004 msec.}
{written file /tmp/tmpZ9MQeg/mergesort_det_co.pl}
:- module(_1,[ms/2],[assertions]).

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

:- true pred ms(A,B)
         : ( native_props:mshare([[A]]), ground([B]), term(A), gnd(B) )
        => ( ground([A,B]), rt152(A), rt159(B) )
         + ( non_det, mut_exclusive ).

:- true pred ms(A,B)
         : ( native_props:mshare([[A],[B]]), var(B), rt19(A), term(B) )
        => ( native_props:mshare([[A,B]]), rt76(A), rt77(B) )
         + ( is_det, mut_exclusive ).

:- true pred ms(A,B)
         : ( native_props:mshare([[A],[B]]), var(B), rt21(A), term(B) )
        => ( native_props:mshare([[A,B]]), rt64(A), rt71(B) )
         + ( non_det, mut_exclusive ).

:- true pred ms(A,B)
         : ( native_props:mshare([[A],[B]]), var(B), rt19(A), term(B) )
        => ( native_props:mshare([[A,B]]), rt24(A), rt25(B) )
         + ( is_det, mut_exclusive ).

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

:- true pred split([_2,_3|_4],_1,Zs)
         : ( native_props:mshare([[_1],[Zs],[_2],[_2,_3],[_2,_3,_4],[_2,_4],[_3],[_3,_4],[_4]]), var(_1), var(Zs), term(_1), term(Zs), term(_2), term(_3), term(_4) )
        => ( native_props:mshare([[_1,Zs,_2],[_1,Zs,_2,_3],[_1,Zs,_2,_3,_4],[_1,Zs,_2,_4],[_1,Zs,_3],[_1,Zs,_3,_4],[_1,Zs,_4],[_1,_2],[_1,_2,_3],[_1,_2,_3,_4],[_1,_2,_4],[_1,_3],[_1,_3,_4],[_1,_4],[Zs,_2],[Zs,_2,_3],[Zs,_2,_3,_4],[Zs,_2,_4],[Zs,_3],[Zs,_3,_4],[Zs,_4]]), rt21(_1), rt19(Zs), term(_2), term(_3), rt16(_4) )
         + ( is_det, mut_exclusive ).

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

:- true pred split(_1,_2,Zs)
         : ( native_props:mshare([[_1],[_2],[Zs]]), var(_2), var(Zs), term(_1), term(_2), term(Zs) )
        => ( native_props:mshare([[_1,_2]]), ground([Zs]), rt16(_1), rt14(_2), rt18(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([[_1],[_1,Xs],[Xs]]), ground([_2]), rt78(_1), rt83(Xs), term(_2) )
        => ( ground([_1,Xs,_2]), rt141(_1), rt135(Xs), rt133(_2) )
         + ( non_det, not_mut_exclusive ).

:- true pred merge([_2|_3],Xs,_1)
         : ( native_props:mshare([[Xs],[Xs,_2],[Xs,_2,_3],[Xs,_3],[_2],[_2,_3],[_3]]), ground([_1]), rt121(Xs), term(_1), rt116(_2), rt118(_3) )
        => ( ground([Xs,_1,_2,_3]), rt123(Xs), rt122(_1), rt116(_2), rt118(_3) )
         + ( is_det, mut_exclusive ).

:- true pred merge(_1,[_2|_3],Xs)
         : ( native_props:mshare([[_1],[_1,_2],[_1,_2,_3],[_1,_3],[_2],[_2,_3],[_3]]), ground([Xs]), rt98(_1), term(Xs), term(_2), rt101(_3) )
        => ( ground([_1,Xs,_2,_3]), rt128(_1), rt113(Xs), term(_2), rt132(_3) )
         + ( non_det, not_mut_exclusive ).

:- true pred merge(_1,Xs,_2)
         : ( native_props:mshare([[_1],[_1,Xs],[Xs],[_2]]), var(_2), rt23(_1), rt25(Xs), term(_2) )
        => ( native_props:mshare([[_1,_2],[Xs,_2]]), rt55(_1), rt45(Xs), rt43(_2) )
         + ( non_det, not_mut_exclusive ).

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

:- true pred merge(_1,[_2|_3],Xs)
         : ( native_props:mshare([[_1],[_1,_2],[_1,_2,_3],[_1,_3],[Xs],[_2],[_2,_3],[_3]]), var(Xs), rt26(_1), term(Xs), term(_2), rt27(_3) )
        => ( native_props:mshare([[Xs,_2],[Xs,_2,_3],[Xs,_3]]), ground([_1]), rt42(_1), rt41(Xs), term(_2), rt27(_3) )
         + ( is_det, mut_exclusive ).

merge([],Xs,Xs).
merge(Xs,[],Xs).
merge([X|Xs],[Y|Ys],[X|Zs]) :-
        less(X,s(Y)),
        merge(Xs,[Y|Ys],Zs).
merge([X|Xs],[Y|Ys],[Y|Zs]) :-
        less(Y,X),
        merge([X|Xs],Ys,Zs).

:- true pred less(_1,_2)
         : ( native_props:mshare([[_2]]), ground([_1]), term(_1), term(_2) )
        => ( native_props:mshare([[_2]]), ground([_1]), rt92(_1), rt88(_2) )
         + ( is_det, mut_exclusive ).

:- true pred less(_1,s(_2))
         : ( native_props:mshare([[_2]]), ground([_1]), term(_1), term(_2) )
        => ( native_props:mshare([[_2]]), ground([_1]), rt96(_1), term(_2) )
         + ( is_det, mut_exclusive ).

:- true pred less(_1,_2)
         : ( native_props:mshare([[_1],[_1,_2],[_2]]), term(_1), term(_2) )
        => ( native_props:mshare([[_2]]), ground([_1]), rt34(_1), rt30(_2) )
         + ( is_det, mut_exclusive ).

:- true pred less(_1,s(_2))
         : ( native_props:mshare([[_1],[_1,_2],[_2]]), term(_1), term(_2) )
        => ( native_props:mshare([[_2]]), ground([_1]), rt38(_1), term(_2) )
         + ( is_det, mut_exclusive ).

less(0,s(_1)).
less(s(X),s(Y)) :-
        less(X,Y).


:- regtype rt158/1.

rt158(A) :-
        term(A).


:- regtype rt157/1.

rt157(A) :-
        term(A).


:- regtype rt156/1.

rt156(A) :-
        term(A).


:- regtype rt155/1.

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


:- regtype rt154/1.

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


:- regtype rt153/1.

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


:- regtype rt152/1.

rt152([]).
rt152([A|B]) :-
        rt158(A),
        rt153(B).


:- regtype rt163/1.

rt163(A) :-
        gnd(A).


:- regtype rt162/1.

rt162(A) :-
        term(A).


:- regtype rt161/1.

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


:- regtype rt160/1.

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


:- regtype rt159/1.

rt159([]).
rt159([A|B]) :-
        rt163(A),
        rt160(B).


:- regtype rt82/1.

rt82(A) :-
        term(A).


:- regtype rt79/1.

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


:- regtype rt78/1.

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


:- regtype rt85/1.

rt85(A) :-
        term(A).


:- regtype rt84/1.

rt84([]).


:- regtype rt83/1.

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


:- regtype rt146/1.

rt146(0).
rt146(A) :-
        term(A).
rt146(s(A)) :-
        rt146(A).


:- regtype rt145/1.

rt145(0).
rt145(s(A)) :-
        rt146(A).


:- regtype rt144/1.

rt144(A) :-
        term(A).


:- regtype rt143/1.

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


:- regtype rt142/1.

rt142([]).
rt142([A|B]) :-
        rt144(A),
        rt143(B).


:- regtype rt141/1.

rt141([A|B]) :-
        rt145(A),
        rt142(B).


:- regtype rt135/1.

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


:- regtype rt133/1.

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


:- regtype rt121/1.

rt121([]).


:- regtype rt117/1.

rt117(A) :-
        term(A).
rt117(s(A)) :-
        rt117(A).


:- regtype rt116/1.

rt116(s(A)) :-
        rt117(A).


:- regtype rt119/1.

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


:- regtype rt118/1.

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


:- regtype rt123/1.

rt123([]).


:- regtype rt122/1.

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


:- regtype rt93/1.

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


:- regtype rt92/1.

rt92(0).
rt92(s(A)) :-
        rt93(A).


:- regtype rt88/1.

rt88(s(A)) :-
        term(A).


:- regtype rt100/1.

rt100(A) :-
        term(A).


:- regtype rt81/1.

rt81(A) :-
        term(A).


:- regtype rt80/1.

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


:- regtype rt99/1.

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


:- regtype rt98/1.

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


:- regtype rt101/1.

rt101([]).


:- regtype rt131/1.

rt131(0).
rt131(A) :-
        term(A).
rt131(s(A)) :-
        rt131(A).


:- regtype rt130/1.

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


:- regtype rt120/1.

rt120(A) :-
        term(A).


:- regtype rt129/1.

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


:- regtype rt128/1.

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


:- regtype rt115/1.

rt115(A) :-
        term(A).


:- regtype rt114/1.

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


:- regtype rt113/1.

rt113([A|B]) :-
        rt115(A),
        rt114(B).


:- regtype rt132/1.

rt132([]).


:- regtype rt97/1.

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


:- regtype rt96/1.

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


:- regtype rt19/1.

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


:- regtype rt76/1.

rt76([A]) :-
        term(A).


:- regtype rt77/1.

rt77([A]) :-
        term(A).


:- regtype rt21/1.

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


:- regtype rt70/1.

rt70(A) :-
        term(A).


:- regtype rt69/1.

rt69(A) :-
        term(A).


:- regtype rt66/1.

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


:- regtype rt65/1.

rt65([]).
rt65([A|B]) :-
        rt69(A),
        rt66(B).


:- regtype rt64/1.

rt64([A|B]) :-
        rt70(A),
        rt65(B).


:- regtype rt75/1.

rt75(A) :-
        term(A).


:- regtype rt74/1.

rt74(A) :-
        term(A).


:- regtype rt73/1.

rt73([]).
rt73([A|B]) :-
        rt74(A),
        rt73(B).


:- regtype rt72/1.

rt72([]).
rt72([A|B]) :-
        rt74(A),
        rt73(B).


:- regtype rt71/1.

rt71([A|B]) :-
        rt75(A),
        rt72(B).


:- regtype rt23/1.

rt23([A]) :-
        term(A).


:- regtype rt25/1.

rt25([A]) :-
        term(A).


:- regtype rt58/1.

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


:- regtype rt57/1.

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


:- regtype rt56/1.

rt56([]).


:- regtype rt55/1.

rt55([A|B]) :-
        rt57(A),
        rt56(B).


:- regtype rt45/1.

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


:- regtype rt43/1.

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


:- regtype rt47/1.

rt47([]).


:- regtype rt30/1.

rt30(s(A)) :-
        term(A).


:- regtype rt46/1.

rt46([]).


:- regtype rt49/1.

rt49([]).


:- regtype rt48/1.

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


:- regtype rt35/1.

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


:- regtype rt34/1.

rt34(0).
rt34(s(A)) :-
        rt35(A).


:- regtype rt26/1.

rt26([]).


:- regtype rt27/1.

rt27([]).


:- regtype rt42/1.

rt42([]).


:- regtype rt41/1.

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


:- regtype rt40/1.

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


:- regtype rt39/1.

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


:- regtype rt38/1.

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


:- regtype rt24/1.

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


:- regtype rt17/1.

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


:- regtype rt16/1.

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


:- regtype rt6/1.

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


:- regtype rt20/1.

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


:- regtype rt15/1.

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


:- regtype rt14/1.

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


:- regtype rt18/1.

rt18([]).