(setq *lexical-cats* 
      '(n v adj art p aux pro qdet pp-wrd name to))

(setq *lexicon9-2*
  '((a (art (agr 3s) (sem INDEF)))
    (can (aux (subcat bare) (sem CAN1)))
    (car (n (sem CAR1) (agr 3s)))
    (corner (n (sem CORNER1) (agr 3s)))
    (cry (v (sem CRY1) (vform bare) (subcat _none)))
    (decide (v (sem DECIDES1) (vform bare) (subcat (? s _none))))
    (decide (v (sem DECIDES-ON1) (vform bare) (subcat (? s _pp-on))))
    (dog (n (sem DOG1) (agr 3s)))
    (fish (n (sem FISH1) (agr 3s)))
    (fish (n (sem (PLUR FISH1)) (agr 3p)))
    (house (n (agr 3s) (sem HOUSE1)))
    (has (aux (vform pres) (agr 3s) (subcat pastprt) (sem (UNSCOPED PRES PERF))))
    (he (pro (sem HE1) (AGR 3s)))
    (in (p (pform in) (sem in) (sem IN1)))
    (Jill (name (agr 3s) (sem Jill)))
    (man (n (sem MAN1) (agr 3s)))
    (men (n (sem (PLUR MAN1)) (agr 3p)))
    (on (p (pform on) (sem on) (sem ON-LOC1)))
    (saw (n (sem SAW1) (agr 3s)))
    (saw (v (sem SAWS1) (vform bare) (subcat _np)))
    (saw (v (sem (UNSCOPED PAST SEES1)) (VFORM past) (subcat _np) (agr ?a)))
    (see (v (sem SEES1) (VFORM bare) (subcat _np) (irreg-past +) (en-pastprt +)))
    (seed (n (sem SEED1) (AGR 3s)))
    (she (pro (agr 3s) (sem SHE1)))
    (the (art (agr (? a 3s 3p)) (sem THE)))
    (to (p (pform to) (sem TO-LOC)))
    (to (to (agr -) (vform inf)))
    (+s (+S))
    (+ed (+ED))
    (+en (+EN))
    (+ing (+ING))
    (+ss (+ss))))

(setq *lexicon-additions*
  '((Jack (name (agr 3s) (sem JACK1) (sem (NAME (? var) Jack))))
    (be (v (sem BE1) (vform bare) (subcat (? s _adjp _np)) (irreg-pres +) (irreg-past +)))
    (want (v (sem WANTS1) (vform bare) (subcat (? s _vp-inf _np_vp-inf))))
    (was (v (sem BE1) (VFORM past) (AGR (? a 1s 3s)) (SUBCAT (? s _adjp _np))))
    (were (v (sem BE1) (VFORM past) (AGR (? a 2s 1p 2p 3p)) (SUBCAT (? s _adjp _np))))
    (put (v (subcat _np_pp-loc) (SEM PUTS1) (vform bare) (irreg-past +)))
    (put (v (subcat _np_pp-loc) (sem PUTS1) (vform past) (agr ?a)))))
   
   
