Skip to content

Commit 4733b60

Browse files
committed
Add ter- three-way classification and passive type system for Indonesian fragment
1 parent fa980c7 commit 4733b60

10 files changed

Lines changed: 551 additions & 18 deletions

File tree

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## [0.229.172] - 2026-03-12
4+
5+
### Added
6+
- **TerClass (Predicates.lean)**: Three-way *ter-* classification from Sneddon 1996 §1.265–1.275 — stative (result state, no agent), accidental (nonvolitional action), abilitative (circumstantial possibility). Semantic bridges to `Volitionality` and suffix retention. Three new verbs: *tulis* (stative), *bawa* (accidental), *dengar* (abilitative). 27 verification theorems including cross-source bridge connecting B&U root classes to Sneddon ter- classes.
7+
- **Passive type system (VoiceSystem.lean)**: Two passive types from Sneddon §3.27–3.32 — type one (*di-*verb + *oleh* + agent) and type two (agent + bare verb). `AgentDP` classification with Box A/Box B selection rules, `VoicePrefixConstraint` for *ter-* override (§3.32 forces type one for all agents). 10 theorems including universal quantifier proofs.
8+
- **Morphophonology.lean**: Fix `String.data` → `String.toList` deprecation
9+
- **ArgumentRealization.lean**: Extract `SuppressedVarReading`, `ObjectRealization`, `MiddleType` to theory layer (fixes Fragment→Phenomena dependency violation)
10+
311
## [0.229.171] - 2026-03-12
412

513
### Changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/-!
2+
# Indonesian Morphophonology
3+
@cite{sneddon-1996}
4+
5+
The nasal assimilation rules governing the meN- prefix allomorph
6+
selection, from @cite{sneddon-1996} §1.5.
7+
8+
## meN- allomorph rules
9+
10+
The capital N in *meN-* represents a nasal that assimilates to the
11+
first segment of the base. The nasal can surface as **m**, **n**,
12+
**ny**, **ng**, or **zero**, and in some cases the base-initial
13+
consonant is deleted:
14+
15+
| Base initial | Prefix | Deletion? | Example |
16+
|--------------------|---------|-----------|------------------------|
17+
| vowel, g, k, h | meng- | k deleted | *meng-ajar*, *meng-irim* |
18+
| b, p, f | mem- | p deleted | *mem-beli*, *mem-akai* |
19+
| d, t, c, j, z | men- | t deleted | *men-dengar*, *men-ulis* |
20+
| s | meny- | s deleted | *meny-ewa* |
21+
| l, r, m, n, w, y | me- | — | *me-lihat*, *me-masak* |
22+
-/
23+
24+
namespace Fragments.Indonesian.Morphophonology
25+
26+
/-- The meN- allomorph prefix selected by the initial segment of the root
27+
(@cite{sneddon-1996} §1.5). The nasal N undergoes assimilation:
28+
- Before **b, p, f**: *mem-* (bilabial nasal m)
29+
- Before **d, t, c, j, z**: *men-* (alveolar nasal n)
30+
- Before **s**: *meny-* (palatal nasal ny; s deleted)
31+
- Before **l, r, m, n, w, y**: *me-* (N lost)
32+
- Elsewhere (vowels, **g, k, h**): *meng-* (velar nasal ng) -/
33+
def meNPrefix : Char → String
34+
| 'b' | 'p' | 'f' => "mem"
35+
| 'd' | 't' | 'c' | 'j' | 'z' => "men"
36+
| 's' => "meny"
37+
| 'l' | 'r' | 'm' | 'n' | 'w' | 'y' => "me"
38+
| _ => "meng"
39+
40+
/-- Derive the expected meN- form from a root, using the phonological
41+
rules from @cite{sneddon-1996} §1.5. The result shows the morpheme
42+
boundary (prefix-root), preserving the root-initial consonant even
43+
when it is deleted in the surface form (e.g., *mem-pecah* rather
44+
than *memecah*). -/
45+
def deriveMeN (root : String) : Option String :=
46+
match root.toList with
47+
| c :: _ => some (meNPrefix c ++ "-" ++ root)
48+
| [] => none
49+
50+
-- ============================================================================
51+
-- Per-class verification
52+
-- ============================================================================
53+
54+
/-- Vowel-initial roots get *meng-*. -/
55+
theorem vowel_meng : meNPrefix 'a' = "meng" := rfl
56+
57+
/-- Labial-initial roots get *mem-*. -/
58+
theorem labial_mem : meNPrefix 'b' = "mem" ∧ meNPrefix 'p' = "mem" := ⟨rfl, rfl⟩
59+
60+
/-- Dental-initial roots get *men-*. -/
61+
theorem dental_men : meNPrefix 'd' = "men" ∧ meNPrefix 't' = "men"
62+
meNPrefix 'c' = "men" ∧ meNPrefix 'j' = "men" := ⟨rfl, rfl, rfl, rfl⟩
63+
64+
/-- Sibilant-initial roots get *meny-*. -/
65+
theorem sibilant_meny : meNPrefix 's' = "meny" := rfl
66+
67+
/-- Sonorant-initial roots get *me-*. -/
68+
theorem sonorant_me : meNPrefix 'l' = "me" ∧ meNPrefix 'r' = "me"
69+
meNPrefix 'm' = "me" := ⟨rfl, rfl, rfl⟩
70+
71+
/-- Velar-initial roots get *meng-*. -/
72+
theorem velar_meng : meNPrefix 'g' = "meng" ∧ meNPrefix 'k' = "meng"
73+
meNPrefix 'h' = "meng" := ⟨rfl, rfl, rfl⟩
74+
75+
end Fragments.Indonesian.Morphophonology

0 commit comments

Comments
 (0)