SPOT Syntax-Prosody in Optimality Theory spot.sites.ucsc.edu/

Generate and evaluate prosodic and syntactic trees. View and download violation tableaux.
  • Click on the downward carets to see constraints and add constraints to your constraint set using the associated checkboxes.
  • By default, XP and φ are selected as the cateogories to assess violations over. Use the checkboxes below each constraint to change the desired category.
  • SPOT is a JavaScript application. Make sure you have JavaScript enabled. We have tested SPOT in Firefox and Chrome, but not in Edge or Internet Explorer.

Built-in systems To try an analysis from the syntax-prosody literature, select a built-in analysis from the menu, then scroll to the bottom and hit "Get results"

GEN: Input parameters To generate input syntactic trees using SPOT's algorithm, use the 'Automatic' tab. To build input syntactic trees yourself, use the 'Manual' tab.


String of terminals:

Trim syntactic tree
When checked, evaluates mapping constraints against a version of the input tree where silent nodes and terminals of a category other than "x0" or "clitic" are removed. Also removes vacuous recursion, eg. [[a b]] → [a b]

GEN: Output parameters

No prosodic recursion (Non-Recursivity)
If selected, no pTree will contain a node of category K that dominates another node of category K.
Enforce headedness
If selected, every non-terminal pTree node of level k must immediately dominate a node of level k−1.
No level-skipping (Exhaustivity)
If selected, every non-root pTree node of level k is dominated by a node of level k or k+1.
All intermediate nodes are branching
If selected, every non-root, non-terminal node will have at least two children. No intermediate nodes will be unary.
Restrict maximum number of branches
If selected, restricts the maximum number of branches that are tolerated to the entered number.
Allow movement
If "Move only clitics" is selected, GEN will permute the first node in the syntactic tree with category 'clitic' through the sentence. Ex.: a b c-clitic → a b c-clitic, a c-clitic b, c-clitic a b. If "Reorder all terminals" is selected, GEN will permute all orders of terminals. Ex.: a b c → c a b, a c b, b c a, c b a, b a c, a b c. Only use this if your sentences are short, or in conjunction with non-recursivity or the branching requirement.

Prosodic categories

Root prosodic tree in
Specify the category of the root node for all the pTrees created by GEN.
ι
φ
ω
Intermediate nodes are
Specify the category of the nodes below the root and above the terminals. This is the category where GEN will create recursion.
ι
φ
ω
Prosodic terminals are
Specify the category of the terminal nodes for the pTrees GEN will create. N.B. GEN will always map terminals marked with "-clitic" to syllables.
φ
ω
Ft

Tree marking options

Annotated with tones
Hide boundaries for nodes of category...
ι
φ
ω
Mark prosodic heads
Selecting this option labels the head of each prosodic constituent with an asterisk on its right edge. For a prosodic constituent p, with children of categories k and/or k−1 in the prosodic hierarchy, p's head is defined as the leftmost or rightmost child of category k in p.

For example, marking heads on the right for p = (a b c) yields (a b c*), and for p = ((a) (b) c), yields ((a*) (b*)* c). This is the notion of head employed by BinMaxHead, but not the notion employed by AccentAsHead.

Constraints

Match

Match(Syntax→Prosody)
Assign one violation for every node of category K in the syntactic tree such that there is no node of the corresponding prosodic category in the prosodic tree that dominates the same set of terminals (that is, all and only the same terminal ids, regardless of order). SPOT function: matchSP(). (Selkirk 2011)
CP
XP
X0

Enforce Match only for syntactic nodes that are...

lexical
Match only syntactic nodes that are not labeled as functional. Mark nodes as functional by adding ",func" to the category label in the tree builder.
overtly headed
Match only syntactic nodes that have a non-silent head. Mark nodes as having silent heads by adding ",silentHead" to the category label in the tree builder.
Match(Prosody→Syntax)
Assign one violation for every node of category K in the prosodic tree such that there is no node of the corresponding syntactic category in the syntactic tree that dominates the same set of terminals (that is, all and only the same terminal nodes, regardless of order). SPOT function: matchPS(). (Selkirk 2011)
ι
φ
ω
Show more...
MatchMax(Syntax→Prosody)
Assign one violation for every maximal node of category K in the syntactic tree such that there is no maximal node of the category corresponding to K that dominates all and only the same terminal nodes in the prosodic tree. A node of category K is maximal iff it is not dominated by any other node of category K. SPOT function: matchMaxSP(). (Ishihara 2014)
CP
XP
X0

Enforce Match only for syntactic nodes that are...