(setq *lexicon-auxs*
  '((could (aux (sem COULD1) (vform (? v pres past)) (agr ?a) (subcat bare)))
    (do (aux (modal +) (sem DO1) (vform pres) (agr (? a 1s 2s 1p 2p 3p)) (subcat bare)))
    (does (aux (modal +) (sem (UNSCOPED PRES DO1)) (vform pres) (agr 3s) (subcat bare)))
    (did (aux (modal +) (sem (UNSCOPED PAST DO1)) (vform past) (agr ?a) (subcat bare)))
    (have (aux (vform bare) (sem PERF) (SUBCAT pastprt)))
    (have (aux (vform pres) (sem PERF) (agr (?a 1s 2s 1p 2p 3p)) (SUBCAT pastprt)))
    (had (aux (vform past) (sem PERF) (agr ?a) (SUBCAT pastprt)))
    (having (aux (vform ing) (sem PERF) (SUBCAT pastprt)))
    (be (aux (sem PROG) (VFORM bare) (SUBCAT ing)))
    (is (aux (sem PROG) (VFORM pres) (SUBCAT ing) (AGR 3s)))
    (am (aux (sem PROG) (VFORM pres) (SUBCAT ing) (AGR 1s)))
    (are (aux (sem PROG) (VFORM pres) (SUBCAT ing) (AGR (?a 2s 1p 2p 3p))))
    (was (aux (sem PROG) (VFORM past) (AGR (? a 1s 3s)) (SUBCAT ing)))
    (were (aux (sem PROG) (VFORM past) (AGR (? a 2s 1p 2p 3p)) (SUBCAT ing)))
    (been (aux (sem PROG) (VFORM pastprt) (SUBCAT ing)))
    (being (aux (sem PROG) (VFORM ing) (SUBCAT ing)))))

(setq *lexicon-whs*
  '((what (pro (wh q) (sem WHAT) (agr (? a 3s 3p))))
    (what (art (wh q) (sem WHAT) (agr (? a 3s 3p))))
    (which (art (wh q) (sem WHICH) (agr (? a 3s 3p))))
    (which (pro (wh r) (sem WHICH) (agr (? a 3s 3p))))
    (when (pp-wrd (wh (? w q r)) (sem WHEN) (pred ?p)))
    (who (pro (wh (? w q r)) (sem WHO) (agr 3s)))
    (where (pp-wrd (wh (? w q r)) (sem (LAMBDA x (AT x (UNSCOPED WH * (LOCATION *))))) (pred +)))
    (where (pp-wrd (wh (? w q r)) (sem (UNSCOPED WH * (LOCATION *>))) (pred -)))))

;;  The morphological rules

(setq *grammar9-3* 
      '((headfeatures
         (v subcat var)
         (n var))
        ((v (vform pres) (agr 3s) (sem (UNSCOPED PRES ?semv)))
         -L1> 
         (head (v (vform bare) (irreg-pres -) (sem ?semv))) (+s))
        ((v (vform pres) (agr (? a 1s 2s 1p 2p 3p)) (sem (UNSCOPED PRES ?semv)))
         -L2> 
         (head (v (vform bare) (irreg-pres -) (sem ?semv))))
        ((v (vform past)  (agr (? a 1s 2s 3s 1p 2p 3p)) (sem (UNSCOPED PAST ?semv)))
         -L3> 
         (head (v (vform bare) (irreg-past -) (sem ?semv))) (+ed))
        ((v (vform pastprt) (sem ?semv))
         -L4> 
         (head (v (vform bare) (en-pastprt -) (sem ?semv))) (+ed))
        ((v (vform pastprt) (sem ?semv))
         -L5> 
         (head (v (vform bare) (en-pastprt +) (sem ?semv) )) (+en))
        ((v (vform ing) (sem ?semv))
         -L6> 
         (head (v (vform bare) (sem ?semv))) (+ing))
         ((n (agr 3p) (sem (PLUR ?semn)))
          -L7> 
          (head (n (agr 3s) (irreg-pl -) (sem ?semn))) (+s))))


;; Grammar 9-4 

