; Post-processing knowledge file
; 6/96

; ----------------------------------------------------------------------------
; This file contains the knowledge related to post-processing, in the
; form of lists and rules. This file is read by post-process.c at run-time.
; Syntax of file:
;           line starting with ";" is a comment
;           commas are field delimiters
;           any token beginning with the character @ is expanded to the set
;               of symbols it defined. e.g. one could write
; FOO: blah1 blah2 blah3
; thus defining a set FOO containing three strings. Then one could later write
; BAR: blah5 @FOO blah8
; which defines a set BAR containing 5 strings.
;
; Capitalized tokens are *required*, though if you feel like providing an
; empty list afterwards, that's your right.
; ----------------------------------------------------------------------------


; The following links start a domain. Each must be given a name in the
; table below (STARTING_LINK_TYPE_TABLE)
;
; Removed Rn as a starter link, since it doesn't seem to be needed,
; and also because it interferes with a verb-wall link for sentences
; like: "only you would say that" and "that I did not know". When Rn is
; allowed to start an r domain, the above sentences then hit the
; "unbounded r domain" rule below, on the WV link.

DOMAIN_STARTER_LINKS:
 W   Ce   Cs   Ca   Cc   Ci   R*   Re   RSe  Mr   QI#d   Mv*   Jr  Mj   Qd
 TOn   TOi   Mg*   MVi  Ss#d   Bsd   ER   Z  Ma#*   SIs#g  BIqx   MX#p   MX#a
 MX#r   MX#j   MV#c   MV#o  Eq   COq   VCq  AFd   PFc



; ----------------------------------------------------------------------
; The following links start a urfl domain.  They are also included in the
; domain, as opposed to regular starter links (above), which are not. A
; urfl domain includes links accessible from the root word, tracing to
; the right (as well as everything accessible from the left end of the
; starter link).

URFL_DOMAIN_STARTER_LINKS:  TOo   I#j  Pa##j   CP



; ----------------------------------------------------------------------
; The following start a urfl_only domain. These include _only_ links :
; reachable from the root word, tracing to the right. They aren't
; included in the domain

URFL_ONLY_DOMAIN_STARTER_LINKS:  SFsx   Ss#g   COp



; ----------------------------------------------------------------------
; Links which start a domain and are also part of the domain. This must be
; a sublist of the domain_starter_list

DOMAIN_CONTAINS_LINKS:
 Mg*   Mx   Bsd   MX#a   Ma#*   Mv*   MX#r   Ss#d   Ws   Wq  Qd   Mj   Wj
 Wi  MX#j   AFd   PFc   Jr   Wd   Wp   Wb   Mr



; ----------------------------------------------------------------------
; These links are not put in the word/link graph. They also cannot be the
; starter links for a domain. (These links may also only be used in cycles.)

IGNORE_THESE_LINKS: Xca



; ----------------------------------------------------------------------
; These links may only be used in cycles.
; ---
; Jd and OFd are used with determiner D: "I have a lot of cookies"
; ---
; WV must form a cycle with W links: WV links to the root verb to the wall,
; and W links the leading noun to the wall. Both verb and noun must be in
; the same phrase, forming a cycle, as otherwise, nonsense happens, such as
; *He stated the fact that there be an investigation
; with W linking to "he" and WV linking to "be" (instead of "stated")
; ---
; CV: similar to WV above, must form a loop along with Ce (typically).
; Ce links noun of subordinate clause to the dominating phrase, while
; CV links the verb of the subordinate clause to the dominating phrase.
; VC links to verb in paraphrasing and subordination situations
; Both the linked noun and verb must be in the same subordinate clause.
; Example: "I wish I could see him 100 times a day"

MUST_FORM_A_CYCLE_LINKS:
  R#*  TOt  EXx  HA  SFsic  Jd  Jr  JQ  OFd Xca WV CV IV VC CPu Wh


; ----------------------------------------------------------------------
; These links are not traced further if they point back before the root word.
;
; The creation of Rw necessitated making B#m a restricted link, to
; prevent the (e) domain, started by Ce, from extending around through
; the Rw link.
; Reverted the B#m thing ...
; This breaks parsing of
;    How fast a program does he think it is
;    I wonder how fast a program he thinks it is
;    I wonder how much money you earned
;    I wonder how many people you saw
;    I wonder how big a department it is
;    I wonder how much oil they spilled
;    This is the man whose dog I bought
;    I wonder which dog he said you chased
;    How efficient a program is it
; Meanwhile, I can't find the Ce problem mentioned ... this needs more
; documentation!

