Morphology of Khalkha/АА vowel harmony issue

From Apertium
Jump to navigation Jump to search

There is a rule (or set of rules?) that's acting up in the Khalkha transducer.

The main rule involved is that which turns the second {А} archiphoneme in {А}{А} to one of a series of vowels that isn't the default {А}. There is another series of rules which then adjust the first {А} based on the second {А} and are sensitive to segments which may precede the {А}s as well.

Expected behaviour

  • нүд<n><abl>нүд>{Н}{А}{А}снүднээс
  • i.e., н:н ү:ү д:д >:0 {Н}:н {А}:э {А}:э с:с

By "the rule doesn't work", I mean that the transducer outputs the defaults of {А}: нүднаас.

The main rule

"{A} vowel harmony for second {А} in {А}{А}"
%{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* %>: :NonVow ]/[ %>: | :0* | :%  ] [ %{А%}: - :0 ] _ ;
         except
             _ %{А%}: ;  ! if {A}{A}, only do second {A}
         where Vx in ( ү э ө о )
               Vy in ( э э ө о )
         matched ;

Variants of the crucial line

That work

Specifically with the example above.

  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* %>: :NonVow ]/[ :0* | :% ] [ %{А%}: - :0 ] _ ;
  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* %>:* :NonVow ]/[ %>: | :0* | :% ] [ %{А%}: - :0 ] _ ;

That don't work

Specifically with the example above.

  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* :NonVow ]/[ %>: | :0* | :% ] [ %{А%}: - :0 ] _ ;
  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* :NonVow ]/[ %>:* | :0* | :% ] [ %{А%}: - :0 ] _ ;
  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* %>: :NonVow ]/[ :0 | :% ] [ %{А%}: - :0 ] _ ;
  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* :NonVow ]/[ [ :0 - %{А%}: ]* | :% ] [ %{А%}: - :0 ] _ ;

Some assumptions

  • By using /[ :0 | :% ], I should have any number of %>:0 interspersed in all locations in [ :NonVow* :NonVow ], though this doesn't seem to be the case, since [ :NonVow* %>: :NonVow ] behaves differently from [ :NonVow* :NonVow ]/[ :0 ]. It doesn't seem to matter whether the things after / have * after them or not.
  • The point of the rule is to change the second {А} (when there are two {А}s in a row) to a certain vowel based on the last vowel seen before the series of {А}s. That previous vowel, by the language's phonotactics, must occur with at least one non-vowel (up to 4 or so) intervening between the previous vowel and the {А}. However, when I make the rule as %{А%}:Vy <=> :Vx [ :NonVow* :NonVow ]/[ [ :0 - %{А%}: ] | :% ] %{А%}:Vow _ ;, I get conflicts like/including the following:
There is a <=-rule conflict between "{A} vowel harmony for second {А} in {А}{А} SUBCASE: Vx=ү Vy=э" and "{A} vowel harmony for second {А} in {А}{А} SUBCASE: Vx=э Vy=э".
E.g. in context {У}:ү г:г {I}: {А}:э г:г _ 

There is a <=-rule conflict between "{A} vowel harmony for second {А} in {А}{А} SUBCASE: Vx=ү Vy=э" and "{A} vowel harmony for second {А} in {А}{А} SUBCASE: Vx=ө Vy=ө".
E.g. in context {У}:ү г:г {I}: {А}:ө г:г _ 

Other potentially relevant rules


"{А} vowel harmony for first {А} in {A}{A}"
%{А%}:Vy <=> _ %{А%}:Vx ;
         except
             ь:/:0 _ %{А%}: ;
             :и/:0 _ %{А%}: ;
         where Vx in ( э ө о )
               Vy in ( э ө о )
         matched ;

!! ёс>{А}{А}c:ёсоос, жил>{А}{А}c:жилээс
"{А} vowel harmony for Y ''vowels''"
%{А%}:Vy <=> .#. (:NonVow) [ :Vx - %{А%}: ] [ [ :NonVow - Y: ] ( [ :NonVow - Y: ]*) ]/[ :0 | :% ] %{А%}: _ ;
         except
             _ %{А%}: ;  ! if {A}{A}, only do second {A}
         where Vx in ( е ё и )
               Vy in ( э о э )
         matched ;

!! анги>{А}{А}с:ангиас, морь>{А}{А}с:мориос
"first {А} deletes after и or ь:и"
%{А%}:0 <=> [ :и | ь:и ]/:0 _ %{А%}: ;

Some defaults

 %{ң%}:н %{В%}:в %{Т%}:т %{Д%}:д %{Н%}:н ! consonants
 %{г%}:0 %{й%}:0 %{а%}:0 %{ь%}:0 %{н%}:0 ! disappearing stuff
 %{ъ%}:0                                 ! "
 %{А%}:а %{I%}:ы %{У%}:у                 ! Vowels
 ° %% %, %. %- %>:0 %          

NonVow = Б В Г Д Е Ж З Й К Л М Н П Р С Т Ф Х Ц Ч Ш Ь Ъ Я
         б в г д е ж з й к л м н п р с т ф х ц ч ш ь ъ я ; 

Y = е я ё ;