(setq *grammar9-4*
      '((headfeatures
         (s agr vform)
         (vp vform agr var)
         (np agr var)
         (cnp agr var))
        ((s (inv -) (sem (?semvp ?semnp)))
         -1> 
         (np (agr ?a) (wh -) (sem ?semnp)) 
         (head (vp (vform (? a pres past)) (agr ?a) (sem ?semvp))))
        ((vp (var ?v) (sem (LAMBDA ag2 (?semv ?v ag2))))
         -2>
         (head (v (subcat _none) (sem ?semv))))
        ((vp (var ?v) (sem (LAMBDA ag3 (?semv ?v ag3 ?semnp))))
         -3>
         (head (v (subcat _np) (sem ?semv)))
         (np (sem ?semnp)))
        ((np (poss ?p) (wh -) (var ?v) (sem (PRO ?v (? sempro))))
         -4> 
         (head (pro (poss ?p) (wh -) (sem (? sempro)))))
        ((np (var ?v) (sem (NAME ?v ?semname)))
         -5> 
         (head (name (sem ?semname))))
        ((np (wh ?w) (var ?v) (sem (UNSCOPED ((? semart) ?v ((? semcnp) ?v)))))
          -6> 
          (art (wh ?w) (agr ?a) (sem (? semart))) 
          (head (cnp (agr ?a) (sem (? semcnp)))))
        ((cnp (sem (? semn)))
         -7>
         (head (n (sem (? semn)))))
       
))
            
(setq *grammar9-7*
      '((headfeatures
         (pp pform)
         (cnp agr var)
         (vp agr var vform))
        ((pp (pred +) (wh ?w) (sem (LAMBDA n1 (?semp n1 ?semnp))))
         -8>
         (head (p (sem ?semp))) (np (wh ?w) (sem ?semnp)))
        ((pp (pred -) (pform ?a) (wh ?w) (sem ?semnp))
         -9>
         (head (p (pform ?a))) (np (wh ?w) (sem ?semnp)))
        ((vp (var ?v) (sem (lambda x (& (?semvp x) (?sempp ?v)))))
         -10> 
         (head (vp (gap -) (sem ?semvp))) (pp (pred +) (sem ?sempp)))
        ((vp (var ?v) (sem (LAMBDA ag2 (?semv ?v ag2 ?sempp))))
         -11>
          (head (v (subcat _pp-on) (sem ?semv))) 
          (pp (pred -) (pform on) (sem ?sempp)))
        ((vp (sem (LAMBDA ag3 ((? semaux) (?semvp ag3)))))
         -12>
         (head (aux (sem (? semaux)) (subcat (? c)))) (vp (vform (? c)) (sem ?semvp)))
        ((cnp (wh ?w) (sem (LAMBDA n1 (& ((? semcnp) n1) (?sempp n1)))))
         -13>
         (head (cnp (wh ?w) (sem (? semcnp)))) (pp (pred +) (sem ?sempp)))
))
        
        
        
      
(setq *grammar9-10*
      '((headfeatures
         (s vform agr var)
         (np agr var))
        ((s (sem (WH-query (? sems))))
         -14>
         (np (wh q) (gap -) (agr ?a) (sem ?semnp))
         (head (s (inv +) (gap (% np (agr ?a) (sem ?semnp))) (sem (? sems)))))
        ((s (inv +) (wh ?w) (gap (? g)) (sem ((? semaux) (?semvp ?semnp))))
         -15> 
         (head (aux (subcat ?s) (agr ?a) (sem (? semaux))))
         (np (wh ?w) (agr ?a) (gap -) (sem ?semnp)) 
         (vp (vform ?s) (gap (? g)) (sem ?semvp)))
     
        ((np (poss ?p) (wh q) (var ?v) (sem (unscoped WH ?v ?sempro)))
         -16> 
         (head (pro (poss ?p) (wh q) (sem ?sempro))))
))


