2:- module(relation,[resolve_relations/2]).    3
    4:- use_module(library(lists),[member/2]).    5:- use_module(boxer(slashes)).    6:- use_module(knowledge(relations),[nn/3]).    7:- use_module(semlib(options),[option/2]).    8
    9resolve_relations(X,Y):-
   10   option('--nn',false), !, X=Y.
   11
   12resolve_relations(X,Y):-
   13   rel(X,Y,[],Ts), 
   14   resolve(Ts).
   15
   16
   17rel(X,Y,T,T):- var(X), !, X=Y.
   18
   19rel(X1,X2,T,[C1:C2|T]):-
   20   C1 = [_,_,_,_,_],
   21   X1 =.. [t|C1], !, 
   22   C2 = [_,_,_,_,_],
   23   X2 =.. [t|C2].
   24
   25rel(X1,X2,T1,T2):-
   26   X1 =.. [F|L1],
   27   rels(L1,L2,T1,T2),
   28   X2 =.. [F|L2].
   29
   30
   31rels([],[],T,T).
   32rels([X1|L1],[X2|L2],T1,T3):-
   33   rel(X1,X2,T2,T3), rels(L1,L2,T1,T2).
   34
   35
   36resolve([]).
   37
   38resolve([[C,W,S,A,I]:[C,W,S,A,I]|L]):- member(relation:_,A), !, resolve(L).
   39
   40resolve([C1:C2,N1:N2|L]):- 
   41   C1 = [n/n,W,S,A,I], 
   42   member(lemma:S1,A), member(pos:'NN',A),
   43   N1 = [_,_,_,B,_], 
   44   member(lemma:S2,B), member(pos:'NN',B),
   45   n_n(S1,S2,Rel), !,
   46   C2 = [n/n,W,S,[relation:Rel|A],I],
   47   resolve([N1:N2|L]).
   48
   49resolve([[n/n,W,S,A,I]:[n/n,W,S,[relation:of|A],I]|L]):- member(pos:'NN',A), !, resolve(L).
   50resolve([[n/n,W,S,A,I]:[n/n,W,S,[relation:'='|A],I]|L]):- member(pos:'NNP',A), !, resolve(L).
   51resolve([X:X|L]):- resolve(L).
   52
   53
   54/*========================================================================
   55  Function Interpretation: Noun-noun compounds
   56
   57
   58interpretFunction(f(name,[_,B1],Sym),Sym):-
   59   etaConversion(B1,B2), !,
   60   ( nn(_,B2,Sym), !
   61   ; Sym = '=' ).
   62
   63interpretFunction(F,F).
   64========================================================================*/
   65
   66n_n(A,B,Sym):- nn(A,B,Sym), !.
   67n_n(_,B,Sym):- nn(_,B,Sym), !.
   68n_n(A,_,Sym):- nn(A,_,Sym), !