%unimsg 0 lang/ar/broken-plurals/v0 -- A fragment of the Arabic broken plural system, modelled as a GENERATOR -- plus RESIDUALS rather than as an enumeration of forms. -- -- The distinction matters: a materialised paradigm is a photograph of a -- theory at one moment, whereas rules plus exceptions ARE the theory, and a -- correction propagates instead of needing thousands of edits. -- -- Linguistic content is illustrative and needs review by a morphologist. -- The shape of the modelling is the point, not the data. uses { ling/ipa #sha256:6c82f1a9 } -- Patterns are templates: a formula from a consonantal root to a surface -- form. Inert data — nothing evaluates them at read time. patterns { fiʿāl { arab :فِعَال skeleton [ :C1, :I, :C2, :Ā, :C3 ] class :singular } fuʿul { arab :فُعُل skeleton [ :C1, :U, :C2, :U, :C3 ] class :plural kind :broken number :multitude triptote true } ʾafʿāl { arab :أَفْعَال skeleton [ :ʾ, :A, :C1, "∅", :C2, :Ā, :C3 ] -- ∅ is a math symbol, so quoted class :plural kind :broken number :paucity triptote true note "paucity sense weakly observed in modern usage" } mafāʿil { arab :مَفَاعِل class :plural kind :broken stem :quadriconsonantal triptote false } } -- Rules are general. A rule and an exception are the same kind of object: -- they differ only in how many lexemes they cover. rules [ | id singular plural conditions confidence | :r-001 -> @patterns.fiʿāl -> @patterns.fuʿul [ :sound-root ] 0.82 | :r-002 -> @faʿal -> @patterns.ʾafʿāl [ :sound-root ] 0.61 | :r-003 -> @fāʿil -> @fuʿʿāl [ :human, :agentive ] 0.74 ] -- Dimensions are declared value spaces with their own provenance, not bare -- strings. Without this, "formal" and "Formal" drift apart across thousands -- of entries and nothing can be computed. dimensions { register { values ordered [ :colloquial, :neutral, :formal, :literary ] note "competing 3-way and 5-way schemes exist; see mappings" } } lexemes { -- The regular case: the rule generates the plural, nothing is stipulated. kitāb { root [ :k, :t, :b ] arab :كِتَاب gloss en "book" template -> @patterns.fiʿāl plural derived-by -> @r-001 agree :fem.sg attest { src "Wright II", conf 0.99 } } -- A residual: two plurals differing by register, which no rule derives. ṭālib { root [ :ṭ, :l, :b ] arab :طَالِب gloss en "student" template -> @fāʿil -- NOTE: docs/08 and docs/09 write this as `plurals discriminated-by -- [ :register ] [ … ]`, which the grammar cannot express — annotations -- are bare words and take no arguments. The nested form below says the -- same thing and is arguably better modelling. plurals { discriminated-by [ :register ] rows [ | form via register freq | :طُلَّاب -> @fuʿʿāl :neutral 0.71 | :طَلَبَة -> @faʿala :formal 0.28 ] } } -- The plural selects the SENSE, not the other way round. Modelling this -- forced plurals onto senses rather than onto the lexeme. bayt { root [ :b, :y, :t ] arab :بَيْت weak :hollow-y senses { dwelling { gloss en "house", plural :بُيُوت, via -> @fuʿūl } verse { gloss en "verse of poetry", plural :أَبْيَات, via -> @patterns.ʾafʿāl } } } } -- Negative facts. Rules overgenerate, so a positive-only knowledge base -- silently becomes an overgenerating one. blocked [ | lexeme form reason | -> @lexemes.kitāb :كِتْبَان "derivable by r-002 but unattested" | -> @lexemes.ṭālib :طَوَالِب "blocked by the existing plurals above" ] -- Completeness must be stated. Open-world is usually right for language -- data, but leaving it implicit makes "the rule is wrong" indistinguishable -- from "we have not looked yet". coverage { world :open lexemes 3 estimated 15000 note "fragment only; see docs/09 for sizing" }