A part-of-speech-scoped deletion rule makes metathesis words of another part of speech unparseable. Forward generation still produces them, so ParseWord is incomplete.
Repro
Start from conformance fixture languages/metathesis-phase-isolation (PR #480, 3421588) and add one deletion rule to the surface Morphology stratum, scoped to a part of speech that no metathesis word uses:
<PhonologicalRule id="prHDel">
<PhoneticInput><PhoneticSequence><SimpleContext naturalClass="ncH" /></PhoneticSequence></PhoneticInput>
<PhonologicalSubrules>
<PhonologicalSubrule requiredPartsOfSpeech="posRedup">
<PhoneticOutput><PhoneticSequence /></PhoneticOutput>
<Environment>
<LeftEnvironment><PhoneticTemplate><PhoneticSequence><SimpleContext naturalClass="ncVowel" /></PhoneticSequence></PhoneticTemplate></LeftEnvironment>
<RightEnvironment><PhoneticTemplate><PhoneticSequence><SimpleContext naturalClass="ncVowel" /></PhoneticSequence></PhoneticTemplate></RightEnvironment>
</Environment>
</PhonologicalSubrule>
</PhonologicalSubrules>
</PhonologicalRule>
(ncH = <SegmentNaturalClass id="ncH"><Segment segment="cH" /></SegmentNaturalClass>; add prHDel to the Morphology stratum's phonologicalRules.)
| Word |
Root stratum / POS |
Expected |
Got |
nui |
SimpleMeta / posSimpleMeta |
NIU |
none |
mu+i |
ComplexMeta / posComplexMeta |
MI+3SGU |
none |
Both words still generate forward (they are in the fixture's expected set, and removing prHDel restores them). The rule can never apply to either word in synthesis: wrong part of speech, and their roots live in deeper strata.
What seems to happen
Unapplying the deletion inserts an optional h between every vowel pair, before the part of speech is known, so n u (h) i. The deeper strata's metathesis rules then fail to match u–i adjacency across that optional node, so neither the (h)-present nor the (h)-absent reading reaches the metathesis unapplication. The optional node should be skippable, as it is for rewrite rules.
Notes
A part-of-speech-scoped deletion rule makes metathesis words of another part of speech unparseable. Forward generation still produces them, so
ParseWordis incomplete.Repro
Start from conformance fixture
languages/metathesis-phase-isolation(PR #480, 3421588) and add one deletion rule to the surfaceMorphologystratum, scoped to a part of speech that no metathesis word uses:(
ncH=<SegmentNaturalClass id="ncH"><Segment segment="cH" /></SegmentNaturalClass>; addprHDelto theMorphologystratum'sphonologicalRules.)nuiNIUmu+iMI+3SGUBoth words still generate forward (they are in the fixture's expected set, and removing
prHDelrestores them). The rule can never apply to either word in synthesis: wrong part of speech, and their roots live in deeper strata.What seems to happen
Unapplying the deletion inserts an optional
hbetween every vowel pair, before the part of speech is known, son u (h) i. The deeper strata's metathesis rules then fail to matchu–iadjacency across that optional node, so neither the(h)-present nor the(h)-absent reading reaches the metathesis unapplication. The optional node should be skippable, as it is for rewrite rules.Notes
V _ aso it doesn't hit this.