Docs / Phonology / OptimalityTheory / Correspondence / Basic

Correspondence theory

import Linglib.Phonology.OptimalityTheory.Correspondence.Basic · namespace OptimalityTheory

This file defines McCarthy and Prince's correspondence between strings, a relation between their positions, and the faithfulness constraints as conditions on it: MAX reads its domain, DEP its range, and IDENT the segments at corresponding positions. A correspondence carries one string per role and a relation between the positions of each ordered pair of roles, so that the input, base, and reduplicant of a reduplicative candidate form one diagram.

Main definitions

Main statements

Implementation notes

  • A named constraint is a partial application of a family to a pair of roles: MAX-IO is (·.maxViol .input .output).
  • Positions are indexed by Fin, so that every pair in an edge is in range by type, and Correspondence.ofPairs drops index pairs out of range.
  • Encoding a correspondence as a binary relation on positions follows Payne, Vu, and Heinz.

References

Declarations

A correspondence diagram: a string for each role and, for each ordered pair of roles, a directed relation between their positions.

structure CorrespondenceL81–85
(Role : Type u_1) (α : Type u_2) :
Type (max u_1 u_2)
  • form : Role → List α
  • edge (r₁ r₂ : Role) : Finset (Fin (self.form r₁).length × Fin (self.form r₂).length)

Used by Correspondence.IsSymmetric, Correspondence.maxViol, Correspondence.depViol, Correspondence.maxViolOn, Correspondence.depViolOn, Correspondence.maxViolAt, Correspondence.depViolAt, Correspondence.identViol, Correspondence.identViolFeature, Correspondence.maxViolFeature, Correspondence.depViolFeature, Correspondence.maxViolFeature_pos_iff, Correspondence.contigIViol, Correspondence.contigOViol, Correspondence.anchorLViol, Correspondence.anchorRViol, Correspondence.linearityViol, Correspondence.uniformityViol, Correspondence.integrityViol, Correspondence.maxViol_eq_zero_iff, Correspondence.depViol_eq_zero_iff, Correspondence.maxViolOn_true, Correspondence.depViolOn_true, Correspondence.maxViolAt_true, Correspondence.depViolAt_true, Correspondence.integrityViol_eq_zero_iff, Correspondence.uniformityViol_eq_zero_iff, Correspondence.linearityViol_eq_zero_iff, Correspondence.ofPairs, Correspondence.diagram, Correspondence.parallel, Correspondence.identity, Correspondence.reduplication, Correspondence.ofFun, Correspondence.swap, Correspondence.IsSymmetric.swap, Correspondence.depViolAt_swap, Correspondence.maxViol_swap, Correspondence.identViol_swap, Correspondence.maxViol_of_diagonal, Correspondence.depViol_of_diagonal, Correspondence.maxViol_eq_zero_of_diagonal, Correspondence.depViol_eq_zero_of_diagonal, Correspondence.identViolFeature_eq_zero_of_diagonal, Correspondence.identViol_eq_zero_of_diagonal, Correspondence.maxViolFeature_of_diagonal, Correspondence.depViolFeature_of_diagonal, Correspondence.identViolFeature_of_diagonal, Correspondence.IsSymmetric.maxViolAt_eq, Correspondence.IsSymmetric.maxViol_eq, Correspondence.IsSymmetric.identViol_eq, Correspondence.maxViol_eq_zero_of_graph, Correspondence.depViolAt_of_graph, Correspondence.integrityViol_eq_zero_of_graph, Correspondence.uniformityViol_eq_zero_of_graph, Correspondence.linearityViol_eq_zero_of_graph, Correspondence.identViol_eq_zero_iff_of_graph, Correspondence.IsFaithful, Correspondence.exists_fun_mem_edge_iff, Correspondence.exists_orderEmbedding_mem_edge_iff, Correspondence.isFaithful_iff_exists_orderIso, Correspondence.length_eq_of_isFaithful, Correspondence.IsFaithfulness, Correspondence.IsMarkedness, Correspondence.isMarkedness_comap, Correspondence.isMarkedness_iff_exists_comap, Correspondence.isFaithfulness_maxViol, Correspondence.isFaithfulness_depViol, Correspondence.isFaithfulness_identViol, Correspondence.IsFaithfulness.not_antifaithful, Correspondence.exists_isMarkedness_not_isFaithfulness

Used in Phonology/OptimalityTheory/Correspondence/Deletion, Alderete2001, Benua1997, BerentEtAl2016, Casali1997 and 7 more

