I came up with a more concise interface for creating phonological rules in my sound change rewrite, so now it only takes up 20 lines, which is fine.
My next concern is that the current design operates on specific named phonemes, and explicit collections of them. I'd like to overhaul it to work with distinctive features, which would simplify some of the rule definitions. First, though, I need to figure out which theories of distinctive features I want to support, and how to do so. This is a question of specification, and I can't fall back on replicating behavior or porting tests this time.
Here's what I've got from a cursory inspection of Wikipedia and its sources:
- Maybe "distinctive features" aren't universals
- Maybe the distinctive features for vowels aren't what most linguists think. Then again, maybe they are. Maybe it varies by language.
- Historically, distinctive features were thought of as having two values which can both be explicitly reasoned about
- More recently, the idea of features whose absence cannot be explicitly reasoned about gained traction
- Some frameworks use both kinds of feature for different purposes, some go all in on one or the other
- Some that use both (and maybe some that use only binary features?) have the possibility that a binary feature is "unspecified" for some concrete phonemes.
Since I'm currently interested in this for the potential to improve phonological rules, I'm not interested in totally general applicability, just how different approaches apply to phonological rules specifically. Also, for some of this I sort of have an out, in that, whatever categories of feature I include, I don't have to model the details of the feature in the low-level implementation code.
Speaking of that code, at a high level, there are just a few basic tasks that have to be supported:
- Match a concrete phoneme against a concrete phoneme
- Match a concrete phoneme against a category—that is, a subset of that phoneme's features. Under some theories, I believe a "category" in the sense I'm defining it here is considered an equally real phoneme that the "concrete" phoneme is in some sense a refinement of.
- Match a concrete phoneme against a category and transfer the distinctive aspects of the phoneme within that category to another category.
This last one is, I think, most likely to be problmatic, especially with some of the theories I mention above.
For example, suppose a phoneme changes its place of articulation, perhaps due to assimilation. If doing so causes it to gain or lose featural distinctions, how do I account for that? This sounds like an obvious question to ask, so it should have an answer in the literature already. Hopefully, it's out there, and I just havn't seen it yet because I'm only skimming right now because it's late.
Anyway, tomorrow I'll work on research and specification. I might also start breaking the code up some, because working with a 500-line module is still super-obnoxious.