RESTRICTED_LINKS:
   B#*  D##w   B#w   B#d   AFh  MVt   Xx   HL   SFsic  AFd   Bc   CX  EAh
   H   HA   PFc   B#j   Wd   PF   Z

;   H   HA   PFc   B#j   Wd   PF   Z  B#m


; ----------------------------------------------------------------------
; ---------------------- LINK TYPE TABLE-------------------------------
; ----------------------------------------------------------------------
; The following table associates a domain type with each possible
; starting link. It contains pairs: the first of each pair is a link
; type, and the second is the domain to which that link type belongs.
;
; Rn    r  ; Rn is no longer a domain starter; see above.

STARTING_LINK_TYPE_TABLE:
 Ce    e
 R*    r
 Re    r
 W     m
 RSe   e
 Cs    s
 Ca    s
 Jr    e
 Mr    r
 Cc    s
 Mv*   e
 QI#d  s
 BIqx  s
 TOn   e
 TOi   e
 MVi   e
 MV#c  s
 MV#o  s
 AFd   s
 PFc   s
 Mg*   e
 Mj    j
 Qd    m
 MX#j  j
 TOo   x
 I#j   x
 Pa##j x
 CP    x
 COp   d
 SFsx  d
 Ss#g  d
 SIs#g s
 Ss#d  s
 Bsd   s
 ER    s
 Z     s
 Ma#*  e
 MX#p  e
 Ci    e
 MX#a  e
 Eq    e
 COq   e
 VCq   s
 MX#r  r


; ----------------------------------------------------------------------
; ----------------------- LINK SETS ------------------------------------
; ----------------------------------------------------------------------
; (Not in use at present; see comment at beginning of file)

; ----------------------------------------------------------------------
; ----------------- RULES ----------------------------------------------
; ----------------------------------------------------------------------
; Explanation of syntax: as usual, each stanza begins with a label
; terminated by a colon. The interpretation of the rule depends on
; the label, as specified in each stanza.

; The following rule asserts that the linkage must *still* be connected
; when the specified set(s) of links are removed from the linkage.

FORM_A_CYCLE_RULES:
        @MUST_FORM_A_CYCLE_LINKS  ,  "'must form a cycle' violation0"


; For the following rules, if a domain contains a link matching the 1st
; column, it must also contain a linkage matching one of the members of the
; set in the 2nd column. The individual rules are demarcated by semicolons and
; the fields within a rule are demarcated by commas.

; XXX fixme -- Qd should be replaced by Qw in first four.
CONTAINS_ONE_RULES:
 SI#*  ,  Wq Qp Qd Qw  CQ  PFc   Wp   Wb Xc , "Bad use of s-v inversion1" ,
 SI#x  ,  Wq Qp Qd     CQ  PFc   Wp   Wb    , "Bad use of s-v inversion2" ,
 SFI##* , Wq    Qd     CQ  PFc              , "Bad use of s-v inversion3" ,
 SXI   ,  Wq    Qd     CQ  PFc              , "Bad use of s-v inversion4" ,
 Ws    ,  D##w  S##w   H                    , "S-V inversion required5" ,
 I#a   ,  B#m   B#w                         , "incorrect use of 'to'6"  ,
 Wq    ,  SI    SFI   SXI                   , "S-V inversion required7" ,
 Wb    ,  SI    SFI   SXI                   , "S-V inversion required7a" ,
 Qd    ,  SI    SFI   SXI                   , "S-V inversion required8" ,
 PFc   ,  SI    SFI   SXI                   , "S-V inversion required9" ,
 Mj    ,  Jw    JQ                          , "Incorrect relative10" ,
 MX#j  ,  Jw    JQ                          , "Incorrect relative11" ,
 Wj    ,  Jw    JQ                          , "Misuse of preposition12" ,
 JQ    ,  Mj    Wj    MX#j  MVp             , "Misuse of preposition13" ,
 Jw    ,  Mj    Wj    MX#j                  , "Misuse of preposition14" ,
 B#j   ,  Jr                                , "Incorrect relative15"    ,
 Jr    ,  B#j                               , "Incorrect relative16"    ,