L87–92
L99
L101

A correspondence is symmetric when each relation is the converse of the reverse one.

def Correspondence.IsSymmetricL115–117
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) :
  • c.IsSymmetric = ∀ (r₁ r₂ : Role), c.edge r₂ r₁ = Finset.image Prod.swap (c.edge r₁ r₂)

Built from

Used by Correspondence.diagram_isSymmetric, Correspondence.parallel_isSymmetric, Correspondence.reduplication_isSymmetric, Correspondence.ofFun_isSymmetric, Correspondence.IsSymmetric.swap, Correspondence.IsSymmetric.maxViolAt_eq, Correspondence.IsSymmetric.maxViol_eq, Correspondence.IsSymmetric.identViol_eq

Used in Phonology/OptimalityTheory/Correspondence/Deletion

Constraint families

MAX counts the positions of form r₁ without a correspondent in form r₂.

def Correspondence.maxViolL121–123
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ

Built from

Used by Correspondence.maxViol_eq_zero_iff, Correspondence.maxViolOn_true, Correspondence.maxViolAt_true, Correspondence.maxViol_swap, Correspondence.maxViol_of_diagonal, Correspondence.maxViol_eq_zero_of_diagonal, Correspondence.maxViol_identity, Correspondence.IsSymmetric.maxViol_eq, Correspondence.maxViol_eq_zero_of_graph, Correspondence.IsFaithful, Correspondence.exists_fun_mem_edge_iff, Correspondence.exists_orderEmbedding_mem_edge_iff, Correspondence.isFaithfulness_maxViol

Used in Phonology/OptimalityTheory/Correspondence/Deletion, Alderete2001, Casali1997, Pater2001, Storme2026

DEP counts the positions of form r₂ without a correspondent in form r₁.

def Correspondence.depViolL125–127
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ

Built from

Used by Correspondence.depViol_eq_zero_iff, Correspondence.depViolOn_true, Correspondence.depViolAt_true, Correspondence.depViol_of_diagonal, Correspondence.depViol_eq_zero_of_diagonal, Correspondence.depViol_identity, Correspondence.IsSymmetric.maxViol_eq, Correspondence.IsFaithful, Correspondence.isFaithfulness_depViol

Used in Phonology/OptimalityTheory/Correspondence/Deletion, Storme2026

MAX restricted to the positions of form r₁ that satisfy P, which is the form of a positional faithfulness constraint.

