Skip to content

Commit 54c8476

Browse files
committed
Add Krifka 2026 concept dref formalization; unify MassCount across static/dynamic semantics
1 parent db6a5df commit 54c8476

12 files changed

Lines changed: 757 additions & 45 deletions

File tree

Linglib.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,7 @@ import Linglib.Phenomena.Ellipsis.Studies.AnandHardtMcCloskey2021
713713
import Linglib.Phenomena.Ellipsis.Studies.GinzburgCooper2004
714714
import Linglib.Phenomena.Ellipsis.Studies.Landau2026
715715
import Linglib.Phenomena.Ellipsis.Studies.CitkoGracaninYuksek2025
716+
import Linglib.Phenomena.Ellipsis.Studies.Kalyakin2026
716717
import Linglib.Phenomena.Entailment.Basic
717718
import Linglib.Phenomena.Entailment.Monotonicity
718719
import Linglib.Phenomena.FillerGap.Basic
@@ -980,6 +981,7 @@ import Linglib.Phenomena.Reference.Studies.KehlerRohde2013
980981
import Linglib.Phenomena.Reference.Studies.RonderosEtAl2024
981982
import Linglib.Phenomena.Reference.Studies.RosaArnold2017
982983
import Linglib.Phenomena.Reference.Studies.SedivyEtAl1999
984+
import Linglib.Phenomena.Reference.Studies.Krifka2026
983985
import Linglib.Phenomena.ScalarImplicatures.Basic
984986
import Linglib.Phenomena.ScalarImplicatures.Studies.FrankeBergen2020
985987
import Linglib.Phenomena.ScalarImplicatures.Studies.BaleEtAl2025
@@ -1135,6 +1137,7 @@ import Linglib.Theories.Semantics.Dynamic.Core.DynamicTy2
11351137
import Linglib.Theories.Semantics.Dynamic.Core.Translation
11361138
import Linglib.Theories.Semantics.Dynamic.Core.WeakestPrecondition
11371139
import Linglib.Theories.Semantics.Dynamic.Core.Update
1140+
import Linglib.Theories.Semantics.Dynamic.Core.KindAnaphora
11381141
-- Theories: Dynamic Semantics — Frameworks
11391142
import Linglib.Theories.Semantics.Dynamic.FileChange.Basic
11401143
import Linglib.Theories.Semantics.Dynamic.UpdateSemantics.Basic
@@ -1234,6 +1237,7 @@ import Linglib.Theories.Syntax.Minimalism.Core.PConstraint
12341237
import Linglib.Theories.Syntax.Minimalism.Core.ObligatoryOperations
12351238
import Linglib.Theories.Syntax.Minimalism.Core.CaseDiscrimination
12361239
import Linglib.Theories.Syntax.Minimalism.Core.DependentCase
1240+
import Linglib.Theories.Syntax.Minimalism.Ellipsis.DeletionDomain
12371241
import Linglib.Theories.Syntax.Minimalism.Formal.Amalgamation
12381242
import Linglib.Theories.Syntax.Minimalism.Formal.Constraints.HMC
12391243
import Linglib.Theories.Syntax.Minimalism.Coreference

Linglib/Core/Lexical/Word.lean

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,18 @@ end Tense
9595
-- Types Without UD Equivalents
9696
-- ============================================================================
9797

98+
/-- Morphosyntactic mass/count feature. No direct UD equivalent.
99+
100+
A formal feature parallel to grammatical gender — not an ontological
101+
distinction. Determines kind-anaphor morphology: [MASS]*it*,
102+
[COUNT]*they*. Evidence: *pollen*[MASS]*it* vs
103+
*pollen grains*[COUNT]*they* for the same referent
104+
(@cite{krifka-2026} §2). -/
105+
inductive MassCount where
106+
| mass -- mass nouns: *mold*, *pollen*, *milk*, *gold*
107+
| count -- count nouns: *spider*, *pollen grain*, *dog*, *cup*
108+
deriving Repr, DecidableEq, BEq, Hashable
109+
98110
/-- Transitivity / argument structure. No direct UD equivalent. -/
99111
inductive Valence where
100112
| intransitive -- sleep, arrive
@@ -129,7 +141,7 @@ structure Features where
129141
voice : Option Voice := none
130142
vform : Option VForm := none
131143
tense : Option Tense := none
132-
countable : Option Bool := none -- for count vs mass nouns
144+
countable : Option MassCount := none -- for count vs mass nouns
133145
deriving Repr, DecidableEq
134146

