Dalrymple & Kaplan 2000: Feature Indeterminacy and Feature Resolution #
Set-valued syntactic features, against atomic-value-plus-equality. Two phenomena, one representational move (§4, eq. 25: "Sets encode indeterminate feature possibilities"):
- Indeterminacy (distributive features: case, noun class, vform): a syncretic form
bears a set of atomic values — German was
{NOM, ACC}— and contextual requirements are membership assertions (ACC ∈ (↑ OBJ CASE)), not equalities. The paper refutes the two obvious alternatives: disjunctive specification DNF-collapses into a homophone listing (§3.1), and underspecification both derivesNOM = ACCby transitivity of equality and overgenerates dative contexts (§3.2). - Resolution (nondistributive features: person, gender): a coordinate phrase's
person/gender is the union of its conjuncts' marker sets (§6, §7) — person values
are subsets of
{S, H}({S}1exc,{S,H}1inc,{H}2nd,{}3rd), and the union analysis predicts the full Fula paradigm (87–88), the collapsed English/Spanish/Slovak system (91–92), and the gender tables of Hindi (112), Icelandic (120), and Slovene with the conjunction contributingF(126–127).
The deliberate sharp line (§8): resolving features are never indeterminate —
Hindi wah is masc-or-fem by wide-scope disjunction (ambiguity), not by a set
value, which is why *wah arrived.MASC and arrived.FEM fails (128).
This is the flagship counterexample to treating the flat information order
(the subsumption/unification substrate at the end of this file) as
linguistically definitional: indeterminate
agreement is an annotation-level phenomenon demanding non-flat (set-valued) slots.
toIndet below certifies the relationship — the flat order embeds into the
(superset-ordered) indeterminacy lattice as the determinate fragment, with ⊥
(no information) mapping to the universal set.
Formal highlights replicated as theorems: the German/Polish contrast set
((17)/(28) vs (32); (40) vs (41)), the §3 refutations, verb-side indeterminacy
(Xhosa (56), Chicheŵa (59), German kaufen (62)), the resolution tables, the
minimal-model derivation of José y tu (96–97), the Sag-et-al intersection
refutation (§6.5, (100)–(101) vs Fula), and the De Morgan duality (102–103) — which
is mathlib's Finset.compl_union. The person-marker sets also project onto the
binary person decomposition of Features/Person.lean, with the inclusive/exclusive
collapse made explicit.
§4: indeterminate values are sets; checking is membership #
An indeterminate feature value: the set of atomic values the form can realize (eq. 25). Singleton = determinate.
Equations
- DalrympleKaplan2000.IndetVal α = Finset α
Instances For
Contextual requirement (eq. 27): the required atom is a member of the value set.
Equations
- DalrympleKaplan2000.requires c v = (c ∈ v)
Instances For
German relative pronouns (26): wer nominative, was syncretic, wem dative.
Equations
Instances For
Equations
Instances For
Equations
Instances For
Polish (40)/(41): kogo {ACC, GEN} survives coordination of an ACC-taking and a
GEN-taking verb; co {NOM, ACC} does not.
Equations
Instances For
Equations
Instances For
§3: why the rival accounts fail #
An atomic-value account: one case value checked by equality against every requirement.
Equations
- DalrympleKaplan2000.atomicSatisfies x reqs = ∀ r ∈ reqs, x = r
Instances For
§3.2 (eq. 24): no single atomic value satisfies both verbs of (17) — transitivity
of equality would force NOM = ACC.
§3.1 (18)–(21): disjunctive specification means choosing one disjunct per
utterance — and every choice from {NOM, ACC} fails one of the two requirements.
The set-based account (was_satisfies_both) succeeds where every disjunctive
resolution fails: that contrast is the paper's argument.
§4.4: indeterminate requirements (verb-side sets) #
Xhosa (54)–(56): zibomvu requires its subject's noun class to be in {7/8, 9/10}
(classes as their singular-class numbers), so class-7/8 izandla and class-9/10
neendlebe conjuncts each satisfy it.
German (60)–(63): kaufen imposes (↑ SUBJ PERSON) ∈ {1, 3}; right-node raising
over a 1-person and a 3-person subject satisfies the requirement in each conjunct.
Equations
Instances For
The refinement certificate: the flat order is the determinate fragment #
The flat slot order (this file's subsumption substrate below) embeds into the
indeterminacy lattice: a determinate commitment ↑x is the singleton {x}, and no
information (⊥) is the universal set (any realization possible). Information
increases as sets shrink, so the embedding is order-reversing into ⊆ — i.e. an
embedding into the superset order. Set-valued slots are a refinement of the flat
layer, not a rival to it.
A flat slot as an indeterminate value: ⊥ = no commitment = anything goes.
Equations
- DalrympleKaplan2000.toIndet none = Finset.univ
- DalrympleKaplan2000.toIndet (some x_1) = {x_1}
Instances For
§§5–6: feature resolution — person as marker sets, resolution as union #
Equations
- DalrympleKaplan2000.instDecidableEqMarker x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- DalrympleKaplan2000.instReprMarker = { reprPrec := DalrympleKaplan2000.instReprMarker.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
Instances For
Fula's four-way system (87): full use of the marker inventory.
Equations
Instances For
Equations
Instances For
Equations
Instances For
Resolution is union (77, 93): "the person feature of a coordinate structure is resolved to be the UNION of the person features of the conjuncts".
Equations
- DalrympleKaplan2000.resolve p q = p ∪ q
Instances For
English/Spanish/Slovak collapse the inclusive/exclusive distinction (§6.2): all
first person is {S, H} — preserving only attested syntactic distinctions at the
cost of the referential correlation (Aronoff's impersonal you, French on).
Instances For
Equations
Instances For
The substrate bridge: Person.resolve is marker-set union #
The marker sets of the canonical quadripartition values — the Fula
encoding (87). Plain first underdetermines clusivity (their §6.2
English collapse picks {S, H} by stipulation), and zero is
outside the system, so both map to none.
Equations
- DalrympleKaplan2000.markerSetOf Person.firstExclusive = some DalrympleKaplan2000.fula1exc
- DalrympleKaplan2000.markerSetOf Person.firstInclusive = some DalrympleKaplan2000.fula1inc
- DalrympleKaplan2000.markerSetOf Person.second = some DalrympleKaplan2000.fula2
- DalrympleKaplan2000.markerSetOf Person.third = some DalrympleKaplan2000.fula3
- DalrympleKaplan2000.markerSetOf x✝ = none
Instances For
The substrate's canonical resolution is the paper's union (77)/(93):
on the quadripartition, Person.resolve commutes with the marker
encoding — the same grounding Person.resolve_profile states
intrinsically, here in the paper's own vocabulary.
Two markers bound the system (§6.3): at most four person values are expressible, matching the maximally differentiated (Fula-type) inventory.
§6.5: union vs intersection — Sag et al. refuted, De Morgan vindicated #
Sag et al. 1985's marker sets (100): first = {}, second = {XSP},
third = {XSP, THP}, resolution by intersection. Reusing our two markers for
their two.
Equations
Instances For
Equations
Instances For
Instances For
The refutation (§6.5): with first person as ∅, intersection makes you and I
and Bill and I indistinguishable — "it is in principle impossible to distinguish
different kinds of coordination involving a first person pronoun", so Fula's
inclusive/exclusive contrast is underivable. Union keeps them apart.
The De Morgan duality (102)–(103): any union analysis transforms into an
equivalent intersection analysis over complement sets (markers reread as
absences). The paper's observation is mathlib's Finset.compl_union.
§7: gender resolution by the same mechanism #
Equations
- DalrympleKaplan2000.instDecidableEqGMark x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- DalrympleKaplan2000.instReprGMark = { reprPrec := DalrympleKaplan2000.instReprGMark.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
Instances For
Icelandic (119): masc {M}, fem {F}, neut {M, F} — like genders preserved,
any mixture resolves neuter (118/120).
Slovene (122)/(126)–(127): masc {F, N}, fem {F}, neut {N}, and the
conjunction itself contributes F ∈ (↑ GENDER) — deriving the surprising
NEUT & NEUT = MASC (123)–(124).
Equations
- DalrympleKaplan2000.slovResolve p q = p ∪ q ∪ {DalrympleKaplan2000.GMark.F}
Instances For
Bridge: marker sets project onto the binary person decomposition #
Features/Person.lean's two-boolean decomposition (hasAuthor, hasParticipant) is
the image of the marker-set representation: S ∈ p is authorship, membership of
either marker is participanthood. The map collapses exactly the inclusive/exclusive
distinction — Fula's {S} and {S, H} land on the same binary value — which is the
formal content of §6.2's "fewer pronominal distinctions".
Project a marker set onto the binary decomposition.
Equations
- DalrympleKaplan2000.toBinary p = { hasParticipant := decide (DalrympleKaplan2000.Marker.S ∈ p ∨ DalrympleKaplan2000.Marker.H ∈ p), hasAuthor := decide (DalrympleKaplan2000.Marker.S ∈ p) }
Instances For
BundleLike with Finset slots: the generic substrate accommodates indeterminacy #
A multi-feature indeterminacy bundle is just a Pi type with Finset slots,
ordered superset-first (more determinate = smaller set). BundleLike's
slot type family S : F → Type* (parameter S carrying its own
order) covers this case without any new generic machinery: S t := (Finset (V t))ᵒᵈ. The BundleLike.Subsumes order then reads, per slot,
b₁ t ≤ b₂ t in the order dual — i.e. (b₂ t).1 ⊆ (b₁ t).1 — which is
exactly the §4 (eq. 25) information-as-set-of-possibilities convention.
This is the structural payoff: a feature-space tweak (Finset slots instead of Flat slots), not a re-development of the lattice theory.
An indeterminacy bundle: each slot holds a Finset of possible
atomic values, ordered superset-first via Finset's order dual.
Equations
- DalrympleKaplan2000.IndetBundle F V = ((t : F) → (Finset (V t))ᵒᵈ)
Instances For
Equations
- DalrympleKaplan2000.IndetBundle.instBundleLikeOrderDualFinset = { val := fun (b : DalrympleKaplan2000.IndetBundle F V) => b }
Concrete witness: a 1-feature Case-indeterminacy bundle. We
exhibit two bundles — was {NOM, ACC} and wer {NOM} — and confirm
that wer subsumes (is more determinate than) was, via the
generic BundleLike.Subsumes.
A single-feature Case bundle.
Equations
- DalrympleKaplan2000.CaseBundle = DalrympleKaplan2000.IndetBundle Unit fun (x : Unit) => Case
Instances For
Equations
- DalrympleKaplan2000.wasBundle x✝ = OrderDual.toDual DalrympleKaplan2000.was
Instances For
Equations
- DalrympleKaplan2000.werBundle x✝ = OrderDual.toDual DalrympleKaplan2000.wer
Instances For
wer {NOM} is more determinate than was {NOM, ACC}: their
subsumption in the generic BundleLike order matches set-superset on
the slot.
Subsumption and unification on UD.MorphFeatures #
The information ordering of unification-based grammar ([Shi86] §3.2), on
UD.MorphFeatures — the depth-1, reentrancy-free fragment of Shieber's feature
structures. Every feature here is atomic-valued, so paths are single features, the
reentrancy clause of subsumption is vacuous, and the definition (§3.2.2: D ⊑ D′ iff
D(l) ⊑ D′(l) for all l ∈ dom(D); "an atomic feature structure neither subsumes nor
is subsumed by a different atomic feature structure"; "variables subsume all other
feature structures") reduces to the product of flat orders. Subsumption is registered
as ≤ (Shieber's ⊑); the all-none bundle — Shieber's variable [ ] — is ⊥.
Unification (§3.2.3) is "the most general feature structure D such that D′ ⊑ D and
D′′ ⊑ D", failing on conflict: MorphFeatures.unify returns some exactly on
Compatible (= bounded above) inputs, and its result is the least upper bound
(unify_isLUB). The example laws of §3.2.3 are theorems: unification is idempotent
(unify_self), commutative (unify_comm), and variables are identity elements
(bot_unify).
Main declarations #
instance : PartialOrder UD.MorphFeatures— subsumption ("only a partial order", §3.2.3), with decidable≤.instance : OrderBot UD.MorphFeatures— the empty bundle is bottom.instance : SemilatticeInf UD.MorphFeatures— the meet is Shieber's generalization (anti-unification): total, unlike the join.UD.MorphFeatures.Compatible— boundedness above (BddAbove {f, g}), decidable via theBoolcheck (compatible_iff_bddAbove).unify_isLUB,unify_eq_some_iff_isLUB,unify_comm,unify_assoc,unify_self,bot_unify/unify_bot,unify_mono— the §3.2.3 laws plus associativity and guarded monotonicity.
Theory-neutrality boundary #
Three strata with different statuses: the record is annotation consensus
(Data/UD/Basic.lean); the order ≤ is shared substrate every framework consumes
its own way (DM's matching clause, underspecification, syncretism down-sets); the
operations ⊔/⊓ are commitments of the unification tradition — [Shi86]
§3.1 states unification-as-sole-combinator as a design constraint, and rival
frameworks combine differently (DM matches and competes; Minimalist Agree values
asymmetrically). This file is not that tradition's headquarters: unification-based
grammar (PATR, HPSG, LFG — reentrant feature structures, phrasal combination) is a
syntax family whose substrate belongs in Syntax/ when consuming studies demand it.
What lives here is only the tradition's morphological-bundle fragment — the algebra
of one token's Feats column — which it shares with rivals: at the level of claims
about morphological feature combination this file is a sibling of
DistributedMorphology/ and
Nanosyntax/, not a foundation beneath them.
Implementation notes #
Morphology owns the bundle algebra: MorphFeatures is the token's morphology (UD's
Feats column), and unification at the ms-word level is the morphology/syntax interface
operation. The matching clause of DM's Subset Principle (an exponent is insertable
iff exponent.features ≤ morpheme.features) could consume ≤ directly, but the
existing Morphology/DistributedMorphology/VocabularyInsertion.lean matches by
List-subset on [BEq F]
rather than MorphFeatures.≤; bridging is left for a future PR. The competition
clause — most-specified-wins — is separate argmax machinery already implemented in
that same file. (Nanosyntax's Superset Principle is not a consumer: it matches by
containment of syntactic trees, see Nanosyntax/TreeSpellout.lean's NanoTree.contains,
not by an order on flat bundles.) Lives apart from Data/UD/Basic.lean so the
(heavily imported) standard mirror stays mathlib-free — this file is the one that
pays for Mathlib.Order — and it is the canonical home for order instances on
UD.MorphFeatures.
The non-distributivity of the subsumption lattice is a documented
obstruction (Flat.unify_distinct_eq_none): any ≥3-value slot
(here, Case) makes the per-slot lattice the diamond Mₙ, modular but
not distributive ([Car92] p. 15, eq. (4), notes this
explicitly: "our partial orders are not required to be distributive
(and in fact, are not even required to be modular)"). This matters for
generalization-then-unification reorderings in paradigm-induction
learners.
The flat order on one feature slot #
The slot-level subsumption relation ([Shi86] §3.2.2: ⊥ below
everything, distinct atoms incomparable) is the order of Flat
(Linglib/Core/Order/Flat.lean), whose
PartialOrder/OrderBot/SemilatticeInf/PartialUnify instances
supply the per-slot steps of the bundle-level proofs below.
The 14-case feature-type index for MorphFeatures — the signature
of UD's Feats column treated as a fixed finite type family.
- number : MorphFeatureType
- gender : MorphFeatureType
- case_ : MorphFeatureType
- definite : MorphFeatureType
- degree : MorphFeatureType
- pronType : MorphFeatureType
- reflex : MorphFeatureType
- person : MorphFeatureType
- verbForm : MorphFeatureType
- tense : MorphFeatureType
- aspect : MorphFeatureType
- mood : MorphFeatureType
- voice : MorphFeatureType
- polarity : MorphFeatureType
Instances For
Equations
- UD.instDecidableEqMorphFeatureType x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- UD.instReprMorphFeatureType = { reprPrec := UD.instReprMorphFeatureType.repr }
Equations
- One or more equations did not get rendered due to their size.
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.number prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.number")).group prec✝
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.gender prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.gender")).group prec✝
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.case_ prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.case_")).group prec✝
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.degree prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.degree")).group prec✝
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.reflex prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.reflex")).group prec✝
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.person prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.person")).group prec✝
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.tense prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.tense")).group prec✝
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.aspect prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.aspect")).group prec✝
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.mood prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.mood")).group prec✝
- UD.instReprMorphFeatureType.repr UD.MorphFeatureType.voice prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "UD.MorphFeatureType.voice")).group prec✝
Instances For
Equations
- UD.instFintypeMorphFeatureType = { elems := { val := ↑UD.MorphFeatureType.enumList, nodup := UD.MorphFeatureType.enumList_nodup }, complete := UD.instFintypeMorphFeatureType._proof_1 }
Per-slot value space. The reflex slot is privative (Unit); all
other slots take their concrete UD enum.
Equations
- UD.MorphFeatureType.number.Val = UD.Number
- UD.MorphFeatureType.gender.Val = UD.Gender
- UD.MorphFeatureType.case_.Val = UD.Case
- UD.MorphFeatureType.definite.Val = UD.Definite
- UD.MorphFeatureType.degree.Val = UD.Degree
- UD.MorphFeatureType.pronType.Val = UD.PronType
- UD.MorphFeatureType.reflex.Val = Unit
- UD.MorphFeatureType.person.Val = UD.Person
- UD.MorphFeatureType.verbForm.Val = UD.VerbForm
- UD.MorphFeatureType.tense.Val = UD.Tense
- UD.MorphFeatureType.aspect.Val = UD.Aspect
- UD.MorphFeatureType.mood.Val = UD.Mood
- UD.MorphFeatureType.voice.Val = UD.Voice
- UD.MorphFeatureType.polarity.Val = UD.Polarity
Instances For
Equations
- UD.MorphFeatureType.number.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_1
- UD.MorphFeatureType.gender.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_3
- UD.MorphFeatureType.case_.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_5
- UD.MorphFeatureType.definite.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_7
- UD.MorphFeatureType.degree.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_9
- UD.MorphFeatureType.pronType.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_11
- UD.MorphFeatureType.reflex.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_13
- UD.MorphFeatureType.person.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_15
- UD.MorphFeatureType.verbForm.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_17
- UD.MorphFeatureType.tense.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_19
- UD.MorphFeatureType.aspect.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_21
- UD.MorphFeatureType.mood.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_23
- UD.MorphFeatureType.voice.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_25
- UD.MorphFeatureType.polarity.instDecidableEqVal = UD.MorphFeatureType.instDecidableEqVal._aux_27
Subsumption is a partial order with bottom #
MorphFeatures as a feature bundle, and the derived order #
MorphFeatures realizes BundleLike over the 14-case signature
MorphFeatureType ([Car92]'s abstract feature structure): each
slot projects to a Flat value, with the reflex flag normalized
false ↦ none, true ↦ some () (the privative Unit case). The
valuation is injective, so MorphFeatures is LawfulBundleLike, and the
subsumption order is the per-slot Flat order pulled back along val
(subsumes_iff_val_le) — the PartialOrder/OrderBot laws derive from
the bundle embedding rather than being proved field by field.
The valuation: project each slot as a Flat value, normalizing
reflex : Bool to a privative Flat Unit.
Equations
- f.val UD.MorphFeatureType.number = f.number
- f.val UD.MorphFeatureType.gender = f.gender
- f.val UD.MorphFeatureType.case_ = f.case_
- f.val UD.MorphFeatureType.definite = f.definite
- f.val UD.MorphFeatureType.degree = f.degree
- f.val UD.MorphFeatureType.pronType = f.pronType
- f.val UD.MorphFeatureType.reflex = if f.reflex = true then ↑() else ⊥
- f.val UD.MorphFeatureType.person = f.person
- f.val UD.MorphFeatureType.verbForm = f.verbForm
- f.val UD.MorphFeatureType.tense = f.tense
- f.val UD.MorphFeatureType.aspect = f.aspect
- f.val UD.MorphFeatureType.mood = f.mood
- f.val UD.MorphFeatureType.voice = f.voice
- f.val UD.MorphFeatureType.polarity = f.polarity
Instances For
Equations
The valuation is injective: a MorphFeatures bundle is determined by
its per-slot assignments (with reflex reconstructed from Option Unit).
Equations
- One or more equations did not get rendered due to their size.
Equations
- f.instDecidableSubsumes g = id inferInstance
Subsumption is decidable (each slot is).
Equations
- f.instDecidableLe g = f.instDecidableSubsumes g
The empty bundle — Shieber's variable [ ] — is bottom: "variables subsume all
other feature structures … they contain no information at all" (§3.2.2).
Equations
- UD.MorphFeatures.instOrderBot = { bot := { }, bot_le := UD.MorphFeatures.instOrderBot._proof_1 }
Compatibility is boundedness above; unification is the least upper bound #
Prop-native compatibility: the pair is bounded above in the subsumption
order — mathlib's BddAbove, so the bounds API applies directly. Characterized by
the executable compatible check via compatible_iff_bddAbove, which also makes
it decidable.
Equations
- f.Compatible g = BddAbove {f, g}
Instances For
The left input subsumes the merge.
The right input subsumes the merge — given compatibility (the doubly committed slots agree, so the left bias is harmless).
The merge is below every common upper bound — minimality ("the most general feature structure", §3.2.3).
Bounded above implies the executable check passes.
The Bool check is exactly boundedness above in the subsumption order: the
order-theoretic identity of "compatible".
Equations
- f.instDecidableCompatible g = decidable_of_iff (f.compatible g = true) ⋯
Unification succeeds exactly on compatible inputs (§3.2.3: otherwise it "fails").
Unification is the least upper bound ([Shi86] §3.2.3: "the most general
feature structure D such that D′ ⊑ D and D′′ ⊑ D").
Generalization: the meet #
Shieber's generalization (anti-unification): the most specific bundle subsumed by
both inputs. Unlike unification it is total — the meet always exists — so
MorphFeatures is a genuine SemilatticeInf with ⊥.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Unification computes least upper bounds — further laws #
MorphFeatures carries the pairwise-LUB structure of [Car92]'s
bounded complete partial order: unify is the partial join, with
unify_isLUB and compatible_iff_bddAbove supplying the two class
axioms. The unification laws — commutativity, associativity (with
failure propagating), ⊥-identity, idempotence, monotonicity — are
inherited as one-line corollaries of the generic theorems in
Core/Order/PartialUnify.lean.
Equations
- UD.MorphFeatures.instPartialUnify = { unify := UD.MorphFeatures.unify, isLUB_of_unify_eq_some := ⋯, isSome_unify_of_bddAbove := @UD.MorphFeatures.instPartialUnify._proof_1 }
The instance-projected unify is the same function as
MorphFeatures.unify.
Unification succeeds with value u exactly when u is the least upper bound.
Unification is commutative — a consequence of total compatibility: doubly committed slots agree, so the per-field left bias washes out.
Unification is idempotent (§3.2.3's example law).
Variables are unification identity elements (§3.2.3's example law): unifying with the empty bundle returns the other input.
Unification is associative, with failure propagating ([Shi86] §3.2.3's order-independence): both associations compute the lub of all three bundles.
The empty bundle is a right identity for unification.
Unification fails exactly on incompatible inputs.
Unification is monotone where defined: shrinking both inputs preserves success and
shrinks the output. (Unguarded merge-monotonicity is false — the guard is needed.)