; The two below prevent "How big?" and "How quickly?"
; EAh   ,  AF    Bsm    B*m  Qe  Ca  AFm    , "Incorrect use of 'how'17"   ,
; EEh   ,  AF    Bsm    B*m  Qe  Ca  AFm    , "Incorrect use of 'how'18"   ,
 Qe    ,  EEh  EAh                          , "Incorrect use of adverb19"  ,
 THi   ,  SFsi   SFIsi   OXi                , "Complement requires 'it'20" ,
 TSi   ,  SFsi   SFIsi   OXi                , "Complement requires 'it'21" ,
 QIi   ,  SFsi   SFIsi   OXi                , "Complement requires 'it'22" ,
 TOi   ,  SFsi   SFIsi   OXi                , "Complement requires 'it'23" ,
 Ci    ,  SFsi   SFIsi   OXi                , "Complement requires 'it'24" ,
 COqi  ,  SFsi   SFIsi   OXi                , "Complement requires 'it'25" ,
 CPi   ,  SFsi   SFIsi   OXi                , "Complement requires 'it'26" ,
 Eqi   ,  SFsi   SFIsi   OXi                , "Complement requires 'it'27" ,
 LEi   ,  SFsi   SFIsi   OXi                , "Complement requires 'it'28" ,
 MVti  ,  SFsi   SFIsi   OXi                , "Complement requires 'it'29"     ,
 AFdi  ,  SFsi   SFIsi   OXi                , "Complement requires 'it'30"     ,
 O#i   ,  SFsi   SFIsi   OXi                , "Complement requires 'it'31"     ,
; SFs, SFp SFu: force subject-object agreement for
; singular/plural/uncountable noun objects
 SFst  ,  O*t   Ost   Omt   Omm   Bs#t    B*#t    Bc#t    , "Bad use of 'there'32s"           ,
 SFp   ,  O*t   Opt   Omt   Omm   Bp#t    B*#t    Bc#t    , "Bad use of 'there'32p"           ,
 SFu   ,  O*t   Out   Omt   Omm   Bp#t    B*#t    Bc#t    , "Bad use of 'there'32u"           ,
;
 SFIst ,  O*t   Ost   Omt    Bs#t    B*#t    Bc#t    , "Bad use of 'there'34"           ,
 SFIp  ,  O*t   Opt   Omt    Bp#t    B*#t    Bc#t    , "Bad use of 'there'35"           ,
 OXt   ,  O#t   B##t                     ,   "Bad use of 'there'36"           ,
 SFsi* ,  TOi    THi   QIi    TSi    O#i    Ci    THb   CPi CPu
          COqi    CPi    Eqi    AFdi    BIh , "Bad use of 'it'37"           ,
 SFIsi ,  TOi    THi   QIi    TSi    O#i    Ci    THb   CPi
          COqi    CPi    Eqi    AFdi    BIh , "Bad use of 'it'38"           ,
 OXi   ,  TOi    THi   QIi    TSi    O#i    Ci    THb   CPi
          COqi    CPi    Eqi    AFdi    BIh , "Bad use of 'it'39"           ,
 THb   ,  S##t    SI##t  SFsi  SFIsi        , "Bad use of predicate40"      ,
 BIh   ,  Ss#b    SIs#b  SFsi  SFIsi        , "Bad use of predicate41"      ,
 BIq   ,  S##q    SI##q  SFsi  Ss#b    SFIsi SIs#b
                                            , "Bad use of predicate42"      ,
 MVt   ,  Dm#m   EAm   EEm   MVm  Pam   Pafm   AFm   EB#m   MVb AJrc
          Om   Mam  Am  Jm  Ds*m   MX#m     , "Bad comparative43"    ,
 MVz   ,  D##y    EAy    EEy    MVy    EB#y , "Bad comparative44"    ,
 MV#a  ,  Pam    Pafm    EAm   Ds*m   EAy   AFm   Mam   Am
					    , "Bad comparative45"    ,
 MV#i  ,  Pam    Pafm    EAm   Ds*m   EAy   AFm   Mam   Am
					    , "Bad comparative46"    ,
 MV#o  ,  D##m    D##y    Om    Oy    Jm    Jy   Am   MX#m
					    , "Bad comparative47"    ,
 MV#c  ,  EEm   MVb   Dm#m   EEy   D##y  MVm   Om   Oy
                            Jm   Jy   Am   MX#m
					    , "Bad comparative48"    ,
 Pafc  ,  EB#m    EB#y                      , "Bad comparative49"    ,
 Pafc  ,  Pa*    Paf*                       , "Bad comparative50"    ,
 MVat  ,  MVm                               , "Bad comparative51"    ,
 MVpt  ,  MVm                               , "Bad comparative52"    ,
 MVat  ,  MVa   MVp                         , "Bad comparative53"    ,
 MVpt  ,  MVa   MVp                         , "Bad comparative54"    ,
 U#t   ,  D##m    D##y    Om    Oy    Jm    Jy   Am   MX#m
				            , "Bad comparative55"    ,
 Cc    ,  EEm    EEy    MVm    MVb    MVy
	                                    , "Bad comparative56"    ,
 Sp#c  ,  Dmcm    Dmcy    Om    Oy    Jm    Jy  MX#m
	 				    , "Bad comparative57"    ,
 Ss#c  ,  Dmum    Dmuy    Om    Oy    Jm    Jy    Ds*y  MX#m
					    , "Bad comparative58"    ,
 S##c  ,  Dm#m    D##y    Om    Oy    Jm    Jy   MX#m
					    , "Bad comparative59"    ,
 THc   ,  TH                                , "Bad comparative60"    ,
 TOc   ,  TO**   TOf*   TOi*                , "Bad comparative61"    ,
 TOtc  ,  TOt  ,                              "Bad comparative62"    ,
 Ma**  ,  TO   TOf   TH   MVp   TOt   QI   OF  MVt   MVz   MVh   Ytm   Ya
					    , "Bad use of adjective63"    ,
 Mam   ,  TO   TOf   TH   MVp   TOt   QI   OF  MVt   MVz   MVh   Ytm   Ya
					    , "Bad use of adjective64"    ,