135147
/-- A word: form + category + features. -/

Linglib/Fragments/English/Nouns.lean

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ structure NounEntry where
3131
formSg : String
3232
/-- Plural form (none for mass nouns) -/
3333
formPl : Option String := none
34-
/-- Is this a count noun? -/
35-
countable : Bool := true
34+
/-- Mass/count feature -/
35+
countable : MassCount := .count
3636
/-- Is this a proper name? -/
3737
proper : Bool := false
3838
deriving Repr, BEq
@@ -134,12 +134,12 @@ def horse : NounEntry := { formSg := "horse", formPl := "horses" }
134134
def brother : NounEntry := { formSg := "brother", formPl := "brothers" }
135135
def spy : NounEntry := { formSg := "spy", formPl := "spies" }
136136

137-
def water : NounEntry := { formSg := "water", formPl := none, countable := false }
138-
def sand : NounEntry := { formSg := "sand", formPl := none, countable := false }
139-
def furniture : NounEntry := { formSg := "furniture", formPl := none, countable := false }
140-
def rice : NounEntry := { formSg := "rice", formPl := none, countable := false }
141-
def gold : NounEntry := { formSg := "gold", formPl := none, countable := false }
142-
def air : NounEntry := { formSg := "air", formPl := none, countable := false }
137+
def water : NounEntry := { formSg := "water", formPl := none, countable := .mass }
138+
def sand : NounEntry := { formSg := "sand", formPl := none, countable := .mass }
139+
def furniture : NounEntry := { formSg := "furniture", formPl := none, countable := .mass }
140+
def rice : NounEntry := { formSg := "rice", formPl := none, countable := .mass }
141+
def gold : NounEntry := { formSg := "gold", formPl := none, countable := .mass }
142+
def air : NounEntry := { formSg := "air", formPl := none, countable := .mass }
143143

144144

145145
def john : NounEntry := { formSg := "John", formPl := none, proper := true }
@@ -194,7 +194,7 @@ def NounEntry.toStem {α : Type} (n : NounEntry) : Core.Morphology.Stem (α →
194194
, countable := if n.proper then none else some n.countable
195195
, person := if n.proper then some .third else none }
196196
, paradigm :=
197-
if n.countable && !n.proper then
197+
if n.countable == .count && !n.proper then
198198
let irregForm := n.formPl.bind λ pl =>
199199
if pl == n.formSg ++ "s" then none else some pl
200200
[Core.Morphology.Number.pluralNounRuleFlat (irregularForm := irregForm)]

Linglib/Phenomena/Focus/Studies/Rooth1992.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Linglib.Core.Discourse.InformationStructure
22
import Linglib.Theories.Semantics.Focus.Interpretation
33
import Linglib.Theories.Semantics.Questions.Denotation.Hamblin
4-
import Linglib.Theories.Semantics.Montague.Composition
4+
import Linglib.Theories.Semantics.Composition.Tree
55
import Linglib.Theories.Semantics.Montague.Derivation
66
import Linglib.Fragments.English.Nouns
77
import Linglib.Fragments.English.Predicates.Verbal
@@ -400,7 +400,7 @@ theorem bridge_qa_incongruent :
400400
run once per world to yield a world-indexed proposition. -/
401401

402402
open Semantics.Montague
403-
open Semantics.Montague.Composition
403+
open Semantics.Composition.Tree
404404

405405
/-- Entity domain for the focus model. -/
406406
inductive E where
@@ -539,7 +539,7 @@ theorem fragment_fred_proper : fred.proper = true := rfl
539539
theorem fragment_mary_proper : mary.proper = true := rfl
540540

541541
/-- "bean" is countable in the English fragment. -/
542-
theorem fragment_bean_countable : bean.countable = true := rfl
542+
theorem fragment_bean_countable : bean.countable = .count := rfl
543543

