%% Example in
%% Kasper, A Unification Method for Disjunctive Feature Descriptions,
%% 25th ACL, 1987.
%% Disjunctive feature unification between
%% [rank:clause,subj:case:nom]^
%% {[voice:passive,transitivity:trans,<subj>=<goal>] or
%% [voice:active,<subj>=<actor>]} ^
%% {[transitivity:intrans,actor:person:3] or
%% [trnsitivity:trans,goal:person:3]} ^
%% {[number:sing,subj:number:sing] or [number:pl, subj:number:pl]}
%% and
%% [subj:[lex:y'all,person:2,number:pl]]
%% -->
%% [rank:clause,subj:[case:nom,lex:y'all,person:2,number:pl],
%% number:pl,voice:active,<subj>=<actor>,transitivity:trans,goal:person,3]
%%
cc1({voice/passive,trans/trans,subj/X,goal/X}).
cc1({voice/active, subj/X,actor/X}).
cc2({trans/intrans, actor/{person/third}}).
cc2({trans/trans, goal/{person/third}}).
cc3({numb/sing, subj/{numb/sing}}).
cc3({numb/pl, subj/{numb/pl}}).
%% %p > %% spy constraint transformation
%% %s %% step trace on
@ U={rank/clause, subj/{case/nom}},cc1(U),cc2(U),cc3(U),
U={subj/{lex/yall,person/second,numb/pl}}.
%% --> c0(...)
%% then solve :-c0(U,_,_). U is the solution.
%% ----------------------------------------------
%% solution = c0(U_0, {subj/{person/second, numb/pl, lex/yall}},
%% {subj/{case/nom}, rank/clause})
%% c0(_p1, {subj/{person/second, numb/pl, lex/yall}}, {subj/{case/nom},
%% rank/clause}) :- cc2(_p1), cc1(_p1), fail;_p1={subj/{numb/sing},
%% numb/sing}.
%% c0(_p1, _p1, _p1) :- cc2(_p1), cc1(_p1);_p1={subj/{person/second,
%% numb/pl, case/nom, lex/yall}, numb/pl, rank/clause}.
%%
%% CPU time = 0.000 sec (Constraints Handling = 0.000 sec)
%%
%% _:-c0(U,_,_).
%% U = {voice/active, trans/trans, subj/{person/second, numb/pl,
%% case/nom, lex/yall}, goal/{person/third}, actor/{person/second,
%% numb/pl, case/nom, lex/yall}, numb/pl, rank/clause};
%%
%% CPU time = 0.017 sec (Constraints Handling = 0.000 sec)
%% _
syntax highlighted by Code2HTML, v. 0.9.1