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

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

:- true pred transpose(A,B)
         : ( native_props:mshare([[B]]), ground([A]), gnd(A), term(B) )
        => ( ground([A,B]), rt81(A), rt90(B) )
         + ( is_det, mut_exclusive ).

transpose(A,B) :-
        transpose_aux(A,[],B).

:- true pred transpose_aux(_1,[],X)
         : ( native_props:mshare([[X]]), ground([_1]), gnd(_1), term(X) )
        => ( ground([_1,X]), rt81(_1), rt90(X) )
         + ( is_det, mut_exclusive ).

:- true pred transpose_aux(_2,_1,X)
         : ( native_props:mshare([[X]]), ground([_2,_1]), gnd(_2), rt41(_1), rt52(X) )
        => ( ground([_2,_1,X]), rt63(_2), rt73(_1), rt68(X) )
         + ( is_det, mut_exclusive ).

transpose_aux([R|Rs],_1,[C|Cs]) :-
        row2col(R,[C|Cs],Cols1,[],Accm),
        transpose_aux(Rs,Accm,Cols1).
transpose_aux([],X,X).

:- true pred row2col(_1,[_3|_4],_2,[],B)
         : ( native_props:mshare([[_2],[B],[_3],[_3,_4],[_4]]), var(_2), var(B), ground([_1]), gnd(_1), term(_2), term(B), term(_3), term(_4) )
        => ( native_props:mshare([[_2,_3],[_2,_3,_4],[_2,_4]]), ground([_1,B]), rt50(_1), rt52(_2), rt41(B), rt51(_3), rt46(_4) )
         + ( is_det, mut_exclusive ).

:- true pred row2col(_1,_2,_3,[[]|_4],B)
         : ( native_props:mshare([[_2],[_3],[B]]), var(_3), var(B), ground([_1,_4]), gnd(_1), term(_2), term(_3), term(B), rt3(_4) )
        => ( native_props:mshare([[_2,_3]]), ground([_1,B,_4]), rt44(_1), rt46(_2), rt48(_3), rt41(B), rt40(_4) )
         + ( is_det, mut_exclusive ).

:- true pred row2col(_1,_2,_3,[[]|_4],B)
         : ( native_props:mshare([[_2],[_3],[B]]), var(_3), var(B), ground([_1,_4]), rt12(_1), term(_2), term(_3), term(B), rt10(_4) )
        => ( native_props:mshare([[_2,_3]]), ground([_1,B,_4]), rt28(_1), rt30(_2), rt32(_3), rt13(B), rt27(_4) )
         + ( is_det, mut_exclusive ).

row2col([X|Xs],[[X|Ys]|Cols],[Ys|Cols1],A,B) :-
        row2col(Xs,Cols,Cols1,[[]|A],B).
row2col([],[],[],A,A).


:- regtype rt89/1.

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


:- regtype rt88/1.

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


:- regtype rt87/1.

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


:- regtype rt86/1.

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


:- regtype rt85/1.

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


:- regtype rt84/1.

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


:- regtype rt83/1.

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


:- regtype rt82/1.

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


:- regtype rt81/1.

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


:- regtype rt94/1.

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


:- regtype rt93/1.

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


:- regtype rt92/1.

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


:- regtype rt91/1.

rt91([]).
rt91([[A|B]|C]) :-
        gnd(A),
        term(B),
        rt92(C).


:- regtype rt90/1.

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


:- regtype rt43/1.

rt43([]).
rt43([[]|A]) :-
        rt43(A).


:- regtype rt42/1.

rt42([]).
rt42([[]|A]) :-
        rt43(A).


:- regtype rt41/1.

rt41([[]|A]) :-
        rt42(A).


:- regtype rt52/1.

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


:- regtype rt67/1.

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


:- regtype rt66/1.

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


:- regtype rt65/1.

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


:- regtype rt64/1.

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


:- regtype rt63/1.

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


:- regtype rt76/1.

rt76([]).


:- regtype rt75/1.

rt75([]).
rt75([[]|A]) :-
        rt75(A).


:- regtype rt74/1.

rt74([]).
rt74([[]|A]) :-
        rt75(A).


:- regtype rt73/1.

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


:- regtype rt72/1.

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


:- regtype rt71/1.

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


:- regtype rt61/1.

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


:- regtype rt70/1.

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


:- regtype rt69/1.

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


:- regtype rt68/1.

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


:- regtype rt50/1.

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


:- regtype rt51/1.

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


:- regtype rt47/1.

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


:- regtype rt46/1.

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


:- regtype rt3/1.

rt3([]).


:- regtype rt45/1.

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


:- regtype rt44/1.

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


:- regtype rt49/1.

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


:- regtype rt48/1.

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


:- regtype rt40/1.

rt40([]).
rt40([[]|A]) :-
        rt40(A).


:- regtype rt12/1.

rt12(A) :-
        gnd(A).


:- regtype rt11/1.

rt11([]).
rt11([[]|A]) :-
        rt11(A).


:- regtype rt10/1.

rt10([]).
rt10([[]|A]) :-
        rt11(A).


:- regtype rt29/1.

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


:- regtype rt28/1.

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


:- regtype rt31/1.

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


:- regtype rt30/1.

rt30([]).
rt30([[A|B]|C]) :-
        gnd(A),
        term(B),
        rt31(C).


:- regtype rt33/1.

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


:- regtype rt32/1.

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


:- regtype rt13/1.

rt13([[]|A]) :-
        rt10(A).


:- regtype rt27/1.

rt27([]).
rt27([[]|A]) :-
        rt27(A).