Cascade - clmarr/DiaSim GitHub Wiki

In DiaSim, a cascade is an ordered list of sound changes. A cascade is one of the two critical input files required to run DiaSim, the other being the lexicon, which contains the words the rules extracted from the cascade will be operated upon. The file containing a cascade should be treated as a text file, whether it explicitly has '.txt' or not.

Presently there are several publicly available cascades provided in this repository, all created for Latin-to-French diachronic analysis. The most advanced cascade is DiaCLEF; the other two, BaseCLEF and BaseCLEFstar, more closely parallel the sound changes recorded by Mildred Katharine Pope in her 1934 work From Latin to Modern French. Current and future work with DiaSim includes creation of new cascade files for languages other than French, including Spanish, Albanian, Romanian, and Catalan.

Cascade Format

Each non-blank line in a cascade is either a rule or a stage label. The bulk of the cascade consists of rule lines, with the occasional stage label line to denote important points along the timeline.

Comments in a cascade file are initiated with $ -- when DiaSim encounters a $, it stops reading data and moves to the next line. A line with no material before $ is treated as a blank line.

Stages in the cascade may be "gold" or "black" (no forms of the stage are listed in the lexicon). Gold stages, flagged with '~', are those with forms to compare to the outputs of reconstruction; black stages, flagged with '=', are non-gold stages. For more on stage flagging, see its respective section at the bottom. The rest of this file until that point will describe how rules are to be formulated.

Rule Format

Basic Rule Format

Rules are of the type A > B or A > B / C __ D, where:

  • A is the phone to be changed.

  • B is the phone A will change to.

  • C is the prior context. (Optional)

  • D is the posterior context. (Optional)

Spaces must be present between each of these elements.

There are some facts to keep in mind if multiple segments are in either the input or the output. If there are the same number of segments on either side, each will be mapped to the segment at the corresponding place. If only phones are used for segments in the input and output, then the input sequence will be replaced with the output sequence, as seen in the lateral-yod coalescence rule below.

If any feature matrices are used are used in the output, then there must be the same number of input and output segments specified. They will be mapped by position: the first segment in the input will become the first segment in the output (replaced if it is a phone in the output, or transformed if it is a feature matrix), likewise for the second, and so forth, as seen in the cluster rhotacism and fortition rule below.

If this transformation effectively involves an insertion or a deletion as well (which is often the case for breaking or coalescence phenomena), a null must be used in the input or output respectively. The use of the null in the input for coalescence is exemplified for vowel nasalization below, juxtaposed with an analogous case for denasalizing breaking in hiatus before another vowel.

H deletion example 1

As an example, say the language you are working with underwent a sound change where /h/ was deleted in all contexts. Your rule would look like this:

h > ∅

For this example, nothing past A > B is needed because there is no specific context; h always becomes .

H deletion example 2

If instead the h-deletion occurred everywhere except word-initially, the rule would look like this:

h > ∅ / @ __

