Help

A guided tour to CCamelOT

CCamelOT — The Guided Tour
  1. In CCamelOT, as in classic OT, a derivation starts with an input and a constraint ranking (grammar).
    Start constructing your input by clicking the "Input" link.

  2. If you have a phonetic font properly installed and selected, you will see something like this. If not, go to the font page.
    Let's construct the input /ba/, either by typing "ba" or by clicking the "b" button and then the "a" button.

  3. Now that you have an input, you are ready to make a constraint ranking.
    Start constructing your constraint ranking by clicking the "Ranking" link.

  4. In order to see devoicing of obstruents, let's choose the ranking Max>>*Appendix>>*Voice.
    Your constraint ranking, which is currently empty, is on the left. Available constraints are on the right, with Faithfulness constraints in alphabetical order first, then Markedness constraints in alphabetical order.

    Find the constraint Max and add it to the your ranking by clicking on it, then clicking on the left arrow (circled in red). You can also add a constraint to your ranking by double-clicking it.

  5. Find *Appendix and *Voice and add them to your ranking. You can change the ranking of the constraints you have by using the up and down arrows (circled in red). For the time being, keep Max at the top of your hierarchy.

  6. Now that you have an input and a constraint ranking, you are ready to see the derivation.
    Click the "Tableau" link in order to run your input through your grammar.

    As Expected, you get two candidate. The first one is the faithful candidate, which is the most harmonic candidate that incurs no faithfulness violations. The second candidate was created in response to *Voice. This is the only non-faithful candidate that was generated, because there is no other way to improve the faithful candidate with the current grammar: A violation of *Voice can be fixed either by devoicing, as in candidate (b), or by deletion of the voiced obstruent, but deletion is blocked here by the higher ranking Max.

  7. Let's see what happens if we promote *Voice over Max. You could do this by clicking the "Ranking" link, but you can also rerank directly from the Tableau page with the arrows that are under each constraint's name (circled in red). Promote *Voice twice, until it's at the top of the hierarchy.

  8. You see that for this grammar, another candidate was created. Since *Voice outranks Max, deletion of a voiced obstruent will improve harmony. The output [pa] is still the winner, since it's more faithful than [a], and just as marked under the current grammar.

    If you want to get an idea of what the correspondence relations in this derivation are, check the "Segment indices" box (circled in red). Each segment will show its index as a subscript.

  9. When segment indices are visible, it makes sense to look at the LUMs (Localized Unfaithful Mappings), or the phonological operations that created the candidates that you see. You do this by checking the "LUMs" box (circled in red).
    You see that candidate (b) was created by deletion of the segment whose index is 1, and candidate (c) was created by changing the feature [voice] on the same segment. Since by definition no phonological operations were done to the faithful candidate (a), it has no LUMs.

  10. The next thing we should look at is the effect of morphological structure on the derivation. The do this, we should add a constraint that is sensitive to the morphology, like Identroot(voice). Go back to the Ranking page, add this constraint to your ranking, and promote it to the top of your hierarchy.

  11. Next, promote Max to the top, so you having the ranking Max>>Identroot(voice)>>*Voice>>*Appendix.

    Now, let's add the suffix /-di/ to our root /ba/. Go to the input page, and add the segments /d/ and /i/ to your input. Then, open the "Morphology" tab (circled in red).

  12. You see that all the segments are currently specified as root segments. To specify /-di/ as a suffix, first click the "Affix" button for the /i/, then for the /d/ (circled in red). You will not be able to do this in the opposite order, because the root has be contiguous in the input (as most theories of morphology assume).

  13. Now let's run this input through the grammar by going back to the tableau page. You will see that the root's voiced stop is protected from devoicing by Identroot(voice), but there is no faithfulness constraint to protect the suffix.

  14. This is the end of the guided tour. You can find more about CCamelOT and the way it works further down this page. Enjoy!
Notation and symbols

The following symbols are used in CCamelOT:

/ / Input, Underlying Representation
. Syllable boundary
< > Appendix (unsyllabified segments)
[ ] Root
< > Candidate chain

Browsers and fonts

CCamelOT requires a web-browser that allows cookies and Javascript.

