A continuous constraint doesn't hand back a violation — it hands back a number. How far a vowel strays from its target, say: a distance, raw, in hertz or in whatever unit. Calling that number a "violation" skips a step. Between the raw value and the penalty lives a choice we almost never spell out: a link function, which decides how the value becomes a punishment.
And there's more than one honest way to do it. The link can be linear and simply pass the number along as is. It can be exponential and punish each step of straying with more fury than the last. It can be logistic and tolerate the drift up to a point, then collapse into a wall. All start at zero and grow with distance — the least you'd ask of a penalty — but the shape of each is a different theory of what counts as "bad":
It might look like a technicality, were it not for what happens downstream. The grammar doesn't read violations and stop there: it weights them, sums them, and turns them into probability — and it does so by exponentiating, $P \propto e^{-\sum_k w_k v_k}$, as in maximum-entropy grammars (Hayes & Wilson, 2008; Jäger, 2007). So the distribution the model predicts over the vowel is already born of an exponential. The link we chose back there reappears in here, shaping the peak, the shoulders and the tails of what we expect to see.
Notice, then, that one of the links speaks the machine's own language. If the output is already an exponential, an exponential link keeps everything in one currency: positive, multiplicative, composing without seams. It isn't the only option, but it's the one that grinds least against what comes next. You can see it in a tableau: take three candidates at distances 0, 1 and 2 from the target. Read through the linear link, the difference between them is gentle:
Read through the exponential link ($v=e^{r}-1$), the same distance weighs far more heavily far from the target, and the probability piles up hard on the winner:
Worth checking the sum instead of trusting the drawing — the two columns of $P$ come from a single handful of distances, only seen through different links:
import math
# A constraint returns a raw distance; the link turns it into a violation.
# Three candidates at distances 0, 1, 2 from the target, seen through two links.
r = [0, 1, 2]
def P(vs, w=1.0): # MaxEnt output: exponentiate the negative harmony
hs = [math.exp(-w * v) for v in vs]
Z = sum(hs)
return [h / Z for h in hs]
linear = list(r) # v = r
expo = [math.exp(x) - 1 for x in r] # v = e^r - 1
print("candidate r v(lin) v(exp)")
for i, x in enumerate(r):
print(f" {i} {x} {linear[i]:.2f} {expo[i]:.2f}")
print("P linear:", [round(p, 3) for p in P(linear)])
print("P exp :", [round(p, 3) for p in P(expo)])
In the end the moral is modest and a little unsettling: the violation wasn't out in the world waiting to be measured. It is manufactured — by the constraint, yes, but also by the silent link we chose to read it with. Name the link, and you'll already have decided, without noticing, much of what the grammar will predict.
- Hayes, B., & Wilson, C. (2008). A Maximum Entropy Model of Phonotactics and Phonotactic Learning. Linguistic Inquiry.
- Jäger, G. (2007). Maximum Entropy Models and Stochastic Optimality Theory. Preprint.
Barroso, A. M. (2025). A violation, seen through a link. alexandrebarroso.com. https://alexandrebarroso.com/notes/a-violation-through-a-link.html
@misc{barroso2025aviolationthroughalink,
author = {Alexandre Menezes Barroso},
title = {A violation, seen through a link},
year = {2025},
howpublished = {alexandrebarroso.com},
url = {https://alexandrebarroso.com/notes/a-violation-through-a-link.html},
note = {alexandrebarroso.com}
}