ŋaren crîþa 9 vlefto: Ŋarâþ Crîþ v9

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 f:Σ*×Σ*Σ*×Σ* be a function describing concatenation rules transforming pairs of strings (a,b). Generally, f can be seen as the composition of some number of individual ‘rules’ f0,f1,,fn1:Σ*×Σ*Σ*×Σ*.

Then let afb be the concatenation of a and b under f, or f-concatenation, defined as

afb=ab where (a,b)=f(a,b)

Given b,wΣ*, we wish to find all aΣ* such that afb=w. If we can compute the preimage of a set over f, then this is simply

A=i=0|w|{α|(α,β)f({(w[0..i],w[i..|w|])})β=b}

That is, we do the following:

An analogous problem and its solution can be stated for removing prefixes.

This algorithm is quite general, and certain properties of f admit simpler algorithms. (The solution is trivial if f is the identity function.)

If for all a,b and (a,b)=f(a,b), the strings b and b have the same length, then f 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 |β|=|b|.

More generally, let

Df(b)={|b||aΣ*,(a,b)=f(a,b)}

be the set of possible lengths that f could transform b to become. Then we only have to try combinations of (α,β) where |β|Df(b).

A stronger property that right isometry is right invariance, which requires b=b; in other words, f is not allowed to change the second string. If f is right-invariant, then we can return an empty set if b is not a suffix of w.

Additionally, concatenation rules in human languages rarely change segments far away from the junction. For a,bΣ* and (a,b)=f(a,b), let s be the longest common suffix of b and b, leaving r and r before it. Then the forward dextral radius of influence of (a,b) with respect to f is Rd(f;a,b)=|r| and the backward dextral radius of influence is Rd(f;a,b)=|r|. We can also define these radii for the function itself:

Rd(f)=supa,bΣ*Rd(f;a,b)Rd(f)=supa,bΣ*Rd(f;a,b)

Note that for right-isometric f, Rd(f)=Rd(f).

Given knowledge of these values, suppose that for a given (α,β), we compare b and β, aligning them at their ends. Then if b and β differ in the characters at indices |b|i and |β|i, respectively, and if |b|i<Rd(f) or |β|i<Rd(f), then we can conclude that f(α,β) does not contain any pairs (α,β) such that β=b 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 m and n be nonnegative integers and gΣm×ΣnΣ*×Σ*. Then denote by peepholem,n(g) the function f such that

f(a,b)={(a[..|a|m]a,bb[n..]) if |a|m,|b|n,(a,b)=g(a[|a|m..],b[..n])(a,b) if |a|<m or |b|<n

In effect, peepholem,n(g) is a function that affects only the m+n characters around the juncture.

Then the following statements are true:

Df(b)={l+(|b|n)|lDg(b[..n])} if |b|nRd(f)=nRd(f)=maxa,b|b| where (a,b)=g(a,b)

In particular, f is right-isometric if g 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 peephole2,1(g2)peephole1,2(g1) where

g1(a,b)={(d,og) if a=c,b=at(a,b) otherwiseg2(a,b)={(do,g) if a=ca,b=t(a,b) otherwise

Suppose that we have a function hΣkΣk. If f=substk(h) is such a substitution function, then it can be expressed as a composition of peephole functions fn1f1 where

fi=peepholei,ki(gi)gi(a,b)=(s[..i],s[i..]) where s=h(ab)

substk(h) is right-isometric and has a dextral radius of influence of k1.

We have assumed that the function h preserves the length of the substring. We can generalize subst 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 w against multiple suffixes from a fixed set BΣ*. This problem can be solved similarly to the single-suffix case by matching any of (α,β)f() where βB. This problem might be simplifiable depending on the properties of f. If f is right-invariant, for instance, then it is possible to use a trie containing the reversed elements of B.

Often, we do not want to find all elements of A but rather its intersection with a ‘dictionary set’ Kb.

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:

For aΛ(p,q) and bΛ(q,r), the extended concatenation aΦp,q,rb=aϕ(p,q,r)b is an element of Λ(p,r). If no ambiguity would arise, we omit the state names from the operator and simply write aΦb.

N-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 (a,b,c) concatenates a and b first, then the result of that to c.

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 a and b would have access to the contents of c. 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 N-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):

In exchange for this flexibility, N-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:

  1. Any new instances of ⟦j⟧ before ⟦i⟧, ⟦î⟧, or ⟦u⟧ are elided.
  2. Deduplication rules are applied.
  3. 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 fn1f1, 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

h(((μ,g,o),(ν,o,n)))={((ε,g,o),(ν,o,n)) if ν{i,ıˆ,u}((μ,g,o),(ν,o,n)) otherwise

whose preimage is straightforward to compute.

The deduplication rules, which resolve instances of oginiþe cfarðerþ, work as follows:

  1. The onset ⟦f⟧ or ⟦tf⟧ followed by a non-hatted vowel then ⟦f⟧ or ⟦p·⟧ is replaced with ⟦t⟧.
  2. 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⟧.
  3. ⟦h⟧ followed by a non-hatted vowel then ⟦h⟧ or ⟦c·⟧ is replaced with ⟦p⟧.
  4. ⟦v⟧ followed by a non-hatted vowel then ⟦v⟧ or ⟦m·⟧ is replaced with ⟦n⟧.
  5. ⟦ð⟧ followed by a non-hatted vowel then ⟦ð⟧ or ⟦d·⟧ is replaced with ⟦ŋ⟧.
  6. ⟦ħ⟧ 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.