;;; Hey, emacs(1), this is -*- Mode: TDL; Coding: utf-8; -*- got it? monotonic_mtr := mrs_transfer_rule & [ CONTEXT [ LTOP #h, INDEX #i ], INPUT [ LTOP #h, INDEX #i ], OUTPUT [ LTOP #h, INDEX #i ] ]. monotonic_omtr := monotonic_mtr & optional_mtr. optional_mtr := mrs_transfer_rule & [ FLAGS.OPTIONAL + ]. message_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, MARG #h2, TPC #u3, PSV #u4 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e1, MARG #h2, TPC #u3, PSV #u4 ] > ]. message_omtr := message_mtr & optional_mtr. quantifier_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #x1, RSTR #h2, BODY #h3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #x1, RSTR #h2, BODY #h3 ] > ]. quantifier_omtr := quantifier_mtr & optional_mtr. arit_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #i1, ARG1 #x1, ARG2 #h2, ARG3 #h3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #i1, ARG1 #x1, ARG2 #h2, ARG3 #h3 ] > ]. arit_omtr := arit_mtr & optional_mtr. noun_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #x1 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #x1 ] > ]. noun_omtr := noun_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; quite possibly there is no need for the relational vs. non-relational ;;; distinction for nouns and adjectives (see below). we could just always ;;; co-index an ARG1 (ARG2 for adjectives), since this will only take effect ;;; when the input actually supplies that role. however, we probably still ;;; want to classify relational nouns somewhere, possibly in the SEM-I, since ;;; that could be required information for, e.g. compounds. (17-apr-04; oe) ;;; relational_noun_mtr := noun_mtr & [ INPUT.RELS < [ ARG1 #x1 ] >, OUTPUT.RELS < [ ARG1 #x1 ] > ]. relational_noun_omtr := relational_noun_mtr & optional_mtr. proper_noun_mtr := noun_mtr & [ INPUT.RELS < [ PRED "named_rel" ] >, OUTPUT.RELS < [ PRED named_rel ] > ]. proper_noun_omtr := proper_noun_mtr & optional_mtr. dofw_mtr := noun_mtr & [ INPUT.RELS < [ PRED "dofw_rel", CARG string ] >, OUTPUT.RELS < [ PRED dofw_rel, CARG string ] > ]. dofw_omtr := dofw_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; right now, NorGram treats the months of the year as regular nominals, i.e. ;;; unlike the ERG not as proper names. investigate with helge. ;;; (11-nov-04; oe) ;;; as it turns out, the grammars differ in the type of quantifier they use on ;;; month names, thus we will have to do a little more to get generator ;;; success (see `a_q+mofy_ef'). (9-apr-05; oe) ;;; mofy_mtr := noun_mtr & [ INPUT.RELS < [ PRED "mofy_rel", CARG string ] >, OUTPUT.RELS < [ PRED mofy_rel, CARG string ] > ]. mofy_omtr := mofy_mtr & optional_mtr. ;;; ;;; interesting: the HCONS CONTEXT condition is required, because otherwise we ;;; may end up equating unrelated pairs of `named_rel' plus `proper_q_rel'; we ;;; may need a notion of `persistent' variables, at some point, i.e. ones that ;;; must bind no more than one (object) variable in the input MRS. maybe coin ;;; [ FLAGS.PERSISTENT < #x2 > ]. (24-jan-04; oe) ;;; ;;; --- which we now have, by means of `skolemization' (10-apr-04; oe) ;;; proper_np_mtr := monotonic_mtr & [ CONTEXT.HCONS < qeq & [ HARG #h4, LARG #h1 ] >, INPUT.RELS < [ PRED "named_rel", LBL #h1, ARG0 #x2 ], [ PRED "proper_q_rel", LBL #h3, ARG0 #x2, RSTR #h4, BODY #h5 ] >, OUTPUT.RELS < [ PRED named_rel, LBL #h1, ARG0 #x2 ], [ PRED proper_q_rel, LBL #h3, ARG0 #x2, RSTR #h4, BODY #h5 ] > ]. ;;; ;;; in some cases, we need to transfer complete NPs, i.e. both the nominal EP ;;; and its quantifier. ;;; np_mtr := monotonic_mtr & [ CONTEXT.HCONS < qeq & [ HARG #h4, LARG #h1 ] >, INPUT.RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x2, RSTR #h4, BODY #h5 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x2, RSTR #h4, BODY #h5 ] > ]. expl_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1 ] > ]. arg1_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1 ] > ]. arg12_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1, ARG2 #x2 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1, ARG2 #x2 ] > ]. arg123_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1, ARG2 #x2, ARG3 #x3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1, ARG2 #x2, ARG3 #x3 ] > ]. arg1234_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1, ARG2 #2, ARG3 #3, ARG4 #4 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1, ARG2 #2, ARG3 #3, ARG4 #4 ] > ]. arg1_v_omtr := arg1_v_mtr & optional_mtr. arg12_v_omtr := arg12_v_mtr & optional_mtr. arg123_v_omtr := arg123_v_mtr & optional_mtr. arg1234_v_omtr := arg1234_v_mtr & optional_mtr. modal_mtr := arg1_v_mtr. modal_omtr := modal_mtr & optional_mtr. ;;; ;;; and now for more interesting cases of argument switching ;;; arg1_arg2_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG2 #1 ] > ]. arg1_arg2_v_omtr := arg1_arg2_v_mtr & optional_mtr. arg12_arg13_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1, ARG2 #2 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1, ARG3 #2 ] > ]. arg12_arg13_v_omtr := arg12_arg13_v_mtr & optional_mtr. arg13_arg12_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1, ARG3 #2 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1, ARG2 #2 ] > ]. arg13_arg12_v_omtr := arg13_arg12_v_mtr & optional_mtr. arg123_arg132_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1, ARG2 #2, ARG3 #3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1, ARG2 #3, ARG3 #2 ] > ]. arg123_arg132_v_omtr := arg123_arg132_v_mtr & optional_mtr. arg2_arg1_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG2 #1 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1 ] > ]. arg2_arg1_v_omtr := arg2_arg1_v_mtr & optional_mtr. arg12_arg21_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1, ARG2 #2 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #2, ARG2 #1 ] > ]. arg12_arg21_v_omtr := arg12_arg21_v_mtr & optional_mtr. arg23_arg12_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG2 #1, ARG3 #2 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #1, ARG2 #2 ] > ]. arg23_arg12_v_omtr := arg23_arg12_v_mtr & optional_mtr. arg12_arg1+pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2 ], [ LBL #h0, ARG0 e_untensed, ARG1 #e1, ARG2 #x3 ] > ]. arg12_arg1+pp_omtr := arg12_arg1+pp_mtr & optional_mtr. arg1+pp_arg12_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2 ], [ LBL #h0, ARG0 e_untensed, ARG1 #e1, ARG2 #x3 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3 ] > ]. arg1+pp_arg12_omtr := arg1+pp_arg12_mtr & optional_mtr. arg1+pp_arg13_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2 ], [ LBL #h0, ARG0 e_untensed, ARG1 #e1, ARG2 #x3 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG3 #x3 ] > ]. arg1+pp_arg13_omtr := arg1+pp_arg13_mtr & optional_mtr. arg12+pp_arg123_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2 , ARG2 #x3 ], [ LBL #h0, ARG0 e_untensed, ARG1 #e1, ARG2 #x4 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3, ARG3 #x4 ] > ]. arg12+pp_arg123_omtr := arg12+pp_arg123_mtr & optional_mtr. arg123_arg12+pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3, ARG3 #x4 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2 , ARG2 #x3 ], [ LBL #h0, ARG0 e_untensed, ARG1 #e1, ARG2 #x4 ] > ]. arg123_arg12+pp_omtr := arg123_arg12+pp_mtr & optional_mtr. ;;; ;;; these days, at least, the NorGram and ERG analyses for ;;; ;;; Abrams slår Browne som gammel --> Abrams strikes Browne as old ;;; ;;; differ in arity. the ERG analysis has Browne as the ARG1, essentially as ;;; the experiencer of the state of affairs of Abrams being old, i.e. the ARG2 ;;; of a two-place `_strike_v_as'. i admit, i find the NorGram analysis more ;;; immediately accessible. (14-sep-07; oe) ;;; arg123_arg12_predicative_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e0, ARG2 #x0, ARG3 #h1 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e0, ARG1 #x0, ARG2 #h1 ] > ]. arg123_arg12_predicative_omtr := arg123_arg12_predicative_mtr & optional_mtr. ;;; ;;; This is a sort of arg123_arg132 followed by arg123_arg12+pp. One can ;;; wonder when the arg123_arg132 switches are real or accidental the way the ;;; arguments 2 and 3 are numered. (9-sep-06; jtl) ;;; arg123_arg13+pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3, ARG3 #x4 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2 , ARG2 #x4 ], [ LBL #h0, ARG0 e_untensed, ARG1 #e1, ARG2 #x3 ] > ]. arg123_arg13+pp_omtr := arg123_arg13+pp_mtr & optional_mtr. ;;; ;;; we should do something with GEND here too, i.e. identify it on #x2 and #x4. ;;; (21-sep-05; jtl) ;;; arg1refl_arg12pron_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x4 ], [ PRED pron_rel, LBL #h5, ARG0 #x4 ], [ PRED pronoun_q_rel, ARG0 #x4, RSTR #h6 ], [ PRED identity_rel, LBL #h5, ARG0 #x2, ARG1 #x4 ] >, HCONS < qeq & [ HARG #h6, LARG #h5 ] > ] ]. arg1refl_arg12pron_omtr := arg1refl_arg12pron_mtr & optional_mtr. arg12refl_arg123pron_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3, ARG3 #x4 ], [ PRED pron_rel, LBL #h5, ARG0 #x4 ], [ PRED pronoun_q_rel, ARG0 #x4, RSTR #h6 ], [ PRED identity_rel, LBL #h5, ARG0 #x2, ARG1 #x4 ] >, HCONS < qeq & [ HARG #h6, LARG #h5 ] > ] ]. arg12refl_arg123pron_omtr := arg12refl_arg123pron_mtr & optional_mtr. ;;; ;;; When the reflexive pronoun is ARG2 instead of ARG3: ;;; (21_nov_05; jtl) arg12refl_arg12pron3_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x4, ARG3 #x3 ], [ PRED pron_rel, LBL #h5, ARG0 #x4 ], [ PRED pronoun_q_rel, ARG0 #x4, RSTR #h6 ], [ PRED identity_rel, LBL #h5, ARG0 #x2, ARG1 #x4 ] >, HCONS < qeq & [ HARG #h6, LARG #h5 ] > ] ]. arg12refl_arg12pron3_omtr := arg12refl_arg12pron3_mtr & optional_mtr. ;;; When the reflexive pronoun is ARG2, while the ARG2 is turned into ;;; a prepositional object. ;;; (02-jan-07; jtl) arg12refl_arg12pron+pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x4 ], [ LBL #h0, ARG0 e_untensed, ARG1 #e1, ARG2 #x3 ], [ PRED pron_rel, LBL #h5, ARG0 #x4 ], [ PRED pronoun_q_rel, ARG0 #x4, RSTR #h6 ], [ PRED identity_rel, LBL #h5, ARG0 #x2, ARG1 #x4 ] >, HCONS < qeq & [ HARG #h6, LARG #h5 ] > ] ]. arg12refl_arg12pron+pp_omtr := arg12refl_arg12pron+pp_mtr & optional_mtr. ;;; ;;; Sometimes one has to add an adverb or PP in the output. (22-sep-05; jtl) ;;; arg1_arg1+pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1 ], [ LBL #h1, ARG0 e_untensed, ARG1 #e1 ] > ]. arg1_arg1+pp_omtr := arg1_arg1+pp_mtr & optional_mtr. arg12_arg12+pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1, ARG2 #x2 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1, ARG2 #x2 ], [ LBL #h1, ARG0 e_untensed, ARG1 #e1 ] > ]. arg12_arg12+pp_omtr := arg12_arg12+pp_mtr & optional_mtr. ;;; ;;; Or one has to remove an adverb or PP in the output. (26-may-06; jtl) ;;; arg1+pp_arg1_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1 ], [ LBL #h1, ARG0 e_untensed, ARG1 #e1 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #x1 ] > ]. arg1+pp_arg1_omtr := arg1+pp_arg1_mtr & optional_mtr. ;;; ;;; for `drive jakt på', transfer the verb, its direct object NP, and a PP[på] ;;; adjunct (which should probably be the internal argument of a relational ;;; `jakt') into a simple transitive. ;;; ;;; _fix_me_ ;;; interestingly, the PP will often be optional, and we are thus forced to use ;;; two distinct correspondence types; if there were a way of marking select ;;; input elements as optional, these could be collapsed. (23-feb-06; oe) ;;; ;;; --- `jakt på' is now relational, but nevertheless keep this type as is. ;;; arg12+np_arg1_v_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3 & x ], [ ARG0 #x3, RSTR #h4 ], [ LBL #h5, ARG0 #x3 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ], OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2 ] >, FLAGS.EQUAL < #x3 > ]. arg12+np_arg1_v_omtr := arg12+np_arg1_v_mtr & optional_mtr. arg1_arg12+np_v_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3 & x ], [ ARG0 #x3, RSTR #h4 ], [ LBL #h5, ARG0 #x3 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ] ]. arg1_arg12+np_v_omtr := arg1_arg12+np_v_mtr & optional_mtr. ;;; ;;; a light verb plus NP or relational NP complements, e.g. `drive jakt [på]'. ;;; arg12+np+pp_arg12_v_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3 & x ], [ ARG0 #x3, RSTR #h4 ], [ LBL #h5, ARG0 #x3 ], [ LBL #h5, ARG1 #x3, ARG2 #x6 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ], OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x6 ] >, FLAGS.EQUAL < #x3 > ]. arg12+np+pp_arg12_v_omtr := arg12+np+pp_arg12_v_mtr & optional_mtr. arg12+rnp_arg12_v_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x3 & x ], [ ARG0 #x3, RSTR #h4 ], [ LBL #h5, ARG0 #x3, ARG1 #x6 & x ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ], OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x2, ARG2 #x6 ] >, FLAGS.EQUAL < #x3, #x6 > ]. arg12+rnp_arg12_v_omtr := arg12+rnp_arg12_v_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; now that we have conflated the `j' vs. `r' distinction in predicate names ;;; on both ends, we could just have one `intersective_attribute_mtr' type, ;;; say, and not make the adjective vs. adverb distinction where both have the ;;; same translation(s). (21-jun-05; jtl & oe) ;;; intersective_attribute_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #i3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #i3 ] > ]. intersective_attribute_omtr := intersective_attribute_mtr & optional_mtr. adjective_mtr := intersective_attribute_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 & p ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 ] >, FLAGS.SUBSUME < #p3 > ]. adjective_omtr := adjective_mtr & optional_mtr. relational_adjective_mtr := adjective_mtr & [ INPUT.RELS < [ ARG2 #i1 ] >, OUTPUT.RELS < [ ARG2 #i1 ] > ]. relational_adjective_omtr := relational_adjective_mtr & optional_mtr. adj_reladj+np_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #x3 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #x3, ARG2 #x4 ], [ LBL #h5, ARG0 #x4, RSTR #h5], [ LBL #h6, ARG0 #x4] >, HCONS < qeq & [ HARG #h5, LARG #h6 ] > ] ]. adj_reladj+np_omtr := adj_reladj+np_mtr & optional_mtr. ad_deg+ad_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 & i ] >, OUTPUT.RELS < [ LBL #h1, ARG1 #e2 ] , [ LBL #h1, ARG0 #e2, ARG1 #p3 ] > ]. ad_deg+ad_omtr := ad_deg+ad_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; we cannot make the PROG and TENSE (overwriting) constraints part of the MTR ;;; definition, because then we fail to match the input. thus, we merely mark ;;; the event for later processing in the `snug' phase. once more, another ;;; kind of overwriting would be required here. (29-may-06; oe) ;;; adjective_prp_participle_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 & p ] >, OUTPUT [ RELS < [ LBL #h4, ARG0 #e2, ARG1 #p3 ], [ PRED prpstn_m_rel, LBL #h1, ARG0 #e2, MARG #h5 ], [ PRED progressive_mark, LBL #h4, ARG0 #e2 ] >, HCONS < qeq & [ HARG #h5, LARG #h4 ] > ], FLAGS.SUBSUME < #p3 > ]. adjective_prp_participle_omtr := adjective_prp_participle_mtr & optional_mtr. ;;; The original type here 'adjective_prp_participle_mtr' ;;; only works correctly in the attributive case. ;;; We need a different type for the predicate case. ;;; The predicative one should be tried first. ;;; Unfortunately, we run into the same problem as above, ;;; we want to add the PROG + property. ;;; In contrast to above we do not want to change the TENSE property. ;;; We could construct a similar solution as above, but we cannot use ;;; the same pred PROGRESSIVE. Because of lackof time, we have ;;; instead added the appropriate rules without specific types where needed, ;;; i.e. just before the applcations of the 'adjective_prp_participle_mtr'. ;;; (08-dec-06; jtl) pred_adj_prp_participle_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 & p ], [ PRED prpstn_m_rel, LBL #h4, ARG0 #e2, MARG #h5 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 ], [ PRED prpstn_m_rel, LBL #h4, ARG0 #e2, MARG #h5 ] > ]. pred_adj_prp_participle_omtr := pred_adj_prp_participle_mtr & optional_mtr. prp_participle_adjective_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h4, ARG0 #e2 & [PROG +, PERF -], ARG1 #p3 ], [ PRED prpstn_m_rel, LBL #h1, ARG0 #e2, MARG #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h4 ] > ], OUTPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 & p ] >, FLAGS.SUBSUME < #p3 > ]. prp_participle_adjective_omtr := prp_participle_adjective_mtr & optional_mtr. pred_adj_psp_participle_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 & p ], [ PRED prpstn_m_rel, LBL #h4, ARG0 #e2, MARG #h5 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e2, ARG2 #p3 ], [ PRED prpstn_m_rel, LBL #h4, ARG0 #e2, MARG #h5, PSV #p3 ] > ]. pred_adj_psp_participle_omtr := pred_adj_psp_participle_mtr & optional_mtr. attr_adj_psp_participle_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 & p ] >, OUTPUT [ RELS < [ LBL #h4, ARG0 #e2, ARG1 u, ARG2 #p3 ], [ PRED prpstn_m_rel, LBL #h1, ARG0 #e2 , MARG #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h4 ] > ], FLAGS.SUBSUME < #p3 > ]. attr_adj_psp_participle_omtr := attr_adj_psp_participle_mtr & optional_mtr. ;;; ;;; This fires in predicative position. ;;; adj_adj+psp_participle_1_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 & p ], [ PRED prpstn_m_rel, LBL #h5, ARG0 #e2, MARG #u6 ] >, OUTPUT [ RELS < [ LBL #h1, ARG0 e_untensed, ARG1 #e2 ], [ LBL #h1, ARG0 #e2, ARG1 u, ARG2 #p3 ], [ PRED prpstn_m_rel, LBL #h5, ARG0 #e2, PSV #p3, MARG #u6 ] > ], FLAGS.SUBSUME < #p3 > ]. adj_adj+psp_participle_1_omtr := adj_adj+psp_participle_1_mtr & optional_mtr. ;;; ;;; This fires if the one above does not fire, i.e. not predicative position. ;;; (27-sep-06; jtl) adj_adj+psp_participle_2_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #p3 & p ] >, OUTPUT [ RELS < [ LBL #h1, ARG0 e_untensed, ARG1 #e2 ], [ LBL #h4, ARG0 #e2, ARG1 u, ARG2 #p3 ], [ PRED prpstn_m_rel, LBL #h1, ARG0 #e2, MARG #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h4 ] > ], FLAGS.SUBSUME < #p3 > ]. adj_adj+psp_participle_2_omtr := adj_adj+psp_participle_2_mtr & optional_mtr. ;;; ;;; This takes a past participle in the context of a noun and transfers it ;;; together with the noun into a n+n_compound. (08-sep-06; jtl) ;;; psp_participle_compound_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h4, ARG0 #e2, ARG1 u, ARG2 #p3 ], [ PRED prpstn_m_rel, LBL #h1, ARG0 #e2, MARG #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h4 ] > ], OUTPUT [ RELS < [ LBL #h4, ARG0 #x14 ], [ PRED compound_rel, LBL #h1, ARG1 #p3, ARG2 #x14 ], [ PRED udef_q_rel, ARG0 #x14 & [ PERS 3, NUM sg, GRIND - ], RSTR #h15 ] >, HCONS < qeq & [ HARG #h15, LARG #h4 ] > ] ]. psp_participle_compound_omtr := psp_participle_compound_mtr & optional_mtr. comparative_mtr := arg12_v_mtr. comparative_omtr := comparative_mtr & optional_mtr. ;; New type superlative_mtr (compared to comparative_mtr) ;; to prevent ARG2 which again prevents generation. (11-may-06; jtl) ;; superlative_mtr := arg1_v_mtr. superlative_omtr := superlative_mtr & optional_mtr. cardinal_mtr := adjective_mtr & [ INPUT.RELS < [ PRED "card_rel", LBL #h1, ARG0 #e2, ARG1 #i3, CARG string ] >, OUTPUT.RELS < [ PRED card_rel, LBL #h1, ARG0 #e2, ARG1 #i3, CARG string ] > ]. cardinal_omtr := cardinal_mtr & optional_mtr. ordinal_mtr := adjective_mtr & [ INPUT.RELS < [ PRED "ord_rel", LBL #h1, ARG0 #e2, ARG1 #i3, CARG string ] >, OUTPUT.RELS < [ PRED ord_rel, LBL #h1, ARG0 #e2, ARG1 #i3, CARG string ] > ]. ordinal_omtr := ordinal_mtr & optional_mtr. intersective_adverb_mtr := intersective_attribute_mtr & [ INPUT.RELS < [ LBL #h1, ARG1 #e2 & e ] >, OUTPUT.RELS < [ LBL #h1, ARG1 #e2 ] >, FLAGS.EQUAL < #e2 > ]. intersective_adverb_omtr := intersective_adverb_mtr & optional_mtr. scopal_adverb_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG1 #h2 & h ] >, OUTPUT.RELS < [ LBL #h1, ARG1 #h2 ] > ]. scopal_adverb_omtr := scopal_adverb_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; adverbs like `too', `usually', et al. are scopal in the ERG; see whether we ;;; can convert an intersective NorGram adverb into a scopal modifier: it has ;;; to insert itself into the QEQ of the message introducing the tensed event ;;; that the original adverb modifies. this should probably not be required. ;;; (25-apr-04; oe) ;;; this does not work with two intersective adverbs that are to be scopal. ;;; The transfer of the second does not fire because at this time it is not in ;;; the immediate scope of a message but of the scopal adverb. therefore try ;;; with a looser constraint. (06-oct-06; jtl) #| intersective_scopal_adverb_mtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED message_m_rel, MARG #h0 ], [ LBL #h1, ARG0 e_tensed & #e2 ] >, INPUT [ RELS < [ LBL #h1, ARG1 #e2 ] >, HCONS < qeq & [ HARG #h0, LARG #h1 ] > ], OUTPUT [ RELS < [ LBL #h3, ARG1 h & #h4 ] >, HCONS < qeq & [ HARG #h0, LARG #h3 ], qeq & [ HARG #h4, LARG #h1 ] > ] ]. |# intersective_scopal_adverb_mtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h1, ARG0 #e2 & e ] >, INPUT [ RELS < [ LBL #h1, ARG1 #e2 ] >, HCONS < qeq & [ HARG #h0, LARG #h1 ] > ], OUTPUT [ RELS < [ LBL #h3, ARG1 h & #h4 ] >, HCONS < qeq & [ HARG #h0, LARG #h3 ], qeq & [ HARG #h4, LARG #h1 ] > ] ]. intersective_scopal_adverb_omtr := intersective_scopal_adverb_mtr & optional_mtr. scopal_intersective_adverb_1_mtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h1, ARG0 #e2 & e ] >, INPUT [ RELS < [ LBL #h3, ARG1 h & #h4 ] >, HCONS < qeq & [ HARG #h0, LARG #h3 ], qeq & [ HARG #h4, LARG #h1 ] > ], OUTPUT [ RELS < [ LBL #h1, ARG1 #e2 ] >, HCONS < qeq & [ HARG #h0, LARG #h1 ] > ] ]. scopal_intersective_adverb_1_omtr := scopal_intersective_adverb_1_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; the ERG appears to have several types of discourse adverbs, while NorGram ;;; (for the time being) seems to make everything intersective of sorts (though ;;; with a funny ARG1 and ARG2 synopsis, and no ARG0). this needs discussion. ;;; (1-jul-04; oe) ;;; ;;; _fix_me_ ;;; we actually need to pad the context part, because just the re-entrancies do ;;; not suffice to survive vacuous-constraint-p(). (20-jul-04; oe) ;;; discourse_adverb_mtr := mrs_transfer_rule & [ CONTEXT [ LTOP #h0, INDEX #e1, RELS < [ ARG0 #e1 & e ] > ], INPUT.RELS < [ ARG2 #e1 ] >, OUTPUT [ LTOP #h2, RELS < [ LBL #h4, ARG1 #h0 ], [ PRED prpstn_m_rel, LBL #h2, MARG #h3 ] >, HCONS < qeq & [ HARG #h3, LARG #h4 ] > ], FLAGS.EQUAL < #e1 > ]. discourse_adverb_omtr := discourse_adverb_mtr & optional_mtr. ;;; ;;; mapping discourse adverb to conjunction. (14-jul-06; dpf) ;;; discourse_adverb_conj_mtr := mrs_transfer_rule & [ CONTEXT [ LTOP #h0, INDEX #e1, RELS < [ ARG0 #e1 & e ] > ], INPUT.RELS < [ ARG2 #e1 ] >, OUTPUT [ LTOP #h2, RELS < [ LBL #h2, R-HNDL #h0, R-INDEX #e1 ] >, HCONS < > ], FLAGS.EQUAL < #e1 > ]. adverb_pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #e2 ] >, OUTPUT [ RELS < [ LBL #h1, ARG0 #e1, ARG1 #e2, ARG2 #x3 ], [ ARG0 #x3 & [ PERS 3, GRIND - ], RSTR #h4 ], [ LBL #h5, ARG0 #x3 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ] ]. adverb_pp_omtr := adverb_pp_mtr & optional_mtr. pp_ad_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h1, ARG0 #e1, ARG1 #p2, ARG2 #x3 ], [ ARG0 #x3 & [ PERS 3, GRIND - ], RSTR #h4 ], [ LBL #h5, ARG0 #x3 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ], OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #p2 ] > ]. pp_ad_omtr := pp_ad_mtr & optional_mtr. adverb_lexical_pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #e2 ] >, OUTPUT [ RELS < [ LBL #h5, ARG0 e_untensed, ARG1 #x3 ], [ LBL #h5, ARG0 #x3 & [ GRIND - ] ], [ PRED unspec_loc_rel, LBL #h1, ARG0 #e1, ARG1 #e2, ARG2 #x3 ], [ PRED implicit_q_rel, ARG0 #x3, RSTR #h4 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ] ]. adverb_lexical_pp_omtr := adverb_lexical_pp_mtr & optional_mtr. adverb_lexical_pp_time_mtr := adverb_lexical_pp_mtr & [ OUTPUT.RELS < relation, [ PRED time_n_rel ], ... > ]. adverb_lexical_pp_time_omtr := adverb_lexical_pp_time_mtr & optional_mtr. adverb_lexical_pp_place_mtr := adverb_lexical_pp_mtr & [ OUTPUT.RELS < relation, [ PRED place_n_rel ], ... > ]. adverb_lexical_pp_place_omtr := adverb_lexical_pp_place_mtr & optional_mtr. prep_lexical_pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #e2, ARG2 #x9] >, OUTPUT [ RELS < [ LBL #h5, ARG0 e_untensed, ARG1 #x3, ARG2 #x9 ], [ LBL #h5, ARG0 #x3 & [ GRIND - ] ], [ PRED unspec_loc_rel, LBL #h1, ARG0 #e1, ARG1 #e2, ARG2 #x3 ], [ PRED implicit_q_rel, ARG0 #x3, RSTR #h4 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ] ]. prep_lexical_pp_omtr := prep_lexical_pp_mtr & optional_mtr. prep_lexical_pp_time_mtr := prep_lexical_pp_mtr & [ OUTPUT.RELS < relation, [ PRED time_n_rel ], ... > ]. prep_lexical_pp_time_omtr := prep_lexical_pp_time_mtr & optional_mtr. prep_lexical_pp_place_mtr := prep_lexical_pp_mtr & [ OUTPUT.RELS < relation, [ PRED place_n_rel ], ... > ]. prep_lexical_pp_place_omtr := prep_lexical_pp_place_mtr & optional_mtr. prep_lexical_pp_place+pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #e2, ARG2 #x4 & x ] >, OUTPUT [ RELS < [ LBL #h5, ARG0 e_untensed, ARG1 #x3 ], [ LBL #h5, ARG0 e_untensed, ARG1 #x3, ARG2 #x4 ], [ PRED place_n_rel, LBL #h5, ARG0 #x3 & [ GRIND - ] ], [ PRED unspec_loc_rel, LBL #h1, ARG0 #e1, ARG1 #e2, ARG2 #x3 ], [ PRED implicit_q_rel, ARG0 #x3, RSTR #h4 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ], FLAGS.EQUAL < #x4 > ]. prep_lexical_pp_place+pp_omtr := prep_lexical_pp_place+pp_mtr & optional_mtr. lexical_pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h5, ARG1 #x2 ], [ LBL #h5, ARG0 #x2 ], [ PRED "def_q_rel", LBL #h1, ARG0 #x2, RSTR #h3, BODY #h4 ] >, OUTPUT.RELS < [ LBL #h5, ARG0 e_untensed, ARG1 #x2 ], [ LBL #h5, ARG0 #x2 ], [ PRED implicit_q_rel, LBL #h1, ARG0 #x2, RSTR #h3, BODY #h4 ] > ]. lexical_pp_place_mtr := lexical_pp_mtr & [ INPUT.RELS < relation, [ PRED "sted_rel" ], ... >, OUTPUT.RELS < relation, [ PRED place_n_rel ], ... > ]. lexical_pp_place_omtr := lexical_pp_place_mtr & optional_mtr. lexical_pp_time_mtr := lexical_pp_mtr & [ INPUT.RELS < relation, [ PRED "tid_rel" ], ... >, OUTPUT.RELS < relation, [ PRED time_n_rel ], ... > ]. lexical_pp_time_omtr := lexical_pp_time_mtr & optional_mtr. lexical_pp_place_proper_pp_place_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h5, ARG1 #x2 ], [ PRED "sted_rel", LBL #h5, ARG0 #x2 ], [ PRED "unspec_loc_rel", LBL #h6, ARG0 #e7, ARG1 #e8, ARG2 #x2 ], [ PRED "def_q_rel", LBL #h1, ARG0 #x2, RSTR #h3, BODY #h4 ] >, OUTPUT.RELS < [ LBL #h6, ARG0 #e7, ARG1 #e8, ARG2 #x2 ], [ LBL #h5, ARG0 e_untensed, ARG1 #x2, ARG2 u ], [ PRED place_n_rel, LBL #h5, ARG0 #x2 ], [ PRED implicit_q_rel, LBL #h1, ARG0 #x2, RSTR #h3, BODY #h4 ] > ]. lexical_pp_place_proper_pp_place_omtr := lexical_pp_place_proper_pp_place_mtr & optional_mtr. lexical_pp_place_proper_pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG1 #x0 ], [ PRED "unspec_loc_rel", LBL #h0, ARG0 #e0, ARG1 #e1, ARG2 #x0 ], [ PRED "sted_rel", LBL #h1, ARG0 #x0 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e0, ARG1 #e1, ARG2 #x0 ], [ LBL #h1, ARG0 #x0 ] > ]. lexical_pp_place_proper_pp_omtr := lexical_pp_place_proper_pp_mtr & optional_mtr. lexical_pp_place_adverb_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h5, ARG1 #x3 ], [ ARG0 #x3, RSTR #h4 ], [ PRED "unspec_loc_rel", LBL #h0, ARG0 #e1, ARG1 #e2, ARG2 #x3 ], [ PRED "sted_rel", LBL #h5, ARG0 #x3 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ], OUTPUT [RELS < [ LBL #h0, ARG0 #e1, ARG1 #e2 ] > ] ]. lexical_pp_place_adverb_omtr := lexical_pp_place_adverb_mtr & optional_mtr. lexical_pp_time_adverb_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h5, ARG1 #x3 ], [ ARG0 #x3, RSTR #h4 ], [ PRED "unspec_loc_rel", LBL #h0, ARG0 #e1, ARG1 #e2, ARG2 #x3 ], [ PRED "tid_rel", LBL #h5, ARG0 #x3 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ], OUTPUT [RELS < [ LBL #h0, ARG0 #e1, ARG1 #e2 ] > ] ]. lexical_pp_time_adverb_omtr := lexical_pp_time_adverb_mtr & optional_mtr. prep_pp+prep_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #e2, ARG2 #x4 & x ] >, OUTPUT [ RELS < [ LBL #h1, ARG0 #e1, ARG1 #e2, ARG2 #x3 ], [ ARG0 #x3 & [ PERS 3, GRIND - ], RSTR #h4 ], [ LBL #h5, ARG0 #x3 ], [ LBL #h1, ARG0 e_untensed, ARG1 #e1, ARG2 #x4 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ], FLAGS.EQUAL < #x4 > ]. prep_pp+prep_omtr := prep_pp+prep_mtr & optional_mtr. preposition_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e & #e1, ARG1 #u2, ARG2 #u3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #u2, ARG2 #u3 ] > ]. preposition_omtr := preposition_mtr & optional_mtr. prep_intr_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e & #e1, ARG1 #u2, ARG2 a ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #u2 ] > ]. prep_intr_omtr := prep_intr_mtr & optional_mtr. prep_tran_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e & #e1, ARG1 #u2, ARG2 #u3 & i ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #u2, ARG2 #u3 ] > , FLAGS.SUBSUME < #u3 > ]. prep_tran_omtr := prep_tran_mtr & optional_mtr. prep_prep+prep_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e & #e1, ARG1 #u2, ARG2 #u3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #u2, ARG2 u ], [ LBL #h1, ARG0 e_untensed, ARG1 #e1, ARG2 #u3 ] > ]. prep_prep+prep_omtr := prep_prep+prep_mtr & optional_mtr. prep+prep_prep_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e & #e1, ARG1 #u2 ], [ LBL #h1, ARG1 #e1, ARG2 #u3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e1, ARG1 #u2, ARG2 #u3 ] > ]. prep+prep_prep_omtr := prep+prep_prep_mtr & optional_mtr. prep_deg+prep_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e & #e1, ARG1 #u2, ARG2 #u3 ] >, OUTPUT.RELS < [ LBL #h1, ARG1 #e1 ], [ LBL #h1, ARG0 #e1, ARG1 #u2, ARG2 #u3 ] > ]. prep_deg+prep_omtr := prep_deg+prep_mtr & optional_mtr. ;;; ;;; this will not separate between the two prepositions. (22-may-06; jtl) ;;; prep_prep+np+prep_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #e2, ARG2 #x3 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #e2, ARG2 #x4 ], [ LBL #h5, ARG0 #x4, RSTR #h5], [ LBL #h6, ARG0 #x4], [ LBL #h6, ARG1 #x4, ARG2 #x3] >, HCONS < qeq & [ HARG #h5, LARG #h6 ] > ] ]. prep_prep+np+prep_omtr := prep_prep+np+prep_mtr & optional_mtr. prep_prep+relnp+prep_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #e2, ARG2 #x3 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #e1, ARG1 #e2, ARG2 #x4 ], [ ARG0 #x4, RSTR #h5], [ LBL #h6, ARG0 #x4, ARG2 #x3 ] >, HCONS < qeq & [ HARG #h5, LARG #h6 ] > ] ]. prep_prep+relnp+prep_omtr := prep_prep+relnp+prep_mtr & optional_mtr. pp_appos_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e & #e1, ARG1 #u2, ARG2 #u3 ] >, OUTPUT.RELS < [ LBL #h1, PRED appos_rel, ARG0 #e1, ARG1 #u2, ARG2 #u3 ], [ LBL #h1, ARG0 e_untensed, ARG1 #u3 ] > ]. conjunction_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h4, ARG0 #e5, L-HNDL #h0, L-INDEX #e1, R-HNDL #h2, R-INDEX #e3 ] >, OUTPUT.RELS < [ LBL #h4, ARG0 #e5, L-HNDL #h0, L-INDEX #e1, R-HNDL #h2, R-INDEX #e3 ] > ]. conjunction_omtr := conjunction_mtr & optional_mtr. subordination_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, MAIN #h2, SUBORD #h3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 e_untensed, MAIN #h2, SUBORD #h3 ] > ]. subordination_omtr := subordination_mtr & optional_mtr. ;;; ;;; in at least one case, a NorGram quantifier (`annen') is analyzed as an ;;; adjective in the ERG (`other'); quite possibly a genuine difference among ;;; the two languages. when converting a quantifier into an adjective, there ;;; will have be another quantifier to bind the variable (`bare_div_q' in most ;;; cases presumably); re-use the original QEQ and make sure the adjective is ;;; an intersective modifier. ;;; quantifier_adjective_mtr := monotonic_mtr & [ CONTEXT.HCONS < qeq & [ HARG #h1, LARG #h2 ] >, INPUT.RELS < [ LBL #h3, ARG0 #x2, RSTR #h1, BODY #h4 ] >, OUTPUT.RELS < [ LBL #h3, ARG0 #x2, RSTR #h1, BODY #h4 ], [ LBL #h2, ARG0 e_untensed, ARG1 #x2 ] > ]. quantifier_adjective_omtr := quantifier_adjective_mtr & optional_mtr. quantifier_quantifier+deg_spec_mtr := monotonic_mtr & [ CONTEXT.HCONS < qeq & [ HARG #h1, LARG #h2 ] >, INPUT.RELS < [ LBL #h3, ARG0 #x2, RSTR #h1, BODY #h4 ], [ LBL #h2 ] >, OUTPUT.RELS < [ LBL #h3, ARG0 #x2, RSTR #h1, BODY #h4 ] > ]. quantifier_quantifier+deg_spec_omtr := quantifier_quantifier+deg_spec_mtr & optional_mtr. n+a_a_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #e5, ARG1 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #e5, ARG2 #x2 ], [ PRED "udef_q_rel", ARG0 #x2, RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h1 ] > ], OUTPUT.RELS < [ LBL #h3, ARG1 #x4 ] > ]. n+a_a_omtr := n+a_a_mtr & optional_mtr. ;;; ;;; some SL compounds, even when going to an N -- N TL structure, require an ;;; idiosyncratic translation, e.g. `båndtvang' --> `leash law'. ;;; n+n_n+n_mtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ] >, INPUT.RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ] > ]. ;;; ;;; _fix_me_ ;;; not sure we will ever need the following, optional, variant of the above; ;;; after all, the point is that the compound elements get an idiosyncratic ;;; translation. (30-jun-04; oe) ;;; n+n_n+n_omtr := n+n_n+n_mtr & optional_mtr. ;;; ;;; a compound whose modifier is a nominalization in the target language. ;;; n+n_nominalization+n_mtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ] >, INPUT.RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ] >, OUTPUT [ RELS < [ LBL #h8, ARG0 #e5 & e_untensed & [ PROG + ] ], [ LBL #h3, ARG0 #x4 ], [ PRED nominalization_rel, LBL #h1, ARG0 #x2, ARG1 #h6 ], [ PRED prpstn_m_rel, LBL #h6, ARG0 #e5, MARG #h7 ] >, HCONS < qeq & [ HARG #h7, LARG #h8 ] > ] ]. n+n_nominalization+n_omtr := n+n_nominalization+n_mtr & optional_mtr. n+n_n+nominalization_mtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ] >, INPUT.RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ] >, OUTPUT [ RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h8, ARG0 #e5 & e_untensed & [ PROG + ] ], [ PRED nominalization_rel, LBL #h3, ARG0 #x4, ARG1 #h6 ], [ PRED prpstn_m_rel, LBL #h6, ARG0 #e5, MARG #h7 ] >, HCONS < qeq & [ HARG #h7, LARG #h8 ] > ] ]. n+n_n+nominalization_omtr := n+n_n+nominalization_mtr & optional_mtr. n+n_nominalization_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ], [ PRED "udef_q_rel", ARG0 #x2, RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h1 ] > ], OUTPUT [ RELS < [ LBL #h6, ARG0 #e6 & e_untensed & [ PROG + ] ], [ PRED nominalization_rel, LBL #h3, ARG0 #x4, ARG1 #h4 ], [ PRED prpstn_m_rel, LBL #h4, ARG0 #e6, MARG #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h6 ] > ] ]. n+n_nominalization_omtr := n+n_nominalization_mtr & optional_mtr. ;;; ;;; SL N -- N to Tl Adj -- N, e.g. `kulturlandskap' --> `cultivated land'. ;;; n+n_adj+n_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ], [ PRED "udef_q_rel", ARG0 #x2, RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h1 ] > ], OUTPUT.RELS < [ LBL #h3, ARG0 e_untensed, ARG1 #x4 ], [ LBL #h3, ARG0 #x4 ] > ]. n+n_adj+n_omtr := n+n_adj+n_mtr & optional_mtr. ;;; ;;; a few NorGram compounds appear to be `lexicalized' in English: `turgåer' ;;; --> `hiker', for example. ditch the two-place compound relation, embedded ;;; quantifier, and nominal modifier relation. ;;; n+n_n_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ], [ PRED "udef_q_rel", ARG0 #x2, RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h1 ] > ], OUTPUT.RELS < [ LBL #h3, ARG0 #x4 ] > ]. n+n_n_omtr := n+n_n_mtr & optional_mtr. ;;; ;;; we also see a number of three-way compounds that we want to translate in ;;; an idiosyncratic manner, e.g. `fotturrute' --> `hiking trail'. ;;; _fix_me_ ;;; presumably, there should be additional types, parallel to the n*n universe. ;;; (15-oct-06; oe) n*n*n_n*n_mtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ] >, INPUT [ RELS < [ LBL #h0, ARG0 #x0 ], [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x0 ], [ PRED "udef_q_rel", ARG0 #x0, RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h0 ] > ], OUTPUT.RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ] > ]. n*n*n_n*n_omtr := n*n*n_n*n_mtr & optional_mtr. n*n*n_nominalization*n_mtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ] >, INPUT [ RELS < [ LBL #h0, ARG0 #x0 ], [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x0 ], [ PRED "udef_q_rel", ARG0 #x0, RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h0 ] > ], OUTPUT [ RELS < [ LBL #h8, ARG0 #e5 & e_untensed & [ PROG + ] ], [ LBL #h3, ARG0 #x4 ], [ PRED nominalization_rel, LBL #h1, ARG0 #x2, ARG1 #h6 ], [ PRED prpstn_m_rel, LBL #h6, ARG0 #e5, MARG #h7 ] >, HCONS < qeq & [ HARG #h7, LARG #h8 ] > ] ]. n*n*n_nominalization*n_omtr := n*n*n_nominalization*n_mtr & optional_mtr. n*n*n_n*nominalization_mtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ] >, INPUT [ RELS < [ LBL #h0, ARG0 #x0 ], [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x0 ], [ PRED "udef_q_rel", ARG0 #x0, RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h0 ] > ], OUTPUT [ RELS < [ LBL #h1, ARG0 #x2 ], [ LBL #h8, ARG0 #e5 & e_untensed & [ PROG + ] ], [ PRED nominalization_rel, LBL #h3, ARG0 #x4, ARG1 #h6 ], [ PRED prpstn_m_rel, LBL #h6, ARG0 #e5, MARG #h7 ] >, HCONS < qeq & [ HARG #h7, LARG #h8 ] > ] ]. n*n*n_n*nominalization_omtr := n*n*n_n*nominalization_mtr & optional_mtr. n*n*n_adj+n_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h0, ARG0 #x0 ], [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ], [ PRED "udef_q_rel", ARG0 #x2, RSTR #h5 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x0 ], [ PRED "udef_q_rel", ARG0 #x0, RSTR #h7 ] >, HCONS < qeq & [ HARG #h5, LARG #h1 ], qeq & [ HARG #h7, LARG #h0 ] > ], OUTPUT.RELS < [ LBL #h3, ARG0 e_untensed, ARG1 #x4 ], [ LBL #h3, ARG0 #x4 ] > ]. n*n*n_adj+n_omtr := n*n*n_adj+n_mtr & optional_mtr. n*n*n_n_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h0, ARG0 #x0 ], [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ], [ PRED "udef_q_rel", ARG0 #x2, RSTR #h5 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x0 ], [ PRED "udef_q_rel", ARG0 #x0, RSTR #h7 ] >, HCONS < qeq & [ HARG #h5, LARG #h1 ], qeq & [ HARG #h7, LARG #h0 ] > ], OUTPUT.RELS < [ LBL #h3, ARG0 #x4 ] > ]. n*n*n_n_omtr := n*n*n_n_mtr & optional_mtr. n*n*n_nominalization_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h0, ARG0 #x0 ], [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ], [ PRED "udef_q_rel", ARG0 #x2, RSTR #h5 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x0 ], [ PRED "udef_q_rel", ARG0 #x0, RSTR #h7 ] >, HCONS < qeq & [ HARG #h5, LARG #h1 ], qeq & [ HARG #h7, LARG #h0 ] > ], OUTPUT [ RELS < [ LBL #h6, ARG0 #e6 & e_untensed & [ PROG + ] ], [ PRED nominalization_rel, LBL #h3, ARG0 #x4, ARG1 #h4 ], [ PRED prpstn_m_rel, LBL #h4, ARG0 #e6, MARG #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h6 ] > ] ]. n*n*n_nominalization_omtr := n*n*n_nominalization_mtr & optional_mtr. adj*n*n_adj*n*n_mtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x2 ] >, INPUT.RELS < [ ARG0 #e0 ], [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #e0 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #e0 & e_untensed, ARG1 #x2 ], [ LBL #h1, ARG0 #x2 ], [ LBL #h3, ARG0 #x4 ] > ]. adj*n*n_adj*n*n_omtr := adj*n*n_adj*n*n_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; the following introduce a new naming convention, `adj*n' for a compound ;;; comprised of those two categories (contrasted with `adj+n', which is simply ;;; the syntactic unit of a noun and an attribute adjective). once we complete ;;; the `mo' integration, we should re-organize this file anyway, and then go ;;; through the MTR types (and instances :-{) and make the naming consistent. ;;; (14-oct-06; oe) adj*n_n_mtr := monotonic_mtr & [ INPUT.RELS < [ ARG0 #e2 & e], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #e2 ] >, OUTPUT.RELS < [ LBL #h3, ARG0 #x4 ] >, FLAGS.EQUAL < #e2 > ]. adj*n_n_omtr := adj*n_n_mtr & optional_mtr. adj*n_adj+n_mtr := monotonic_mtr & [ INPUT.RELS < [ ARG0 #e2 & e], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #e2 ] >, OUTPUT.RELS < [ LBL #h3, ARG0 #e2, ARG1 #x4 ], [ LBL #h3, ARG0 #x4 ] >, FLAGS.EQUAL < #e2 > ]. adj*n_adj+n_omtr := adj*n_adj+n_mtr & optional_mtr. v+n_n_mtr := monotonic_mtr & [ INPUT.RELS < [ ARG0 #e2 & e], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #e2 ] >, OUTPUT.RELS < [ LBL #h3, ARG0 #x4 ] >, FLAGS.EQUAL < #e2 > ]. v+n_n_omtr := v+n_n_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; the following assumes that the `udef_q' binding the modifier in the source ;;; compound remains a suitable quantifier in the target construction; probably ;;; true for mass noun modifiers, but not very well suited for auto-generation ;;; of transfer rules off the KF entries. (29-may-06; oe) ;;; n+n_n+p+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #x1 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x1 ] >, OUTPUT.RELS < [ LBL #h3, ARG0 #x4 ], [ LBL #h0, ARG0 #x1 ], [ LBL #h3, ARG0 e_untensed, ARG1 #x4, ARG2 #x1 ] > ]. n+n_n+p+n_omtr := n+n_n+p+n_mtr & optional_mtr. n+n_n+p+q+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #x1 ], [ LBL #h3, ARG0 #x4 ], [ PRED "unspec_rel", LBL #h3, ARG1 #x4, ARG2 #x1 ], [ PRED "udef_q_rel", LBL #h5, ARG0 #x1, RSTR #h6, BODY #h7 ] >, OUTPUT.RELS < [ LBL #h3, ARG0 #x4 ], [ LBL #h3, ARG0 e_untensed, ARG1 #x4, ARG2 #x1 ], [ LBL #h5, ARG0 #x1, RSTR #h6, BODY #h7 ], [ LBL #h0, ARG0 #x1 ], ... > ]. n+n_n+p+q+n_sg_mtr := n+n_n+p+q+n_mtr & [ OUTPUT.RELS < [], [], [], [ LBL #h0, ARG0 #x1 ], [ PRED sg_mark, LBL #h0, ARG0 #x1 ] > ]. n+n_n+p+q+n_sg_omtr := n+n_n+p+q+n_sg_mtr & optional_mtr. n+n_n+p+q+n_pl_mtr := n+n_n+p+q+n_mtr & [ OUTPUT.RELS < [], [], [], [ LBL #h0, ARG0 #x1], [ PRED pl_mark, LBL #h0, ARG0 #x1 ] > ]. n+n_n+p+q+n_pl_omtr := n+n_n+p+q+n_pl_mtr & optional_mtr. ;;; ;;; sort of the inverse: Norwegian atomic predicates that need decomposing in ;;; English; various subtypes depending on the OUTPUT requirements. ;;; n_adj+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #x2 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG1 #x2 ], [ LBL #h1, ARG0 #x2 ] > ]. n_adj+n_omtr := n_adj+n_mtr & optional_mtr. adj+n_n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG1 #x2 ], [ LBL #h1, ARG0 #x2 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #x2 ] > ]. adj+n_n_omtr := adj+n_n_mtr & optional_mtr. n_psp+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #x3 ] >, OUTPUT [ RELS < [ LBL #h4, ARG0 #e2, ARG1 u, ARG2 #x3 ], [ LBL #h1, ARG0 #x3 ], [ PRED prpstn_m_rel, LBL #h1, ARG0 #e2 , MARG #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h4 ] > ] ]. n_psp+n_omtr := n_psp+n_mtr & optional_mtr. a_n+a_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e2, ARG1 #x6 ] >, OUTPUT [ RELS < [ LBL #h3, ARG0 #x4 ], [ LBL #h1, ARG0 #e2, ARG1 #x6 ], [ PRED compound_rel, LBL #h1, ARG1 #x6, ARG2 #x4 ], [ PRED udef_q_rel, ARG0 #x4 & [ PERS 3, NUM sg, GRIND - ], RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. a_n+a_omtr := a_n+a_mtr & optional_mtr. adj+n_n+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG1 #x2 ], [ LBL #h1, ARG0 #x2 ] >, OUTPUT [ RELS < [ LBL #h3, ARG0 #x4 ], [ LBL #h1, ARG0 #x2 ], [ PRED compound_rel, LBL #h1, ARG1 #x2, ARG2 #x4 ], [ PRED udef_q_rel, ARG0 #x4 & [ PERS 3, NUM sg, GRIND - ], RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. adj+n_n+n_omtr := adj+n_n+n_mtr & optional_mtr. adj+n_adj+n+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG1 #x2 ], [ LBL #h1, ARG0 #x2 ] >, OUTPUT [ RELS < [ LBL #h3, ARG0 e_untensed, ARG1 #x4 ], [ LBL #h3, ARG0 #x4 ], [ LBL #h1, ARG0 #x2 ], [ PRED compound_rel, LBL #h1, ARG1 #x2, ARG2 #x4 ], [ PRED udef_q_rel, ARG0 #x4 & [ PERS 3, NUM sg, GRIND - ], RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. adj+n_adj+n+n_omtr := adj+n_adj+n+n_mtr & optional_mtr. adj+n_n+n+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG1 #x2 ], [ LBL #h1, ARG0 #x2 ] >, OUTPUT [ RELS < [ LBL #h6, ARG0 #x7 ], [ LBL #h3, ARG0 #x4 ], [ LBL #h1, ARG0 #x2 ], [ PRED compound_rel, LBL #h3, ARG1 #x4, ARG2 #x7 ], [ PRED compound_rel, LBL #h1, ARG1 #x2, ARG2 #x4 ], [ PRED udef_q_rel, ARG0 #x4 & [ PERS 3, NUM sg, GRIND - ], RSTR #h5 ], [ PRED udef_q_rel, ARG0 #x7 & [ PERS 3, NUM sg, GRIND - ], RSTR #h8 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ], qeq & [ HARG #h8, LARG #h6 ] > ] ]. adj+n_n+n+n_omtr := adj+n_n+n+n_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; the way this tends to be used is a two-step rewrite, e.g. ;;; ;;; `_isblå_a' --> `unpsec_mod' + `_isblå_n' ;;; ;;; which is then followed by an application of `n_n+n_mtr' to decompose the ;;; intermediate pseudo-predicate. if nothing else, such sequences of rules ;;; lead to spurious warning about unknown predicates, e.g. `_isblå_n' being ;;; reported as an invalid output according to the ERG SEM-I. either we would ;;; have to rewrite the rule to do the conversion in a single step, or we will ;;; need the `colour coding' mechanism on predicates (that we had contemplated ;;; a few items in the past), i.e. declare that some rules output SL (or even ;;; DMZ, i.e. purely transfer-internal) predicates. (21-dec-06; oe) ;;; adj_unspec+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #e0, ARG1 #x2 ] >, OUTPUT [ RELS < [ LBL #h3, ARG0 #x4 ], [ PRED unspec_mod_rel, LBL #h1, ARG0 #e0, ARG1 #x2, ARG2 #x4 ], [ PRED udef_q_rel, ARG0 #x4 & [ PERS 3, NUM sg, GRIND - ], RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. adj_unspec+n_omtr := adj_unspec+n_mtr & optional_mtr. n_n+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #x2 ] >, OUTPUT [ RELS < [ LBL #h3, ARG0 #x4 ], [ LBL #h1, ARG0 #x2 ], [ PRED compound_rel, LBL #h1, ARG1 #x2, ARG2 #x4 ], [ PRED udef_q_rel, ARG0 #x4 & [ PERS 3, NUM sg, GRIND - ], RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. n_n+n_omtr := n_n+n_mtr & optional_mtr. n_nominalization_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #x2 ] >, OUTPUT [ RELS < [ LBL #h3, ARG0 #e6 & e_untensed & [ PROG + ] ], [ PRED nominalization_rel, LBL #h1, ARG0 #x2, ARG1 #h4 ], [ PRED prpstn_m_rel, LBL #h4, ARG0 #e6, MARG #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. n_nominalization_omtr := n_nominalization_mtr & optional_mtr. n_adj+n+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #x1 ] >, OUTPUT [ RELS < [ LBL #h2, ARG0 e_untensed, ARG1 #x3 ], [ LBL #h2, ARG0 #x3 & [ PERS 3, NUM sg, GRIND - ] ], [ LBL #h0, ARG0 #x1 ], [ PRED udef_q_rel, RSTR #h4, ARG0 #x3 ], [ PRED compound_rel, LBL #h0, ARG1 #x1, ARG2 #x3 ] >, HCONS < qeq & [ HARG #h4, LARG #h2 ] > ] ]. n_adj+n+n_omtr := n_adj+n+n_mtr & optional_mtr. n_nominalization+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #x2 ] >, OUTPUT [ RELS < [ LBL #h3, ARG0 #e6 & e_untensed & [ PROG + ] ], [ LBL #h1, ARG0 #x2 & [ PERS 3, NUM sg, GRIND - ] ], [ PRED nominalization_rel, LBL #h7, ARG0 #x8, ARG1 #h4 ], [ PRED prpstn_m_rel, LBL #h4, ARG0 #e6, MARG #h5 ], [ PRED compound_rel, LBL #h1, ARG1 #x2, ARG2 #x8 ], [ PRED udef_q_rel, RSTR #h9, ARG0 #x8 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ], qeq & [ HARG #h9, LARG #h7 ] > ] ]. n_nominalization+n_omtr := n_nominalization+n_mtr & optional_mtr. n_n+nominalization_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #x2 ] >, OUTPUT [ RELS < [ LBL #h7, ARG0 #x8 & [ PERS 3, NUM sg, GRIND - ] ], [ LBL #h3, ARG0 #e6 & e_untensed & [ PROG + ] ], [ PRED nominalization_rel, LBL #h1, ARG0 #x2, ARG1 #h4 ], [ PRED prpstn_m_rel, LBL #h4, ARG0 #e6, MARG #h5 ], [ PRED compound_rel, LBL #h1, ARG1 #x2, ARG2 #x8 ], [ PRED udef_q_rel, RSTR #h9, ARG0 #x8 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ], qeq & [ HARG #h9, LARG #h7 ] > ] ]. n_n+nominalization_omtr := n_n+nominalization_mtr & optional_mtr. ;;; ;;; _fix_me_ ;;; NorGram treats `Bergen Turlag' et al. as a single name, while the ERG opts ;;; to decompose these. (24-jul-04; oe) ;;; name_name+name_mtr := monotonic_mtr & [ INPUT.RELS < [ PRED "named_rel", LBL #h1, ARG0 #x2 ] >, OUTPUT [ RELS < [ PRED named_rel, LBL #h3, ARG0 #x4 & [ NUM sg ] ], [ PRED named_rel, LBL #h1, ARG0 #x2 ], [ PRED compound_name_rel, LBL #h1, ARG0 e_untensed, ARG1 #x4, ARG2 #x2 ], [ PRED "udef_q_rel", ARG0 #x4, RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. ;;; ;;; _fix_me_ ;;; vaguely related, these should possibly be decomposed in NorGram already. ;;; (18-dec-06; oe) name_name*n_mtr := monotonic_mtr & [ CONTEXT [ HCONS < qeq & [ HARG #h3, LARG #h5 ] > ], INPUT [ RELS < [ PRED "named_rel", LBL #h5, ARG0 #x2 ], [ PRED "proper_q_rel", LBL #h1, ARG0 #x2, RSTR #h3, BODY #h4 ] > ], OUTPUT [ RELS < [ PRED named_rel, LBL #h10, ARG0 #x7 & [ PERS 3, NUM sg, GRIND - ] ], [ LBL #h5, ARG0 #x2 ], [ PRED _the_q_rel, LBL #h1, ARG0 #x2, RSTR #h3, BODY #h4 ], [ PRED compound_rel, LBL #h5, ARG0 e_untensed, ARG1 #x2, ARG2 #x7 ], [ PRED proper_q_rel, ARG0 #x7, RSTR #h8 ] >, HCONS < qeq & [ HARG #h8, LARG #h10 ] > ] ]. name_adj+name_mtr := monotonic_mtr & [ INPUT [ RELS < [ PRED "named_rel", LBL #h0, ARG0 #x0 ] > ], OUTPUT [ RELS < [ PRED "named_rel", LBL #h0, ARG0 #x0 ], [ LBL #h0, ARG0 e_untensed, ARG1 #x0 ] > ] ]. ;;; ;;; some nouns are analysed as relational in the source language, but then have ;;; a plain PP modifier in the target language; since NorGram right now has a ;;; strong preference against PP modifiers inside of NPs, this pattern could ;;; turn out relatively common. (19-jul-04; oe) ;;; n_n+pp_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #x1, ARG1 #x2 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #x1 ], [ LBL #h0, ARG0 e_untensed, ARG1 #x1, ARG2 #x2 ] > ]. n_n+pp_omtr := n_n+pp_mtr & optional_mtr. n_n+p+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #x1 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #x1 ], [ LBL #h3, ARG0 #x4 & [ PERS 3, NUM sg, GRIND - ] ], [ LBL #h0, ARG0 e_untensed, ARG1 #x1, ARG2 #x4 ], [ PRED udef_q_rel, ARG0 #x4, RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. n_n+p+n_omtr := n_n+p+n_mtr & optional_mtr. n_n+p+q+n_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #x1 ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #x1 ], [ LBL #h0, ARG0 e_untensed, ARG1 #x1, ARG2 #x4 ], [ ARG0 #x4, RSTR #h5 ], [ LBL #h3, ARG0 #x4 & [ PERS 3, GRIND - ] ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. n_n+p+q+n_sg_mtr := n_n+p+q+n_mtr & [ OUTPUT.RELS < [], [ ARG2 [ NUM sg ] ], ... > ]. n_n+p+q+n_sg_omtr := n_n+p+q+n_sg_mtr & optional_mtr. n_n+p+q+n_pl_mtr := n_n+p+q+n_mtr & [ OUTPUT.RELS < [], [ ARG2 [ NUM pl ] ], ... > ]. n_n+p+q+n_pl_omtr := n_n+p+q+n_pl_mtr & optional_mtr. ;;; ;;; a group of nouns analyzed as `measure' classifiers in NorGram, while the ;;; corresponding ERG analyses treat the noun as a head that is parasitic on ;;; the (semantic) agreement properties of its complement, e.g. ;;; ;;; - den typen fjell --> this type of mountain ;;; - en trofast skare bestyrere --> a loyal line of wardens ;;; ;;; _fix_me_ ;;; for some reason, no MTR variables are created for PRED values, unless the ;;; co-references are redundantly repeated in each instance definition :-{. ;;; (3-jan-07; oe) measure_classifier_mtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h0, ARG0 #x0 & x ], [ PRED #q, LBL #h7, ARG0 #x0, RSTR #h8 & h, BODY #h9 ], [ PRED #n, LBL #h4, ARG0 #x1 & x ], [ PRED "measure_of_rel", ARG0 #x0, ARG1 #x1 & x ], [ PRED "~_q_rel", LBL #h1, ARG0 #x1, RSTR #h2 & h, BODY #h3 ] >, HCONS < qeq & [ HARG #h2, LARG #h4 ], qeq & [ HARG #h8, LARG #h0 ] > ], OUTPUT [ RELS < [ LBL #h10, ARG0 #x1, ARG1 #x2 ], [ PRED #q, LBL #h7, ARG0 #x1, RSTR #h11, BODY #h9 ], [ PRED #n, LBL #h6, ARG0 #x2 & [ PERS 3, GRIND - ] ], [ PRED "udef_q_rel", LBL #h1, ARG0 #x2, RSTR #h5, BODY #h3 ], [ PRED sg_mark, LBL #h10, ARG0 #x1 ], [ PRED intersective_equate, ARG0 #x1, ARG1 #x0 ], [ PRED intersective_equate, ARG0 #h10, ARG1 #h0 ], [ PRED intersective_num_equate, ARG0 #x2, ARG1 #x1 ], [ PRED intersective_equate, ARG0 #h6, ARG1 #h4 ] >, HCONS < qeq & [ HARG #h5, LARG #h6 ], qeq & [ HARG #h11, LARG #h10 ] > ], FLAGS.EQUAL < #x0, #x1, #h2, #h8 > ]. degree_specifier_mtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #i2, ARG1 #u3 ] >, OUTPUT.RELS < [ LBL #h1, ARG0 #i2, ARG1 #u3 ] > ]. degree_specifier_omtr := degree_specifier_mtr & optional_mtr. ;;; ;;; some input relations are just redundant, e.g. selected-for prepositions. ;;; elision_mtr := monotonic_mtr & [ INPUT.RELS < relation > ]. elision_omtr := elision_mtr & optional_mtr. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; pre-transfer fix-up: various corrections that, in my view, should be made ;;; in the analysis grammar, at some point. ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; arg12_predicative_nmtr := monotonic_mtr & [ INPUT.RELS < [ PRED #pred, LBL #h0, ARG0 #e1, ARG1 #i2, ARG2 #h3 & h ] >, FILTER.RELS < [ PRED "prpstn_m_rel", LBL #h3 ] >, OUTPUT [ RELS < [ PRED #pred, LBL #h0, ARG0 #e1, ARG1 #i2, ARG2 #h4 ], [ PRED "prpstn_m_rel", LBL #h4, MARG #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ]> ], FLAGS.EQUAL < #h3 > ]. arg123_predicative_nmtr := monotonic_mtr & [ INPUT.RELS < [ PRED #pred, LBL #h0, ARG0 #e1, ARG1 #i2, ARG2 #i3, ARG3 #h4 & h ] >, FILTER.RELS < [ PRED "prpstn_m_rel", LBL #h4 ] >, OUTPUT [ RELS < [ PRED #pred, LBL #h0, ARG0 #e1, ARG1 #i2, ARG2 #i3, ARG3 #h5 ], [ PRED "prpstn_m_rel", LBL #h5, MARG #h6 ] >, HCONS < qeq & [ HARG #h6, LARG #h4 ]> ], FLAGS.EQUAL < #h4 > ]. ;;; ;;; _fix_me_ ;;; to get gender `agreement' with pronominal antecedents, e.g. in `Han vasker ;;; sin bil', make sure that GEND is propagated to the anaphor; this would ;;; maybe better be done in the analysis grammar. (30-apr-05; oe) ;;; pron_identity_nmtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED "pron_rel", ARG0 #x0 ], [ PRED "identical_rel", LBL #h1, ARG0 #x0, ARG1 #x2 ] >, INPUT.RELS < [ PRED "pron_rel", LBL #h1, ARG0 #x2 & [ GEND no_gender ] ] >, OUTPUT.RELS < [ PRED "pron_rel", LBL #h1, ARG0 #x2 ] > ]. n_n+n_nmtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h1, ARG0 #x2 ] >, OUTPUT [ RELS < [ LBL #h3, ARG0 #x4 ], [ LBL #h1, ARG0 #x2 ], [ PRED "unspec_rel", LBL #h1, ARG1 #x2, ARG2 #x4 ], [ PRED "udef_q_rel", ARG0 #x4 & [ PERS 3, NUM sg, GRIND - ], RSTR #h5 ] >, HCONS < qeq & [ HARG #h5, LARG #h3 ] > ] ]. n_n+n_onmtr := n_n+n_nmtr & optional_mtr. ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; post-transfer fix-up: insertion of language-specific EPs, e.g. selected-for ;;; prepositions with relational nouns and adjectives and classifier insertion. ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; equate_x_cmtr := monotonic_mtr & [ CONTEXT.RELS < [ PRED equate, ARG0 #e1, ARG1 #e2 ] >, INPUT.RELS < [ PRED #pred, LBL #h0, ARG0 #i3, ARG1 #e2 ] >, FILTER.RELS < [ PRED equate_mark, LBL #h0, ARG0 #i3 ] >, OUTPUT.RELS < [ PRED #pred, LBL #h0, ARG0 #i3, ARG1 #e1 ], [ PRED equate_mark, LBL #h0, ARG0 #i3 ] > ]. relational_adjective_amtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h1, ARG2 #x1 & x & [ MARK test ] ] >, OUTPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG2 #x1 ] >, FLAGS.SUBSUME < #x1 > ]. relational_adjective_oamtr := relational_adjective_amtr & optional_mtr. relational_noun_amtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h1, ARG1 #x1 & x & [ MARK test ] ] >, OUTPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG2 #x1 ] >, FLAGS.SUBSUME < #x1 > ]. arg1_v_amtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h1, ARG0 #e1 & [ MARK test ] ] >, OUTPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG1 #e1 ] > ]. arg12_v_amtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h1, ARG2 #x1 & x & [ MARK test ] ] >, OUTPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG2 #x1 ] >, FLAGS.SUBSUME < #x1 > ]. arg123_v_amtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h1, ARG3 #x1 & x & [ MARK test ] ] >, OUTPUT.RELS < [ LBL #h1, ARG0 e_untensed, ARG2 #x1 ] >, FLAGS.SUBSUME < #x1 > ]. arg12_v_prtcl_amtr := arg12_v_amtr & [ CONTEXT.RELS < [ ARG0 #e1 ] >, OUTPUT.RELS < [ ARG1 #e1 ] > ]. decomposed_quantifier_amtr := monotonic_mtr & [ INPUT.RELS < [ LBL #h0, ARG0 #x1, RSTR #h2, BODY #h3 ] >, CONTEXT [ RELS < [ LBL #h4, ARG0 #x1 & x ] >, HCONS < qeq & [ HARG #h2, LARG #h4 ] > ], OUTPUT.RELS < [ LBL #h4, ARG0 e_untensed, ARG1 #x1 ], [ PRED udef_q_rel, LBL #h0, ARG0 #x1, RSTR #h2, BODY #h3 ] >, FLAGS.EQUAL < #x1 > ]. ssr_message_ditch_amtr := monotonic_mtr & [ CONTEXT [ RELS < [ PRED "~_v_", LBL #h5, ARG1 #x2 ] >, HCONS < qeq & [ HARG #h4, LARG #h5 ] > ], INPUT.RELS < [ PRED #pred, LBL #h0, ARG0 #e1, ARG1 #x2 & x, ARG2 #h3 & h, ARG3 a ], [ PRED prpstn_m_rel, LBL #h3, MARG #h4 ] >, OUTPUT.RELS < [ PRED #pred, LBL #h0, ARG0 #e1, ARG1 #h4 ]>, FLAGS.EQUAL < #x2, #h3 > ]. count_mark_amtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h0, ARG0 #x0 & x ] >, FILTER.RELS < [ PRED count_noun_mark, LBL #h0, ARG0 #x0 ] >, OUTPUT.RELS < [ PRED count_noun_mark, LBL #h0, ARG0 #x0 ] >, FLAGS.EQUAL < #x0 > ]. mass_mark_amtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h0, ARG0 #x0 & x ] >, FILTER.RELS < [ PRED mass_noun_mark, LBL #h0, ARG0 #x0 ] >, OUTPUT.RELS < [ PRED mass_noun_mark, LBL #h0, ARG0 #x0 ] >, FLAGS.EQUAL < #x0 > ]. plural_mark_amtr := monotonic_mtr & [ CONTEXT.RELS < [ LBL #h0, ARG0 #x0 & x ] >, FILTER.RELS < [ PRED plural_noun_mark, LBL #h0, ARG0 #x0 ] >, OUTPUT.RELS < [ PRED plural_noun_mark, LBL #h0, ARG0 #x0 ] >, FLAGS.EQUAL < #x0 > ]. ;;; ;;; _fix_me_ ;;; for whatever obscure reason, this type is not quite doing what i would want ;;; it to; at least when applied with a predicate variable (e.g. as a catch-all ;;; insertion of `_unit_n_1' as the classifier), the rules cycle; see `erg.mtr' ;;; for what i ended up doing tonight, given that there is very limited time ;;; and lots more juleøl. (22-dec-06; oe) ;;; #| classifier_insertion_amtr := monotonic_mtr & [ CONTEXT.HCONS < qeq & [ LARG #h0 ] >, INPUT.RELS < [ PRED #pred, LBL #h0, ARG0 #x1 & [ NUM pl ] ] >, OUTPUT [ RELS < [ LBL #h0, ARG0 #x1, ARG1 #x2 ], [ PRED #pred, LBL #h4, ARG0 #x2 & [ PERS 3, NUM sg, GRIND - ] ], [ PRED udef_q_rel, LBL h, ARG0 #x2, RSTR #h3, BODY h ] >, HCONS < qeq & [ HARG #h3, LARG #h4 ] > ] ]. |# ; Add intervening message for s-initial scopal adverbs with no VP counterpart ; like "besides", "luckily" s_init_scopal_amtr := monotonic_mtr & [ CONTEXT [ RELS < [ PRED message_m_rel, ARG0 #e3, MARG #h4, TPC #u5, PSV #u6 ] >, HCONS < qeq & [ HARG #h4, LARG #h0 ] > ], INPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #h2 & h ] >, FILTER.RELS < [ PRED prpstn_m_rel, LBL #h2 ] >, OUTPUT.RELS < [ LBL #h0, ARG0 #e1, ARG1 #h7 ], [ PRED prpstn_m_rel, LBL #h7, ARG0 #e3, MARG #h2, TPC #u5, PSV #u6 ] >, FLAGS.EQUAL < #h2 > ]. ; DPF 17-jul-06 - Convert n+n compound to adj+n in final fix-up ; Note that this rule has much in common with the general n+n_adj+n_mtr rule ; but needs to mention the ERG-specific compound_rel. compass_compound_amtr := monotonic_mtr & [ INPUT [ RELS < [ LBL #h2, ARG0 #x2 ], [ PRED compound_rel, LBL #h1, ARG1 #x1, ARG2 #x2 ], [ ARG0 #x2, RSTR #h3 ] >, HCONS < qeq & [ HARG #h3, LARG #h2 ] > ], OUTPUT [ RELS < [ LBL #h1, ARG1 #x1 ] >, HCONS < > ] ].