Truncation
In many cases, inflection involves the addition of prefixes or suffixes to a stem. It follows that inverting this process would involve the removal of these affixes. However, concatenation often results in phonological changes to one or both of the stem and the affix. For example, I meet you in Ŋarâþ Crîþ would be derived as cenv-a-ve, but the co-occurrence of v in the resulting word is considered undesirable (oginiþe cfarðerþ) and is resolved by replacing the first v with an n. Thus, the resulting word is not **cenvave but rather cennave.
Let be an alphabet and be a function describing concatenation rules transforming pairs of strings . Generally, can be seen as the composition of some number of individual ‘rules’ .
Then let be the concatenation of and under , or -concatenation, defined as
Given , we wish to find all such that . If we can compute the preimage of a set over , then this is simply
That is, we do the following:
- Split into in all possible ways.
- Find all such that .
- Collect all such where .
An analogous problem and its solution can be stated for removing prefixes.
This algorithm is quite general, and certain properties of admit simpler algorithms. (The solution is trivial if is the identity function.)
If for all and , the strings and have the same length, then is considered to be right-isometric. In this case, we do not have to try all combinations of but rather only the one in which .
More generally, let
be the set of possible lengths that could transform to become. Then we only have to try combinations of where .
A stronger property that right isometry is right invariance, which requires ; in other words, is not allowed to change the second string. If is right-invariant, then we can return an empty set if is not a suffix of .
Additionally, concatenation rules in human languages rarely change segments far away from the junction. For and , let be the longest common suffix of and , leaving and before it. Then the forward dextral radius of influence of with respect to is and the backward dextral radius of influence is . We can also define these radii for the function itself:
Note that for right-isometric , .
Given knowledge of these values, suppose that for a given , we compare and , aligning them at their ends. Then if and differ in the characters at indices and , respectively, and if or , then we can conclude that does not contain any pairs such that and can thus discard the pair .
Unfortunately, Ŋarâþ Crîþ v9e’s concatenation rules have a dextral radius of influence of 5, while many of its affixes are shorter than 5 assemblage units long. For that reason, radius-of-influence simplifications are unlikely to be useful for Ŋarâþ Crîþ.
Examples of concatenation rules
The identity function is right-invariant and has a dextral radius of influence of 0.
Let and be nonnegative integers and . Then denote by the function such that
In effect, is a function that affects only the characters around the juncture.
Then the following statements are true:
In particular, is right-isometric if is.
Often, we wish to replace one substring with another if a juncture occurs anywhere within the substring. For instance, the rule replacing ‘cat’ with ‘dog’ can be expressed as the composition of two functions where
Suppose that we have a function . If is such a substitution function, then it can be expressed as a composition of peephole functions where
is right-isometric and has a dextral radius of influence of .
We have assumed that the function preserves the length of the substring. We can generalize to account for functions that change the length of the input, but we must be careful about where the new juncture is placed.
Generalizations
In practice, we often want to check a word against multiple suffixes from a fixed set . This problem can be solved similarly to the single-suffix case by matching any of where . This problem might be simplifiable depending on the properties of . If is right-invariant, for instance, then it is possible to use a trie containing the reversed elements of .
Often, we do not want to find all elements of but rather its intersection with a ‘dictionary set’ .
Concatenation on regular systems
The notion of truncation can be generalized to be over any pair of formal languages. In this case, the concatenation rules function may have a different codomain from its domain. Usually, we are interested in languages of a regular system in which the end state of the first string is equal to the start state of the second string. We define an extended concatenative system over as a pair of functions where:
- is a function that takes in three states and outputs a new middle state , and
- returns for every triple of states a concatenation rule function for two strings, possibly changing the middle state according to .
For and , the extended concatenation is an element of . If no ambiguity would arise, we omit the state names from the operator and simply write .
-ary concatenation
We have looked at binary concatenation; concatenation of more than two operands is often assumed to be left associative. In other words, concatenating concatenates and first, then the result of that to .
Another possibility for concatenating multiple morphemes is to apply the juncture rules after all of the concatenations. This means that in this example, any juncture rules applied between and would have access to the contents of . This is more complex than repeated binary concatenation but has the advantage of being able to use word-global information (such as stress or syllable position within a word).
The concept of -ary concatenation itself does not specify the order in which juncture rules are applied to each juncture. For instance, if the juncture rules consist of three subprocesses A, B, and C, then given a word with three junctures labeled 1, 2, and 3 from start to end, then the rules could trigger in any of the following orders (among other possibilities):
- Apply the subprocesses in sequence to each juncture from start to end: A1, B1, C1, A2, B2, C2, A3, B3, C3
- Apply the subprocesses in sequence to each juncture from end to start: A3, B3, C3, A2, B2, C2, A1, B1, C1
- Apply each subprocess to all junctures from start to end: A1, A2, A3, B1, B2, B3, C1, C2, C3
- Apply subprocesses A and C from start to end but B from end to start: A1, A2, A3, B3, B2, B1, C1, C2, C3
- Apply subprocess A to all junctures, then B and C to each juncture in sequence: A1, A2, A3, B1, C1, B2, C2, B3, C3
In exchange for this flexibility, -ary concatenation has the disadvantage that truncation requires searching a larger space for possible juncture placements.
Case study: Ŋarâþ Crîþ v9e
According to the Ŋarâþ Crîþ v9e grammar, concatenation consists of the following processes applied across the juncture:
- Any new instances of ⟦j⟧ before ⟦i⟧, ⟦î⟧, or ⟦u⟧ are elided.
- Deduplication rules are applied.
- Newly formed bridges are canonicalized and repaired.
We assume that we are working with assemblages in a regular system. Therefore, while a substitution function can be regarded as a composition of multiple functions , most of these functions will have no effect on concatenation at a given juncture state.
The first process, glide elision, is a right-invariant substitution function based on
whose preimage is straightforward to compute.
The deduplication rules, which resolve instances of oginiþe cfarðerþ, work as follows:
- The onset ⟦f⟧ or ⟦tf⟧ followed by a non-hatted vowel then ⟦f⟧ or ⟦p·⟧ is replaced with ⟦t⟧.
- The onset ⟦þ⟧ or ⟦cþ⟧ followed by a non-hatted vowel then ⟦þ⟧ or ⟦t·⟧ is replaced with ⟦t⟧. In addition, a preceding ⟦þ⟧ or ⟦cþ⟧ coda is replaced with ⟦s⟧, and a preceding ⟦rþ⟧ coda is replaced with ⟦r⟧.
- ⟦h⟧ followed by a non-hatted vowel then ⟦h⟧ or ⟦c·⟧ is replaced with ⟦p⟧.
- ⟦v⟧ followed by a non-hatted vowel then ⟦v⟧ or ⟦m·⟧ is replaced with ⟦n⟧.
- ⟦ð⟧ followed by a non-hatted vowel then ⟦ð⟧ or ⟦d·⟧ is replaced with ⟦ŋ⟧.
- ⟦ħ⟧ followed by a non-hatted vowel then ⟦ħ⟧ or ⟦g·⟧ is replaced with ⟦g⟧.
In f9i, these rules are implemented twice: once for the case when the vowel in question is followed by a nonterminal coda (thus capturing the following initial), and once for the case when it is followed by a terminal coda (in which case only rules #1 and #2 are applicable). In both cases, the preceding coda is captured if available.
This process is more involved than glide elision, but its preimage is not too difficult to compute, and the process is right-isometric.
The assemblage form makes these changes difficult: the first consonant following a vowel might belong to the coda of the same syllable or to the initial of the following syllable, and it may be part of a complex coda or initial. It also complicates situations in which changing a letter requires the word to be syllabified differently; for this problem, v9e simply chooses to apply bridge resolution after deduplication, although this has the disadvantage of failing to remove some cases of oginiþe cfarðerþ.
Ŋarâþ Crîþ v9e’s deduplication rules are quite crude, prompting ad-hoc workarounds to be made in specific instances of inflection. There are plans in Project Shiva to expand the range of oginiþe cfarðerþ and thus the scope of deduplication, as well as a desire to avoid changing the initial consonant of a word. An even more challenging problem is propagation: if deduplication changes a consonant such that a new instance of oginiþe cfarðerþ arises, then additional invocations of deduplication might be required to resolve it.
The final step of concatenation is bridge resolution, which modifies awkward coda–initial pairs to more convenient ones. This process is also used for canonicalizing these pairs according to the maximal onset principle.
Ŋarâþ Crîþ v9e’s version of this process is complicated by the fact that although v7 allowed ŋ as a coda, v9 does not. When ŋ appeared as a coda, it was changed into r, modifying the preceding vowel. -aŋ, -oŋ, and -uŋ were changed to -or, and -eŋ and -iŋ were changed to -jor. Reflecting this change, bridge resolution first outputs either a true coda or a pseudo-coda of ŋ, subsequently resolving the latter case by applying this change to the vowel. That is, a final of -or might have arisen from one of -or, -aŋ, -oŋ, or -uŋ. Likewise, a final of -jor might have arisen from one of -jor, -jaŋ, -jeŋ, -joŋ, -eŋ, or -iŋ.
Since the number of possible bridges is relatively small, tabulation can be used to implement the preimage of the first step.
Because bridge resolution is right-isometric, Ŋarâþ Crîþ v9e’s concatenation rules as a whole are as well.