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 3340.209 msec.}
{preprocessed for plai in 4.001 msec.}
{analyzed by plai using det with local-control off in 76.004 msec.}
{written file /tmp/tmpgm2rbV/soundex_det_co.pl}
:- module(_1,[goal/2],[assertions]).

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

:- true pred goal(A,B)
         : ( native_props:mshare([[B]]), ground([A]), gnd(A), term(B) )
        => ( ground([A,B]), rt0(A), rt192(B) )
         + ( is_det, mut_exclusive ).

goal(Name,Code) :-
        eq(Name,[First|Others]),
        reduce(Others,s(0),First,Reduced),
        eq(Code,Reduced).

:- true pred reduce(_1,s(0),_2,Code)
         : ( native_props:mshare([[Code]]), var(Code), ground([_1,_2]), term(_1), term(_2), term(Code) )
        => ( ground([_1,_2,Code]), rt190(_1), term(_2), rt192(Code) )
         + ( is_det, mut_exclusive ).

:- true pred reduce(_1,s(_3),_2,Code)
         : ( native_props:mshare([[Code]]), var(Code), ground([_1,_2,_3]), term(_1), term(_2), term(Code), rt4(_3) )
        => ( ground([_1,_2,Code,_3]), rt157(_1), term(_2), rt159(Code), rt168(_3) )
         + ( is_det, mut_exclusive ).

:- true pred reduce(_1,Count,_2,Code)
         : ( native_props:mshare([[Code]]), var(Code), ground([_1,Count,_2]), term(_1), rt4(Count), rt19(_2), term(Code) )
        => ( ground([_1,Count,_2,Code]), rt176(_1), rt173(Count), rt19(_2), rt174(Code) )
         + ( is_det, mut_exclusive ).

:- true pred reduce(_1,Count,_2,Code)
         : ( native_props:mshare([[Code]]), var(Code), ground([_1,Count,_2]), term(_1), rt48(Count), rt19(_2), term(Code) )
        => ( ground([_1,Count,_2,Code]), term(_1), rt104(Count), rt19(_2), rt105(Code) )
         + ( is_det, mut_exclusive ).

reduce(_1,s(s(s(s(0)))),_2,[]) :- !.
reduce([],_1,_2,[]) :- !.
reduce([Current|Others],Count,Current,Code) :-
        vowel_h_w_y(Current),
        !,
        reduce(Others,Count,Current,Code).
reduce([Letter|Others],Count,Letter,Code) :-
        !,
        reduce(Others,Count,Letter,Code).
reduce([Current|Others],Count,_1,[Current|Code]) :-
        reduce(Others,s(Count),Current,Code).

:- true pred vowel_h_w_y(_1)
         : ( ground([_1]), term(_1) )
        => ( ground([_1]), rt19(_1) )
         + ( is_det, mut_exclusive ).

:- true pred vowel_h_w_y(_1)
         : ( ground([_1]), rt19(_1) )
        => ( ground([_1]), rt36(_1) )
         + ( is_det, mut_exclusive ).

vowel_h_w_y(97).
vowel_h_w_y(101).
vowel_h_w_y(105).
vowel_h_w_y(111).
vowel_h_w_y(117).
vowel_h_w_y(104).
vowel_h_w_y(119).
vowel_h_w_y(121).

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

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

eq(X,X).


:- regtype rt0/1.

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


:- regtype rt193/1.

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


:- regtype rt192/1.

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


:- regtype rt191/1.

rt191(A) :-
        term(A).


:- regtype rt190/1.

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


:- regtype rt4/1.

rt4(s(0)).


:- regtype rt157/1.

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


:- regtype rt90/1.

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


:- regtype rt160/1.

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


:- regtype rt159/1.

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


:- regtype rt168/1.

rt168(0).
rt168(s(A)) :-
        rt168(A).


:- regtype rt19/1.

rt19(97).
rt19(101).
rt19(104).
rt19(105).
rt19(111).
rt19(117).
rt19(119).
rt19(121).


:- regtype rt158/1.

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


:- regtype rt177/1.

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


:- regtype rt176/1.

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


:- regtype rt173/1.

rt173(0).
rt173(s(A)) :-
        rt173(A).


:- regtype rt175/1.

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


:- regtype rt174/1.

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


:- regtype rt49/1.

rt49(0).
rt49(s(A)) :-
        rt49(A).


:- regtype rt48/1.

rt48(s(A)) :-
        rt49(A).


:- regtype rt104/1.

rt104(0).
rt104(s(A)) :-
        rt104(A).


:- regtype rt94/1.

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


:- regtype rt106/1.

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


:- regtype rt105/1.

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


:- regtype rt36/1.

rt36(97).
rt36(101).
rt36(104).
rt36(105).
rt36(111).
rt36(117).
rt36(119).
rt36(121).