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/tmp1kszPw/serialize.pl
}
{In /tmp/tmp1kszPw/serialize.pl
{loaded in 3412.213 msec.}
{preprocessed for plai in 4.0 msec.}
{analyzed by plai using det with local-control off in 112.007 msec.}
{written file /tmp/tmp1kszPw/serialize_det_co.pl}
:- module(_1,[serialize0/2],[assertions]).

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

:- true pred serialize0(A,B)
         : ( native_props:mshare([[B]]), ground([A]), gnd(A), term(B) )
        => ( native_props:mshare([[B]]), ground([A]), rt9(A), rt11(B) )
         + ( is_det, mut_exclusive ).

serialize0(L,R) :-
        pairlists(L,R,A),
        arrange0(A,T),
        numbered(T,1,N).

:- true pred pairlists(_1,_2,_3)
         : ( native_props:mshare([[_2],[_3]]), var(_3), ground([_1]), gnd(_1), term(_2), term(_3) )
        => ( native_props:mshare([[_2,_3]]), ground([_1]), rt9(_1), rt11(_2), rt13(_3) )
         + ( is_det, mut_exclusive ).

pairlists([X|L],[Y|R],[pair(X,Y)|A]) :-
        pairlists(L,R,A).
pairlists([],[],[]).

:- true pred arrange0(_1,_2)
         : ( native_props:mshare([[_1],[_2]]), var(_2), rt13(_1), term(_2) )
        => ( native_props:mshare([[_1,_2]]), rt88(_1), rt91(_2) )
         + ( is_det, mut_exclusive ).

:- true pred arrange0(_1,_2)
         : ( native_props:mshare([[_1],[_2]]), var(_2), rt63(_1), term(_2) )
        => ( native_props:mshare([[_1,_2]]), rt81(_1), rt78(_2) )
         + ( is_det, mut_exclusive ).

arrange0([X|L],tree(T1,X,T2)) :-
        split0(L,X,L1,L2),
        arrange0(L1,T1),
        arrange0(L2,T2).
arrange0([],void).

:- true pred split0(_2,_1,L1,L2)
         : ( native_props:mshare([[_2],[_2,_1],[_1],[L1],[L2]]), var(L1), var(L2), rt14(_2), rt17(_1), term(L1), term(L2) )
        => ( native_props:mshare([[_2,_1],[_2,_1,L1],[_2,_1,L1,L2],[_2,_1,L2],[_2,L1],[_2,L1,L2],[_2,L2],[_1]]), rt45(_2), rt62(_1), rt63(L1), rt57(L2) )
         + ( is_det, mut_exclusive ).

:- true pred split0(_1,pair(_2,_3),L1,L2)
         : ( native_props:mshare([[_1],[_1,_3],[L1],[L2],[_3]]), var(L1), var(L2), ground([_2]), rt14(_1), term(L1), term(L2), arithexpression(_2), term(_3) )
        => ( native_props:mshare([[_1,L1],[_1,L1,_3],[_1,L2],[_1,L2,_3],[_1,_3],[_3]]), ground([_2]), rt29(_1), rt31(L1), rt37(L2), arithexpression(_2), term(_3) )
         + ( is_det, mut_exclusive ).

split0([pair(X1,N1)|L],pair(X2,Y2),[pair(X1,N1)|L1],L2) :-
        X1X2,
        !,
        split0(L,pair(X2,Y2),L1,L2).
split0([],_1,[],[]).

:- true pred numbered(_1,1,N)
         : ( native_props:mshare([[_1],[N]]), var(N), rt91(_1), term(N) )
        => ( native_props:mshare([[_1]]), ground([N]), rt124(_1), num(N) )
         + ( is_det, mut_exclusive ).

:- true pred numbered(_1,N0,N)
         : ( native_props:mshare([[_1],[N]]), var(N), ground([N0]), rt113(_1), num(N0), term(N) )
        => ( native_props:mshare([[_1]]), ground([N0,N]), rt119(_1), num(N0), num(N) )
         + ( is_det, mut_exclusive ).

:- true pred numbered(_1,N0,N)
         : ( native_props:mshare([[_1],[_1,N],[N]]), ground([N0]), rt96(_1), num(N0), term(N) )
        => ( native_props:mshare([[_1]]), ground([N0,N]), rt105(_1), num(N0), num(N) )
         + ( is_det, mut_exclusive ).

:- true pred numbered(_1,N0,N)
         : ( native_props:mshare([[_1],[_1,N],[N]]), ground([N0]), rt95(_1), rt100(N0), term(N) )
        => ( native_props:mshare([[_1]]), ground([N0,N]), rt110(_1), rt100(N0), num(N) )
         + ( is_det, mut_exclusive ).

numbered(tree(T1,pair(X,N1),T2),N0,N) :-
        numbered(T1,N0,N1),
        N2 is N1+1,
        numbered(T2,N2,N).
numbered(void,N,N).

palin("ABLE WAS I ERE I SAW ELBA").

go(T,S) :-
        time(_1),
        palin(X),
        serialize0(X,S),
        time(T).

time(T) :-
        serialize:statistics(runtime,[_1,T]).


:- regtype rt10/1.

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


:- regtype rt9/1.

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


:- regtype rt12/1.

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


:- regtype rt11/1.

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


:- regtype rt92/1.

rt92(void).
rt92(tree(A,B,C)) :-
        rt94(A),
        rt62(B),
        rt93(C).


:- regtype rt91/1.

rt91(void).
rt91(tree(A,B,C)) :-
        rt95(A),
        rt62(B),
        rt92(C).


:- regtype rt130/1.

rt130(void).
rt130(tree(A,pair(B,C),D)) :-
        rt130(A),
        gnd(B),
        rt100(C),
        rt129(D).


:- regtype rt129/1.

rt129(void).
rt129(tree(A,pair(B,C),D)) :-
        rt107(A),
        gnd(B),
        num(C),
        rt129(D).


:- regtype rt128/1.

rt128(void).
rt128(tree(A,pair(B,C),D)) :-
        rt130(A),
        gnd(B),
        rt100(C),
        rt129(D).


:- regtype rt127/1.

rt127(void).
rt127(tree(A,pair(B,C),D)) :-
        rt127(A),
        gnd(B),
        num(C),
        rt126(D).


:- regtype rt126/1.

rt126(void).
rt126(tree(A,pair(B,C),D)) :-
        rt127(A),
        gnd(B),
        num(C),
        rt126(D).


:- regtype rt125/1.

rt125(void).
rt125(tree(A,pair(B,C),D)) :-
        rt127(A),
        gnd(B),
        num(C),
        rt126(D).


:- regtype rt124/1.

rt124(void).
rt124(tree(A,pair(B,C),D)) :-
        rt128(A),
        gnd(B),
        num(C),
        rt125(D).


:- regtype rt115/1.

rt115(void).
rt115(tree(A,B,C)) :-
        rt94(A),
        rt62(B),
        rt93(C).


:- regtype rt94/1.

rt94(void).
rt94(tree(A,B,C)) :-
        rt94(A),
        rt62(B),
        rt93(C).


:- regtype rt93/1.

rt93(void).
rt93(tree(A,B,C)) :-
        rt94(A),
        rt62(B),
        rt93(C).


:- regtype rt114/1.

rt114(void).
rt114(tree(A,B,C)) :-
        rt94(A),
        rt62(B),
        rt93(C).


:- regtype rt113/1.

rt113(void).
rt113(tree(A,B,C)) :-
        rt115(A),
        rt62(B),
        rt114(C).


:- regtype rt121/1.

rt121(void).
rt121(tree(A,pair(B,C),D)) :-
        rt121(A),
        gnd(B),
        num(C),
        rt120(D).


:- regtype rt120/1.

rt120(void).
rt120(tree(A,pair(B,C),D)) :-
        rt121(A),
        gnd(B),
        num(C),
        rt120(D).


:- regtype rt119/1.

rt119(void).
rt119(tree(A,pair(B,C),D)) :-
        rt121(A),
        gnd(B),
        num(C),
        rt120(D).


:- regtype rt96/1.

rt96(void).
rt96(tree(A,B,C)) :-
        rt97(A),
        rt62(B),
        rt96(C).


:- regtype rt105/1.

rt105(void).
rt105(tree(A,pair(B,C),D)) :-
        rt107(A),
        gnd(B),
        num(C),
        rt106(D).


:- regtype rt97/1.

rt97(void).
rt97(tree(A,B,C)) :-
        rt97(A),
        rt62(B),
        rt96(C).


:- regtype rt95/1.

rt95(void).
rt95(tree(A,B,C)) :-
        rt97(A),
        rt62(B),
        rt96(C).


:- regtype rt100/1.

rt100(1).


:- regtype rt112/1.

rt112(void).
rt112(tree(A,pair(B,C),D)) :-
        rt112(A),
        gnd(B),
        rt100(C),
        rt111(D).


:- regtype rt106/1.

rt106(void).
rt106(tree(A,pair(B,C),D)) :-
        rt107(A),
        gnd(B),
        num(C),
        rt106(D).


:- regtype rt107/1.

rt107(void).
rt107(tree(A,pair(B,C),D)) :-
        rt107(A),
        gnd(B),
        num(C),
        rt106(D).


:- regtype rt111/1.

rt111(void).
rt111(tree(A,pair(B,C),D)) :-
        rt107(A),
        gnd(B),
        num(C),
        rt111(D).


:- regtype rt110/1.

rt110(void).
rt110(tree(A,pair(B,C),D)) :-
        rt112(A),
        gnd(B),
        rt100(C),
        rt111(D).


:- regtype rt13/1.

rt13([]).
rt13([pair(A,B)|C]) :-
        gnd(A),
        term(B),
        rt14(C).


:- regtype rt90/1.

rt90(pair(A,B)) :-
        gnd(A),
        term(B).


:- regtype rt89/1.

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


:- regtype rt88/1.

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


:- regtype rt64/1.

rt64([]).
rt64([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt64(C).


:- regtype rt63/1.

rt63([]).
rt63([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt64(C).


:- regtype rt83/1.

rt83(pair(A,B)) :-
        gnd(A),
        term(B).


:- regtype rt82/1.

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


:- regtype rt81/1.

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


:- regtype rt80/1.

rt80(void).
rt80(tree(A,B,C)) :-
        rt80(A),
        rt62(B),
        rt79(C).


:- regtype rt79/1.

rt79(void).
rt79(tree(A,B,C)) :-
        rt80(A),
        rt62(B),
        rt79(C).


:- regtype rt78/1.

rt78(void).
rt78(tree(A,B,C)) :-
        rt80(A),
        rt62(B),
        rt79(C).


:- regtype rt14/1.

rt14([]).
rt14([pair(A,B)|C]) :-
        gnd(A),
        term(B),
        rt14(C).


:- regtype rt17/1.

rt17(pair(A,B)) :-
        gnd(A),
        term(B).


:- regtype rt46/1.

rt46([]).
rt46([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt46(C).


:- regtype rt45/1.

rt45([]).
rt45([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt46(C).


:- regtype rt62/1.

rt62(pair(A,B)) :-
        gnd(A),
        term(B).


:- regtype rt58/1.

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


:- regtype rt57/1.

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


:- regtype rt30/1.

rt30([]).
rt30([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt30(C).


:- regtype rt29/1.

rt29([]).
rt29([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt30(C).


:- regtype rt32/1.

rt32([]).
rt32([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt32(C).


:- regtype rt31/1.

rt31([]).
rt31([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt32(C).


:- regtype rt38/1.

rt38([]).
rt38([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt38(C).


:- regtype rt37/1.

rt37([]).
rt37([pair(A,B)|C]) :-
        arithexpression(A),
        term(B),
        rt38(C).