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 3380.211 msec.}
{preprocessed for plai in 0.0 msec.}
{analyzed by plai using det with local-control off in 28.001 msec.}
{written file /tmp/tmpLTNTls/mergesort-oi_det_co.pl}
:- module(_1,[mergesort/2],[assertions]).

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

:- true pred mergesort(A,B)
         : ( native_props:mshare([[A]]), ground([B]), term(A), gnd(B) )
        => ( ground([A,B]), rt55(A), rt59(B) )
         + ( is_det, mut_exclusive ).

:- true pred mergesort(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 ).

:- true pred mergesort(A,B)
         : ( native_props:mshare([[A],[B]]), var(B), rt21(A), term(B) )
        => ( native_props:mshare([[A,B]]), rt38(A), rt36(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],[_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]), rt36(_1), rt25(Xs), term(_2) )
        => ( ground([_1,Xs,_2]), rt48(_1), rt49(Xs), rt47(_2) )
         + ( is_det, mut_exclusive ).

:- true pred merge([_2|_3],Xs,_1)
         : ( native_props:mshare([[Xs],[Xs,_3],[_3]]), ground([_1,_2]), rt42(Xs), term(_1), term(_2), rt43(_3) )
        => ( ground([Xs,_1,_2,_3]), rt46(Xs), rt45(_1), term(_2), rt43(_3) )
         + ( is_det, 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,Xs,_2],[_1,_2]]), rt31(_1), rt32(Xs), rt30(_2) )
         + ( is_det, 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), rt27(Xs), term(_1), term(_2), rt26(_3) )
        => ( native_props:mshare([[_1,_2],[_1,_2,_3],[_1,_3]]), ground([Xs]), rt29(Xs), rt28(_1), term(_2), rt26(_3) )
         + ( is_det, mut_exclusive ).

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


:- regtype rt58/1.

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


:- regtype rt57/1.

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


:- regtype rt56/1.

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


:- regtype rt55/1.

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


:- regtype rt61/1.

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


:- regtype rt60/1.

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


:- regtype rt59/1.

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


:- regtype rt37/1.

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


:- regtype rt36/1.

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


:- regtype rt25/1.

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


:- regtype rt48/1.

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


:- regtype rt49/1.

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


:- regtype rt47/1.

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


:- regtype rt42/1.

rt42([]).


:- regtype rt44/1.

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


:- regtype rt43/1.

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


:- regtype rt46/1.

rt46([]).


:- regtype rt45/1.

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


:- regtype rt19/1.

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


:- regtype rt24/1.

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


:- regtype rt21/1.

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


:- regtype rt41/1.

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


:- regtype rt40/1.

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


:- regtype rt39/1.

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


:- regtype rt38/1.

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


:- regtype rt23/1.

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


:- regtype rt31/1.

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


:- regtype rt32/1.

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


:- regtype rt30/1.

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


:- regtype rt27/1.

rt27([]).


:- regtype rt26/1.

rt26([]).


:- regtype rt29/1.

rt29([]).


:- regtype rt28/1.

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


:- 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([]).