https://github.com/RichardMoot/LinearOne
Raw File
Tip revision: 55540e9a91b7a5c7722775f39ffbf50f5b472a7e authored by Richard Moot on 12 November 2020, 17:47:42 UTC
Update .gitignore
Tip revision: 55540e9
lambek_grammar.pl
% =================================
% =        Lambek grammar         =
% =================================
%
% However, we do have the familiar a/b/c = (a/b)/c and
% c\b\a = (c\(b\a) and even a\b/c = (a\b)/c.
%
% For lambda terms, X^M is short for lambda(X,M) and M@N
% is short for appl(M,N). As expected, X^Y^Z^X@Y@Z is
% short for lambda(X,lambda(Y,lambda(Z,appl(appl(X,Y),Z))))
% though be warned that X@Y+V@Z corresponds to (X@Y)+(V@Z)

:- op(400, xfy, \).
:- op(190, yfx, @).

:- abolish(lex/3), abolish(lex/4), abolish(test/1), abolish(atomic_formula/3), abolish(atomic_formula/1), abolish(macro/2).

lex(every, (s/(np\s))/n, lambda(P,lambda(Q,quant(forall,X,bool(appl(P,X),->,appl(Q,X)))))).
lex(some, ((s/np)\s)/n, lambda(P,lambda(Q,quant(exists,X,bool(appl(P,X),&,appl(Q,X)))))).
lex(a, ((s/np)\s)/n, lambda(P,lambda(Q,quant(exists,X,bool(appl(P,X),&,appl(Q,X)))))).
lex(student, n, student).
lex(exam, n, exam).
lex(donkey, n, donkey).
lex(aced, (np\s)/np, ace).
lex(own, (np\s)/np, own).
lex(slept, np\s, sleep).
lex(john, np, john).
lex(mary, np, mary).    
lex(during, ((np\s)\(np\s))/np, lambda(X,lambda(P,lambda(Y,appl(appl(during,X),appl(P,Y)))))).
lex(the, np/n, iota).
lex(who, (n\n)/(np\s), lambda(P,lambda(Q,lambda(X,bool(appl(Q,X),&,appl(P,X)))))).
lex(loves, (np\s)/np, love).
lex(alyssa, np, alyssa).
lex(and, ((s/(np\s))\(s/(np\s)))/(s/(np\s)), lambda(Q2,lambda(Q1,lambda(P,bool(appl(Q1,P),&,appl(Q2,P)))))).

    
test(1) :-
	parse([every,student,aced,some,exam], s).

test(2) :-
	parse([the,student,who,slept,during,the,exam,loves,alyssa], s).
test(3) :-
        parse([john,and,mary,own,a,donkey], s).
back to top