--1 Combinators: a High-Level Syntax API -- This module defines some "grammatical functions" that give shortcuts to -- typical constructions. [``Constructors`` Constructors.html] and the -- language-specific ``Paradigms`` modules are usually needed -- to construct arguments of these functions. incomplete resource Combinators = open Cat, Structural, Constructors in { oper --2 Predication pred : overload { pred : V -> NP -> Cl ; -- x converges pred : V2 -> NP -> NP -> Cl ; -- x intersects y pred : V3 -> NP -> NP -> NP -> Cl ; -- x intersects y at z pred : V -> NP -> NP -> Cl ; -- x and y intersect pred : A -> NP -> Cl ; -- x is even pred : A2 -> NP -> NP -> Cl ; -- x is divisible by y pred : A -> NP -> NP -> Cl ; -- x and y are equal pred : N -> NP -> Cl ; -- x is a maximum pred : CN -> NP -> Cl ; -- x is a local maximum pred : NP -> NP -> Cl ; -- x is the neutral element pred : N -> NP -> NP -> Cl ; -- x and y are inverses pred : Adv -> NP -> Cl ; -- x is in scope pred : Prep -> NP -> NP -> Cl -- x is outside y } ; --2 Function application app : overload { app : N -> NP ; app : N2 -> NP -> NP ; app : N3 -> NP -> NP -> NP ; app : N2 -> NP -> NP -> NP ; app : N2 -> N -> CN ; app : N2 -> NP -> CN ; -- divisor of x app : N3 -> NP -> NP -> CN ; -- path from x to y app : N2 -> NP -> NP -> CN ; -- path between x and y } ; --2 Coordination coord : overload { coord : Conj -> Adv -> Adv -> Adv ; coord : Conj -> AP -> AP -> AP ; coord : Conj -> NP -> NP -> NP ; coord : Conj -> S -> S -> S ; coord : Conj -> ListAdv -> Adv ; coord : Conj -> ListAP -> AP ; coord : Conj -> ListNP -> NP ; coord : Conj -> ListS -> S ; } ; --2 Modification mod : overload { mod : A -> N -> CN ; mod : AP -> CN -> CN ; mod : AdA -> A -> AP ; mod : Det -> N -> NP ; mod : Det -> CN -> NP ; mod : Quant -> N -> NP ; mod : Quant -> CN -> NP ; mod : Predet -> N -> NP ; mod : Numeral -> N -> NP } ; --2 Negation neg : overload { neg : Imp -> Utt ; neg : Cl -> S ; neg : QCl -> QS ; neg : RCl -> RS }; --. pred = overload { pred : V -> NP -> Cl = \v,np -> mkCl np v ; pred : V2 -> NP -> NP -> Cl = \v,np,ob -> mkCl np v ob ; pred : V3 -> NP -> NP -> NP -> Cl = \v,np,ob,ob2 -> mkCl np v ob ob2 ; pred : V -> NP -> NP -> Cl --# notminimal = \v,x,y -> mkCl (mkNP and_Conj x y) v ; --# notminimal pred : A -> NP -> Cl = \a,np -> mkCl np a ; pred : A2 -> NP -> NP -> Cl --# notminimal = \a,x,y -> mkCl x a y ; --# notminimal pred : A -> NP -> NP -> Cl --# notminimal = \a,x,y -> mkCl (mkNP and_Conj x y) a ; --# notminimal pred : N -> NP -> Cl = \n,x -> mkCl x (mkNP a_Art n) ; pred : CN -> NP -> Cl = \n,x -> mkCl x (mkNP a_Art n) ; pred : NP -> NP -> Cl = \n,x -> mkCl x n ; pred : N2 -> NP -> NP -> Cl --# notminimal = \n,x,y -> mkCl x (mkNP a_Art (mkCN n y)) ; --# notminimal pred : N -> NP -> NP -> Cl --# notminimal = \n,x,y -> mkCl (mkNP and_Conj x y) (mkNP a_Art plNum n) ; --# notminimal pred : Adv -> NP -> Cl = \a,x -> mkCl x a ; pred : Prep -> NP -> NP -> Cl = \p,x,y -> mkCl x (mkAdv p y) ; } ; app = overload { app : N -> NP = \n -> mkNP the_Art n ; app : N2 -> NP -> NP --# notminimal = \n,x -> mkNP the_Art (mkCN n x) ; --# notminimal app : N3 -> NP -> NP -> NP --# notminimal = \n,x,y -> mkNP the_Art (mkCN n x y) ; --# notminimal app : N2 -> NP -> NP -> NP --# notminimal = \n,x,y -> mkNP the_Art (mkCN n (mkNP and_Conj x y)) ; --# notminimal app : N2 -> N -> CN --# notminimal = \f,n -> mkCN f (mkNP a_Art plNum n) ; --# notminimal app : N2 -> NP -> CN --# notminimal = mkCN ; --# notminimal app : N3 -> NP -> NP -> CN --# notminimal = mkCN ; --# notminimal app : N2 -> NP -> NP -> CN --# notminimal = \n,x,y -> mkCN n (mkNP and_Conj x y) ; --# notminimal } ; coord = overload { --# notminimal coord : Conj -> Adv -> Adv -> Adv --# notminimal = mkAdv ; --# notminimal coord : Conj -> AP -> AP -> AP --# notminimal = mkAP ; --# notminimal coord : Conj -> NP -> NP -> NP --# notminimal = mkNP ; --# notminimal coord : Conj -> S -> S -> S --# notminimal = mkS ; --# notminimal coord : Conj -> ListAdv -> Adv --# notminimal = mkAdv ; --# notminimal coord : Conj -> ListAP -> AP --# notminimal = mkAP ; --# notminimal coord : Conj -> ListNP -> NP --# notminimal = mkNP ; --# notminimal coord : Conj -> ListS -> S --# notminimal = mkS ; --# notminimal } ; --# notminimal mod = overload { mod : A -> N -> CN = mkCN ; mod : AP -> CN -> CN = mkCN ; mod : AdA -> A -> AP = mkAP ; mod : Det -> N -> NP = mkNP ; mod : Det -> CN -> NP = mkNP ; mod : Quant -> N -> NP = mkNP ; mod : Quant -> CN -> NP = mkNP ; mod : Predet -> N -> NP = \p,n -> mkNP p (mkNP a_Art n) ; mod : Numeral -> N -> NP = mkNP ; } ; neg = overload { neg : Imp -> Utt = mkUtt negativePol ; neg : Cl -> S = mkS negativePol ; neg : QCl -> QS = mkQS negativePol ; neg : RCl -> RS --# notminimal = mkRS negativePol ; --# notminimal }; }