(setq *grammar9-13*
      '((headfeatures
         (s agr var)
         (vp vform agr var)
         (np agr var)
         (cnp agr var))
        ((s (inv -) (sem ?semvp))
         -1> 
         (np (agr ?a) (wh (? wh - q)) (sem ?semnp1)) 
         (head (vp (vform (? v pres past)) (agr ?a) (subjval ?semnp1) (sem ?semvp))))
        ((vp (subjval ?subj1) (var ?v) (sem (?semv ?v ?subj1)))
         -2>
         (head (v (subcat _none) (sem ?semv))))
        ((vp (subjval ?subj) (var ?v) (sem (?semv ?v ?subj ?semnp2)))
         -3>
         (head (v (subcat _np) (sem ?semv)))
         (np (sem ?semnp2)))
        ((np (poss ?p) (wh ?w) (var ?v) (sem (PRO ?v ?sempro)))
         -4> 
         (head (pro (poss ?p) (wh ?w) (sem ?sempro))))
        ((np (var ?v) (sem (NAME ?v ?semname)))
         -5> 
         (head (name (sem ?semname))))
        ((np (wh ?w) (var ?v) (sem (UNSCOPED (?semart ?v ?semcnp))))
          -6> 
          (art (wh ?w) (agr ?a) (sem ?semart)) 
          (head (cnp (agr ?a) (sem ?semcnp))))
        ((cnp (var ?v) (sem (?semn ?v)))
         -7>
         (head (n (sem ?semn))))
       
))

(setq *grammar9-13plus*
      '((headfeatures
         (s agr var vform)
         (vp vform agr var)
         (np agr var)
         (cnp agr var))
        ((s (wh Q) (sem (WH-query (? sems))))
         -14R>
         (np (wh q) (gap -) (agr ?a) (sem ?semnp))
         (head (s (inv +) (gap (% np (agr ?a) (sem ?semnp))) (sem (? sems)))))
        ((s (inv +) (gap (? g)) (sem (?semaux ?semvp)))
         -15R> 
         (head (aux (subcat ?s) (agr ?a) (sem (? semaux))))
         (np (wh -) (agr ?a) (gap -) (sem ?semnp)) 
         (vp (subjval ?semnp) (vform ?s) (gap (? g)) (sem ?semvp)))
        ((np (poss ?p) (wh q) (var ?v) (sem (unscoped WH ?v ?sempro)))
         -16R> 
         (head (pro (poss ?p) (wh q) (sem ?sempro))))
))

(setq *grammar9-16*
      '((headfeatures
         (rel var)
         (np agr var)
         (cnp agr var))
        ((cnp (sem (LAMBDA x (& ((? semcnp) x) ((? semrel) x)))))
         -14>
         (head (cnp (sem (? semcnp)))) (rel (gap -) (sem (? semrel))))
        ((rel (gap -) (rvar ?v) (sem (LAMBDA ?v (? sems))))
         -15>
         (np (wh r) (rvar ?v) (agr ?a) (sem ?semnp))
         (head (s (inv -) (vform (? v pres past)) 
                  (gap (% np (agr ?a) (sem ?semnp)))
                  (sem (? sems)))))
        ((np (var ?v) (rvar (? v1)) (wh ?w) 
             (sem (unscoped DEF ?v (& ((? semcnp) ?v) ((? semposs) ?v)))))
         -16>
         (NP (poss +) (wh ?w) (var (? v1)) (sem (? semposs))) 
         (head (CNP (sem (? semcnp)))))
        ((NP (Poss +) (wh ?w) (sem (LAMBDA z (POSS-BY z ?semnp))))
         -17> 
         (head (NP (wh ?w) (sem ?semnp))) (+ss))
        ((np (poss ?p) (wh R) (var ?v) (sem ?v))  ;; this rule ignores the SEM of the pro
         -18> 
         (head (pro (poss ?p) (wh R) (var ?v) (sem ?s))))))

(setq *other-rel-rules*
      '((headfeatures
         (s vform)
         (vp vform agr)
         (np agr)
         (cnp agr))
        ((rel (gap -))
         -22>
         (pp (wh r) (pred ?p)) (head (s (inv -) (vform (? v pres past)) (gap (% pp (pred ?p))))))
        ((rel (gap -))
         -23>
         (np (wh r) (agr ?a)) (head (vp (vform (? v pres past)) (agr ?a))))
        ((rel (gap -))
         -24>
          (head (s (vform (? v pres past)) (gap (% np)))))
        ((rel (gap -))
         -25>
         (head (vp (vform (? v ing pastprt)))))
))