Now, the context is specified, using @ (DiaSim's "amorphous segmental"), we've said that the change only happens when a sound is present in the word before the h.

H deletion example 3

What if h is dropped between vocoids (vowels or glides)? The rule to represent this would look something like:

h > ∅ / [-cons] __ [-cons]

Again, the context is specified. This time, we have both a prior and a posterior context, and they are [specified by features[(#feature-specification) rather than individual phones.

Lateral yod coalescence rule

This rule exemplifies how to notate a coalescence rule, such as that of /l/ and /j/ into /ʎ/ below. Note that without the use of feature matrices to refer to segments, the input is always replaced with the output.

l j > ʎ

Cluster rhotacism rule

This rule shows how to write rules with feature matrices used at least once in the output: each 'place' in the input must align to each 'place' in the output, so it is clear which segment the output feature matrix is intended to transform. This rule makes any cluster consisting of a voiced coronal followed by an approximant into an r followed by the fricative at the same place as the approximant.

[+cor,+voi] [-cons,-syl] > r [+cons]

Vowel nasal coalescence rule

This rule below, which transforms a vowel-nasal consonant sequence into a single nasal vowel, exemplifies how to use the null symbol in a multi-segment rule involving features: it must be aligned to the same place as the segment being deleted. If the null symbol were not used, it would not be inherently clear which segment the feature matrix [+nas] was applying to.

[+syl] [+nas,+cons] > [+nas] ∅ 

Nasal vowel breaking rule

This rule exemplifies how to use a null for a breaking rule using features. It transforms a nasal vowel into a sequence of an oral vowel followed by n before another vowel.

[+syl,+nas] ∅ > [-nas] n / __ [+syl]

R metathesis rule

This rule shows how to use null symbols for metathesis rules. It is a cluster repair rule that changes CVrC sequences into CrVC sequences, perhaps reminiscent of the diachrony of some South Slavic languages. The disjunction that is seen as the first element in the input means "either a vowel or the word onset". Note that it is critical that vowel is used as the "middle" element so it can be mapped, with the dummy feature matrix [+syl], chosen because it changes nothing. Writing the rule this way avoids having to make two separate rules.

∅ [+syl] r > r [+syl] ∅ / {#;[+syl]} [+cons] __ [+cons]

Feature Specification

The format of feature specification is as follows:

  • Sets of features must be enclosed in square brackets [...]. Each set of brackets corresponds to one segment that matches the specified feature(s).

  • Every feature must be specified for a value, which can be +, -, 0, or any lowercase Greek letter (see 'Alpha-features' below). 0, which marks "unspecified" (i.e. the feature is inapplicable, for example [delrel], or delayed release, where there was never an obstruction to release), is recommended to never be used.

    For example, [+voi] will match any voiced segment.

  • Multiple different features can be specified within one set, delimited by a comma. Do not add a space after this comma.

    For example, [-son,-cont] will be used to match a segment that is a stop or affricate.

Alpha-features

As is conventional, lowercase Greek letters can be used in DiaSim as a sort of 'variable' for a feature's value.

Example: [-son] > [αvoi] / [-son,αvoi] __

This rule specifies that a sonorant following a prior sonorant will take the prior sonorant's value (+/-) for voicing. It is equivalent to the union of two rules [-son] > [-voi] / [-son,-voi] __ and [-son] > [+voi] / [-son,+voi] __. Using alpha features in this way, whereby alpha variables connect feature specifications in the output to specifications of the same feature in the context, constitute assimilation rules. However, although this is probably the most likely use case, this is not the only way to use alpha rules. Another use case is phenomena where a certain feature moves from one segment to another, mapping alpha feature specifications in the input to the same features for a different segment in the output, is seen in the (stress-preserving) transformation from rising to falling diphthongs based on a development in the history of French. The rule exemplified below that simultaneously makes stressed vowels tense, and unstressed vowels lax, exemplifying a use case where an alpha specification is used in the input for one feature and in the output for another.
A case where an alpha specification is used for two different features in the same feature matrix is seen in the adjacent vowel-raising example.

Note that although the convention for alpha symbols is to use Greek letters, any symbol other than '+', '-', or '0' before a feature in a feature matrix will be treated as an alpha symbol.

Negative alpha values are not yet supported, but when they are, they will be indicated by use of a '!' followed by the alpha symbol that is being negated. An expected use case is dissimilation, as seen in a rule that aspirates word initial voiceless stops, and deaspirates word initial voiced stops.

Stress to tensing rule

The following rule shows how alpha specifications for a feature in the input with a different feature in the output can be used to force the equivalence of one feature to another. In this case, vowels that have primary stress [+prim] are made tense, and vowels that do not [-prim] are made lax, without a need for two separate rules.

[αprim] > [αtense]

Vowel raising example

This rule, representing a closed final syllable vowel raising rule in Surselvan Romansch (taken from Montreuil 1977: 37; modified for simplicity and clarity for our purposes here), shows how an alpha specification may be used for different features within the same feature matrix. This rule raises only vowels whose roundness matches their backness: /ɛ/ (-round,-back) and /o/ (+round,+back) would be raised, while /ø/ (+round,-back) and /ɑ/ (-round,+back) would not. Note that the (..)+ before the word boundary in the context indicates that one or more consonants must be present before the mutating segment and the word boundary.

[+syl,αback,αround] > [+hi,-lo] / __ ([+cons])+ #

Diphthong prominence shift rule

The following rule shows how to use alpha features to have features survive on a different segment. It is a formulation for a historical rule in Old French that changed falling diphthongs to rising diphthongs > i.e. uj > wi, yj > ɥi. Because stress is only marked on syllabic segments, not glides, alpha features must be used to ensure that the newly syllabic second element inherits the stress -- unstressed (-stres,-prim], primarily stressed (+stres,+prim), or secondarily stressed (+stres,-prim) -- from the recently glided first element.

[+syl,αstres,βprim] [-cons,-syl,+hi] > [-syl] [+syl,αstres,βprim]

Aspiration from voicing rule

The following rule exemplifies one way negative features could be used. It acts upon word-initial stops, and simultaneously aspirates ([+sg]) them if they are voiceless ([-voi]), and deaspirates them ([-sg]) if they are voiced ([+voi]).

[-cont,αvoi] > [αsg] / # __

Progressive vowel harmony example

The following example illustrates how rules would be used to denote a case of progressive vowel harmony where vowels take on the frontness/backness of preceding vowels (regardless of if consonants are in the way):

[+syl] > [αfront,βback] / [+syl,αfront,βback] ([-syl])* __

Tying Features to Symbols

Feature values are assigned to segments according to the user's symbol definitions file. The default symbolDefs.csv contains definitions for most IPA symbols. Diacritics definitions, by default supplied by the file 'currentSymbolDiacriticDefs.txt' may be used during runtime to define symbols for unseen feature vectors that result from sound changes, or to determine the feature vector of undefined symbols by applying the feature specifications of (a) diacritic(s) to the predefined symbol that is present once they are removed.

For more information on representing segments, see the 'Representations' wiki page.

Non-phone Symbols

Null Symbol

The null symbol is used to represent insertion or deletion in a sound change. In a deletion rule, a sound becomes , as seen in the h-deletion rule in Example 1 above and the following two examples.

In an insertion rule, becomes is replaced with a sound, as seen in the hypothetical anaptyxis rule below, inserting schwa to break up any consonant cluster:

∅ > ə / [+cons] __ [+cons] 

As seen in the /r/-metathesis rule above, nulls can also be a useful way to write metathesis rules as a single rule rather than multiple rules.

Word Boundary Symbol #

The word boundary symbol marks a word boundary. A word boundary occurring in the prior context is a word-initial boundary, while a word boundary occuring in the posterior context is a word-final boundary. For example, a context specified as / # __ means the rule will apply only word-initially.

Amorphous Segmental

The amorphous segmental represents any sound. It can be used to represent changes that do NOT occur in phones that border a word boundary. For example, a context specified as / @ __ means the rule will apply anywhere that is NOT word initial, as seen in the second h-deletion example above.

Disjunctions

In cases where multiple rules of the same structure would be needed, the {...;...} notation for disjunctions can be used as a shorthand. The number of disjoined features must be the same on both sides of the > sign.

For example, a language might have a debuccalization change where /t/ becomes /ʔ/ and /f/ becomes /h/. These two changes could be expressed with a single disjunctive rule as {t;f} > {ʔ;h}.

A classic example would be West Romance/Brythonic intervocalic lenition, which "saw through" posterior liquids so that -VCRV- segments were still treated as between vowels. While this process involved both voicing and spirantization, the former alone is demonstrated below:

[-voi] > [+voi] / [-cons] __ ({r;l}) [-cons]

It is currently not possible to use feature matrices within disjunctions in the input (although it is possible in the context.

Optionality parentheses

Optionality parentheses are used to specify segments that are optional in inputs or contexts; they cannot be used in outputs.

There are three types of optionality parentheses:

For a general example, consider the centralization of countertonic /e/ in Early Old French, which occurred before either another vowel, or a consonant then another vowel, as shown below:

ˌe > ˌə / __ ([+cons]) [+syl]

Some things are worth taking into account when using any sort of optionality parentheses. Usage on the input side of the arrow will mean that the material enclosed will be absorbed into the scope of the segment sequence that is replaced (deterministically) with the material on the output side. An example in a k-palatalization process that absorbs a prior /j/: is shown below:

(j) k > c / __ [+syl,+front]

Note however currently since August 2023 the capacity to use optionality parentheses in the input is blocked as it is unclear that it would operate without errors. This may be resolved in 2025; if you need it resolved, please contact clmarr. Instead, if feature matrices are not involved (see parenthetial statement below) , disjunctions should should instead to accomplish the same transformation. For example the above rule would be formulated as follows below:

{j k;k} > {c;c} / __ [+syl,+front]

Alpha features in optionality parentheses

(As of July 5, 2025, this section only concerns filters in the suite menu (see here)

Concerning alpha features within optionality parentheses, there are two policies to note. Alpha features that are noted only within a set of parentheses will have their values constant only within those parentheses, and this means they reset upon a repeat for repeated parenthetical structure formed in (...)* or (...)+. Thus the filter below indicates a sequence of one or more CV syllables whereby the C segment shares its labiality with the V segment, but each CV could have a different labiality setting.

([-syl,βlab] [+syl,βlab])+

The above would accept buki, muwo and taki, but not tumo or mama.

Meanwhile, if an alpha variable in a parenthesis also occurs outside it, it must have a single value throughout the entire sequence of segmental material being matched, or it will not be a match. The filter below will therefore match sequences that consist of an initial vowel followed by a sequence of one or more repeated same-labiality-setting CV segments, with the addition that there must be a single tenseness setting for the whole setting:

[+syl,ɛtense] ([-syl,βlab] [+syl,βlab])+

Thus, this will accept ebuki and ɔpʊtɛ, but not æpɔti.

Note that the functionality of these features has currently been tested for filters in the suite menu but not yet (as of July 5, 2025) for cascade rules.

Morpheme boundary '+'

The symbol '+', when separated by spaces, is used to mark a morphemic boundary. Beware that failing to separate it from a space after a closing parenthesis will cause it to be interpreted as part of a one or more optionality parenthesis. This symbol is not used in any of the -CLEF cascades as Pope 1934 did not assert any sound changes that were conditioned in terms of a morpheme boundary (unlike a word boundary) and it did not seem necessary for the debugging process in making DiaCLEF. Unlike processes conditioned on word boundaries, that sound changes have ever been or could ever be conditioned on morpheme boundaries is contentious ; this is part of a broader debate concerning the possibility of grammatically conditioned sound change. Both reports of such morpheme-boundary conditioned phenomena and competing analyses that offer other explanations for these abound (see Hill 2014; Enger 2013; Anttila 1972; Hock 1976). In addition to views that the possibility of morpheme-boundary-conditioned sound change is either impossible (Kiparsky 1973) or necessarily possible (Hyman & Moxley 1996; Anttila 1972), another view asserts that sound change necessarily originates in exclusively phonetically-motivated (synchronic) processes that cannot be morphologically conditioned at first but can acquire such extra-phonological conditioning (including in morphology) as it passes from synchrony into diachrony (Janda & Joseph 2003).

DiaSim is built in the Neogrammarian tradition but is not intended to be restricted to those who adhere to any side of this debate: the user can opt to use or not use the morpheme bound. For how to use it correctly, we will refer to one well-known proposal of a morpheme-bound conditioned sound change in a branch of Bantu, whereby /k/ palatalized before /i/, across a morpheme boundary (Hyman & Moxley 1996: 274). This would be expressed as follows ([c] being a voiceless palatal stop):

k > c / + __ i

Further examples in this section will use synchronic processes, whose conditioning on morphological factors is less controversial as they are not claimed to constitute proper sound changes, but they are intended to illustrate how to express morphological conditioning in the same environments diachronically should it be deemed necessarily.

Note that some processes that are described as operating at the morpheme boundary in fact operate at the morpheme boundary and the word boundary. Although we are not aware of any cases where this became diachronically relevant, in case such a case arises, this must be explicitly specified using a bracketed disjunction. For example, many English varieties are analyzed as having a synchronic rule that inserts a glide before a morpheme boundary or a word boundary; typically this occurs after vowels that are high (or underlyingly high -- see Uffmann 2010), but in non-rhotic dialects [ɹ] may be inserted after non-high vowels (in many dialects, especially /ɔ/ and/or /ə/), leading to [ɹ]-insertion both before a morpheme boundary ("draw-[ɹ]-ing") and at a word boundary ("law-[ɹ]-and order"). Thus, to capture this behavior, should it for some reason become necessary for a diachronic system for reasons unclear at present but not impossible, the following rule formulation would be necessary, with a bracketed disjunction (see below) clarifying that this sandhi process operates across either a word boundary or a morpheme boundary.

∅ > ɹ / [+syl,-hi] __ {+;#} [+syl]

This bracketed disjunction is likewise the way to express analyses that treat Spanish e-prosthesis as both word-initial and morpheme-initial given cases like Checoeslovaquia (Janda & Joseph 2003):

∅ > e / {+;#} __ s [+cons]

Note also that '+' notation is not to be used for processes that, while perhaps initially phonetically motivated, are conditioned on specific morphemes and not others in a way that is no longer phonetically or even phonologically predictable. For example, consider the case of the (synchronic) Jita rhotic assibiliation process (Downing 2007). This process changes /ɾ/ into /s/ before a set of morphemes starting in /i/ or /j/ cannot actually be represented by a (synchronic) rule "ɾ -> s / __ + [+hi,+front]", because there are other morphemes starting in /i/ or /j/ that do not trigger assibilation. In this case, the process clearly involves morphological knowledge of which affixes (don't) trigger the process (Hamann 2014), and thus it lies outside the purview of DiaSim, a diachronic phonological system.

Commenting

One flags a comment by using the dollar sign "$", just like in the lexicon file. After seeing this flag, the system erases from its memory the character and everything on the same line to the right of it. Hence a line that starts with the comment flag "$" will be considered blank by DiaSim.

Conventionally, a comment that is so long it runs off the screen should be broken up into multiple lines, to be legible. Also conventionally, comment blocks, separated from each other by blank lines, should be used to group comments, just as paragraphs are used in prose.

Stage flagging

DiaSim supports the use of intermediate stages between the input and output. These are a means of indicating some significant point within the relative chronology. There are two kinds of stages:

  • "Gold": Attested etyma corresponding to the stage are listed as a column in the lexicon.

  • "Black": no etyma that correspond to the stage are listed in the lexicon.

Stages represent intermediate points at which DiaSim can 'halt' as though it had reached the end of the cascade. Their placement within the cascade file corresponds to their placement relative to the rules in the cascade file: if a stage A is placed between rule 29 and 30, rules 1 through 29 will have been operated on the input to generate stage A's staged outputs, but no rule after 29 will have been reached yet. A stage is intended to represent a moment in history, and may (if it is gold, must) correspond to a column in the Lexicon file.

Gold Stages

Gold stages are flagged with a ~ (i.e. this is the first character on the line). For example:

~Middle French

The flagging of a gold stage tells DiaSim that a new column in your lexicon has been reached. More precisely, this is a stage with a column in the lexicon file that has gold comparanda, which are sourced forms that can be compared to the staged outputs (forms generated through forward reconstruction by operating the cascade upon the inputs up to that point). Typically these are forms attested in the particular historical period the stage indicates (e.g. Old French forms attested in Roland, Érec et Énide, Le Roman de la Rose, etc.).

A column in the lexicon file can be without gold comparanda if it consists only of lexemes being inserted (form supplied for a row where there was previously no input given) at that time and/or lexemes obsolescing (falling out of use, '...' used to usurp the result of an input given in previous rows); put another way, it is a column for which no row with a previously supplied form has a subsequent form provided. Thus, before the output column, it is at gold stages, and only at gold stages, where one has the gold comparanda with which to perform systematic comparisons between the results of implementing the cascade on the input, and observed "gold" forms. By implementing gold stages, you can obtain metrics on the accuracy of your forward reconstruction at an intermediate stage, rather than being limited to an input column and an output column.

Blackening of gold stages

For reasons described below stemming from correspondence-enforcement between lexicon and cascade, a gold stage may be blackened: converted into a black stage. Blackening occurs during runtime, and does not modify the cascade file. This behavior allows the same cascade to be used for lexica with different numbers of columns; for example, the included French cascade DiaCLEF (which has several gold stages denoted) can be run with either FLLex or FLLAPS, even though FLLex has just an input and an output column of attested etyma while FLLAPS has intermediate stages.

Black Stages

Black stages are flagged with =. For example:

=Common Romanian

Like gold stages, black stages simply points in the cascade to denote relevant moments in history, but black stages differ in that they are not used for systematic comparison between staged outputs and gold comparanda (as gold comparanda are not supplied for them). Therefore, black stages typically do not correspond to columns in the lexicon file; the only case where they do is a columned black stage, as described below.

Columned Black Stages

A columned stage is a stage with a column in the lexicon. The input stage is always columned therefore, as is the output and any intermediate gold stages if present. You have a columned black stage when you are using column in the lexicon file that does not supply any reflexes for lexemes that the cascade has been operating on. Such columns exist only to mark insertions and/or obsolescences. Word absence at a given stage is marked with ... in the lexicon. Having phonic content in the lexicon in a row for a column that comes after a content with ... will be interpreted as an insertion (representing coinage, borrowing, refection, etc.): DiaSim will insert this word into the lexicon at that stage. Having ... for a row in a column that comes after a column with phonic content will meanwhile be interpreted as obsolescence: DiaSim will remove it from the lexicon at that point. Note that these facts apply to gold stages as well (and gold stages are, again, all columned, by definition). Words inserted at a gold stage should not contribute to the calculation of accuracy statistics and diagnostics for that stage; they will be differentiated from words not just reinserted in that the latter are functionally marked as reconstructed, which is reflected in their printed forms by being headed by a *. When any rule is carried out on any part of the lexicon, all words in it are marked as reconstructed (as they are now not "just-inserted", and their non-inclusion in the scope of the rule is at some level hypothetical even if logically secure).

Correspondence of stages in the cascade and lexicon

As noted above, gold stages flagged in the cascade must always correspond to a column in the lexicon, while black stages do not have to and usually don't (except in a particular edge case, described above). It is important to avoid errors in pairing stages flagged in the cascades with columns in the lexicon. One way to do this is by using a header in the lexicon, but this is optional. Both scenarios, with-header and without, are described below, respectively.

Stage correspondence with a lexicon header

If a header is used, make sure the names of intermediate stages match your intended gold stages as flagged in the cascade. If there is a conflict between the two files on whether a stage is gold or black, black always wins. The behavior of DiaSim in terms of stage handling between the cascade and lexicon is as follows. If a header is used, cascade-flagged gold stages with a name not found in any column of the header will be blackened. Likewise, if the column where a cascade-flagged gold stage's name is found in has no gold comparanda (forms supplied in a row after the input was provided; see above), then the stage will also be blackened. Furthermore, if a stage is flagged like a black stage (with '=') in the cascade, it will remain a black stage, even if gold comparanda are found in its lexicon column.

A column named in the header as (case-insensitively) 'out', 'output', 'res' or 'result', or with its first six characters (again case-insensitively) being 'modern', will automatically be treated by DiaSim not as a gold stage, but rather as the gold output column. If there is one column left after all gold stages flagged in the cascade have already been paired with earlier columns, this final column is assumed assumed to be the gold output column. Please avoid having any non-output column with a name that is not a flagged stage (black or gold) in the cascade, as this will cause errors. For this same reason, it is advisable to make sure the names of columns and the flagged stages they are intended to correspond match.

Stage correspondence without a lexicon header

If the lexicon file does not have a header, then the association of gold stages to columns will proceed automatically. In this scenario, DiaSim will not attempt to assign any black stages to columns. Gold stages will be assigned to columns after the input in the order they occur. If there is just one column remaining, it will be treated as a gold output column. If there are two or more columns remaining after all flagged gold stages in the cascade are exhausted, an error will occur; likewise, if columns are exhausted before gold stages are, an error will occur. In either case, it is important to ensure stagewise correspondence between the cascade and the lexicon.

Works cited

Anttila 1972 = Anttila, R. 1972. "An introduction to historical and comparative linguistics". New York: MacMillan.

Downing 2007 = Downing, L. 2007. "Explaining the role of the morphological continuum in Bantu spirantization". Africana Linguistica 13: 53-78.

Enger 2013 = Enger, H-O. 2013 "Inflectional change, 'sound laws' and the autonomy of morphology: the case of Scandinavian case and gender reduction". Diachronica 30(1): 1-26.

Hamann 2014 = Hamann, S. 2014. "Phonological changes". In Bowern, C. and Evans, B. (eds.), The Routledge Handbook of Historical Linguistics.

Hill 2014 = Hill, N. W. 2014. "Grammatically conditioned sound change". Language and Linguistics Compass 8(6): 211-229.

Hock 1976 = Hock, H. H. 1976. Review of An introduction to historical and comparative linguiistics by Raimo Anttila. Language 52(1): 202-220.

Hyman & Moxley 1996 = Hyman, L. and Moxley, J. 1996. "The morpheme in phonological change: velar palatalization in Bantu." Diachronica 13(2): 259-82.

Janda & Joseph 2003 = Janda, R. & Joseph, B. D. 2003. "Reconsidering the Canons of Sound CHange: Towards a 'Big Bang' Theory". In Blake, B. and Burridge, K. (eds), Selected Papers from the 15th International Conference on Historical Linguistics, Melbourne, 13--17 August 2001. Amsterdam: John Benjamins Co. Pp205-219.

Kiparsky 1973 = Kiparsky, P. 1973 "Abstractness, opacity and global rules. Three dimensions of linguistic theory". Ed. by Fujimura, O. Tokyo: TEC. 57-86.

Montreuil 1977 = Montreuil, J-P. 1977. "Vowel alternation in the Romansch dialect of Surselvan". PhD., University of Texas at Austin.

Uffmann 2010 = Uffmann, C. 2010. "The non-trivialness of segmental representations". Paper presented at Old World Conference on Phonology (OCP) 7, Nice.