def Correspondence.maxViolAtL143–147
{Role : Type u_1} {α : Type u_2} (P : ℕ → Prop) [DecidablePred P] (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ

Built from

Used by Correspondence.maxViolAt_true, Correspondence.IsSymmetric.maxViolAt_eq

Used in Phonology/OptimalityTheory/Correspondence/Deletion, Phonology/OptimalityTheory/PositionalFaithfulness, Casali1997, Vago2017

DEP restricted to the positions of form r₂ that satisfy P.

def Correspondence.depViolAtL149–152
{Role : Type u_1} {α : Type u_2} (P : ℕ → Prop) [DecidablePred P] (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ

Built from

Used by Correspondence.depViolAt_true, Correspondence.depViolAt_swap, Correspondence.IsSymmetric.maxViolAt_eq, Correspondence.depViolAt_of_graph

Used in Phonology/OptimalityTheory/Correspondence/Deletion

IDENT on whole segments counts the corresponding pairs whose segments differ.

def Correspondence.identViolL154–156
{Role : Type u_1} {α : Type u_2} [DecidableEq α] (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ

Built from

Used by Correspondence.identViol_swap, Correspondence.identViol_eq_zero_of_diagonal, Correspondence.identViol_identity, Correspondence.IsSymmetric.identViol_eq, Correspondence.identViol_eq_zero_iff_of_graph, Correspondence.isFaithfulness_identViol

Used in Phonology/OptimalityTheory/Correspondence/Deletion

IDENT(F) for the feature proj counts the corresponding pairs that differ under proj.

def Correspondence.identViolFeatureL158–161
{Role : Type u_1} {α : Type u_2} {F : Type u_3} [DecidableEq F] (proj : α → F) (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ

Built from

Used by Correspondence.identViolFeature_eq_zero_of_diagonal, Correspondence.identViolFeature_identity, Correspondence.identViolFeature_of_diagonal

Used in Alderete2001, Benua1997, McCarthy2005

L163–167
L169–173
L175–179

I-CONTIG is violated once unless the domain of the relation is a contiguous substring of form r₁.

def Correspondence.contigIViolL181–185
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ
  • c.contigIViol r₁ r₂ = if List.IsChain (fun (a b : ℕ) => b = a + 1) ((Finset.image Fin.val (Finset.image Prod.fst (c.edge r₁ r₂))).sort fun (x1 x2 : ℕ) => x1 ≤ x2) then 0 else 1

Built from

O-CONTIG is violated once unless the range of the relation is a contiguous substring of form r₂.

def Correspondence.contigOViolL187–191
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ
  • c.contigOViol r₁ r₂ = if List.IsChain (fun (a b : ℕ) => b = a + 1) ((Finset.image Fin.val (Finset.image Prod.snd (c.edge r₁ r₂))).sort fun (x1 x2 : ℕ) => x1 ≤ x2) then 0 else 1

Built from

L-ANCHOR is violated once unless the leftmost positions correspond; it is vacuous when either string is empty.

def Correspondence.anchorLViolL193–198
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ
  • c.anchorLViol r₁ r₂ = if h : 0 < (c.form r₁).length ∧ 0 < (c.form r₂).length then if (⟨0, ⋯⟩, ⟨0, ⋯⟩) ∈ c.edge r₁ r₂ then 0 else 1 else 0

Built from

R-ANCHOR is violated once unless the rightmost positions correspond; it is vacuous when either string is empty.

def Correspondence.anchorRViolL200–206
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ
  • c.anchorRViol r₁ r₂ = if h : 0 < (c.form r₁).length ∧ 0 < (c.form r₂).length then if (⟨(c.form r₁).length - 1, ⋯⟩, ⟨(c.form r₂).length - 1, ⋯⟩) ∈ c.edge r₁ r₂ then 0 else 1 else 0

Built from

LINEARITY counts the pairs of correspondences (i₁, j₁) and (i₂, j₂) with i₁ < i₂ but j₂ < j₁.

def Correspondence.linearityViolL208–211
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ
  • c.linearityViol r₁ r₂ = {pq ∈ c.edge r₁ r₂ ×ˢ c.edge r₁ r₂ | pq.1.1 < pq.2.1 ∧ pq.2.2 < pq.1.2}.card

Built from

Used by Correspondence.linearityViol_eq_zero_iff, Correspondence.linearityViol_eq_zero_of_graph, Correspondence.IsFaithful, Correspondence.exists_orderEmbedding_mem_edge_iff

UNIFORMITY counts the positions of form r₂ with more than one correspondent in form r₁.

def Correspondence.uniformityViolL213–217
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ
  • c.uniformityViol r₁ r₂ = {j : Fin (c.form r₂).length | 1 < {p ∈ c.edge r₁ r₂ | p.2 = j}.card}.card

Built from

Used by Correspondence.uniformityViol_eq_zero_iff, Correspondence.uniformityViol_eq_zero_of_graph, Correspondence.IsFaithful, Correspondence.exists_orderEmbedding_mem_edge_iff

Used in Pater2001

INTEGRITY counts the positions of form r₁ with more than one correspondent in form r₂.

def Correspondence.integrityViolL219–223
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :
ℕ
  • c.integrityViol r₁ r₂ = {i : Fin (c.form r₁).length | 1 < {p ∈ c.edge r₁ r₂ | p.1 = i}.card}.card

Built from

Used by Correspondence.integrityViol_eq_zero_iff, Correspondence.integrityViol_eq_zero_of_graph, Correspondence.IsFaithful, Correspondence.exists_fun_mem_edge_iff, Correspondence.exists_orderEmbedding_mem_edge_iff

Vanishing characterizations

Each cardinal constraint vanishes iff the relation has the corresponding order-theoretic property: left-total, right-total, functional, injective, order-preserving.

L236–238
L240–241
L243–244
L246–247
L249–250
L252–254
L256–258
L260–266

Constructors

L278–281
L290–291
L293–294
L296–300
L302–307
L309–311
L313–316

The diagonal correspondence on every pair of roles satisfying hasEdge, empty elsewhere.

def Correspondence.diagramL318–323
{Role : Type u_1} {α : Type u_2} (form : Role → List α) (hasEdge : Role → Role → Prop) [DecidableRel hasEdge] :

The definition is too large to print here; read it in the source.

Built from

Used by Correspondence.diagram_form, Correspondence.diagram_edge, Correspondence.diagram_edge_pos, Correspondence.diagram_edge_neg, Correspondence.diagram_isSymmetric

L329
L331–332
L334–336
L338–340

The diagonal correspondence between two strings, truncated to the shorter.

def Correspondence.parallelL352–354
{α : Type u_2} (s₁ s₂ : List α) :

The definition is too large to print here; read it in the source.

Built from ,

Used by Correspondence.identity, Correspondence.parallel_isSymmetric, Correspondence.parallel_form_lhs, Correspondence.parallel_form_rhs, Correspondence.parallel_edge_diag, Correspondence.parallel_edge_lhs_rhs, Correspondence.parallel_edge_rhs_lhs

Used in Benua1997, Pater2001, Stojkovic2026

identity s is the fully faithful candidate, the diagonal correspondence of a string with itself.

def Correspondence.identityL356–358
{α : Type u_2} (s : List α) :

Built from , ,

Used by Correspondence.maxViol_identity, Correspondence.depViol_identity, Correspondence.identViol_identity, Correspondence.identViolFeature_identity, Correspondence.IsFaithfulness

Used in Pater2001, Storme2026

The input–base–reduplicant diagram with diagonal correspondence between each pair of distinct roles.

def Correspondence.reduplicationL360–363
{α : Type u_2} (input base reduplicant : List α) :

The definition is too large to print here; read it in the source.

Built from ,

Used by Correspondence.reduplication_isSymmetric, Correspondence.reduplication_form_input, Correspondence.reduplication_form_base, Correspondence.reduplication_form_reduplicant, Correspondence.reduplication_edge

Used in BerentEtAl2016, McCarthyPrince1995

L365–366
L368–370
L372
L374
L376–378
L405–414
L420
L422
L425–427
L429–430
L434–437

Faithfulness on the diagonal

MAX, DEP, and IDENT vanish on a diagonal edge between equal strings, as on the fully faithful candidate identity s.

L457–461
L463–467
L469–473
L475–479
L481–484
L486–489
L491–500
L502–505

Diagonal edges as zips

On a diagonal edge the i-th positions of the two strings correspond, so a feature family counts the offending pairs of their List.zip.

L530–548
L569–579

Symmetric correspondences

Read along the reverse edge of a symmetric correspondence, MAX is DEP and IDENT is unchanged.

L590–593
L595–596

Edges that are graphs

An edge is the graph of a map f from the positions of form r₁ to those of form r₂ when each position i corresponds to f i alone. Such an edge violates neither MAX nor INTEGRITY, DEP counts the positions off the range of f, and UNIFORMITY and LINEARITY hold when f is injective and monotone.

L618–619
L621–627
L629–633
L635–640
L642–645
L647–653

Faithfulness as order isomorphism

An edge is faithful when it has no MAX, DEP, INTEGRITY, UNIFORMITY, or LINEARITY violation, which are exactly the conditions under which it is the graph of an order isomorphism (isFaithful_iff_exists_orderIso).

structure Correspondence.IsFaithfulL659–667
{Role : Type u_1} {α : Type u_2} (c : Correspondence Role α) (r₁ r₂ : Role) :

Built from , , , , ,

Used by Correspondence.isFaithful_iff_exists_orderIso, Correspondence.length_eq_of_isFaithful

L669–680
L682–698
L719–722

Faithfulness and markedness constraints

A constraint over correspondences is faithfulness when the fully faithful candidate satisfies it, and markedness when it reads only the output string. The constraint counting the segments of the output is markedness and not faithfulness (exists_isMarkedness_not_isFaithfulness).

A constraint over binary correspondences is faithfulness when the fully faithful candidate identity s satisfies it.

def Correspondence.IsFaithfulnessL730–733
{α : Type u_2} (k : Constraint (Correspondence BinaryRole α)) :

Built from , ,

Used by Correspondence.isFaithfulness_maxViol, Correspondence.isFaithfulness_depViol, Correspondence.isFaithfulness_identViol, Correspondence.IsFaithfulness.not_antifaithful, Correspondence.exists_isMarkedness_not_isFaithfulness

Used in Alderete2001, RoseWalker2004

A constraint is markedness for the role out when it depends only on form out.

def Correspondence.IsMarkednessL735–737
{Role : Type u_1} {α : Type u_2} (out : Role) (k : Constraint (Correspondence Role α)) :

Built from

Used by Correspondence.isMarkedness_comap, Correspondence.isMarkedness_iff_exists_comap, Correspondence.exists_isMarkedness_not_isFaithfulness

Used in Alderete2001, RoseWalker2004