def-gthill / lexurgy

A high-powered sound change applier
GNU General Public License v3.0
42 stars 5 forks source link

Syllable feature goes to default when monovalent feature is deleted and another syllable changes #46

Closed Mardikhouran closed 2 years ago

Mardikhouran commented 2 years ago

Initial situation

Feature (syllable) Tone(*neutral, low, high)
Feature (syllable) +stress

Diacritic L [low]
Diacritic H [high]
Diacritic ' (before) [+stress]

Syllables:
 b a

tone-assignment:
 <syl> => [high] / $ _
 [] => [low]

stress-assignment:
 <syl> => [+stress] / _ $

romanizer-initial:
 unchanged

Results:

baba   => baH.'baL
bababa => baH.baL.'baL

The problematic rule

stress-retraction:
 <syl>&[high] <syl>&[low] => [+stress] [-stress] / _ $

Results:

baba   => 'baH.ba
bababa => baH.baL.'baL

The syllable that lost its feature +stress also lost its low tone.

Unsuccessful patch

Even when the affected feature gets mentioned in the result side:

stress-retraction:
 <syl>&[high] <syl>&[low] => [+stress] [-stress low] / _ $

It still doesn't carry over.

Similar rules where everything works as expected

Only one syllable change

stress-deletion:
 <syl>&[low] => [-stress] / _ $

Results:

baba   => baH.baL
bababa => baH.baL.baL

The previous syllable gets deleted

pretonic-deletion:
 <syl>&[high] <syl>&[low] => * [-stress] / _ $

Results:

baba   => baL
bababa => baH.baL.'baL

The multivalent feature goes to default value

tone-deletion:
 <syl>&[-stress] <syl>&[+stress] => [] [neutral] / _ $

Results:

baba   => baH.'baL     => baH.'ba
bababa => baH.baL.'baL => baH.baL.'ba
def-gthill commented 2 years ago

This is fixed in commit 8c71558c1252296ac794dc8865e1eed90a59f38c.

Thanks again for reporting these bugs. Handling syllables is complex, so the more situations I can test, the more robust it'll be.