lexical
Match only maximal syntactic nodes that are not labeled as functional. Mark nodes as functional by adding ",func" to the category label in the tree builder.
overtly headed
Match only maximal syntactic nodes that have a non-silent head. Mark nodes as having silent heads by adding ",silentHead" to the category label in the tree builder.
MatchNonMinimal(Syntax→Prosody)
Assign one violation for every non-minimal node of category K in the syntactic tree for which there is no node of the category corresponding to K in the prosodic tree that dominates all and only the same terminals. A node of category K is non-minimal iff it dominates at least one other node of category K. SPOT function: matchNonMinSyntax(). (Ito & Mester 2009)
CP
XP
X0

Enforce Match only for syntactic nodes that are...

lexical
Match only non-minimal syntactic nodes that are not labeled as functional. Mark nodes as functional by adding ",func" to the category label in the tree builder.
overtly headed
Match only non-minimal syntactic nodes that have a non-silent head. Mark nodes as having silent heads by adding ",silentHead" to the category label in the tree builder.
Custom Match(Syntax→Prosody)
Create your own custom Match constraint.
CP
XP
X0

Enforce Match only for syntactic nodes that are...

lexical
Match only syntactic nodes that are not labeled as functional. Mark nodes as functional by adding ",func" to the category label in the tree builder.
overtly headed
Match only syntactic nodes that have a non-silent head. Mark nodes as having silent heads by adding ",silentHead" to the category label in the tree builder.
maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.

Prosodic categories must be...

maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.
Custom Match(Prosody→Syntax)
Create your own custom Match constraint.
ι
φ
ω

Enforce Match only for prosodic nodes that are...

maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.

Syntactic nodes must be...

lexical
Only match prosodic nodes to syntactic nodes that are not labeled as functional.
overtly headed
Only match prosodic nodes to syntactic nodes that have a non-silent head.
maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.

Align/Wrap

AlignLeft(Syntax→Prosody)
Assign one violation for every node of category K in the syntactic tree whose left edge is not aligned with the left edge of a node of the prosodic category corresponding to K in the prosodic tree. SPOT function: alignLeft(). (Selkirk 1986, 1996; McCarthy & Prince 1993; Truckenbrodt 1995, 1999)
CP
XP
X0
AlignRight(Syntax→Prosody)
Assign one violation for every node of category K in the syntactic tree whose right edge is not aligned with the right edge of a node of the prosodic category corresponding to K in the prosodic tree. SPOT function: alignRight(). (Selkirk 1986, 1996; McCarthy & Prince 1993; Truckenbrodt 1995, 1999)
CP
XP
X0
Wrap
Assign one violation for every node S of category K in the syntactic tree that does not have a corresponding node P in the prosodic tree, where P is of the category to which K corresponds and P contains all the terminals dominated by S. SPOT function: wrap(). (Truckenbrodt 1995, 1999)
CP
XP
X0
Show more...
AlignLeft(Prosody→Syntax)
Assign a violation for every prosodic node of category K whose left edge is not aligned with the left edge of a syntactic node of the corresponding category. Alignment is evaluated by comparing node ids (McCarthy & Prince 1993). SPOT function: alignLeftPS()
ι
φ
ω
AlignRight(Prosody→Syntax)
Assign a violation for every prosodic node of category K whose right edge is not aligned with the right edge of a syntactic node of the corresponding category. Alignment is evaluated by comparing node ids (McCarthy & Prince 1993). SPOT function: alignRightPS()
ι
φ
ω
Custom AlignLeft(Syntax→Prosody)
Create your own custom AlignLeft constraint.
CP
XP
X0

Enforce Align only for syntactic nodes that are...

lexical
Align only syntactic nodes that are not labeled as functional.
overtly headed
Align only syntactic nodes that have a non-silent head.
maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.

Prosodic categories must be...

maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.
Custom AlignRight(Syntax→Prosody)
Create your own custom AlignRight constraint.
CP
XP
X0

Enforce Align only for syntactic nodes that are...

lexical
Align only syntactic nodes that are not labeled as functional.
overtly headed
Align only syntactic nodes that have a non-silent head.
maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.

Prosodic categories must be...

maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.
Custom AlignLeft(Prosody→Syntax)
Create your own custom AlignLeft constraint.
ι
φ
ω

Align only to syntactic nodes that are...

lexical
Align only to syntactic nodes that are not labeled as functional.
overtly headed
Align only to syntactic nodes that have a non-silent head.
maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.

Prosodic categories must be...

maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.
Custom AlignRight(Prosody→Syntax)
Create your own custom AlignRight constraint.
ι
φ
ω

