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/tmp1SBV3t/hanoiapp.suc.pl
}
{loaded in 3392.212 msec.}
{preprocessed for plai in 0.0 msec.}
{analyzed by plai using det with local-control off in 40.002 msec.}
{written file /tmp/tmp1SBV3t/hanoiapp.suc_det_co.pl}
:- module(_1,[shanoi/5],[assertions]).

:- entry shanoi(A,B,C,D,E)
         : ( ground(A), ground(B), ground(C), ground(D) ).

:- true pred shanoi(A,B,C,D,E)
         : ( native_props:mshare([[E]]), ground([A,B,C,D]), gnd(A), gnd(B), gnd(C), gnd(D), term(E) )
        => ( ground([A,B,C,D,E]), rt93(A), gnd(B), gnd(C), gnd(D), rt97(E) )
         + ( is_det, mut_exclusive ).

:- true pred shanoi(A,B,C,D,E)
         : ( native_props:mshare([[E]]), var(E), ground([A,B,C,D]), rt31(A), gnd(B), gnd(C), gnd(D), term(E) )
        => ( ground([A,B,C,D,E]), rt68(A), gnd(B), gnd(C), gnd(D), rt72(E) )
         + ( is_det, mut_exclusive ).

:- true pred shanoi(A,B,C,D,E)
         : ( native_props:mshare([[E]]), var(E), ground([A,B,C,D]), rt2(A), gnd(B), gnd(C), gnd(D), term(E) )
        => ( ground([A,B,C,D,E]), rt31(A), gnd(B), gnd(C), gnd(D), rt35(E) )
         + ( is_det, mut_exclusive ).

:- true pred shanoi(A,B,C,D,E)
         : ( native_props:mshare([[E]]), var(E), ground([A,B,C,D]), rt3(A), gnd(B), gnd(C), gnd(D), term(E) )
        => ( ground([A,B,C,D,E]), rt5(A), gnd(B), gnd(C), gnd(D), rt6(E) )
         + ( is_det, mut_exclusive ).

shanoi(s(0),A,B,C,[mv(A,C)]).
shanoi(s(s(X)),A,B,C,M) :-
        eq(N1,s(X)),
        shanoi(N1,A,C,B,M1),
        shanoi(N1,B,A,C,M2),
        append(M1,[mv(A,C)],T),
        append(T,M2,M).

:- true pred append(_1,L,_2)
         : ( native_props:mshare([[_2]]), ground([_1,L]), rt76(_1), rt74(L), term(_2) )
        => ( ground([_1,L,_2]), rt91(_1), rt79(L), rt90(_2) )
         + ( is_det, mut_exclusive ).

:- true pred append(_1,L,_2)
         : ( native_props:mshare([[_2]]), ground([_1,L]), rt81(_1), rt79(L), term(_2) )
        => ( ground([_1,L,_2]), rt88(_1), rt79(L), rt79(_2) )
         + ( is_det, mut_exclusive ).

:- true pred append(_1,[mv(_2,_3)],L)
         : ( native_props:mshare([[L]]), var(L), ground([_1,_2,_3]), rt40(_1), term(L), gnd(_2), gnd(_3) )
        => ( ground([_1,L,_2,_3]), rt56(_1), rt57(L), gnd(_2), gnd(_3) )
         + ( is_det, mut_exclusive ).

:- true pred append(_1,L,_2)
         : ( native_props:mshare([[_2]]), var(_2), ground([_1,L]), rt60(_1), rt58(L), term(_2) )
        => ( ground([_1,L,_2]), rt66(_1), rt45(L), rt65(_2) )
         + ( is_det, mut_exclusive ).

:- true pred append(_1,L,_2)
         : ( native_props:mshare([[_2]]), var(_2), ground([_1,L]), rt47(_1), rt45(L), term(_2) )
        => ( ground([_1,L,_2]), rt54(_1), rt45(L), rt45(_2) )
         + ( is_det, mut_exclusive ).

:- true pred append(_1,L,_2)
         : ( native_props:mshare([[_2]]), var(_2), ground([_1,L]), rt12(_1), rt6(L), term(_2) )
        => ( ground([_1,L,_2]), rt29(_1), rt22(L), rt28(_2) )
         + ( is_det, mut_exclusive ).

:- true pred append(_1,L,_2)
         : ( native_props:mshare([[_2]]), var(_2), ground([_1,L]), rt13(_1), rt6(L), term(_2) )
        => ( ground([_1,L,_2]), rt24(_1), rt22(L), rt26(_2) )
         + ( is_det, mut_exclusive ).

:- true pred append(_1,L,_2)
         : ( native_props:mshare([[_2]]), var(_2), ground([_1,L]), rt9(_1), rt7(L), term(_2) )
        => ( ground([_1,L,_2]), rt10(_1), rt7(L), rt7(_2) )
         + ( is_det, mut_exclusive ).