CCamelOT was tested and found to be fully functional on MS-Explorer and Firefox for Windows and Mac. There are a few known Safari bugs. Please let me know if CCamelOT is not fully functional on your favorite browser (but don't forget to install an appropriate font).

The phonetic font you should use is the freely downloadable Doulos SIL unicode font. You can also use Gentium, but I find it to be less legible on the screen. These unicode fonts are the only fonts that work on Firefox and Safari.

On Explorer, you can also use SIL Doulos IPA93 (which is a part of the freely downloadable SIL Encore package), but this font doesn't display as well as Doulos SIL.

Once a phonetic font is correctly installed on your system, set CCamelOT to use it by going to the font page.

Can I see/use the code?

You can find the code, and ideas for what to do with it, in the I need a constraint! page.

Prosodic structure and syllabification

The inputs are made out of segements, moras, and syllables. Consonants can have 0-2 moras underlyingly; vowels can have 1-3. Syllables are absent from the input by fiat, so all non-moraic consonants start the derivation as "appendix" consonants (i.e. not dominated by a syllable).

Syllabification is done with complete faithfulness to segments and moras. No moras are ever deleted or epenthesized. However, consonants may change their affiliations to moras they don't head. Syllabification proceeds in three steps:
  1. A syllable is built on top of every moraic segment.

  2. If two syllables are adjacent (no intervening segments), and the second syllable is mono-moraic, and its nucleus is less sonorous than the preceding nucleus, then the two syllables are merged — so long as this merger improves harmony. This is done recursively, left to right.

  3. Syllables look for onsets and codas: each syllable looks to its left and to its right for a single consonant that is less sonorous than the segment the syllable currently has at the relevant edge. Then, the most harmonic of three scenarios is chosen: The consonant stays unsyllabified, the consonant is syllabified as an onset, or the consonant is syllabified as a coda.
Note that syllables don't have units like "Onset", "Nucleus" or "Coda". Constraints on syllable structure use the following definitions:
  1. Onset segments are defined as the consonant(s) leading up to the nucleus.

  2. The nucleus is defined as the most sonorous segment in the syllable.

  3. Coda segments are defined as the consonant(s) following the nucleus.

Similarly, moras don't have a designated "head". The most sonorous segment dominated by a mora is that mora's head.

Chains and repairs

The derivation starts with the creation of a chain that only contains one link - the faithful candidate. The faithful candidate is created by running the input through the grammar without allowing Faithfulness violations.

Next, all the repairs are applied to the faithful candidate. After each repair is performed, the output is syllabified and evaluated by the grammar. If the output is more harmonic than the faithful candidate, a new chain is created that contains two links: the faithful candidate and the newly created form.

After all the repairs were applied and zero or more two-link chains were created, the process is repeated for each of the two-link chains. The last link in each chain is subjected to all the repairs, and harmonically improving outputs are put in new three-link chains. This process is repeated until chains can't get any longer.

Currently available repairs are:
  1. Deletion of a segment with all the moras it heads.
    Epenthetic segments do not get deleted. Deleting an epenthetic segment will undo a LUM, creating an illict chain.

  2. Epenthesis of a segment (currently either a glottal stop or a schwa) with a mora.

  3. Epenthesis of a segment (currently either a glottal stop or a schwa) without a mora.

  4. Epenthesis of a mora onto an existing segment (no floating moras are created).

  5. Deletion of a mora.

  6. Change of the feature [voice] (from + to – and vice versa).

  7. Change of the feature [back] (from + to – and vice versa).

  8. Change of the feature [high] (from + to – and vice versa).

  9. Change of the feature [low] (from + to – and vice versa).

When a feature such as voice is changed, CCamelOT goes through the list of existing phonemes, and looks for a phoneme that matches the input phoneme in all features except the changed one. If no such phoneme is found (for instance, nasals don't have voiceless counterpart), the feature change does not go through.

Segments, sonority and features

Segments have the following attributes:
  1. A sonority level between one and 16, following Parker (2002). List

    Low vowels16
    Mid vowels15
    High vowels14
    Schwa13
    Barred i12
    Glides11
    r10
    l9
    (not implemented)8
    (not implemented)7
    Nasals6
    h5
    Voiced fricatives4
    Voiceless fricatives3
    Voiced stops2
    Voiceless stops1


  2. A place of articulation: LAB, COR and DOR. Vowels are placeless.

  3. The following binary features: consonantal, anterior, distributed, lateral, strident, sonorant, continuant, voice, constricted glottis, spread glottis, high, back, low, round, ATR, nasal.

This follows SPE pretty closely. Users are welcome to change the features any way they want (but note that some constraints may require adjusting too). To update phonemes and features, you have to download CCamelOT and run it on your own computer. If you have done this, follow these steps:
  1. Use Excel to update the file "Phoneme.xls".
  2. Save "Phoneme.xls" as a tab-delimited text file, and call it "Phoneme.txt".
  3. Use a text editor to replace all triple double quotes (""") with single double quotes (").
  4. Run the file "Phoneme_generator.pl".
Constraints

The following constraints are currently implemented in CCamelOT:

  1. Dep
    No epenthesis of segments.

    Assign one violation mark for every segment of the output that is not present in the input.

  2. Dep-C
    No epenthesis of consonants.

    Assign one violation mark for every consonant of the output that is not present in the input.

  3. Dep
    No epenthesis of moras.

    Assign one violation mark for every mora of the output that is not present in the input. Note that this constraint also penalizes the epenthesis of a segment that heads a mora.

  4. Dep-V(–hi)
    No epenthesis of non-high vowels.

    Assign one violation mark for every [–high] vowel of the output that is not present in the input.

  5. Dep-V
    No epenthesis of vowels.

    Assign one violation mark for every vowel of the output that is not present in the input.

  6. Ident(high)
    Be faithful to [high].

    Assign one violation mark for every segment of the output that has an input correspondent, and the [high] value of the output segment doesn't match the [high] value of the input segment.

  7. Ident(length)
    Segments must head the same number of moras in the input and in the output.

    Assign one violation mark for every output segment that has an input correspondent, and the number of moras it heads in the input is different from the number of moras is heads in the output.

  8. Ident(low)
    Be faithful to [low].

    Assign one violation mark for every segment of the output that has an input correspondent, and the [low] value of the output segment doesn't match the [low] value of the input segment.

  9. Identonset(voice)
    Be faithful to [voice] of onset consonants.

    For every output segment that is in a syllable onset and has an input correspondent, assign one violation mark if the output and input correspondent don't have the same value for the feature [voice].

  10. Identroot(back)
    Be faithful to [back] in the root.

    Assign one violation mark for every segment of the output that has an input correspondent in the root, and the [back] value of the output segment doesn't match the [back] value of the input segment.

  11. Identroot(voice)
    Be faithful to [voice] in the root.

    Assign one violation mark for every segment of the output that has an input correspondent in the root, and the [voice] value of the output segment doesn't match the [voice] value of the input segment.

  12. Ident(voice)
    Be faithful to [voice].

    Assign one violation mark for every segment of the output that has an input correspondent, and the [voice] value of the output segment doesn't match the [voice] value of the input segment.

  13. Max
    No deletion of segments.

    Assign one violation mark for every segment of the input that is not present in the output.

  14. Max-C
    No deletion of consonants.

    Assign one violation mark for every consonant of the input that is not present in the output.

  15. Max-V
    No deletion of vowels.

    Assign one violation mark for every vowel of the input that is not present in the output.

  16. Max
    No deletion of moras.

    Assign one violation mark for every mora of the input that is not present in the output. Note that this constraint also penalizes the deletion of a segment that heads a mora.

  17. O-Contig
    No intrusion.

    Assign one violation mark for every pair of segments that are adjacent in the input and present in the output, but not adjacent in it.

  18. Agree(back)
    Adjacent vowels must agree in [back] (consonants may intervene).

    Assign one violation mark for every pair of output vowels that don't have another vowel between them, and have different values for [back].

  19. Agree(voice)
    Adjacent obstruents must agree in [voice].

    Assign one violation mark for every pair of adjacent output obstruents that have different values for [voice].

  20. AlignL(root,PWd)
    Roots must left-align with the left edge of the Prosodic Word.

    For every root, Assign one violation mark if the leftmost segment of the root present in the output isn't the leftmost segment in the Prosodic Word.

  21. AlignR(root,σ)
    Roots must right-align with the right edge of a syllable.

    For every root, Assign one violation mark if the rightmost segment of the root present in the output isn't the rightmost segment in some syllable.

  22. CrispEdge
    Morpheme boundaries must be crisp.

    Assign one violation mark for every morpheme boundary such that the segment before it and the segment after it belong to the same syllable.

  23. Final-C
    Words must end in a consonant.

    Assign one violation mark for every word whose last segment is a vowel.

  24. Onset
    Syllables must have onsets.

    Assign one violation mark for every syllable whose initial segment is the most sonorous segment in that syllable (i.e. it is the nucleus).

  25. WBP
    Coda segments must head a mora (Weight By Position).

    Assign one violation mark for coda consonant that is not the most sonorous segment dominated by some mora.

  26. WordBin
    A word must contain two moras.

    Add up the moras of the word that dominate at least one segment (i.e. ignore floating moras). Assign one violation mark for every word that has less than two such moras.

  27. *3µ
    Syllables must not contain more than two moras.

    Starting from the most sonorous segment in each syllable (i.e. ignoring the onset), add up the moras headed by the segments in the syllable. Assign one violation mark for every syllable whose non-onset segments head more than two moras.

  28. *Appendix
    Segments must belong to syllables.

    Assign one violation mark for every segment that is not a part of some syllable.

  29. *C/Nuc
    Syllables must not be headed by a consonant.

    Assign one violation mark for every syllable whose most sonorous segment is a consonant.

  30. *µ/C
    Moras must not be headed by a consonant.

    Assign one violation mark for every mora whose most sonorous segment is a consonant.

  31. *Coda
    Syllables must not have codas.

    Assign one violation mark for every syllable whose final segment is a consonant, unless that segment is the most sonorous segment in the syllable (in which case it is the nucleus rather than the coda).

  32. *ComplexCoda
    Syllables must not have codas made up of more than one segment.

    Assign one violation mark for every syllable that ends in two consonants, neither of which is the most sonorous segment in the syllable (i.e. neither is the nucleus).

  33. *ComplexOnset
    Syllables must not have onsets made up of more than one segment.

    Assign one violation mark for every syllable that starts with two consonants, neither of which is the most sonorous segment in the syllable (i.e. neither is the nucleus).

  34. *Diphthong
    No diphthongs.

    Assign one violation mark for every syllable whose nucleus is a vowel and the following segment in the syllable is also a vowel.

  35. *FakeGem
    There must not be fake geminates.

    Assign one violation mark for pair of adjacent identical consonants.

  36. *ʔ/Coda
    Syllables must not end in a glottal stop.

    Assign one violation mark for every syllable whose final segment is a glottal stop.

  37. *Heavy
    Syllables must not contain more than one mora.

    Starting from the most sonorous segment in each syllable (i.e. ignoring the onset), add up the moras headed by the segments in the syllable. Assign one violation mark for every syllable whose non-onset segments head more than one mora.

  38. *Mid
    No mid vowels.

    Assign one violation mark for every vowel that is [–high] and [–low].

  39. *a]
    Syllables must not end in a low vowel.

    Assign one violation mark for every syllable whose final segment is a low vowel.

  40. *TrueGem
    There must not be true geminates.

    Assign one violation mark for every consonant that's associated with more than one sylllable.

  41. *VTV
    There must not be an intervocalic voiceless stop.

    Assign one violation mark for every stop (i.e. [–cont, –son]) that is [–voice].

  42. *VgV
    There must not be an intervocalic [g].

    Assign one violation mark for every intervocalic [g].

  43. *Voice
    No voiced obstruents.

    Assign one violation mark for every segment that is [–son] and [+voice].

  44. Prec(low,epen)
    Epenthesis must not feed a change of [low].

    For every instance of epenthesis, assign one violation mark if a change of [low] crucially follows, and one violation mark if a change of [low] does not crucially precede.