Align only to syntactic nodes that are...

lexical
Align only syntactic nodes that are not labeled as functional.
overtly headed
Align only syntactic nodes that have a non-silent head.
maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.

Prosodic categories must be...

maximal
A node is maximal if it does not dominate any nodes of its own category.
minimal
A node is minimal if it is not dominated by any nodes of its own category.
AlignLeft(Lexical item)
For the specified morpheme(s), assign a violation for every terminal that intervenes between the left edge of the tree and the lexical item. Separate lexical items with spaces. See: McCarthy & Prince 1993, "Generalized Alignment". SPOT function: alignLeftMorpheme()
AlignRight(Lexical item)
For the specified morpheme(s), assign a violation for every terminal that intervenes between the right edge of the tree and the lexical item. Separate lexical items with spaces. See: McCarthy & Prince 1993, "Generalized Alignment". SPOT function: alignRightMorpheme()
AlignFocLeft
For every node S with attribute "foc" in sTree, assign a violation if the left-edge of S is not aligned to the left-edge of a node of category pCat in pTree. SPOT function: alignFocLeft()
ι
φ
ω
AlignFocRight
For every node S with attribute "foc" in sTree, assign a violation if the right-edge of S is not aligned to the right-edge of a node of category pCat in pTree. SPOT function: alignFocRight()
ι
φ
ω
Wrap(Prosody→Syntax)
Assign one violation for every node P of category K in the prosodic tree that does not have a corresponding node S in the syntactic tree, where S is of the category to which K corresponds and S contains all the terminals dominated by P. SPOT function: wrapPS().

This constraint is a prosody→syntax version of Truckenbrodt's (1995, 1999) Wrap-XP. We have never seen it proposed in the literature, but it follows as a logical possibility from Truckenbrodt's formulation of its syntax→prosody counterpart.
ι
φ
ω

Command

C-Command-to-φ
For every c-pair (x0, y0), assign a violation for every φ that dominates ωx but not ωy, and for every φ that dominates ωy but not ωx. SPOT function: ccPhi(). (Kalivoda 2018)
Enforce only for linearly adjacent words
Anti-C-Command-to-φ
If x0 and y0 are mutually non-commanding, then assign a violation if there is no φ containing ωx and excluding ωy, and a violation if there is no φ containing ωy and excluding ωx. SPOT function: antiCCPhi(). (Kalivoda 2018)

Enforcement options...

adjacent
Only apply constraint to linearly adjacent words.
strict
Apply constraint any time words are not mutually commanding (as opposed to mutually non-commanding). (Kalivoda 2018)
Group
Assign a violation for every c-pair that is not contained in at least one φ. SPOT function: group(). (Kalivoda 2018)
Require same parent φ
Assign a violation for every c-pair
that is not directly dominated by
the same parent φ. (Kalivoda 2018)
Enforce only for linearly adjacent words

Ordering

NoShift
Assign a violation if the terminals in the prosodic tree do not maintain the same precedence relations as those in the syntactic tree. (Bennett et al. 2016) SPOT function: noShift()
Linearity
For every pair of terminals (x,y), assign a violation if x precedes y in the terminal string of the syntactic tree and y precedes x in the terminal string of the prosodic tree. (McCarthy & Prince 1995). SPOT function: noShiftGradient()

Binarity

...counting branches

BinMin(branches)
Assign one violation for every node of category K in the prosodic tree that has less than two children. SPOT function: binMinBranches(). (Elfner 2012).
ι
φ
ω
BinMax(branches) - categorical
Assign one violation for every node of category K in the prosodic tree that has more than two children. SPOT function: binMaxBranches(). For branch-counting concept, see, e.g., Elfner 2012. For contrast with leaf-counting binarity, see Bellik & Kalivoda 2018 (Poster at the Annual Meeting on Phonology)
ι
φ
ω
Bin(branches) - categorical
Assign a violation for every node of category K in the prosodic tree that does not have exactly two children. SPOT function: binBranches()
ι
φ
ω

...counting leaves

