gf-3.3: examples/typetheory/Donkey.gf
abstract Donkey = Types ** {
flags startcat = S ;
cat
S ;
Cl ;
CN ;
Det ;
Conj ;
NP Set ;
VP Set ;
V2 Set Set ;
V Set ;
AP Set ;
PN Set ;
RC Set ;
data
IfS : (A : S) -> (El (iS A) -> S) -> S ; -- if A B
ConjS : Conj -> S -> S -> S ; -- A and B ; A or B
PosCl : Cl -> S ; -- John walks
NegCl : Cl -> S ; -- John doesn't walk
PredVP : ({A} : Set) -> NP A -> VP A -> Cl ; -- John (walks / doesn't walk)
ComplV2 : ({A,B} : Set) -> V2 A B -> NP B -> VP A ; -- loves John
UseV : ({A} : Set) -> V A -> VP A ; -- walks
UseAP : ({A} : Set) -> AP A -> VP A ; -- is old
DetCN : Det -> (A : CN) -> NP (iCN A) ; -- every man
ConjNP : Conj -> ({A} : Set) -> NP A -> NP A -> NP A ; -- John and every man
The : (A : CN) -> El (iCN A) -> NP (iCN A) ; -- the donkey
Pron : ({A} : CN) -> El (iCN A) -> NP (iCN A) ; -- he/she/it
UsePN : ({A} : Set) -> PN A -> NP A ; -- John
ModAP : (A : CN) -> AP (iCN A) -> CN ; -- old man
ModRC : (A : CN) -> RC (iCN A) -> CN ; -- man that walks
RelVP : ({A} : CN) -> VP (iCN A) -> RC (iCN A) ; -- that walks
An : Det ;
Every : Det ;
And : Conj ;
Or : Conj ;
Man, Donkey, Woman : CN ;
Own, Beat : V2 (iCN Man) (iCN Donkey) ;
Love : ({A,B} : Set) -> V2 A B ; -- polymorphic verb
Walk, Talk : V (iCN Man) ; -- monomorphic verbs
Old : ({A} : Set) -> AP A ; -- polymorphic adjective
Pregnant : AP (iCN Woman) ; -- monomorphic adjective
John : PN (iCN Man) ;
-- Montague semantics in type theory
fun
iS : S -> Set ;
iCl : Cl -> Set ;
iCN : CN -> Set ;
iDet : Det -> ({A} : Set) -> (El A -> Set) -> Set ;
iConj : Conj -> Set -> Set -> Set ;
iNP : ({A} : Set) -> NP A -> (El A -> Set) -> Set ;
iVP : ({A} : Set) -> VP A -> (El A -> Set) ;
iAP : ({A} : Set) -> AP A -> (El A -> Set) ;
iRC : ({A} : Set) -> RC A -> (El A -> Set) ;
iV : ({A} : Set) -> V A -> (El A -> Set) ;
iV2 : ({A,B} : Set) -> V2 A B -> (El A -> El B -> Set) ;
iPN : ({A} : Set) -> PN A -> El A ;
def
iS (PosCl A) = iCl A ;
iS (NegCl A) = Neg (iCl A) ;
iS (IfS A B) = Pi (iS A) (\x -> iS (B x)) ;
iS (ConjS C A B) = iConj C (iS A) (iS B) ;
iCl (PredVP A Q F) = iNP A Q (\x -> iVP A F x) ;
iVP _ (ComplV2 A B F R) x = iNP B R (\y -> iV2 A B F x y) ;
iVP _ (UseV A F) x = iV A F x ;
iVP _ (UseAP A F) x = iAP A F x ;
iNP _ (DetCN D A) F = iDet D (iCN A) F ;
iNP _ (ConjNP C A Q R) F = iConj C (iNP A Q F) (iNP A R F) ;
iNP _ (Pron _ x) F = F x ;
iNP _ (The _ x) F = F x ;
iNP _ (UsePN A a) F = F (iPN A a) ;
iDet An A F = Sigma A F ;
iDet Every A F = Pi A F ;
iCN (ModAP A F) = Sigma (iCN A) (\x -> iAP (iCN A) F x) ;
iCN (ModRC A F) = Sigma (iCN A) (\x -> iRC (iCN A) F x) ;
iRC _ (RelVP A F) x = iVP (iCN A) F x ;
iConj And = Prod ;
iConj Or = Plus ;
--- for the type-theoretical lexicon
data
Man', Donkey', Woman' : Set ;
Own', Beat' : El Man' -> El Donkey' -> Set ;
Love' : ({A,B} : Set) -> El A -> El B -> Set ;
Old' : ({A} : Set) -> El A -> Set ;
Walk', Talk' : El Man' -> Set ;
Pregnant' : El Woman' -> Set ;
John' : El Man' ;
def
iCN Man = Man' ;
iCN Woman = Woman' ;
iCN Donkey = Donkey' ;
iV2 _ _ Beat = Beat' ;
iV2 _ _ Own = Own' ;
iV2 _ _ (Love A B) = Love' A B ;
iV _ Walk = Walk' ;
iV _ Talk = Talk' ;
iAP _ (Old A) = Old' A ;
iAP _ Pregnant = Pregnant' ;
iPN _ John = John' ;
}