;;; Hey, emacs(1), this is -*- Mode: tdl; Coding: utf-8; -*- got it? ;;; ;;; Copyright (c) 2005 -- 2018 Dan Flickinger (danf@stanford.edu); ;;; copyright (c) 2005 -- 2018 Stephan Oepen (oe@ifi.uio.no); ;;; see `LICENSE' for conditions. ;;; ;;; ;;; first shot of minimal type hierarchy for paraphrasing transfer rules. ;;; ;;; ;;; minimal hierarchy of variable types, using the new (R)MRS naming scheme. ;;; u := *top* & [ SCRATCH scratch ]. i := u. p := u. h := p. e := i. x := i & p. ;;; ;;; to check for `arity' in MTRs, maybe we need an `anti-'variable type ;;; a := u. ;;; ;;; the scratch slot in variables: used during transfer to control application ;;; of rules, e.g. the rules that introduce selected preposition EPs in the ERG ;;; accomodation phase which would otherwise be cyclic, i.e. the rule would ;;; fire on its own output (since it does not consume anything). ;;; scratch := *top*. test := scratch. complete := scratch. flags := *top* & [ OPTIONAL luk, EQUAL *list*, SUBSUME *list*, TRIGGER string, TRIGGER-CONSTRAINT *avm* ]. mrs_transfer_rule := *top* & [ FILTER mrs, CONTEXT mrs, INPUT mrs, OUTPUT mrs, FLAGS flags ]. generator_rule := mrs_transfer_rule & [ INPUT.RELS ]. monotonic_mtr := mrs_transfer_rule & [ CONTEXT.HOOK.LTOP #h, INPUT.HOOK.LTOP #h, OUTPUT.HOOK.LTOP #h ]. monotonic_omtr := monotonic_mtr & optional_mtr. optional_mtr := mrs_transfer_rule & [ FLAGS.OPTIONAL + ]. basic_word_mtr := monotonic_omtr & [ INPUT [ HOOK.INDEX #ind, RELS.LIST < [ LBL #h1, ARG0 #i2, ARG1 #x3, ARG2 #x4, ARG3 #x5 ], ... > ], OUTPUT [ HOOK.INDEX #ind, RELS.LIST < [ LBL #h1, ARG0 #i2, ARG1 #x3, ARG2 #x4, ARG3 #x5 ], ... > ] ]. word_mtr := basic_word_mtr & [ INPUT.RELS ]. verb_mtr := word_mtr. word_hcons_mtr := word_mtr & [ OUTPUT.HCONS ]. verb_prtcl_cp_mtr := monotonic_mtr & [ INPUT [ RELS , HCONS ], OUTPUT [ RELS , HCONS ] ]. verb_np_prtcl_np_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS ]. verb_prtcl_pp_ger_mtr := monotonic_mtr & [ INPUT [ RELS ], OUTPUT.RELS ]. detlesspp_mtr := monotonic_mtr & [ INPUT [ RELS , HCONS ], OUTPUT.RELS.LIST < [ LBL #h1, ARG0 #e2, ARG1 #x3 ], ... > ]. detlesspp+adj_mtr := monotonic_mtr & [ INPUT [ RELS , HCONS ], OUTPUT.RELS.LIST < [ LBL #h1, ARG0 #e2, ARG1 #x3 ], ... > ]. light_verb_mtr := monotonic_mtr & [ INPUT [ RELS.LIST < [ LBL #h1, ARG0 #e2, ARG1 #x3, ARG2 #x4 ], [ LBL #h6, ARG0 #x4 ], [ ARG0 #x4, RSTR #h5 ], ... >, HCONS ], OUTPUT.RELS.LIST < [ LBL #h1, ARG0 #e2, ARG1 #x3 ], ... > ]. np_deletion_omtr := monotonic_omtr & [ INPUT [ HOOK.INDEX #index, RELS.LIST < [ LBL #h1, ARG0 #x1 & ref-ind ], [ PRED quant_rel, ARG0 #x1, RSTR #h2 ], ... >, HCONS ], OUTPUT [ HOOK.INDEX #index, HCONS ] ]. compound_head_deletion_omtr := np_deletion_omtr & [ INPUT.RELS , OUTPUT.RELS , FLAGS.SUBSUME < #x1, #x2, #h1 > ]. appos_deletion_omtr := np_deletion_omtr & [ INPUT.RELS.LIST < [ ARG0 #x2 ], [ ], [ PRED appos_rel, ARG2 #x2 ], ... >, FLAGS.SUBSUME < #x2 > ]. ;; Delete the head of the appos appos_1_deletion_omtr := appos_deletion_omtr & [ INPUT.RELS , OUTPUT.RELS ]. ;; Wednesday night => Wednesday day_part_deletion_omtr := np_deletion_omtr & [ INPUT.RELS , OUTPUT.RELS , FLAGS.EQUAL < #x1, #x2, #e0, #h5 > ]. quantifier_substitution_omtr := monotonic_omtr & [ CONTEXT.RELS , INPUT.RELS , OUTPUT.RELS , FLAGS [ EQUAL < #lbl, #h2 >, SUBSUME < #x1 > ] ]. ;; DPF 2015-04-01 - Deleted the following, to get |he cooks for them| ;; CONTEXT.RELS , ;; (also FLAGS.EQUAL < ..., #h5 >) ;; pronoun_substitution_omtr := norm_monotonic_omtr & [ FILTER.RELS , INPUT.RELS , OUTPUT.RELS , FLAGS.EQUAL < #h1 > ]. ;; |Chicago's skyscrapers| => |the skyscrapers of Chicago| possessive_ppof_omtr := monotonic_omtr & [ FILTER.RELS , CONTEXT.RELS , INPUT [ RELS , HCONS ], OUTPUT [ RELS , HCONS ], FLAGS.SUBSUME < #x1, #x2 > ]. ;; causative/inchoative ;; causative-inchoative_omtr := norm_monotonic_omtr & [ INPUT [ RELS , HCONS ], OUTPUT.RELS , FLAGS.EQUAL < #x3, #x4, #h1 > ]. ;; agentless passive ;; agentless_passive_omtr := norm_monotonic_omtr & [ FILTER.RELS , INPUT [ RELS , HCONS ], OUTPUT [ RELS , HCONS ], FLAGS [ EQUAL < #h1 >, SUBSUME < #x3, #x4 > ] ]. dative_object_deletion_omtr := norm_monotonic_omtr & [ INPUT [ HOOK.INDEX #index, RELS , HCONS ], OUTPUT [ HOOK.INDEX #index, RELS , HCONS ], FLAGS.SUBSUME < #x3, #x4, #x5, #h1, #x10 > ]. ;;; ;;; a few `special-purpose' types, transfer operators in a sense ;;; +upcase+ := string. +downcase+ := string. ;;; ;;; common types for generator trigger rules ;;; arg0e_gtr := generator_rule & [ CONTEXT [ RELS.LIST < [ ARG0 #e & event ], ... > ], FLAGS.EQUAL < #e, ... > ]. arg0e+1x_gtr := arg0e_gtr & [ CONTEXT [ RELS.LIST < [ ARG1 #x & basic_non_expl-ind ], ... > ], FLAGS [ EQUAL < semarg >, SUBSUME < #x > ] ]. arg0e+2x_gtr := arg0e_gtr & [ CONTEXT [ RELS.LIST < [ ARG2 #x & basic_non_expl-ind ], ... > ], FLAGS [ EQUAL < semarg >, SUBSUME < #x > ] ]. arg0e+3x_gtr := arg0e_gtr & [ CONTEXT [ RELS.LIST < [ ARG3 #x & basic_non_expl-ind ], ... > ], FLAGS [ EQUAL < semarg >, SUBSUME < #x > ] ]. arg0e+1h_gtr := arg0e_gtr & [ CONTEXT [ RELS.LIST < [ ARG1 #h & handle ], ... > ], FLAGS.EQUAL < semarg, #h > ]. arg0e+2h_gtr := arg0e_gtr & [ CONTEXT [ RELS.LIST < [ ARG2 #h & handle ], ... > ], FLAGS.EQUAL < semarg, #h > ]. arg0e+3h_gtr := arg0e_gtr & [ CONTEXT [ RELS.LIST < [ ARG3 #h & handle ], ... > ], FLAGS.EQUAL < semarg, #h > ]. ;; DPF 2013-08-26 - Constrain #x to overt_non_expl-ind arg0e+x_gtr := arg0e_gtr & [ CONTEXT [ RELS.LIST < relation & [ ARG0.E.TENSE real_tense ], [ LBL #h, ARG0 #x & overt_non_expl-ind ], ... > ], FLAGS [ EQUAL < semarg, #h >, SUBSUME < #x > ] ]. arg0e+xh_gtr := arg0e_gtr & [ CONTEXT [ RELS.LIST < relation & [ ARG0.E.TENSE real_tense, ARG2 handle & #h2 ], [ LBL #h, ARG0 #x & basic_non_expl-ind ], ... > ], FLAGS [ EQUAL < semarg, #h, #h2 >, SUBSUME < #x > ] ] . arg0e+1x_be_gtr := arg0e+1x_gtr & [ CONTEXT [ RELS ], FLAGS [ TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK [ INDEX.E #tam, XARG #x & [ PNG #png ]], AGR.PNG #png ] ] ]. complementizer_gtr := generator_rule & [ CONTEXT [ RELS ], FLAGS.EQUAL < #e, ... > ]. compl_prop_gtr := complementizer_gtr & [ CONTEXT [ RELS ] ]. compl_prop_gtr1 := compl_prop_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_prop_gtr2 := compl_prop_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_prop_gtr3 := compl_prop_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_prop_gtr4 := compl_prop_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_ques_gtr := complementizer_gtr & [ CONTEXT [ RELS ] ]. compl_ques_gtr1 := compl_ques_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_ques_gtr2 := compl_ques_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_ques_gtr3 := compl_ques_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_ques_gtr4 := compl_ques_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_notense_gtr := complementizer_gtr & [ CONTEXT.RELS ]. compl_notense_gtr1 := compl_notense_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_notense_gtr2 := compl_notense_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_notense_gtr3 := compl_notense_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_ques_notense_gtr := complementizer_gtr & [ CONTEXT.RELS ]. compl_ques_notense_gtr1 := compl_ques_notense_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_ques_notense_gtr2 := compl_ques_notense_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. compl_ques_notense_gtr3 := compl_ques_notense_gtr & [ CONTEXT.RELS , FLAGS.EQUAL < semarg, #h > ]. ;;; Idiom rules v_nbar_idiom_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS ]. v_nbar_plus_pp_idiom_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS ]. basic_v_nbar_pp_idiom_mtr := v_nbar_plus_pp_idiom_mtr & [ INPUT.RELS ]. ; For |take X into account| v_np_detlesspp_idiom_mtr := v_nbar_plus_pp_idiom_mtr & [ INPUT.RELS ]. ;; DPF 2018-07-25 - For some reason, constraining third relation's PRED to ;; quant_rel fails, as for |we fell victim to Kim|. FIX? #| v_nbar_pp_idiom_mtr := basic_v_nbar_pp_idiom_mtr & [ INPUT.RELS ]. |# v_nbar_pp_idiom_mtr := basic_v_nbar_pp_idiom_mtr. v_nbar-pl_pp_idiom_mtr := basic_v_nbar_pp_idiom_mtr & [ INPUT.RELS ]. v_np_idiom_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS , FLAGS.EQUAL < #arg2 > ]. v_light_adj_idiom_mtr := monotonic_mtr & [ INPUT [ RELS , HCONS ], OUTPUT.RELS ]. ;; see fit to leave v_adj_idiom_mtr := monotonic_mtr & [ INPUT [ RELS , HCONS ], OUTPUT.RELS ]. basic_v_np_xp_idiom_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS ]. v_np_xp_idiom_mtr := basic_v_np_xp_idiom_mtr & [ INPUT.RELS , FLAGS.EQUAL < #arg2 > ]. v_np2_xp_idiom_mtr := basic_v_np_xp_idiom_mtr & [ INPUT.RELS , FLAGS.EQUAL < #arg3 > ]. detless_pp_idiom_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS ]. pp_idiom_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS ]. ;; |point of view| noun_detless_pp_idiom_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS ]. ; wait one's turn basic_v_reflnp_idiom_mtr := monotonic_mtr & [ INPUT.RELS.LIST < [ LBL handle & #vlbl, ARG0 event, ARG1 #varg1, ARG2 ref-ind & #varg2 ], [ LBL handle & #lbl, ARG0 #varg2 ], [ LBL #vlbl, PRED id_rel, ARG1 #varg1, ARG2 #parg2 ], [ LBL #lbl, PRED poss_rel, ARG1 #varg2, ARG2 #parg2 ], ... >, OUTPUT.RELS ]. v_reflnp_idiom_mtr := basic_v_reflnp_idiom_mtr & [ INPUT.RELS ]. v_reflnp-pp_idiom_mtr := monotonic_mtr & [ INPUT [ RELS.LIST < [ LBL handle & #vlbl, ARG0 event, ARG1 ref-ind & #varg1, ARG2 ref-ind & #varg2 ], [ LBL handle & #lbl, ARG0 #varg2 ], relation, [ LBL #vlbl, PRED id_rel, ARG1 #varg1, ARG2 #parg2 ], [ LBL #lbl, PRED poss_rel, ARG1 #varg2, ARG2 #parg2 ], ... > ], OUTPUT.RELS ]. v_reflnp-pp_seq_idiom_mtr := v_reflnp-pp_idiom_mtr & [ INPUT [ RELS , HCONS ] ]. v_reflnp-pp_seq2_idiom_mtr := v_reflnp-pp_idiom_mtr & [ INPUT.RELS ]. ;; "a taste of her own medicine" np_poss_idiom_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS ]. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; classifier_noun_mtr := monotonic_mtr & [ INPUT.RELS , OUTPUT.RELS ]. expletive_it_gtr := generator_rule & [ CONTEXT [ RELS ], FLAGS.TRIGGER "it" ]. ; Exclude adverbs with same pred as it-adjectives expletive_it_adj_gtr := expletive_it_gtr & [ CONTEXT [ RELS ] ]. expletive_is_adj_expl_gtr := generator_rule & [ CONTEXT [ RELS ], FLAGS.TRIGGER "be_c_is" ]. expletive_was_adj_expl_gtr := generator_rule & [ CONTEXT [ RELS ], FLAGS.TRIGGER "be_c_was" ]. expletive_be_adj_expl_gtr1 := generator_rule & [ CONTEXT [ RELS ], FLAGS.TRIGGER "be_c_be" ]. expletive_be_adj_expl_gtr2 := generator_rule & [ CONTEXT [ RELS ], FLAGS.TRIGGER "be_c_be" ]. expletive_been_adj_expl_gtr := generator_rule & [ CONTEXT [ RELS ], FLAGS.TRIGGER "be_c_been" ]. ; Copula trigger rule types ; Five rules for copula plus [ PROGR + ] verbs, with ref-ind in ; ARG1,2,3, or handle in ARG1,2 (sentential subject of active -- passive ; treated separately). be_cop_x1_rule := arg0e+1x_gtr & [ CONTEXT [ RELS ], FLAGS.TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK.XARG #x & [ PNG #png ], AGR.PNG #png ] ]. be_cop_x2_rule := arg0e+2x_gtr & [ CONTEXT [ RELS ], FLAGS.TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK.XARG #x & [ PNG #png ], AGR.PNG #png ] ]. be_cop_x3_rule := arg0e+3x_gtr & [ CONTEXT [ RELS ], FLAGS.TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK.XARG #x & [ PNG #png ], AGR.PNG #png ] ]. ; Special case for future-modal "going to" as in "He is going to leave." be_cop_going+to_rule := arg0e_gtr & [ CONTEXT [ RELS ] ]. ; Exclude 'are, 'were' since expletive 'it' and sentential subjects are ; 3sg. be_cop_h1_rule := arg0e+1h_gtr & [ CONTEXT [ RELS ] ]. be_cop_h2_rule := arg0e+2h_gtr & [ CONTEXT [ RELS ] ]. ; Five rules for copula with passives: Either a message's PSV is ; coindexed with (1) a ref-ind (ARG 2,3) or (2) a handle (sentential subject ; of passive verb, as ARG2) -- where the PSV attribute is unconstrained, allow ; both active and passive; or (3-4) context is a raising verb with a message ; argument (ARG1,2), as in "It was known that Kim won", where the PSV value ; remains unbound since the syntactic subject is an expletive, invisible in MRS ; This latter case is unfortunate, since it means copulas will be introduced ; unnecessarily for lots of MRSs. ; So for the moment, we'll limit the damage by restricting these expletive ; subject passives to ones where there is no explicit 'by phrase', so we ; won't generate e.g. "It was known by everyone that Kim won". Maybe no ; great loss for now. ; Here the FILTER rel prevents triggering when the event introducing the ; potentially passived argument is the ARG0 of a message whose PSV does not ; license that argument. The #u also in FLAGS.EQUAL prevents this filter ; from being invoked if there is no value assigned in PSV, with the effect ; that an underspecified (or absent) PSV value will be compatible with ; this rule, so it will trigger. be_cop_2x_psv_rule := arg0e_gtr & [ CONTEXT [ RELS ], FLAGS [ EQUAL < semarg >, SUBSUME < #x >, TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK.XARG #x & [ PNG #png ], AGR.PNG #png ] ] ]. be_cop_3x_psv_rule := arg0e_gtr & [ CONTEXT [ RELS ], FLAGS [ EQUAL < semarg >, SUBSUME < #x >, TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK.XARG #x & [ PNG #png ], AGR.PNG #png ] ] ]. be_cop_2h_psv_rule := arg0e_gtr & [ CONTEXT [ RELS ], FLAGS.EQUAL < event, #h > ]. be_cop_3h_psv_rule := arg0e_gtr & [ CONTEXT [ RELS ], FLAGS.EQUAL < event, #h > ]. be_cop_expl_2h_psv_rule := arg0e_gtr & [ CONTEXT [ RELS ], FILTER.RELS , FLAGS.EQUAL < semarg, #h > ]. be_cop_expl_3h_psv_rule := arg0e_gtr & [ CONTEXT [ RELS ], FILTER.RELS , FLAGS.EQUAL < semarg, #h > ]. ; Three rules for copula plus predicative PP or AP, with 3sg ref-ind ARG1,2,3 be_cop_prd_1x_rule := arg0e+1x_gtr & [ CONTEXT [ RELS ], FLAGS.TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK [ XARG #x & [ PNG #png ] ], AGR.PNG #png ] ]. be_cop_prd_2x_rule := arg0e+2x_gtr & [ CONTEXT [ RELS ], FLAGS.TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK.XARG #x & [ PNG #png ], AGR.PNG #png ] ]. be_cop_prd_3x_rule := arg0e+3x_gtr & [ CONTEXT [ RELS ], FLAGS.TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK.XARG #x & [ PNG #png ], AGR.PNG #png ] ]. ; Two similar rules for copula plus adjective with message argument as ; syntactic subject (again only ARG1,2 possible, and maybe even only ARG1). ; Again, exclude 'am, are, were' be_cop_prd_1h_rule := arg0e+1h_gtr & [ CONTEXT [ RELS ] ]. be_cop_prd_2h_rule := arg0e+2h_gtr & [ CONTEXT [ RELS ] ]. ; One rule for copula with purposive VP: 'Kim is to stay here.' be_cop_inf_rule := generator_rule & [ CONTEXT.RELS ]. ; One rule for tag questions with there-copula in main clause (hack to avoid ; spurious ambiguity). be_cop_tag_th_expl_rule := arg0e_gtr & [ CONTEXT [ RELS ] ]. ; One rule for VP ellipsis with there-copula (hack to avoid spurious ambig). be_cop_ellip_th_expl_rule := arg0e_gtr & [ CONTEXT [ RELS ] ]. be_cop_ellip_rule := arg0e_gtr & [ CONTEXT.RELS , FLAGS.TRIGGER-CONSTRAINT.SYNSEM.LOCAL [ CONT.HOOK.XARG #x & [ PNG #png ], AGR.PNG #png ] ]. ;; Rules for copula 'are/were' with group nouns which are semantically NUM 3s ;; as in |a number of cats were arising/hired| be_cop_group_rule := arg0e_gtr & [ CONTEXT [ RELS ], FLAGS [ EQUAL < semarg >, SUBSUME < #x, #arg > ] ]. be_cop_were_group_rule := be_cop_group_rule & [ CONTEXT [ RELS [ LIST [ FIRST [ ARG0 [ E [ TENSE past ] ] ] ] ] ] ]. be_cop_are_group_rule := be_cop_group_rule & [ CONTEXT [ RELS [ LIST [ FIRST [ ARG0 [ E [ TENSE present ] ] ] ] ] ] ]. prep_particle_rule := generator_rule & [ CONTEXT [ RELS ], FLAGS [ EQUAL < #x > ] ]. prep_particle_n_rule := generator_rule & [ CONTEXT [ RELS ], FLAGS [ EQUAL < #x > ] ]. ;; For OpenProof-specific entries (see end of `trigger.mtr') be_cop_promote_ind_gtr := arg0e_gtr & [ CONTEXT.RELS , FLAGS.TRIGGER-CONSTRAINT.SYNSEM.LOCAL.CONT.HOOK.XARG it-ind ]. ;; For educ rules norm_monotonic_omtr := monotonic_omtr & [ INPUT.HOOK.INDEX #ind, OUTPUT.HOOK.INDEX #ind ]. ;; Common subj in coord Ss ;; |Kim arose and Kim arrived| => |Kim arose and arrived| ;; basic_coord_vp_mtr := norm_monotonic_omtr & [ CONTEXT.RELS , INPUT [ HOOK.INDEX #index, RELS , HCONS ], OUTPUT [ HOOK.INDEX #index, RELS , HCONS ], FLAGS.SUBSUME < #x1, #x2, ... > ]. ;; Make sure the name's CARGs match ;; coord_vp_named_mtr := basic_coord_vp_mtr & [ CONTEXT.RELS , INPUT.RELS , FLAGS.SUBSUME < semarg, semarg > ]. ;; Matching PNG values coord_vp_pron_mtr := basic_coord_vp_mtr & [ CONTEXT.RELS , INPUT.RELS , FLAGS.SUBSUME < semarg, semarg > ]. coord_vp_noun_mtr := basic_coord_vp_mtr & [ CONTEXT.RELS , INPUT.RELS , FLAGS.SUBSUME < semarg, semarg > ]. ;; Reverse the order of two nonconjoined phrases: |X and Y| => |Y and X| ;; ;; DPF 2017-08-15 - Split into two, one for NPs and one for non-NPs? conj_reverse_mtr := norm_monotonic_omtr & [ INPUT.RELS , OUTPUT.RELS ]. basic_pro_subj_mtr := norm_monotonic_omtr & [ CONTEXT.RELS.LIST < [ ARG0 event & [ E.TENSE real_tense ], ARG1 #x1 ], [ ARG0 event & [ E.TENSE real_tense ], ARG1 #x2 ], [ ARG0 #x1 & ref-ind ], [ PRED quant_rel & #qpred, ARG0 #x1 ], ... >, INPUT [ HOOK.INDEX #index, RELS.LIST < [ LBL #h10, ARG0 #x2 & ref-ind ], [ PRED #qpred, ARG0 #x2, RSTR #h20 ], ... > ], OUTPUT [ HOOK.INDEX #index, RELS ], FLAGS.SUBSUME < #x2, ... > ]. ;; |Mary arose and Mary arrived| => |Mary arose and she arrived| ;; pro_subj_mtr := basic_pro_subj_mtr & [ CONTEXT.RELS , INPUT.RELS , FLAGS.SUBSUME < semarg > ]. pro_coord_subj_mtr := basic_pro_subj_mtr & [ CONTEXT.RELS.LIST < [ ], [ ], [ PRED _and_c_rel, ARG1 #x1, ARG2 #x2 ], [ ], [ PRED gen_named_rel, ARG0 #x1, CARG #carg1 ], [ PRED gen_named_rel, ARG0 #x2, CARG #carg2 ], ... >, INPUT [ RELS , HCONS ], OUTPUT [ RELS.LIST < [ ARG0.SORT #sort ], [ ], ... > ] ]. ;; |B and C arose and B and C arrived| => |B and C arose and they arrived| ;; conjnct_pro_coord_subj_mtr := pro_coord_subj_mtr & [ CONTEXT.RELS , OUTPUT.RELS.LIST < [ ARG0 #x3 & [ PNG.PN 3p, SORT #sort ] ], ... >, FLAGS.SUBSUME < semarg > ].