; Vowel Harmony rules

ALPHABET b c C d f g G h j k l m n p r s S t v y z Z a e I i o O u U A H K J B D $ Y % & ^ ' x q w E Q ~ + 1 2 3 4 5 6 7 8 9 NULL 0 ANY @ BOUNDARY # SUBSET CONS b c C d f g G h j k l m n p r s S t v y z D Z Y K J B SUBSET VOWEL a e I i o O u U A H % & ^ E Q SUBSET SVOWEL I i o O u U a e SUBSET BACKV a I u o SUBSET FRONTV e i O U SUBSET HIGHV I i u U SUBSET FRUNRV i e SUBSET FRROV O U SUBSET BKROV u o SUBSET BKUNRV a I SUBSET X s y n SUBSET NDCONS c Z l d D RULE "defaults" 1 31 b c C d f g G h j k l m n p r s S t v y z Z a e I i o O u U @ b c C d f g G h j k l m n p r s S t v y z s a e I i o O u U @ 1: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 RULE "defaults" 1 31 A A H H H H K J B n D D b d k c s y $ a e I i o O u U Y Y A @ a e I i u U k C b 0 t d p t G C 0 0 0 0 0 0 0 0 0 0 0 0 y 0 @ 1: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 RULE "defaults" 1 22 % & ^ ' ' x q w E Q ~ + 1 2 3 4 5 6 7 8 9 @ a u o 0 ' x q w 0 0 ~ 0 1 2 3 4 5 6 7 8 9 @ 1: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 RULE " A:a => [VOWEL:BACKV | Q:0] ':' * CONS * @:0 * +:0 * _" 3 8 A Q ' CONS @ + VOWEL @ a 0 ' CONS 0 0 BACKV @ 1: 0 2 1 1 1 1 3 1 2: 3 2 2 2 2 2 3 1 3: 3 3 3 3 3 3 3 1 RULE " A:e => [VOWEL:FRONTV | E:0 | %:a | &:u | ^:o] ':' * CONS * @:0 * +:0 * _" 6 11 A ^ ' CONS @ + & % E VOWEL @ e o ' CONS 0 0 u a 0 FRONTV @ 1: 0 2 1 1 1 1 3 4 5 6 1 2: 6 2 2 2 2 2 3 4 2 6 1 3: 6 2 3 3 3 3 3 4 3 6 1 4: 6 2 4 4 4 4 3 4 4 6 1 5: 6 2 5 5 5 5 3 4 5 6 1 6: 6 2 6 6 6 6 3 4 6 6 1 RULE " A:0 <=> _ +:0 H:@ y o r" 11 8 A A + H y o r @ 0 @ 0 @ y o r @ 1: 2 7 1 1 1 1 1 1 2. 0 0 3 0 0 0 0 0 3. 0 0 0 4 0 0 0 0 4. 0 0 0 0 5 0 0 0 5. 0 0 0 0 0 6 0 0 6. 0 0 0 0 0 0 1 0 7: 2 7 8 1 1 1 1 1 8: 2 7 1 9 1 1 1 1 9: 2 7 1 1 10 1 1 1 10: 2 7 1 1 1 11 1 1 11: 2 7 1 1 1 1 0 1 RULE " H:u => VOWEL:BKROV ':' * CONS * +:0 * @:0 * _" 2 7 H VOWEL ' CONS + @ @ u BKROV ' CONS 0 0 @ 1: 0 2 1 1 1 1 1 2: 2 2 2 2 2 2 1 RULE " H:U =>[VOWEL:FRROV | &:u | ^:o] ':' * CONS * +:0 * @:0 * _" 4 9 H ^ ' CONS + @ & VOWEL @ U o ' CONS 0 0 u FRROV @ 1: 0 2 1 1 1 1 3 4 1 2: 4 2 2 2 2 2 3 4 1 3: 4 2 3 3 3 3 3 4 1 4: 4 2 4 4 4 4 3 4 1 RULE " H:I => [VOWEL:BKUNRV | Q:0] ':' * CONS * +:0 * @:0 * _" 3 8 H Q ' CONS + @ VOWEL @ I 0 ' CONS 0 0 BKUNRV @ 1: 0 2 1 1 1 1 3 1 2: 3 2 2 2 2 2 3 1 3: 3 3 3 3 3 3 3 1 RULE " H:i => [VOWEL:FRUNRV | E:0 | FRUNRV:0 +:0 | %:a] ':' * CONS * +:0 * @:0 * _" 6 10 H % ' CONS + @ FRUNRV E VOWEL @ i a ' CONS 0 0 0 0 FRUNRV @ 1: 0 2 1 1 1 1 3 5 6 1 2: 6 2 2 2 2 2 2 2 6 1 3: 0 2 1 1 4 1 3 5 6 1 4: 6 2 4 4 4 4 4 4 6 1 5: 6 2 5 5 5 5 5 5 6 1 6: 6 2 6 6 6 6 6 6 6 1 ; drop the vowel if suffix begins with a vowel RULE " H:0 => VOWEL:VOWEL (':') +:0 _" 4 5 H VOWEL ' + @ 0 VOWEL ' 0 @ 1: 0 2 1 1 1 2: 0 2 3 4 1 3: 0 2 1 4 1 4: 1 2 1 1 1 ; or if the prog suffix is added to a verbal stem ending in a vowel RULE " SVOWEL:0 <=> $:0_ CONS +:0 (X:0) [A:@ | H:@] | _ +:0 H:@ y o r" 20 12 SVOWEL SVOWEL $ CONS + H A X y o r @ 0 @ 0 CONS 0 @ @ 0 y o r @ 1: 11 16 2 1 1 1 1 1 1 16 1 1 2: 7 3 2 1 1 1 1 1 1 3 1 1 3: 11 16 2 4 17 1 1 1 4 16 4 1 4: 11 16 2 1 5 1 1 1 1 16 1 1 5: 11 16 2 1 1 0 0 6 1 16 1 1 6: 11 16 2 1 1 0 0 1 1 16 1 1 7. 0 0 0 8 0 0 0 0 8 0 8 0 8. 0 0 0 0 9 0 0 0 0 0 0 0 9. 0 0 0 0 0 1 1 10 0 0 0 0 10. 0 0 0 0 0 1 1 0 0 0 0 0 11. 0 0 0 0 12 0 0 0 0 0 0 0 12. 0 0 0 0 0 13 0 0 0 0 0 0 13. 0 0 0 0 0 0 0 0 14 0 0 0 14. 0 0 0 0 0 0 0 0 0 15 0 0 15. 0 0 0 0 0 0 0 0 0 0 1 0 16: 11 16 2 1 17 1 1 1 1 16 1 1 17: 11 16 2 1 1 18 1 1 1 16 1 1 18: 11 16 2 1 1 1 1 1 19 16 1 1 19: 11 16 2 1 1 1 1 1 1 20 1 1 20: 11 16 2 1 17 1 1 1 1 16 0 1 ; and prevent the H from dropping in such a case RULE " H:0 /<= VOWEL:0 +:0 _ y o r" 6 7 VOWEL + H y o r @ 0 0 0 y o r @ 1: 2 1 2 1 1 1 1 2: 2 3 2 1 1 1 1 3: 2 1 4 1 1 1 1 4: 2 3 2 5 1 1 1 5: 2 1 2 1 6 1 1 6: 2 1 2 1 1 0 1 ;X = s y n ; consonant deletion RULE " X:0 <=> CONS (':') +:0 _ (CONS) VOWEL" 8 7 X X CONS ' + VOWEL @ 0 @ CONS ' 0 VOWEL @ 1: 0 2 2 1 1 1 1 2: 0 2 2 3 4 1 1 3: 0 2 2 1 4 1 1 4: 7 5 2 1 1 1 1 5: 0 6 6 3 4 0 1 6: 0 2 2 3 4 0 1 7. 0 8 8 0 0 1 0 8. 0 0 0 0 0 1 0 ; D = d t RULE " D:t <=> [h | @:C | S | @:k | @:p | @:t | f | s] (':') +:0 (@:0) _" 5 14 D D h + @ ' @ S @ @ @ f s @ t @ h 0 0 ' C S k p t f s @ 1: 0 1 2 1 1 1 2 2 2 2 2 2 2 1 2: 0 1 2 3 1 5 2 2 2 2 2 2 2 1 3: 2 0 2 4 4 1 2 2 2 2 2 2 2 1 4: 2 0 2 1 1 1 2 2 2 2 2 2 2 1 5: 0 1 2 3 1 1 2 2 2 2 2 2 2 1 ; devoicing RULE " {b, d}:{p, t} <=> _# | _ +:0 (X:0) [CONS | c:C]" 7 10 b d b d # + X CONS c @ p t @ @ # 0 0 CONS C @ 1: 2 2 3 3 1 1 1 1 1 1 2. 0 0 0 0 1 4 0 0 0 0 3: 2 2 3 3 0 6 1 1 1 1 4. 0 0 3 3 0 0 5 1 1 0 5. 0 0 3 3 0 0 0 1 1 0 6: 2 2 0 0 1 1 7 0 0 1 7: 2 2 0 0 1 1 1 0 0 1 RULE " c:C <=> [C | S | @:k | @:p | @:t | f | s | h ] +:0 _ [H:@ |A:@]" 5 14 c c C + H A S @ @ @ f s h @ C @ C 0 @ @ S k p t f s h @ 1: 0 1 2 1 1 1 2 2 2 2 2 2 2 1 2: 0 1 2 3 1 1 2 2 2 2 2 2 2 1 3: 5 4 2 1 1 1 2 2 2 2 2 2 2 1 4: 0 1 2 1 0 0 2 2 2 2 2 2 2 1 5. 0 0 0 0 1 1 0 0 0 0 0 0 0 0 RULE " C:c <=> _ +:0 X:0 VOWEL" 7 6 C C + X VOWEL @ c @ 0 0 VOWEL @ 1: 2 5 1 1 1 1 2. 0 0 3 0 0 0 3. 0 0 0 4 0 0 4. 0 0 0 0 1 0 5: 2 5 6 1 1 1 6: 2 5 1 7 1 1 7: 2 5 1 1 0 1 ; G -> k/g changes RULE " k:G <=> VOWEL _ +:0 (X:0) VOWEL" 8 6 k k VOWEL + X @ G @ VOWEL 0 0 @ 1: 0 1 2 1 1 1 2: 6 3 2 1 1 1 3: 0 1 2 4 1 1 4: 0 1 0 1 5 1 5: 0 1 0 1 1 1 6. 0 0 0 7 0 0 7. 0 0 2 0 8 0 8. 0 0 2 0 0 0 RULE " k:g <=> n_ +:0 (X:0) VOWEL" 8 7 k k n + VOWEL X @ g @ n 0 VOWEL 0 @ 1: 0 1 2 1 1 1 1 2: 6 3 2 1 1 1 1 3: 0 1 2 4 1 1 1 4: 0 1 2 1 0 5 1 5: 0 1 2 1 0 1 1 6. 0 0 0 7 0 0 0 7. 0 0 0 0 1 8 0 8. 0 0 0 0 1 0 0 RULE " g:G => _ +:0 (X:0) VOWEL" 4 5 g + X VOWEL @ G 0 0 VOWEL @ 1: 2 1 1 1 1 2. 0 3 0 0 0 3. 0 0 4 1 0 4. 0 0 0 1 0 RULE " g:G /<= n_" 2 3 n g @ n G @ 1: 2 1 1 2: 2 0 1 RULE " g:G /<= r_" 2 3 r g @ r G @ 1: 2 1 1 2: 2 0 1 RULE " Y:y <=> _ +:0 [X:0 | H:@]" 5 6 Y Y + X H @ y @ 0 0 @ @ 1: 2 4 1 1 1 1 2. 0 0 3 0 0 0 3. 0 0 0 1 1 0 4: 2 4 5 1 1 1 5: 2 4 1 0 0 1 RULE " Y:0 <=> _# | _ +:0 NDCONS:@" 5 6 Y Y # + NDCONS @ 0 @ # 0 @ @ 1: 2 3 1 1 1 1 2. 0 0 1 4 0 0 3: 2 3 0 5 1 1 4. 0 0 0 0 1 0 5: 2 3 1 1 0 1 RULE " ':0 <=> _# | _+:0 l A:@" 7 7 ' ' # + l A @ 0 @ # 0 l @ @ 1: 2 3 1 1 1 1 1 2. 0 0 1 4 0 0 0 3: 2 3 0 6 1 1 1 4. 0 0 0 0 5 0 0 5. 0 0 0 0 0 1 0 6: 2 3 1 1 7 1 1 7: 2 3 1 1 1 0 1 END