match_rules(

  // „wyżyna X”, gdzie X jest oznaczone anotacją reladj_gaz_based
  // poza tym wymagane jest uzgodnienie
  apply(
    match(
      regex( base[0], 'wyżyna' ),
      is( 'reladj_gaz_based' )
    ),
    cond(
      ann(:1, 'capitalized_noun' ),
      agr(first(:1), first(:2), {nmb,gnd,cas})
      //equal( nmb[first(:1)], nmb[first(:2)] ),
      //equal( cas[first(:1)], cas[first(:2)] ),
      //equal( gnd[first(:1)], gnd[first(:2)] )
    ),
    actions(
      mark(M, 'HIGHLAND_NAM')
    )
  );

  // „wyżyna X”, gdzie X może być subst i może być nom
  // znakuje drugi element jako HIGHLAND_NAM,
  // pierwszy element nie może być oznakowany jako capitalized_noun
  apply(
    match(
      regex( base[0], 'wyżyna'),
      and( inter(class[0], {subst}), inter(cas[0], {nom}) )
    ),
    cond(
      not( ann(:1, 'capitalized_noun' ) )
    ),
    actions(
      mark(:2, 'HIGHLAND_NAM')
    )
  );
  
  // „MIASTO Y”, gdzie MIASTO to anotacja city_trigger (jedno lub wielotokenowa),
  // a Y to first_capital_word, poza tym mamy post-condition, że Y nie zawiera się
  // w anotacji city_nam_gaz
  apply(
    match(
      is( 'city_trigger' ),
      is( 'first_capital_word' )
    ),
    cond(
      not( annsub(:2, 'city_nam_gaz') )
    ),
    actions(
      mark(:2, 'CITY_NAM')
    )
  )

)