;
; The below blocks the singular "I want a gift inexpensive", while
; allowing Pa**j to be used with other kinds of objects.
;
 Pa##j ,  Osm  Op  Ox Os*e OXi ,              "Bad predicative adj 62" ,
;
; The rule below sounds nice, in principle, in preventing some
; nasty constructions ... however, it also prevents some good
; ones, too. e.g. "The dog, unsatisfied, barked loudly"
;
MX#a  ,  TO  TOf  TH  MVp  TOt  QI  OF  MVt  MVz  MVh  Ytm Ya  MJ E EA
			                    , "Bad use of adjective65"    ,

; There's no JUNK connector, which means that Oxn is
; prohibited from ever occurring. 4.0.batch covers this.
 Oxn   ,  JUNK                              , "Bad use of pronoun66" ,
 MVh   ,  EExk   EAxk   D##k                , "Incorrect use of that67" ,

; The Rw link necessitated commenting out 68, because we had to make B#m
; a restricted link(see above) xxx reverted .. this is needed ...
;
B#m  ,   D##w   H   HA                     , "Bad use of gerund68",
Sj   ,   I#j                               , "Bad use of bare infinitive",
Sg   ,   Pg                                , "Bad use of present participle"

; Qd    ,  MX blocks "Joe doesn't matter what Ted does"
CONTAINS_NONE_RULES:
 S     ,  Spxi                             , "Bad n-v agreement69" ,
 SI    ,  SIpxi                            , "Bad n-v agreement70" ,
 Ws    ,  B#m   Ca   BT                    , "Question inversion violated71" ,
 SF    ,  I*   PP*   TO*   Pa*   Pam  Pg*   Pv*   LE*   AFd*  MVta
                                           , "Bad use of 'filler' subject72" ,
 SFI   ,  I*   PP*   TO*   Pa*   Pam  Pg*   Pv*   LE*   AFd*  MVta
                                           , "Bad use of 'filler' subject73" ,
 OX    ,  I*   PP*   TO*   Pa*   Pam  Pg*   Pv*   LE*   AFd*  MVta
                                           , "Bad use of 'filler' subject74" ,
 MXsr  ,  Sp#w                             , "Bad n-v agreement75" ,
 MXpr  ,  Ss#w   S#iw                      , "Bad n-v agreement76" ,
 Mr    ,  B#*                              , "Bad use of 'whose'77",
 EAy   ,  MVs                              , "Bad comparative78",
 VCz   ,  EAy                              , "Bad comparative79",
 Qd    ,  MX                               , "Bad subject inversion",

; H, O blocks "How many people you (noun)"
; But it wrecks "how much money did you give her?"
; so this is too crude a fix.
; H     ,  O                                , "Bad how-question",

; I don't understand domains, this doesn't do what I expected.
; (It fails to block J- & Rn+ which is what I want it to do.)
; Rn    ,  Js   Ju   Jp J#                   , "Bad relative question80",


; ----------------------------------------------------------------------
; The following rules assert that all specified domains must have the
; property that all of the words that touch a link in the domain are
; not to the left of the root word of the domain. These rules are
; different from the above in that the first field is a *domain name*,
; rather than a set of links.

BOUNDED_RULES:
 s                               , "Unbounded s domain78" ,
 r                               , "Unbounded r domain79"