544544
/-- Fragment surface forms feed the Montague lexicon.
545545
The form field of each fragment entry matches a lexicon key. -/

Linglib/Phenomena/Morphology/CompositionBridge.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ theorem dog_pl_number :
9494
dogStem.paradigm.head?.map (·.featureRule dogStem.baseFeatures |>.number)
9595
= some (some UD.Number.Plur) := rfl
9696

97-
/-- Count nouns have `countable := some true`. -/
98-
theorem dog_countable : dogStem.baseFeatures.countable = some true := rfl
97+
/-- Count nouns have `countable := some .count`. -/
98+
theorem dog_countable : dogStem.baseFeatures.countable = some .count := rfl
9999

100100
-- ============================================================================
101101
-- §4: Mass Nouns — Empty Paradigms
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
import Linglib.Theories.Semantics.Dynamic.Core.KindAnaphora
2+
3+
/-!
4+
# Anaphora for Concepts, Kinds, and Parts
5+
@cite{krifka-2026}
6+
7+
Empirical data and verification theorems for @cite{krifka-2026}'s theory
8+
of concept discourse referents. Three types of anaphora are distinguished:
9+
10+
| Type | Pronoun | Picks up | Example |
11+
|------|---------|----------|---------|
12+
| Entity | *he/she/it* | individual dref | *A dog₃ came in. It₃ barked.* |
13+
| Concept | *one*, empty NP | concept dref | *John has a big dog₂. Mary has a small one₂.* |
14+
| Kind | *it*[MASS], *they*[COUNT] | concept dref → kind | *John owns a dog₂. They₂ are loyal.* |
15+
16+
## Key empirical claims
17+
18+
1. **Concept drefs project past anaphoric islands** — negation, modals,
19+
conditionals cannot trap concept drefs (unlike entity drefs)
20+
2. **Mass/count feature determines kind pronoun***it* for [MASS],
21+
*they* for [COUNT], independent of ontology
22+
3. **Kind anaphora ≠ concept anaphora** — kind anaphors derive kind
23+
individuals via ∩ (and ⊔ for count), concept anaphors reuse the property
24+
25+
## End-to-End Example
26+
27+
Section 3 constructs a concrete model of examples (44)–(45):
28+
29+
```
30+
John₁ doesn't own [DP a₃ [NP dog]₂].
31+
→ concept dref x₂ ('dog'[COUNT]) persists in output
32+
→ entity dref x₃ (the dog) is trapped under ¬∃
33+
He₁ is afraid of them₂,₄.
34+
→ kind anaphor picks up concept x₂ (accessible!)
35+
→ derives kind individual via ∩(⊔⟦dog⟧)
36+
```
37+
-/
38+
39+
namespace Phenomena.Reference.Studies.Krifka2026
40+
41+
open Semantics.Dynamic.Core (ConceptDRef DRefVal)
42+
open Semantics.Dynamic.Core.KindAnaphora
43+
44+
-- ════════════════════════════════════════════════════
45+
-- § 1. Kind Pronoun Selection
46+
-- ════════════════════════════════════════════════════
47+
48+
/-- Kind-anaphoric pronouns, selected by the [MASS]/[COUNT] feature. -/
49+
inductive KindPronoun where
50+
| it -- singular, selects [MASS] concepts
51+
| they -- plural, selects [COUNT] concepts
52+
deriving DecidableEq, Repr
53+
54+
/-- Select kind-anaphoric pronoun from the count feature.
55+
56+
@cite{krifka-2026} (17a,b):
57+
- ⟦it⟧ = λP[MASS] λi.∩P(i)
58+
- ⟦they⟧ = λP[COUNT] λi.∩⊔P(i) -/
59+
def selectPronoun : MassCount → KindPronoun
60+
| .mass => .it
61+
| .count => .they
62+
63+
/-- Example (7a): count noun antecedent → plural kind anaphor *them*.
64+
*John noticed a spider in the bathroom. He has a phobia against them / \*it.* -/
65+
theorem ex7a_count_them : selectPronoun .count = .they := rfl
66+
67+
/-- Example (7b): mass noun antecedent → singular kind anaphor *it*.
68+
*John noticed mold in the bathroom. He is allergic against it / \*them.* -/
69+
theorem ex7b_mass_it : selectPronoun .mass = .it := rfl
70+
71+
/-- Examples (8a,b): the same individuals (*pollen*[MASS] vs *pollen grains*[COUNT])
72+
select different pronouns based purely on the morphosyntactic feature.
73+
(8a) *There is a lot of pollen in the air. I am allergic against it / \*them.*
74+
(8b) *There are a lot of pollen grains in the air. I am allergic against them / ??it.* -/
75+
theorem ex8_feature_determines_pronoun :
76+
selectPronoun .mass ≠ selectPronoun .count := by decide
77+
78+
79+
-- ════════════════════════════════════════════════════
80+
-- § 2. Concept DRef Projection: Island Escaping
81+
-- ════════════════════════════════════════════════════
82+
83+
section IslandEscaping
84+
85+
variable {W E : Type*}
86+
87+
/-- Examples (5a,c), (25), (44–45): Concept drefs project past negation.
88+
89+
(5a) *John doesn't own a dog. He is afraid of them. But Mary owns one.*
90+
(5c) *John doesn't own a dog. \*It is friendly.*
91+
92+
In the DRT representation (25) and dynamic semantics (44–45), the concept
93+
dref x₂ for 'dog' is in the main box / presupposed in the input. After
94+
negation, x₂ persists (licensing *them₂*, *one₂*), but the entity dref
95+
x₃ is trapped under ¬∃ (blocking *\*it₃*). -/
96+
theorem dog_concept_survives_negation
97+
{dogConcept : ConceptDRef W E}
98+
{φ : DSent W E}
99+
{g h : HAssign W E}
100+
(hDog : g 2 = .concept dogConcept)
101+
(hNovel : g 3 = .undef)
102+
(hNeg : dNeg φ g h) :
103+
h 2 = .concept dogConcept ∧ h 3 = .undef :=
104+
concept_entity_asymmetry hDog hNovel hNeg
105+
106+
end IslandEscaping
107+
108+
109+
-- ════════════════════════════════════════════════════
110+
-- § 3. End-to-End: "John doesn't own a dog" (44–45)
111+
-- ════════════════════════════════════════════════════
112+
113+
section EndToEnd
114+
115+
/-- Concrete entity type for the worked example. -/
116+
inductive Ent where | john | mary
117+
deriving DecidableEq, Repr
118+
119+
/-- Concrete world type. A world where John doesn't own a dog. -/
120+
inductive Wld where | w₀
121+
deriving DecidableEq, Repr
122+
123+
/-- The concept 'dog' as a concept dref with [COUNT] feature.
124+
In this model, no entity satisfies the dog predicate (John doesn't own one). -/
125+
def dogConcept : ConceptDRef Wld Ent where
126+
property := λ _ _ => false -- no dogs in this model
127+
feature := .count
128+
129+
/-- Initial assignment for (44e): g₁=F(John), g₂=F(dog), F(C)(g₂).
130+
Following @cite{krifka-2026} (40g)/(44e): John's name presupposes
131+
dref 1 is anchored to John; the head noun *dog*₂ presupposes dref 2
132+
is anchored to the 'dog' concept with [COUNT] feature. -/
133+
def g₀ : HAssign Wld Ent := λ n =>
134+
match n with
135+
| 1 => .entity .john
136+
| 2 => .concept dogConcept
137+
| _ => .undef
138+
139+
/-- Sentence meaning for "own [DP a₃ [NP dog]₂]": introduces entity dref
140+
at index 3, constrained to satisfy the concept property at index 2. -/
141+
def ownADog : DSent Wld Ent := entityIntro 3 (λ g h =>
142+
g = h ∧ (g 2).liftConceptPred (λ c => c.property .w₀ (match g 3 with
143+
| .entity e => e | _ => .john)) = true)
144+
145+
/-- "John₁ doesn't own [DP a₃ [NP dog]₂]" as the negation of ownADog. -/
146+
def doesntOwnADog : DSent Wld Ent := dNeg ownADog
147+
148+
/-- The negation is satisfiable in this model (no dogs exist).
149+
Output: g₀ = h (test), confirming no entity dref was introduced. -/
150+
theorem negation_satisfiable :
151+
doesntOwnADog g₀ g₀ := by
152+
refine ⟨rfl, ?_⟩
153+
intro ⟨k, e, hBody⟩
154+
simp only [g₀, dogConcept, DRefVal.liftConceptPred] at hBody
155+
obtain ⟨hEq, hProp⟩ := hBody
156+
-- After update, g(2) = g₀(2) = .concept dogConcept, g(3) = .entity e
157+
-- The concept property returns false for all entities
158+
simp at hProp
159+
160+
/-- **Main result**: after "John doesn't own a dog", the concept dref
161+
for 'dog' at index 2 is accessible while the entity dref at index 3
162+
remains undefined. This is the concrete instantiation of the asymmetry
163+
predicted by @cite{krifka-2026} §4. -/
164+
theorem concrete_concept_entity_asymmetry :
165+
∀ h : HAssign Wld Ent,
166+
doesntOwnADog g₀ h →
167+
h 2 = .concept dogConcept ∧ h 3 = .undef :=
168+
λ _ hNeg => concept_entity_asymmetry rfl rfl hNeg
169+
170+
/-- The kind anaphor *them* selects [COUNT] for dogs, as expected. -/
171+
theorem dog_kind_pronoun : selectPronoun dogConcept.feature = .they := rfl
172+
173+
end EndToEnd
174+
175+
176+
-- ════════════════════════════════════════════════════
177+
-- § 4. Concept vs Kind Anaphora (19a,b)
178+
-- ════════════════════════════════════════════════════
179+
180+
/-- Anaphoric constructions that pick up concept drefs.
181+
182+
@cite{krifka-2026} §3 distinguishes concept anaphors (which reuse the
183+
property directly) from kind anaphors (which derive kind individuals
184+
via ∩). Both pick up concept drefs, but they do different things.
185+
186+
The distinction is testable via examples like (19a,b):
187+
(19a) *John didn't get a dog from the animal shelter downtown.
188+
He is afraid of them.* — kind anaphora (OK: dogs-as-kind)
189+
(19b) *John didn't get a dog from the animal shelter downtown.
190+
But Mary got one.* — concept anaphora (OK: a dog-from-the-shelter) -/
191+
inductive AnaphoricConstruction where
192+
| emptyNP -- *one*, empty NP: picks up concept property directly
193+
| emptyPP -- partitive *of them*: picks up concept for part-whole
194+
| kindPron -- *it*[MASS], *they*[COUNT]: derives kind via ∩(⊔)P
195+
deriving DecidableEq, Repr
196+
197+
/-- Whether a construction derives a kind individual or reuses the property. -/
198+
def derivesKind : AnaphoricConstruction → Bool
199+
| .kindPron => true
200+
| .emptyNP => false
201+
| .emptyPP => false
202+
203+
/-- Kind pronouns derive kinds; concept anaphors (*one*, empty NP/PP) don't.
204+
This distinction explains (19a) vs (19b): "dogs from the animal shelter"
205+
doesn't name a kind (cf. @cite{carlson-1977}), so kind anaphora yields the
206+
general dog-kind, while concept anaphora preserves the full NP property. -/
207+
theorem kind_vs_concept_distinction :
208+
derivesKind .kindPron = true
209+
derivesKind .emptyNP = false
210+
derivesKind .emptyPP = false :=
211+
⟨rfl, rfl, rfl⟩
212+
213+
end Phenomena.Reference.Studies.Krifka2026

Linglib/Theories/Interfaces/SyntaxSemantics/Borer2005.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ distinction and cross-linguistic variation:
490490
491491
| Dimension | @cite{chierchia-1998} | @cite{borer-2005} |
492492
|------------------|--------------------------|-------------------------|
493-
| Mass/count | Lexical (`NounType`) | Structural (`Div`) |
493+
| Mass/count | Lexical (`MassCount`) | Structural (`Div`) |
494494
| Cross-ling. | Parameter (`NominalMapping`)| Functional inventory |
495495
| "beer" → count | Not predicted | `Div(√BEER)` |
496496
| Classifier langs | `[+arg, -pred]` parameter | Overt CL# at Q |

0 commit comments

Comments
 (0)