BinMin(leaves)
Assign one violation for every node P of the prosodic category K in the prosodic tree such that P dominates less than two nodes of the prosodic category immediately below K on the prosodic hierarchy. SPOT function: binMinLeaves(). (Selkirk 2000)
ι
φ
ω
BinMax(leaves) - categorical
Assign one violation for every node of category K in the prosodic tree that dominates more than two nodes of the category immediately below K on the prosodic hierarchy. SPOT function: binMaxLeaves(). Concept: see, Selkirk 2000, Sandalo & Truckenbrodt 2002
ι
φ
ω
Bin(leaves) - categorical
Assign a violation for every node of category K in the prosodic tree that does not dominate exactly two nodes of category K−1 on the prosodic hierarchy. SPOT function: binLeaves()
ι
φ
ω
Show more...
BinMax(branches) - gradient
For every node P of category K in the prosodic tree, assign one violation for every child of P that is not initial or pen-initial in P. SPOT function: binMaxBranchesGradient()
ι
φ
ω
BinMax(leaves) - gradient
For every node P of category K in the prosodic tree, assign one violation for every node dominated by P that is of the category immediately below K on the prosodic hierarchy and that is not initial or pen-initial in P. SPOT function: binMaxLeavesGradient().
ι
φ
ω
BinMin(leaves) - maximal nodes only
Assign one violation for every node P of the prosodic category K in the prosodic tree such that P is maximal and P dominates less than two nodes of the prosodic category immediately below K on the prosodic hierarchy. A node of category K is maximal if it is not dominated by any other nodes of category K (Van Handel 2019). SPOT function: binMinLeaves_requireMaximal().
ι
φ
ω
Bin(branches) - gradient
For every node P of category K in the prosodic tree, assign |2−n| violations, where n is the number of children of P. SPOT function: binBrGradient()
ι
φ
ω
Bin(leaves) - gradient
For every node P of category K in the prosodic tree, assign |2−n| violations, where n is the number of nodes dominated by P that are of level K-1 on the prosodic hierarchy. SPOT function: binLeavesGradient()
ι
φ
ω
BinMaxHead - categorical
Assign a violation for node of the selected category whose head is suprabinary (i.e., has more than two children). SPOT function: binMaxHead()
ι
φ
ω

Sisterhood