:- true pred append(_1,[mv(_2,_3)],L)
         : ( native_props:mshare([[L]]), var(L), ground([_1,_2,_3]), rt4(_1), term(L), gnd(_2), gnd(_3) )
        => ( ground([_1,L,_2,_3]), rt11(_1), rt12(L), gnd(_2), gnd(_3) )
         + ( is_det, mut_exclusive ).

append([],L,L).
append([H|L],L1,[H|R]) :-
        append(L,L1,R).

:- true pred eq(X,s(_1))
         : ( native_props:mshare([[X]]), var(X), ground([_1]), term(X), gnd(_1) )
        => ( ground([X,_1]), rt2(X), gnd(_1) )
         + ( is_det, mut_exclusive ).

eq(X,X).


:- regtype rt94/1.

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


:- regtype rt93/1.

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


:- regtype rt98/1.

rt98([]).
rt98([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt98(C).


:- regtype rt97/1.

rt97([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt98(C).


:- regtype rt78/1.

rt78([]).
rt78([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt78(C).


:- regtype rt77/1.

rt77([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt78(C).


:- regtype rt76/1.

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


:- regtype rt75/1.

rt75([]).
rt75([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt75(C).


:- regtype rt74/1.

rt74([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt75(C).


:- regtype rt91/1.

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


:- regtype rt80/1.

rt80([]).
rt80([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt80(C).


:- regtype rt79/1.

rt79([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt80(C).


:- regtype rt90/1.

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


:- regtype rt82/1.

rt82([]).
rt82([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt82(C).


:- regtype rt81/1.

rt81([]).
rt81([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt82(C).


:- regtype rt84/1.

rt84(mv(A,B)) :-
        gnd(A),
        gnd(B).


:- regtype rt89/1.

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


:- regtype rt88/1.

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


:- regtype rt42/1.

rt42([]).
rt42([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt42(C).


:- regtype rt41/1.

rt41([]).
rt41([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt42(C).


:- regtype rt40/1.

rt40([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt41(C).


:- regtype rt56/1.

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


:- regtype rt57/1.

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


:- regtype rt32/1.

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


:- regtype rt31/1.

rt31(s(A)) :-
        rt32(A).


:- regtype rt69/1.

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


:- regtype rt68/1.

rt68(s(A)) :-
        rt69(A).


:- regtype rt73/1.

rt73([]).
rt73([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt73(C).


:- regtype rt72/1.

rt72([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt73(C).


:- regtype rt62/1.

rt62([]).
rt62([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt62(C).


:- regtype rt61/1.

rt61([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt62(C).


:- regtype rt60/1.

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


:- regtype rt59/1.

rt59([]).
rt59([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt59(C).


:- regtype rt58/1.

rt58([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt59(C).


:- regtype rt66/1.

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


:- regtype rt46/1.

rt46([]).
rt46([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt46(C).


:- regtype rt45/1.

rt45([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt46(C).


:- regtype rt44/1.

rt44(mv(A,B)) :-
        gnd(A),
        gnd(B).


:- regtype rt65/1.

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


:- regtype rt48/1.

rt48([]).
rt48([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt48(C).


:- regtype rt47/1.

rt47([]).
rt47([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt48(C).


:- regtype rt50/1.

rt50(mv(A,B)) :-
        gnd(A),
        gnd(B).


:- regtype rt55/1.

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


:- regtype rt54/1.

rt54([]).
rt54([A|B]) :-
        rt50(A),
        rt55(B).


:- regtype rt2/1.

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


:- regtype rt37/1.

rt37([]).
rt37([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt37(C).


:- regtype rt36/1.

rt36([]).
rt36([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt37(C).


:- regtype rt35/1.

rt35([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt36(C).


:- regtype rt12/1.

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


:- regtype rt6/1.

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


:- regtype rt29/1.

rt29([A|B]) :-
        rt8(A),
        rt24(B).


:- regtype rt23/1.

rt23([]).
rt23([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt23(C).


:- regtype rt22/1.

rt22([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt23(C).


:- regtype rt28/1.

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


:- regtype rt13/1.

rt13([]).
rt13([mv(A,B)]) :-
        gnd(A),
        gnd(B).


:- regtype rt15/1.

rt15(mv(A,B)) :-
        gnd(A),
        gnd(B).


:- regtype rt25/1.

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


:- regtype rt24/1.

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


:- regtype rt27/1.

rt27([]).
rt27([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt27(C).


:- regtype rt26/1.

rt26([mv(A,B)|C]) :-
        gnd(A),
        gnd(B),
        rt27(C).


:- regtype rt9/1.

rt9([]).


:- regtype rt7/1.

rt7([mv(A,B)]) :-
        gnd(A),
        gnd(B).


:- regtype rt10/1.

rt10([]).


:- regtype rt4/1.

rt4([mv(A,B)]) :-
        gnd(A),
        gnd(B).


:- regtype rt8/1.

rt8(mv(A,B)) :-
        gnd(A),
        gnd(B).


:- regtype rt11/1.

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


:- regtype rt3/1.

rt3(s(0)).


:- regtype rt5/1.

rt5(s(0)).