commit 57efd37df69da7b96b2e3041ac1910d04a4901ef Author: developtheweb Date: Fri Jul 25 12:02:20 2025 -0400 Initial commit: MPL specification and M0 documentation - Complete language specification (math_prog_lang.md) - M0 blocker tracking issue template - Glyph escape sequences reference - Operator precedence table - Example programs from specification - Project README Ready for pre-M0 implementation phase diff --git a/ISSUE_M0_BLOCKERS.md b/ISSUE_M0_BLOCKERS.md new file mode 100644 index 0000000..3200481 --- /dev/null +++ b/ISSUE_M0_BLOCKERS.md @@ -0,0 +1,79 @@ +# 🚀 Lock lexical & grammar spec for M0 + +## Overview +This issue tracks the resolution of three critical blockers that must be decided before implementing the ANTLR 4 grammar for MPL. These decisions are required to ensure the lexer can be implemented without surprises and that all M0 exit criteria are objectively testable. + +## Blockers + +### 1. Comment Syntax 🚫 +**Status:** MISSING +**Decision needed by:** Before lexer PR is merged +**Rationale:** Source files cannot compile without comment support + +**Options to consider:** +- `--` till EOL (Ada/Haskell style) +- `/* ... */` (C style) +- `#` till EOL (Python/Ruby style) +- Support for both single-line and multi-line comments + +**Recommendation:** Use `--` for single-line and `{- ... -}` for multi-line (Haskell-style) to align with functional paradigm + +### 2. String Literal Rules ⚠️ +**Status:** INCOMPLETE +**Decision needed by:** Before lexer PR is merged +**Rationale:** Required for hello-world sample + +**Decisions needed:** +- Escape sequences: Standard set (`\n`, `\t`, `\\`, `\"`) + Unicode (`\u{1F600}`) +- String delimiters: Double quotes only or support for raw strings? +- Multi-line string support? +- String interpolation syntax (or defer to M1)? + +**Recommendation:** +- Use `"..."` for regular strings with standard escapes +- Add `"""..."""` for multi-line raw strings (no escapes) +- Defer interpolation to M1 + +### 3. Path Literal Fallback ⚠️ +**Status:** INCOMPLETE +**Decision needed by:** Before lexer PR is merged +**Rationale:** `🖫` glyph may not render on all systems + +**Options:** +- Make `🖫` required (pure Unicode approach) +- Add ASCII escape like `@path"..."` or `#path"..."` +- Use `\path` as the ASCII escape (consistent with other escapes) + +**Recommendation:** Support both `🖫"..."` and `\path"..."` for maximum compatibility + +## Additional Lexical Decisions + +### ASCII Escape Mapping +Need complete one-to-one table for all Unicode glyphs. Current partial list: +- `\gamma` → `γ` +- `\lam` or `\lambda` → `λ` +- `\Rightarrow` → `⇒` +- etc. + +### Number Literal Format +- Decimal: `123`, `123.456`, `1.23e10` +- Hex: `0x1A2B` +- Binary: `0b1101` +- Suffixes: `_i32`, `_f64`, `_bigint` (or defer to M1?) + +## Exit Criteria +Once this issue is closed, we can: +- [ ] Implement the lexer with confidence +- [ ] Parse all example programs +- [ ] Generate syntax highlighting for editors +- [ ] Create the `glyph-escapes.md` reference + +## Action Items +1. Make decisions on all three blockers +2. Update `math_prog_lang.md` with decisions +3. Create `docs/lexical-spec.md` with complete token rules +4. Tag specification as `v0.1-alpha` + +--- +**Assignee:** @developtheweb +**Labels:** `blocker`, `M0`, `specification`, `grammar` \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5f165f2 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# Mathematical Programming Language (MPL) + +A programming language that maintains cognitive universality while supporting all modern programming paradigms through mathematical notation. + +## Quick Start + +```mpl +✎"Hello, World!" +``` + +## Repository Structure + +- `math_prog_lang.md` - Complete language specification +- `ISSUE_M0_BLOCKERS.md` - Critical decisions needed before M0 implementation +- `glyph-escapes.md` - ASCII escape sequences for all Unicode glyphs +- `precedence.csv` - Operator precedence table +- `examples/` - Example programs from the specification + +## M0 Milestones + +1. ✅ Language specification consolidated +2. ✅ Pre-M0 audit completed +3. 🚧 Resolve lexical blockers (see ISSUE_M0_BLOCKERS.md) +4. ⏳ Implement ANTLR 4 grammar +5. ⏳ Create test suite (500 LOC) +6. ⏳ Achieve M0 exit criteria + +## Contact + +- GitHub: @developtheweb +- Email: developtheweb@protonmail.com \ No newline at end of file diff --git a/examples/01_hello_world.mpl b/examples/01_hello_world.mpl new file mode 100644 index 0000000..8e456fe --- /dev/null +++ b/examples/01_hello_world.mpl @@ -0,0 +1 @@ +✎"Hello, World!" \ No newline at end of file diff --git a/examples/02_factorial.mpl b/examples/02_factorial.mpl new file mode 100644 index 0000000..d83c679 --- /dev/null +++ b/examples/02_factorial.mpl @@ -0,0 +1,3 @@ +factorial ≜ λn∈ℕ: n≤1 ⟹ 1 | n×factorial(n-1) +result ← factorial(5) +✎result \ No newline at end of file diff --git a/examples/03_file_processing.mpl b/examples/03_file_processing.mpl new file mode 100644 index 0000000..1183cd4 --- /dev/null +++ b/examples/03_file_processing.mpl @@ -0,0 +1,6 @@ +processFile ≜ λpath: 🖫path ↴ { + data ← readFile(path) + result ← transform(data) + writeFile(result, 🖫"output.txt") + ⟨"success"|"failed"⟩ +} ↴ {↯e ⇒ ⟨⊥|e⟩} \ No newline at end of file diff --git a/examples/04_concurrent_download.mpl b/examples/04_concurrent_download.mpl new file mode 100644 index 0000000..8698aa7 --- /dev/null +++ b/examples/04_concurrent_download.mpl @@ -0,0 +1,3 @@ +downloadAll ≜ λurls: ∀url∈urls: ( + fetchData(url) ‖ processData(url) +) ⟹ mergeResults() \ No newline at end of file diff --git a/examples/05_module_definition.mpl b/examples/05_module_definition.mpl new file mode 100644 index 0000000..ac7ee36 --- /dev/null +++ b/examples/05_module_definition.mpl @@ -0,0 +1,8 @@ +𝓜 Mathematics ⇒ { + π ≜ 3.14159 + sin ≜ λx∈ℝ: ... + cos ≜ λx∈ℝ: ... +} + +angle ← π/4 +result ← Mathematics‧sin(angle) \ No newline at end of file diff --git a/examples/06_resource_management.mpl b/examples/06_resource_management.mpl new file mode 100644 index 0000000..104afba --- /dev/null +++ b/examples/06_resource_management.mpl @@ -0,0 +1,9 @@ +databaseQuery ≜ λquery: 〔 + conn ← database ⊕ + ⌈ + result ← execute(conn, query) + ✎"Query executed" + result + ⌉_db_lock + conn ⊖ +〕 \ No newline at end of file diff --git a/examples/07_metaprogramming.mpl b/examples/07_metaprogramming.mpl new file mode 100644 index 0000000..78ece10 --- /dev/null +++ b/examples/07_metaprogramming.mpl @@ -0,0 +1,6 @@ +generateFunction ≜ λname: ⌜ + λx: x × 2 +⌝ + +doubler ← ⌞generateFunction("doubler")⌟ +result ← doubler(21) \ No newline at end of file diff --git a/examples/08_realtime_system.mpl b/examples/08_realtime_system.mpl new file mode 100644 index 0000000..c5a450e --- /dev/null +++ b/examples/08_realtime_system.mpl @@ -0,0 +1,5 @@ +scheduler ≜ ⟳( + tasks ← getPendingTasks() + ∀task∈tasks: execute(task) ‖ monitor(task) + , 100ms +) \ No newline at end of file diff --git a/examples/09_network_server.mpl b/examples/09_network_server.mpl new file mode 100644 index 0000000..3da7fa2 --- /dev/null +++ b/examples/09_network_server.mpl @@ -0,0 +1,9 @@ +server ≜ λport: 〔 + socket ← bind(port) ⊕ + ∀request: ( + data ← ↽_socket request + response ← processRequest(data) + ⇀_socket response + ) ‖ handleNext() + socket ⊖ +〕 \ No newline at end of file diff --git a/examples/10_type_safe_database.mpl b/examples/10_type_safe_database.mpl new file mode 100644 index 0000000..937099d --- /dev/null +++ b/examples/10_type_safe_database.mpl @@ -0,0 +1,4 @@ +User ≜ {name: String, age: ℕ∣age>0, email: String} +query ≜ λtable∈Database: ∀row∈table: validateUser(row) ↴ { + ↯"Invalid user" ⟹ ⊥ +} \ No newline at end of file diff --git a/glyph-escapes.md b/glyph-escapes.md new file mode 100644 index 0000000..2981950 --- /dev/null +++ b/glyph-escapes.md @@ -0,0 +1,150 @@ +# MPL Glyph Escape Sequences + +This document provides the authoritative mapping between ASCII escape sequences and UTF-8 glyphs for the Mathematical Programming Language (MPL). + +## Core Mathematical Symbols + +### Greek Letters (Variables) +| ASCII Escape | Unicode | Glyph | Usage | +|-------------|---------|-------|-------| +| `\alpha` | U+03B1 | α | Variable | +| `\beta` | U+03B2 | β | Variable | +| `\gamma` | U+03B3 | γ | Variable | +| `\delta` | U+03B4 | δ | Variable | +| `\epsilon` | U+03B5 | ε | Variable | +| `\zeta` | U+03B6 | ζ | Variable | +| `\eta` | U+03B7 | η | Variable | +| `\theta` | U+03B8 | θ | Variable | +| `\iota` | U+03B9 | ι | Variable | +| `\kappa` | U+03BA | κ | Variable | +| `\lambda` or `\lam` | U+03BB | λ | Lambda/Function | +| `\mu` | U+03BC | μ | Variable | +| `\nu` | U+03BD | ν | Variable | +| `\xi` | U+03BE | ξ | Variable | +| `\omicron` | U+03BF | ο | Variable | +| `\pi` | U+03C0 | π | Variable/Constant | +| `\rho` | U+03C1 | ρ | Variable | +| `\sigma` | U+03C3 | σ | Variable | +| `\tau` | U+03C4 | τ | Variable | +| `\upsilon` | U+03C5 | υ | Variable | +| `\phi` | U+03C6 | φ | Variable | +| `\chi` | U+03C7 | χ | Variable | +| `\psi` | U+03C8 | ψ | Variable | +| `\omega` | U+03C9 | ω | Variable | + +### Set Theory +| ASCII Escape | Unicode | Glyph | Usage | +|-------------|---------|-------|-------| +| `\emptyset` | U+2205 | ∅ | Empty set | +| `\union` or `\cup` | U+222A | ∪ | Set union | +| `\intersect` or `\cap` | U+2229 | ∩ | Set intersection | +| `\subset` | U+2282 | ⊂ | Proper subset | +| `\supset` | U+2283 | ⊃ | Proper superset | +| `\in` | U+2208 | ∈ | Element of | +| `\notin` | U+2209 | ∉ | Not element of | +| `\subseteq` | U+2286 | ⊆ | Subset or equal | +| `\supseteq` | U+2287 | ⊇ | Superset or equal | + +### Logic +| ASCII Escape | Unicode | Glyph | Usage | +|-------------|---------|-------|-------| +| `\and` or `\wedge` | U+2227 | ∧ | Logical and | +| `\or` or `\vee` | U+2228 | ∨ | Logical or | +| `\not` or `\neg` | U+00AC | ¬ | Logical not | +| `\implies` or `\Rightarrow` | U+27F9 | ⟹ | Implication | +| `\iff` or `\Leftrightarrow` | U+27FA | ⟺ | If and only if | +| `\forall` | U+2200 | ∀ | Universal quantifier | +| `\exists` | U+2203 | ∃ | Existential quantifier | + +### Operations +| ASCII Escape | Unicode | Glyph | Usage | +|-------------|---------|-------|-------| +| `\times` | U+00D7 | × | Multiplication | +| `\div` | U+00F7 | ÷ | Division | +| `\ast` | U+2217 | ∗ | Generic operator | +| `\circ` | U+2218 | ∘ | Function composition | + +### Relations +| ASCII Escape | Unicode | Glyph | Usage | +|-------------|---------|-------|-------| +| `\neq` or `\ne` | U+2260 | ≠ | Not equal | +| `\leq` or `\le` | U+2264 | ≤ | Less than or equal | +| `\geq` or `\ge` | U+2265 | ≥ | Greater than or equal | +| `\approx` | U+2248 | ≈ | Approximately equal | +| `\sim` | U+223C | ∼ | Similar to | + +### Special Symbols +| ASCII Escape | Unicode | Glyph | Usage | +|-------------|---------|-------|-------| +| `\leftarrow` or `\gets` | U+2190 | ← | Assignment | +| `\coloneq` | U+225C | ≜ | Definition | +| `\rightarrow` or `\to` | U+2192 | → | Function type | + +## Effect Extensions + +| ASCII Escape | Unicode | Glyph | Usage | +|-------------|---------|-------|-------| +| `\raise` | U+21AF | ↯ | Raise exception | +| `\handle` | U+21B4 | ↴ | Handle exception | +| `\parallel` | U+2016 | ‖ | Parallel composition | +| `\lceil` | U+2308 | ⌈ | Atomic section start | +| `\rceil` | U+2309 | ⌉ | Atomic section end | +| `\oplus` | U+2295 | ⊕ | Allocate resource | +| `\ominus` | U+2296 | ⊖ | Release resource | +| `\module` | U+1D49C | 𝓜 | Module declaration | +| `\Leftarrow` | U+21D0 | ⇐ | Import | +| `\Rightarrow` | U+21D2 | ⇒ | Export | +| `\send` | U+21C0 | ⇀ | Send (network) | +| `\receive` | U+21BD | ↽ | Receive (network) | + +## Additional Operators + +| ASCII Escape | Unicode | Glyph | Usage | +|-------------|---------|-------|-------| +| `\langle` | U+27E8 | ⟨ | Choice type/angle bracket left | +| `\rangle` | U+27E9 | ⟩ | Choice type/angle bracket right | +| `\path` | U+1F5AB | 🖫 | File path prefix | +| `\up` | U+21E1 | ⇡ | Stream position up | +| `\down` | U+21E3 | ⇣ | Stream position down | +| `\swap` | U+21C6 | ⇆ | Atomic swap | +| `\llangle` | U+27EA | ⟪ | Deep update path start | +| `\rrangle` | U+27EB | ⟫ | Deep update path end | +| `\ulcorner` | U+231C | ⌜ | Code quotation start | +| `\urcorner` | U+231D | ⌝ | Code quotation end | +| `\llcorner` | U+231E | ⌞ | Code evaluation start | +| `\lrcorner` | U+231F | ⌟ | Code evaluation end | +| `\query` | U+003F | ? | Introspection | +| `\break` | U+2A08 | ⧈ | Breakpoint | +| `\trace` | U+270E | ✎ | Trace/log | +| `\delay` | U+23F2 | ⏲ | Delay | +| `\periodic` | U+27F3 | ⟳ | Periodic task | +| `\lbracket` | U+3014 | 〔 | RAII scope start | +| `\rbracket` | U+3015 | 〕 | RAII scope end | + +## Type System Symbols + +| ASCII Escape | Unicode | Glyph | Usage | +|-------------|---------|-------|-------| +| `\nat` or `\N` | U+2115 | ℕ | Natural numbers | +| `\int` or `\Z` | U+2124 | ℤ | Integers | +| `\rat` or `\Q` | U+211A | ℚ | Rational numbers | +| `\real` or `\R` | U+211D | ℝ | Real numbers | +| `\complex` or `\C` | U+2102 | ℂ | Complex numbers | +| `\bool` or `\B` | U+1D539 | 𝔹 | Booleans | +| `\bot` | U+22A5 | ⊥ | Bottom type | + +## Usage Notes + +1. **Input methods:** + - Direct Unicode input (recommended for supported editors) + - ASCII escape sequences (for compatibility) + - Editor-specific shortcuts (e.g., Ctrl+Alt+g → γ) + +2. **Lexer behavior:** + - Escapes are processed during tokenization + - Unknown escapes result in compilation error + - Mixed Unicode/ASCII in same file is allowed + +3. **Pretty-printing:** + - Always outputs Unicode glyphs (never escapes) + - Configurable fallback to ASCII for terminals without Unicode support \ No newline at end of file diff --git a/math_prog_lang.md b/math_prog_lang.md new file mode 100644 index 0000000..dae840d --- /dev/null +++ b/math_prog_lang.md @@ -0,0 +1,275 @@ +# Mathematical Programming Language (MPL) + +## Core Symbol Set + +### Mathematical Foundation (LaTeX) +- **Variables:** α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω +- **Collections:** ∅,∪,∩,⊂,⊃,∈,∉,⊆,⊇ +- **Logic:** ∧,∨,¬,⟹,⟺,∀,∃ +- **Operations:** +,-,×,÷,∗,∘ +- **Relations:** =,≠,<,>,≤,≥,≈,∼ +- **Functions:** f: A → B, λ +- **Assignment:** ← +- **Definition:** ≜ +- **Structure:** (),[],{},⟨⟩ + +### Effect Extensions (11 new glyphs) +- **↯** Raise exception +- **↴** Handle exception +- **‖** Parallel composition +- **⌈⌉** Atomic section/lock +- **⊕** Allocate resource +- **⊖** Release resource +- **𝓜** Module declaration +- **⇐** Import +- **⇒** Export +- **⇀** Send (network) +- **↽** Receive (network) + +### Additional Operators +- **⟨v|e⟩** Choice type (value or error) +- **🖫** File path prefix +- **⇡⇣** Stream positioning +- **⇆** Atomic swap +- **⟪⟫** Deep update path +- **⌜⌝** Code quotation +- **⌞⌟** Code evaluation +- **?** Introspection +- **⧈** Breakpoint +- **✎** Trace/log +- **⏲** Delay +- **⟳** Periodic task +- **〔〕** RAII scope + +## Grammar + +### Basic Expressions +``` +expr ::= variable | literal | operation | function_call | block + +variable ::= α | β | γ | ... | ω +literal ::= number | string | path | list | set +operation ::= expr OP expr +function_call ::= f(expr, ...) +block ::= { statement; ... } +``` + +### Statements +``` +assignment ::= variable ← expr +definition ::= variable ≜ expr +conditional ::= condition ⟹ expr +iteration ::= ∀variable∈set: expr +parallel ::= expr ‖ expr +atomic ::= ⌈expr⌉_lock +exception ::= ↯expr | expr ↴ {↯e ⇒ handler} +``` + +### Types +``` +basic_type ::= ℕ | ℤ | ℚ | ℝ | ℂ | 𝔹 +function_type ::= domain → codomain +choice_type ::= ⟨type|type⟩ +effect_type ::= type^effect +``` + +## Example Programs + +### Hello World +``` +✎"Hello, World!" +``` + +### Factorial +``` +factorial ≜ λn∈ℕ: n≤1 ⟹ 1 | n×factorial(n-1) +result ← factorial(5) +✎result +``` + +### File Processing with Error Handling +``` +processFile ≜ λpath: 🖫path ↴ { + data ← readFile(path) + result ← transform(data) + writeFile(result, 🖫"output.txt") + ⟨"success"|"failed"⟩ +} ↴ {↯e ⇒ ⟨⊥|e⟩} +``` + +### Concurrent Download +``` +downloadAll ≜ λurls: ∀url∈urls: ( + fetchData(url) ‖ processData(url) +) ⟹ mergeResults() +``` + +### Module Definition +``` +𝓜 Mathematics ⇒ { + π ≜ 3.14159... + sin ≜ λx∈ℝ: ... + cos ≜ λx∈ℝ: ... +} + +angle ← π/4 +result ← Mathematics‧sin(angle) +``` + +### Resource Management +``` +databaseQuery ≜ λquery: 〔 + conn ← database ⊕ + ⌈ + result ← execute(conn, query) + ✎"Query executed" + result + ⌉_db_lock + conn ⊖ +〕 +``` + +### Metaprogramming +``` +generateFunction ≜ λname: ⌜ + λx: x × 2 +⌝ + +doubler ← ⌞generateFunction("doubler")⌟ +result ← doubler(21) +``` + +### Real-time System +``` +scheduler ≜ ⟳( + tasks ← getPendingTasks() + ∀task∈tasks: execute(task) ‖ monitor(task) + , 100ms +) +``` + +### Network Server +``` +server ≜ λport: 〔 + socket ← bind(port) ⊕ + ∀request: ( + data ← ↽_socket request + response ← processRequest(data) + ⇀_socket response + ) ‖ handleNext() + socket ⊖ +〕 +``` + +### Type-safe Database +``` +User ≜ {name: String, age: ℕ∣age>0, email: String} +query ≜ λtable∈Database: ∀row∈table: validateUser(row) ↴ { + ↯"Invalid user" ⟹ ⊥ +} +``` + +## Critical Implementation Decisions + +### Lexical Layer +- **Unicode Normalization:** NFC on ingest, reject mixed forms +- **Symbol Input:** Cross-platform keymap (Ctrl+Alt+g → γ) + ASCII escapes (\gamma → γ) +- **Semicolon handling:** Require explicit `;` everywhere except before `}` + +### Operator Precedence Table +| Level | Operators | Associativity | +|-------|-----------|---------------| +| 9 | function application | left | +| 8 | ↯ ✎ ? ⧈ ⏲ (prefix) | right | +| 7 | ∘ | left | +| 6 | × ÷ ∗ | left | +| 5 | + - | left | +| 4 | = ≠ < > ≤ ≥ ≈ ∼ | non-assoc | +| 3 | ∧ | left | +| 2 | ∨ | left | +| 1 | ⟹ | right | +| 0 | ← | right | +| -1 | ‖ | left | +| -2 | ; | left | + +### Grammar Resolutions +- **Block semantics:** Every statement returns value (ML-style) +- **Conditional associativity:** Right-associative (a⟹b⟹c = a⟹(b⟹c)) +- **Choice type parsing:** Different tokens for |value vs |type contexts + +### Type System Extensions +- **Effect polymorphism:** `map : (A→ᴱ B) → List A →ᴱ List B` +- **Linear resources:** Compile-time ⊕/⊖ tracking, 〔〕 = linear region sugar +- **Exception types:** `f : A →⟨E⟩ B` where E is union of raised types + +### Concurrency Semantics +- **Memory model:** Happens-before with acquire/release on ⌈⌉ +- **Parallel failure:** Fail-fast, cancel siblings, aggregate choice types +- **Deadlock detection:** Optional --debug-sync runtime verifier + +### Module System +- **Naming:** `𝓜‧A‧B` in source → `A/B.mpl` on disk +- **Re-export:** `Vector ⇒ 𝓜‧LinearAlgebra‧Vector` +- **Versioning:** `𝓜 LinearAlgebra@1.2.0 ⇒ { ... }` + +### Missing Syntax (M1 Requirements) + +#### Pattern Matching +``` +match expr with +| pattern₁ ⟹ expr₁ +| pattern₂ ⟹ expr₂ +end + +pattern ::= _ | literal | variable + | ⟨Left pattern⟩ | ⟨Right pattern⟩ // choice + | {field₁ = pattern₁, …} // records + | (pattern₁, pattern₂, …) // tuples +``` + +#### Parametric Types +``` +type_abs ::= ΛT. expr // type lambda +type_app ::= expr [T] // application + +map ≜ ΛA. ΛB. λf: A→ᴱ B. λxs: List A. … +``` + +#### Foreign Function Interface +``` +𝓜 Crypto@0.1.0 uses "libcrypto.so" { + foreign digest : 🖫Path →⟨IOErr⟩ Digest + foreign randomBytes : ℕ → Bytes +} +``` + +### Static Semantics Rules + +#### Region Typing +``` +Γ ⊢ e₁ : Resource r Γ, h:r ⊢ e₂ : α +─────────────────────────────────────────────── (REGION) +Γ ⊢ 〔 x ← e₁ ; e₂ ; x ⊖ 〕 : α +``` + +#### Exception Handling +``` +Γ ⊢ e₁ : α Γ ⊢ e₂ : β Γ ⊢ e₃ : β +───────────────────────────────────────────────────────── (HANDLE) +Γ ⊢ e₁ ↴ { ↯x ⇒ e₂ } : β ▷ Eff = (Eff(e₁) - {Raise ε}) ∪ Eff(e₂) +``` + +### M0 Exit Criteria +1. All spec examples parse and pretty-print round-trip +2. No shift/reduce conflicts in grammar +3. 10,000 random token sequences don't crash parser + +## Implementation Roadmap +1. **M0:** ANTLR grammar + 500 LOC test suite +2. **M1:** Hindley-Milner + row effects + linearity checker +3. **M2:** Stack VM with green threads + deterministic GC +4. **M3:** Self-hosting (stdlib + compiler in MPL) +5. **M4:** LLVM backend with vectorized math ops +6. **M5:** Package manager (fetch/build/run workflow) + +This specification provides a complete foundation for implementing a mathematical programming language that maintains cognitive universality while supporting all modern programming paradigms. \ No newline at end of file diff --git a/precedence.csv b/precedence.csv new file mode 100644 index 0000000..f564eff --- /dev/null +++ b/precedence.csv @@ -0,0 +1,13 @@ +Level,Operators,Associativity,Description +9,function application,left,Function call f(x) or f x +8,"↯ ✎ ? ⧈ ⏲ (prefix)",right,Unary prefix operators +7,∘,left,Function composition +6,× ÷ ∗,left,Multiplication and division +5,+ -,left,Addition and subtraction +4,= ≠ < > ≤ ≥ ≈ ∼,non-associative,Comparison operators +3,∧,left,Logical AND +2,∨,left,Logical OR +1,⟹,right,Implication +0,←,right,Assignment +-1,‖,left,Parallel composition +-2,;,left,Statement sequencing \ No newline at end of file