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 3444.215 msec.}
{preprocessed for plai in 0.0 msec.}
{analyzed by plai using det with local-control off in 20.001 msec.}
{written file /tmp/tmpBjM5pd/transpose-bf_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]), rt55(A), rt64(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]), rt55(_1), rt64(X) )
         + ( is_det, mut_exclusive ).

:- true pred transpose_aux(_2,_1,X)
         : ( native_props:mshare([[X]]), ground([_2,_1]), gnd(_2), rt26(_1), rt25(X) )
        => ( ground([_2,_1,X]), rt37(_2), rt47(_1), rt42(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,[_4|_5],_2,_3)
         : ( native_props:mshare([[_2],[_3],[_4],[_4,_5],[_5]]), var(_2), var(_3), ground([_1]), gnd(_1), term(_2), term(_3), term(_4), term(_5) )
        => ( native_props:mshare([[_2,_4],[_2,_4,_5],[_2,_5]]), ground([_1,_3]), rt23(_1), rt25(_2), rt26(_3), rt24(_4), rt17(_5) )
         + ( is_det, mut_exclusive ).

:- true pred row2col(_1,_2,_3,_4)
         : ( native_props:mshare([[_2],[_3],[_4]]), var(_3), var(_4), ground([_1]), gnd(_1), term(_2), term(_3), term(_4) )
        => ( native_props:mshare([[_2,_3]]), ground([_1,_4]), rt15(_1), rt17(_2), rt19(_3), rt21(_4) )
         + ( is_det, mut_exclusive ).

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


:- regtype rt63/1.

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


:- regtype rt62/1.

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


:- regtype rt61/1.

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


:- regtype rt60/1.

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


:- regtype rt59/1.

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


:- regtype rt58/1.

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


:- regtype rt57/1.

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


:- regtype rt56/1.

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


:- regtype rt55/1.

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


:- regtype rt68/1.

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


:- regtype rt67/1.

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


:- regtype rt66/1.

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


:- regtype rt65/1.

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


:- regtype rt64/1.

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


:- regtype rt26/1.

rt26([[]|A]) :-
        rt21(A).


:- regtype rt25/1.

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


:- regtype rt41/1.

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


:- regtype rt40/1.

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


:- regtype rt39/1.

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


:- regtype rt38/1.

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


:- regtype rt37/1.

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


:- regtype rt50/1.

rt50([]).


:- regtype rt49/1.

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


:- regtype rt48/1.

rt48([]).
rt48([[]|A]) :-
        rt49(A).


:- regtype rt47/1.

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


:- regtype rt46/1.

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


:- regtype rt45/1.

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


:- regtype rt35/1.

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


:- regtype rt44/1.

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


:- regtype rt43/1.

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


:- regtype rt42/1.

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


:- regtype rt23/1.

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


:- regtype rt24/1.

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


:- regtype rt18/1.

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


:- regtype rt17/1.

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


:- regtype rt16/1.

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


:- regtype rt15/1.

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


:- regtype rt20/1.

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


:- regtype rt19/1.

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


:- regtype rt22/1.

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


:- regtype rt21/1.

rt21([]).
rt21([[]|A]) :-
        rt22(A).