BalancedSisters (Uniformity)
Assign one violation for every set sisters with a parent of category K that do not have the same number of (immediate) children. (For concept of Uniformity, see Ghini 1993; for OT constraint, see Bellik 2019) SPOT function: balancedSisters()
ι
φ
ω
all
EqualSisters (by parent)
Assign a violation for every node of the specified category whose daughters are not all of the same category as each other (concept from Myrberg 2010, 2013; Hsu 2016, p. 89, uses this particular formulation for children of ι.). SPOT function: eqSis()
ι
φ
ω
all
StrongStart (any sister)
Assign a violation for every node of the selected category such that its leftmost daughter is of a lower category than some sister to its right. SPOT function: strongStart()
ι
φ
ω
all
StrongStart (Elfner, Selkirk)
Assign one violation for every node in the prosodic tree whose leftmost daughter is of the selected category, and is lower in the prosodic hierarchy than its sister constituent immediately to its right. (Elfner's StrongStart) SPOT function: strongStart_Elfner(). (Selkirk 2011, Elfner 2012.)
Show more...
EqualSisters (adjacent)
Assign one violation for every pair of adjacent sister nodes that are not of the same prosodic category. SPOT function: equalSistersAdj(). (c.f. Myrberg 2010). Concept: Myrberg 2010. Specific formulation: SPOT. See Bellik & Kalivoda 2017 (SPOT1 Workshop slides) for discussion of implications.
EqualSisters (pairwise)
Assign one violation for every (unordered) pair of sisters nodes that are not of the same prosodic category. SPOT function: equalSistersPairwise(). (c.f. Myrberg 2010). Concept: Myrberg 2010. Specific formulation: SPOT. See Bellik & Kalivoda 2017 (SPOT1 Workshop slides) for discussion of implications.
EqualSisters (first privilege)
For each set of sisters, assign one violation for every child that has a different prosodic category from the first (leftmost) sister in the set. SPOT function: equalSistersFirstPrivilege(). (c.f. Myrberg 2010). Concept: Myrberg 2010. Specific formulation: SPOT. See Bellik & Kalivoda 2017 (SPOT1 Workshop slides) for discussion of implications.
EqualSisters2 (adjacent)
For each set of sisters, assign one violation for every child whose prosodic category is lower than that of a non-minimal sister. E.g., assign a violation for ω that is adjacent to a non-minimal φ, but don't assign a violation for ω that is adjecent to a minimal φ. SPOT function: equalSisters2(). Ito & Mester 2017.
StrongStart (Sub-categories)
Assign a violation for every node whose leftmost daughter constituent is lower in the prosodic hierarchy than its sister constituent immediately to its right. Sensitive to whether nodes are (non)minimal: φ-min is lower than φ non-min. Not sensitive to the category of the parent. (Van Handel's strongStart from SPOT2 2019) SPOT function: strongStart_SubCat()
StrongStartClitic
Assign a violation for every node whose leftmost daughter constituent is of category < ω (a syllable or foot) (Bennett, Elfner & McCloskey 2016). SPOT function: strongStartClitic()

Layering and structure

Exhaustivity (child)
Assign one violation for every parent-child pair such that the child’s prosodic category is more than one level lower than the parent’s prosodic category. E.g., φ with a syllable child, ι with an ω child. {ω ω} receives two violations. SPOT function: exhaustChild(). For Exhaustivity as a violable constraint, see Selkirk (1996)
Headedness
Category-insensitive (select "all"):
"Assign a violation for every non-terminal node in the prosodic tree of level k in the prosodic hierarchy that does not contain any node of level > k−2."

Category-sensitive (select K ∈ {ω,φ,ι}):
"Assign a violation for every non-terminal node of category K in the prosodic tree at level k of the prosodic hierarchy that does not contain any node of level > k−2."

SPOT function: headedness()
ι
φ
ω
all
Non-recursivity (parent)
Assign one violation for every node of category K that immediately dominates a node of category K in the prosodic tree. SPOT function: nonRecParent(). For Non-Recursivity as a violable constraint, see Selkirk 1995. For this specific implementation & implications, see Bellik & Kalivoda 2017 (SPOT1 Workshop slides)
ι
φ
ω
Show more...
Non-recursivity, assessed by non-overlapping leaves (Truckenbrodt)
For every node X of category K dominated by another node Y of category K in the prosodic tree, assign one violation for every leaf dominated by Y that is not also dominated by X. SPOT function: nonRecTruckenbrodt(). (Truckenbrodt 1995, 1999)
ι
φ
ω
Non-recursivity (child)
Assign one violation for every node of category K immediately dominated by another node of category K. SPOT function: nonRecChild(). For Non-Recursivity as a violable constraint, see Selkirk 1995, Zec 2005. For this specific implementation & implications, see Bellik & Kalivoda 2017 (SPOT1 Workshop slides)
ι
φ
ω
Non-recursivity, pairwise
Assign one violation for every pair of nodes X and Y in the prosodic tree such that X and Y are both of category K and X dominates (contains at any level) Y. SPOT function: nonRecPairs(). For Non-Recursivity as a violable constraint, see Selkirk 1995, Zec 2005. For this specific implementation & implications, see Bellik & Kalivoda 2017 (SPOT1 Workshop slides)
ι
φ
ω
Exhaustivity (parent)
Assign a violation for every node of category k that has one or more children of category less than (k-1), for every k. E.g., φ with a syllable child, ι with an ω child. {ω ω} receives one violation. SPOT function: exhaustParent(). For Exhaustivity as a violable constraint, see Selkirk 1995 “The prosodic structure of function words”
*pCat
Assign one violation for every node of category K in the prosodic tree. SPOT function: starCat(). See Prince & Smolensky 1993/2004; Zoll 1992; Truckenbrodt 1995, 1999
ι
φ
ω

Pitch accent

Constraints proposed for syntax-prosody analyses involving lexical accent. Designed originally for dealing with Japanese and Basque, these rely on language-specific properties of pitch accent. Accents must be indicated either by using 'a'/'u' or 'A'/'U' for the ids of words, or by adding accent attributes in the syntactic tree.
AccentAsHead
"Every accent is the head of a minimal φ" (Ito & Mester 2013). Implementation: Assign a violation for every accented word (A) that is not the sole accented word in a minimal φ.

Note that this is not the sense of head that is employed by "Mark prosodic heads" in the "Tree marking options" section.

SPOT function: accentAsHead()
NoLapse-L
No tonal lapses. Assign a violation for every fully L-toned word (i.e., an unaccented word U that follows A within a minimal φ) (Ito & Mester 2013). SPOT function: noLapseL()



Scroll down for results!

Clicking "Get results" initiates a download of a tab-separated version of the resulting tableau. The tab-separated version of the tableau will also appear in a text-area, from which it can be copy-pasted. (Use Control-A to select it if it's not already selected.) An html version of the tableau will also display below.

Trees in the violation tableau are shown in bracket notation. Curly braces { } stand for CP boundaries in a syntactic tree, and for intonational phrase boundaries in a syntactic tree. Parentheses ( ) stand for phonological phrase boundaries. Square brackets [ ] in a syntactic tree stand for XP boundaries, and in a prosodic tree stand for prosodic word boundaries (not shown for terminal nodes that are prosodic words).

Features are shown with the following suffixed abbreviations: .f = functional; .a = has a lexical accent; .foc = focused; * = head of the phonological constituent.