Variable assignments #
A variable assignment maps variables to values. Three registers share this file: total assignments (Tarski-style, [HK98], [HMT71]), partial assignments (variables may be unvalued, [Spe26], [BK01]), and plural assignments (sets of partial assignments — the information states of plural dynamic semantics, [vdB96], [Bra08], [HD20]).
Main definitions #
Assignment E: total assignmentsℕ → E, on the Heim–Kratzer ℕ-register.PartialAssign Var D: partial assignmentsVar → Flat D, ordered by extension, withPartialAssign.domainthe variables an assignment values andPartialAssign.single x dthe assignment valuingxalone.PluralAssign Var D: sets of partial assignments, withPluralAssign.valuethe values a variable takes across them, and the operators of Spector,PluralAssign.restrict,PluralAssign.SingularAtandPluralAssign.Singular, defined from it.
Main results #
PartialAssign.le_iff_eqOn_domain: one assignment extends another when it agrees with it on the other's domain.PartialAssign.covBy_iff_exists_update: one assignment covers another when it values exactly one more variable, the counterpart ofSet.covBy_iff_exists_insert.PluralAssign.singularAt_iff:PluralAssign.SingularAtas Spector states it.PluralAssign.singular_iff: a variable is singular when its value set is a nonempty subsingleton.
Notation #
g[n ↦ x]:Function.update g n x, the assignment modification of Heim and Kratzer, scoped toAssignment(open scoped Assignment).
Implementation notes #
PartialAssigntakes values inFlat D, the decidable counterpart of mathlib's partial valuesPart Dwith the same order (Flat.le_iff_ofOption_le):Part-valued partiality would forfeitDecidableEqon assignments, whichFinset-state systems (QBSML) anddecide-checked studies need. The pointwise order is extension,⊥is the assignment valuing nothing,g x = ⊥saysxis unvalued andg x = ↑dthat it has the valued; there is no wrapper predicate.- Update is mathlib's
Function.update;PartialAssign.updateonly fuses the coercion (cf.Finsupp.update), and its lemmas are one-step consequences of theFunction.update_*laws. - Random assignment
[x], relating assignments that agree offx, isDynamicSemantics.Update.randomAssignat the function-type register structure; it is not redefined here. - Use these names only for the variable-binding role — the state that
quantifiers
updateand free variables look up. Aℕ → Ethat is not variable-binding state (interpretation tables, lookup arrays) should stay a plain function type.
References #
- I. Heim, A. Kratzer, Semantics in Generative Grammar (1998)
- L. Henkin, J. D. Monk and A. Tarski, Cylindric algebras, part I (1971)
- B. Spector, Trivalence and transparency: A non-dynamic approach to anaphora (2026)
- D. Beaver, E. Krahmer, A Partial Account of Presupposition Projection (2001)
- M. H. van den Berg, Some aspects of the internal structure of discourse: the dynamics of nominal anaphora (1996)
- A. Brasoveanu, Donkey pluralities: plural information states versus non-atomic individuals (2008)
- D. T. T. Haug and M. Dalrymple, Reciprocity: Anaphora, scope, and quantification (2020)
Total assignments #
Assignment E is the type of total variable assignments, sending each index in ℕ to a value
in E: an entity for entity pronouns, a situation index for situation pronouns, a time for
temporal variables.
Equations
- Assignment E = (ℕ → E)
Instances For
g[n ↦ x] is the assignment sending n to x and agreeing with g elsewhere, the
assignment modification of Heim and Kratzer. It is notation for
Function.update g n x.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Partial assignments #
PartialAssign Var D is the type of partial assignments of values in D to variables in
Var: g x = ⊥ when g leaves x unvalued, and g ≤ h when h extends g.
Equations
- PartialAssign Var D = (Var → Flat D)
Instances For
h extends g exactly when the two agree on the domain of g.
h covers g exactly when h values one variable that g leaves unvalued and agrees with
g on all others.
g.update x d sends x to d and agrees with g elsewhere.
Equations
- g.update x d = Function.update g x ↑d
Instances For
Updating x to the value it already has leaves g unchanged.
Valuing an unvalued variable is a covering step of the extension order.
h covers g exactly when h updates g at a variable g leaves unvalued.
single x d sends x to d and leaves every other variable unvalued.
Equations
- PartialAssign.single x d = ⊥.update x d
Instances For
Plural assignments #
PluralAssign Var D is the type of plural assignments, sets of partial assignments: the
plural information states of van den Berg and the assignment sets of
Spector.
Equations
- PluralAssign Var D = Set (PartialAssign Var D)
Instances For
Values #
Restriction #
G.restrict x a is the set of assignments in G sending x to a, the $G_{x=a}$ of
Spector (§6.2).
Equations
- G.restrict x a = {g : PartialAssign Var D | g ∈ G ∧ g x = ↑a}
Instances For
In a nonempty restriction of G to x = a, the only value of x is a.
Singularity #
G.SingularAt x d says that d is the only value x takes in G; assignments leaving x
unvalued are allowed. This is singularity in the sense of Spector (§6.2), and
PluralAssign.singularAt_iff states it in Spector's form.
Equations
- G.SingularAt x d = (G.value x = {d})
Instances For
G.Singular x says that x takes exactly one value in G, the $\mathit{atomic}(x)$ of
Spector.
Equations
- G.Singular x = ∃ (d : D), G.SingularAt x d
Instances For
G.SingularAt x d holds exactly when some assignment in G sends x to d and every
assignment in G that values x sends it to d, as Spector states it.
x is singular in G exactly when it takes at least one value there and at most one.
x is singular in G at no more than one value.
A nonempty restriction of G to x = a assigns x uniquely to a.
The restriction of G to x = a assigns x uniquely to d exactly when it is nonempty
and d = a.