Haspelmath (2025): Roots and root classes in comparative grammar #
This file formalizes the definition of the root as a comparative concept in
[haspelmath-2025-root]. IsRootIn is definition (1): a contentful form (Form, a morph
with its meaning class) that occurs in a free form with no other contentful form, relative
to a fragment's free-form inventory. The qualifying clause separates roots from contentful
affixes (the Japanese causative -ase) and neoclassical combining forms (geo-), which
are morphological cores under the formal base definition of Morphology/Root/Basic.lean
but not roots; it admits bound roots (Sorbian žon-) and excludes free forms without a
lexical meaning (hello, fn. 10). Roots are concrete forms (§4), so the four Arabic forms
sharing the skeleton k-t-b are four roots (arabic_four_roots) and the German ablaut pair
lauf ~ lief two. RootClass.upos is (10), word classes as comparative concepts, and
RootClass.unmarkedFunction the prototypical combinations of (9).
§6 adopts the heterosemy view: hammer (noun) and hammer (verb) are two roots with one
shape (hammer_two_roots), related by the sister schemas of (21) (nounVerb, one
description over shared variables read through two subscriptings,
ConstructionMorphology.Schema.InstantiatesAt), which the pair instantiates
(hammer_sisters) and
hammer/dance does not.
Implementation notes #
Formpairs a substrateMorph, the shape side, with anOption RootClassstanding in for its meaning, which is all definition (1) and the lexical meaning of (11) need. Relatedness of meaning within a heterosemous root set is carried by the schema of (21), not by the forms.IsStemInis the stem definition of fn. 6, with the Latinlaud-ab-case.
References #
- [haspelmath-2025-root]
- [jackendoff-audring-2020]
Root classes (§5) #
Equations
- Haspelmath2025Root.instDecidableEqRootClass x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
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.
Instances For
Equations
(10): word classes as comparative concepts. A verb is an action-denoting root, a noun an object-denoting root, an adjective a property-denoting root.
Equations
Instances For
The discourse functions of (9).
- predication : DiscourseFunction
- reference : DiscourseFunction
- modification : DiscourseFunction
Instances For
Equations
- Haspelmath2025Root.instDecidableEqDiscourseFunction x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- One or more equations did not get rendered due to their size.
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
(9): the discourse function in which a root class needs no function indicator: no copula or verbalizer for action roots in predication, no nominalizer for object roots in reference, no relativizer or genitive for property roots in modification.
Equations
- Haspelmath2025Root.RootClass.action.unmarkedFunction = Haspelmath2025Root.DiscourseFunction.predication
- Haspelmath2025Root.RootClass.object.unmarkedFunction = Haspelmath2025Root.DiscourseFunction.reference
- Haspelmath2025Root.RootClass.property.unmarkedFunction = Haspelmath2025Root.DiscourseFunction.modification
Instances For
Definition (1) #
A form (§2, §4): a morph, the pairing of a shape with a meaning, recorded with its root
class when it denotes an action, an object or a property and none otherwise.
- shape : Morphology.Morph
The morph.
- meaning : Option RootClass
The root class the form denotes, if any.
Instances For
Equations
- Haspelmath2025Root.instDecidableEqForm.decEq { shape := a, meaning := a_1 } { shape := b, meaning := b_1 } = if h : a = b then h ▸ if h : a_1 = b_1 then h ▸ isTrue ⋯ else isFalse ⋯ else isFalse ⋯
Instances For
Equations
- Haspelmath2025Root.instReprForm = { reprPrec := Haspelmath2025Root.instReprForm.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
A form is contentful when it denotes an action, an object or a property (§2).
Equations
- f.IsContentful = (f.meaning ≠ none)
Instances For
Definition (1): a root is a contentful form that can occur as part of a free form without another contentful form.
Equations
- Haspelmath2025Root.IsRootIn freeForms f = (f.IsContentful ∧ ∃ w ∈ freeForms, f ∈ w ∧ ∀ g ∈ w, g ≠ f → ¬g.IsContentful)
Instances For
Equations
- Haspelmath2025Root.instDecidableIsRootIn freeForms f = Haspelmath2025Root.instDecidableIsRootIn._aux_1 freeForms f
A form is bound when it is not itself a free form (fn. 2).
Equations
- Haspelmath2025Root.IsBoundIn freeForms f = ([f] ∉ freeForms)
Instances For
Equations
- Haspelmath2025Root.instDecidableIsBoundIn freeForms f = Haspelmath2025Root.instDecidableIsBoundIn._aux_1 freeForms f
The shapes of the forms of a word, for the formal definitions of
Morphology/Root/Basic.lean.
Equations
- Haspelmath2025Root.shapes w = List.map Haspelmath2025Root.Form.shape w
Instances For
Fn. 6: a stem is a contiguous string of at least one root and possibly some affixes that can be combined with an affix.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Haspelmath2025Root.instDecidableIsStemIn words freeForms s = Haspelmath2025Root.instDecidableIsStemIn._aux_1 words freeForms s
Contentful affixes and combining forms (§2) #
The Japanese action root yom 'read'.
Equations
- Haspelmath2025Root.yom = { shape := Morphology.Morph.root "yom", meaning := some Haspelmath2025Root.RootClass.action }
Instances For
The Japanese causative suffix -ase, which denotes an action.
Equations
- Haspelmath2025Root.ase = { shape := Morphology.Morph.suff "ase", meaning := some Haspelmath2025Root.RootClass.action }
Instances For
The Japanese nonpast suffix -u.
Equations
- Haspelmath2025Root.u = { shape := Morphology.Morph.suff "u", meaning := none }
Instances For
The Japanese nonpast suffix -ru.
Equations
- Haspelmath2025Root.ru = { shape := Morphology.Morph.suff "ru", meaning := none }
Instances For
The Japanese free forms yom-u 'read' and yom-ase-ru 'make read'.
Equations
Instances For
The neoclassical combining form geo-.
Equations
- Haspelmath2025Root.geo = { shape := Morphology.Morph.root "geo", meaning := some Haspelmath2025Root.RootClass.object }
Instances For
The neoclassical combining form -logy.
Equations
- Haspelmath2025Root.logy = { shape := Morphology.Morph.root "logy", meaning := some Haspelmath2025Root.RootClass.object }
Instances For
The English interjection hello (fn. 10).
Equations
- Haspelmath2025Root.hello = { shape := Morphology.Morph.free "hello", meaning := none }
Instances For
The English object root hammer (12a).
Equations
- Haspelmath2025Root.hammerN = { shape := Morphology.Morph.root "hammer", meaning := some Haspelmath2025Root.RootClass.object }
Instances For
The English action root hammer (12b).
Equations
- Haspelmath2025Root.hammerV = { shape := Morphology.Morph.root "hammer", meaning := some Haspelmath2025Root.RootClass.action }
Instances For
The English plural suffix.
Equations
- Haspelmath2025Root.s = { shape := Morphology.Morph.suff "s", meaning := none }
Instances For
The English past suffix.
Equations
- Haspelmath2025Root.ed = { shape := Morphology.Morph.suff "ed", meaning := none }
Instances For
English free forms: geology, hello, and the hammer forms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
§2: geo- is contentful but only occurs with another contentful form, so it is not
a root, although it is a morphological core under the formal base definition.
The Sorbian object root žon- 'wife'.
Equations
- Haspelmath2025Root.žon = { shape := Morphology.Morph.root "žon", meaning := some Haspelmath2025Root.RootClass.object }
Instances For
The Sorbian nominative suffix.
Equations
- Haspelmath2025Root.a = { shape := Morphology.Morph.suff "a", meaning := none }
Instances For
The Sorbian genitive suffix.
Equations
- Haspelmath2025Root.y = { shape := Morphology.Morph.suff "y", meaning := none }
Instances For
The Sorbian accusative suffix.
Equations
- Haspelmath2025Root.uAcc = { shape := Morphology.Morph.suff "u", meaning := none }
Instances For
The Sorbian free forms žon-a, žon-y, žon-u (§3).
Equations
Instances For
Roots as concrete forms (§4) #
The German action root lauf 'run'.
Equations
- Haspelmath2025Root.lauf = { shape := Morphology.Morph.root "lauf", meaning := some Haspelmath2025Root.RootClass.action }
Instances For
The German ablaut root lief 'ran'.
Equations
- Haspelmath2025Root.lief = { shape := Morphology.Morph.root "lief", meaning := some Haspelmath2025Root.RootClass.action }
Instances For
The German first-singular suffix.
Equations
- Haspelmath2025Root.e = { shape := Morphology.Morph.suff "e", meaning := none }
Instances For
The German plural and participial suffix.
Equations
- Haspelmath2025Root.en = { shape := Morphology.Morph.suff "en", meaning := none }
Instances For
The German participial prefix.
Equations
- Haspelmath2025Root.ge = { shape := Morphology.Morph.pref "ge", meaning := none }
Instances For
The consonantal skeleton of a form: its shape with the vowels removed.
Equations
- Haspelmath2025Root.skeleton f = { segments := List.filter (fun (x : Char) => decide (x ∉ ['a', 'i', 'u'])) f.shape.form.toList }
Instances For
The Arabic action root katab 'wrote'.
Equations
- Haspelmath2025Root.katab = { shape := Morphology.Morph.root "katab", meaning := some Haspelmath2025Root.RootClass.action }
Instances For
The Arabic action root ktub 'write'.
Equations
- Haspelmath2025Root.ktub = { shape := Morphology.Morph.root "ktub", meaning := some Haspelmath2025Root.RootClass.action }
Instances For
The Arabic object root kaatib 'writer'.
Equations
- Haspelmath2025Root.kaatib = { shape := Morphology.Morph.root "kaatib", meaning := some Haspelmath2025Root.RootClass.object }
Instances For
The Arabic object root kitaab 'book'.
Equations
- Haspelmath2025Root.kitaab = { shape := Morphology.Morph.root "kitaab", meaning := some Haspelmath2025Root.RootClass.object }
Instances For
The Arabic first-plural suffix.
Equations
- Haspelmath2025Root.naa = { shape := Morphology.Morph.suff "naa", meaning := none }
Instances For
The Arabic first-plural prefix.
Equations
- Haspelmath2025Root.na = { shape := Morphology.Morph.pref "na", meaning := none }
Instances For
The Latin action root laud 'praise'.
Equations
- Haspelmath2025Root.laud = { shape := Morphology.Morph.root "laud", meaning := some Haspelmath2025Root.RootClass.action }
Instances For
The Latin imperfect suffix.
Equations
- Haspelmath2025Root.ab = { shape := Morphology.Morph.suff "ab", meaning := none }
Instances For
The Latin first-singular imperfect suffix.
Equations
- Haspelmath2025Root.am = { shape := Morphology.Morph.suff "am", meaning := none }
Instances For
The Latin first-singular present suffix.
Equations
- Haspelmath2025Root.o = { shape := Morphology.Morph.suff "o", meaning := none }
Instances For
The Latin forms laud-o 'I praise' and laud-ab-am 'I was praising'.
Equations
Instances For
Heterosemy (§6) #
Equations
- Haspelmath2025Root.instDecidableEqTier x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
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.
Instances For
Equations
- Haspelmath2025Root.instReprTier = { reprPrec := Haspelmath2025Root.instReprTier.repr }
Equations
- Haspelmath2025Root.instDecidableEqValue.decEq (Haspelmath2025Root.Value.meaning a) (Haspelmath2025Root.Value.meaning b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Haspelmath2025Root.instDecidableEqValue.decEq (Haspelmath2025Root.Value.meaning m) (Haspelmath2025Root.Value.category c) = isFalse ⋯
- Haspelmath2025Root.instDecidableEqValue.decEq (Haspelmath2025Root.Value.meaning m) (Haspelmath2025Root.Value.shape s) = isFalse ⋯
- Haspelmath2025Root.instDecidableEqValue.decEq (Haspelmath2025Root.Value.category c) (Haspelmath2025Root.Value.meaning m) = isFalse ⋯
- Haspelmath2025Root.instDecidableEqValue.decEq (Haspelmath2025Root.Value.category a) (Haspelmath2025Root.Value.category b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Haspelmath2025Root.instDecidableEqValue.decEq (Haspelmath2025Root.Value.category c) (Haspelmath2025Root.Value.shape s) = isFalse ⋯
- Haspelmath2025Root.instDecidableEqValue.decEq (Haspelmath2025Root.Value.shape s) (Haspelmath2025Root.Value.meaning m) = isFalse ⋯
- Haspelmath2025Root.instDecidableEqValue.decEq (Haspelmath2025Root.Value.shape s) (Haspelmath2025Root.Value.category c) = isFalse ⋯
- Haspelmath2025Root.instDecidableEqValue.decEq (Haspelmath2025Root.Value.shape a) (Haspelmath2025Root.Value.shape b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Equations
- Haspelmath2025Root.instReprValue = { reprPrec := Haspelmath2025Root.instReprValue.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
Tier values are discrete: a constant is dominated only by itself.
Equations
- One or more equations did not get rendered due to their size.
Equations
A tier description: a value, or ⊥ for an open variable.
Equations
Instances For
Equations
- Haspelmath2025Root.instDecidableEqRootVar x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
(21): the sister schemas X (noun) and X (verb) as one description over their
variables, the categories pinned, the meanings and the shared shape open.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The subscripting of the tiers of the noun schema by the variables of (21).
Equations
- Haspelmath2025Root.nounSub Haspelmath2025Root.Tier.semantics = Haspelmath2025Root.RootVar.nounMeaning
- Haspelmath2025Root.nounSub Haspelmath2025Root.Tier.morphosyntax = Haspelmath2025Root.RootVar.nounCategory
- Haspelmath2025Root.nounSub Haspelmath2025Root.Tier.phonology = Haspelmath2025Root.RootVar.shape
Instances For
The subscripting of the tiers of the verb schema by the variables of (21).
Equations
- Haspelmath2025Root.verbSub Haspelmath2025Root.Tier.semantics = Haspelmath2025Root.RootVar.verbMeaning
- Haspelmath2025Root.verbSub Haspelmath2025Root.Tier.morphosyntax = Haspelmath2025Root.RootVar.verbCategory
- Haspelmath2025Root.verbSub Haspelmath2025Root.Tier.phonology = Haspelmath2025Root.RootVar.shape
Instances For
(21a) X (noun): an object meaning related to X, a noun, with the open shape Y.
Equations
Instances For
(21b) X (verb): doing in relation to X, a verb, with the open shape Y.
Equations
Instances For
(20a): hammer (noun).
Equations
- Haspelmath2025Root.hammerNoun Haspelmath2025Root.Tier.semantics = ↑(Haspelmath2025Root.Value.meaning "HAMMER")
- Haspelmath2025Root.hammerNoun Haspelmath2025Root.Tier.morphosyntax = ↑(Haspelmath2025Root.Value.category Haspelmath2025Root.RootClass.object)
- Haspelmath2025Root.hammerNoun Haspelmath2025Root.Tier.phonology = ↑(Haspelmath2025Root.Value.shape "hæmər")
Instances For
(20b): hammer (verb).
Equations
- Haspelmath2025Root.hammerVerb Haspelmath2025Root.Tier.semantics = ↑(Haspelmath2025Root.Value.meaning "HIT (WITH SOMETHING LIKE HAMMER)")
- Haspelmath2025Root.hammerVerb Haspelmath2025Root.Tier.morphosyntax = ↑(Haspelmath2025Root.Value.category Haspelmath2025Root.RootClass.action)
- Haspelmath2025Root.hammerVerb Haspelmath2025Root.Tier.phonology = ↑(Haspelmath2025Root.Value.shape "hæmər")
Instances For
dance (verb), whose shape differs from hammer's.
Equations
- Haspelmath2025Root.danceVerb Haspelmath2025Root.Tier.semantics = ↑(Haspelmath2025Root.Value.meaning "DANCE")
- Haspelmath2025Root.danceVerb Haspelmath2025Root.Tier.morphosyntax = ↑(Haspelmath2025Root.Value.category Haspelmath2025Root.RootClass.action)
- Haspelmath2025Root.danceVerb Haspelmath2025Root.Tier.phonology = ↑(Haspelmath2025Root.Value.shape "dæns")
Instances For
The variables of (21) filled by the two hammer roots.
Equations
- Haspelmath2025Root.hammerRoots Haspelmath2025Root.RootVar.nounMeaning = Haspelmath2025Root.hammerNoun Haspelmath2025Root.Tier.semantics
- Haspelmath2025Root.hammerRoots Haspelmath2025Root.RootVar.nounCategory = Haspelmath2025Root.hammerNoun Haspelmath2025Root.Tier.morphosyntax
- Haspelmath2025Root.hammerRoots Haspelmath2025Root.RootVar.verbMeaning = Haspelmath2025Root.hammerVerb Haspelmath2025Root.Tier.semantics
- Haspelmath2025Root.hammerRoots Haspelmath2025Root.RootVar.verbCategory = Haspelmath2025Root.hammerVerb Haspelmath2025Root.Tier.morphosyntax
- Haspelmath2025Root.hammerRoots Haspelmath2025Root.RootVar.shape = Haspelmath2025Root.hammerNoun Haspelmath2025Root.Tier.phonology
Instances For
(20): the two hammer roots instantiate the sister schemas of (21) as a pair, their shapes filled alike; neither is derived from the other or from an abstract root.
hammer (noun) and dance (verb) instantiate the schemas but not as a pair: the
linked shapes differ.