Skip to content

Commit 99dc80d

Browse files
committed
merge: resolve conflicts and fix headers
2 parents d1af7f2 + 45b770b commit 99dc80d

77 files changed

Lines changed: 1716 additions & 397 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.machine_readable/6a2/META.a2ml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# META.a2ml — My Lang meta-level information
55
[metadata]
66
version = "0.1.0"
7-
last-updated = "2026-06-05"
7+
last-updated = "2026-06-14"
88

99
[project-info]
1010
license = "MPL-2.0"
@@ -17,8 +17,12 @@ decisions = [
1717
{ id = "ADR-001", date = "2026-06-02", title = "Dual-track QTT mechanisation (Coq + Idris2) for the solo-core", status = "accepted", note = "The solo dialect's affine/linear kernel is mechanised twice — Coq (Prop) and Idris2 (Type) — so the two flagship metatheories track the same shape. Methodology is statements-first: theorems committed as statements, then discharged. Semiring laws proved by exhaustive Refl/reflexivity." },
1818
{ id = "ADR-002", date = "2026-06-05", title = "Echo-types is a first-class type former in the formal kernel", status = "accepted", note = "echo-types is integrated into the type SYSTEM, not only the Rust checker: TEcho type former + MkEcho/Weaken terms + THEcho/THWeaken typing rules + echo reduction rules in the Coq/Idris solo-core. EchoMode = Linear/Affine thin poset (weaken + no-section laws); EchoResidue = proof-layer object pinning the laws behind the Rust Ty::is_assignable_from Echo case (closes slice 3 of docs/design/echo-types-integration.md). Claim line held to R-2026-05-18: Echo is a loss-graded reindexing modality over a thin poset — NOT graded-comonad/universal-property/adjunction." },
1919
{ id = "ADR-003", date = "2026-06-05", title = "Idris splitting rules carry explicit context/quantity fields", status = "accepted", note = "On the Idris track the four context-splitting rules (THApp/THPair/THCase/THLet) carry their split contexts (and the App/Let quantity) as explicit constructor fields. Rationale: Idris2 QTT erases the typing-derivation context indices at runtime, but the closed-context progress inversion (g1+g2=Empty implies both Empty) needs them relevant. The Coq twin leaves them as Prop binders (Prop has no erasure). Documented track divergence; the derivation now records its own split, which is arguably more faithful." },
20-
{ id = "ADR-004", date = "2026-06-05", title = "Product/elimination form undecided — gates F1.4 preservation", status = "open", note = "Kernel pairs are multiplicative (THPair splits the context) but eliminators are projections (Fst/Snd); that combination is unsound for preservation on open terms. Decision pending between additive (projections), multiplicative tensor (let-pair elim), or both. See issue #93. Preservation (F1.4) is blocked until resolved." },
20+
{ id = "ADR-004", date = "2026-06-05", title = "Product/elimination form undecided — gates F1.4 preservation", status = "resolved", resolved-date = "2026-06-13", note = "RESOLVED by ADR-007 (both products). Original concern: kernel pairs were multiplicative (split context at intro) but eliminated by projection (Fst/Snd) — neither & nor ⊗, and strictly weaker than both. The resolution is to provide BOTH genuine products. See ADR-007." },
2121
{ id = "ADR-005", date = "2026-06-05", title = "Scope unchanged — no new realignment ANCHOR", status = "accepted", note = "This session (operational semantics, progress, Echo-in-the-typesystem) is progress WITHIN the 2026-01-01 scope-arrest ANCHOR (Solo-first; Rust impl; contain other dialects). It is not a scope realignment, so no new ANCHOR.*.a2ml is issued. Formal mechanisation remains a first-class deliverable consistent with that anchor; proof assistants (Coq/Idris/Agda) are verification tooling, not new compiler host languages." },
22+
{ id = "ADR-006", date = "2026-06-12", title = "Separated QTT context: type context (tctx) + usage vector (uvec)", status = "accepted", note = "The conflated QTT context (types and quantities together in one Snoc, with ctx_add taking its type annotation from its FIRST argument — so context addition was NOT commutative in the types) is replaced by a SEPARATED representation: a type context tctx (TEmpty/TSnoc) shared verbatim across every premise of a rule, and a usage vector uvec (UEmpty/USnoc) that is the only thing split (uadd) or scaled (uscale). Payoff: uadd is genuinely commutative + associative and uscale distributes (uadd_comm, uadd_assoc, uscale_add in Usage.v), which is exactly the clean algebra the F1.4 substitution lemma needs. has_type : tctx -> uvec -> tm -> ty -> Prop. PRs #102 (Usage.v) + #103 (migration)." },
23+
{ id = "ADR-007", date = "2026-06-13", title = "Two genuine products: additive & (TWith) and multiplicative ⊗ (TTensor)", status = "accepted", note = "Resolves ADR-004. The additive product & (TWith) introduces under SHARED usage (both components typed under the same D — safe because only one survives elimination) and is eliminated by Fst/Snd projection. The multiplicative product ⊗ (TTensor) introduces by SPLITTING usage (uadd D1 D2) and is eliminated by a let-pair `let (x,y)=e1 in e2` that binds two variables and delivers both components. This replaces the single incoherent product. PRs #103 (&) + #104 (⊗)." },
24+
{ id = "ADR-008", date = "2026-06-13", title = "Additive-& evaluation is eager (lazy deferred)", status = "accepted", note = "The additive pair With t1 t2 is a value only once BOTH components are values (eager); Fst/Snd project from that value. This is type-safe and, under the current strongly-normalising kernel (no recursion/fixpoint), observationally equivalent to the canonical LAZY & semantics. Switch to lazy & (With always a value; project-then-evaluate) is deferred to when recursion or effects enter the language, at which point lazy becomes required. Flagged, not forgotten." },
25+
{ id = "ADR-009", date = "2026-06-14", title = "F1.4 preservation via an open-context QTT substitution lemma", status = "accepted", note = "Preservation (Coq) is discharged by a substitution lemma ht_subst that holds for OPEN substituends (not only closed values), because the let-pair (⊗) eliminator substitutes tensor components that are typed in a non-empty context. subst2 u1 u2 t = subst0 u1 (subst0 (shift 0 u2) t) (the shift 0 makes it correct for open u2; identity on closed terms, so closed-program evaluation is unchanged). Theorem preservation + affine_pres are real axiom-free Qed (Print Assumptions closed). PR with d174c06." },
2226
]
2327

2428
[development-practices]

.machine_readable/6a2/README.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// SPDX-License-Identifier: MPL-2.0
2+
// Owner: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
23
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
34
# A2ML 6a2 Directory
45

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# SPDX-License-Identifier: MPL-2.0
2-
# Adjustfile — Drift-tolerance contract for rsr-template-repo
2+
# Adjustfile — Drift-tolerance contract for my-lang
33
# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
44
#
55
# Cumulative-drift catchment: tolerance bands + corrective actions.
@@ -8,65 +8,66 @@
88
# Fix with: adjust fix (applies deterministic patches; advisory otherwise)
99

1010
@abstract:
11-
Drift tolerances and corrective actions for rsr-template-repo. Unlike
12-
MUST (hard gate), ADJUST tracks cumulative drift against tolerance bands
13-
and proposes corrective actions. Advisory — it warns and trends, it does
14-
not block.
11+
Drift tolerances and corrective actions for my-lang. Unlike MUST (hard gate),
12+
ADJUST tracks cumulative drift against tolerance bands and proposes corrective
13+
actions. Advisory — it warns and trends, it does not block.
1514
@end
1615

17-
## Template Drift
16+
## Template-Consumer Drift
1817

1918
### placeholder-drift
20-
- description: Template placeholders should be replaced when copied
21-
- tolerance: 0 placeholder markers in copied repos
22-
- corrective: Search and replace all {{PLACEHOLDER}} markers
19+
- description: No unsubstituted template placeholders remain
20+
- tolerance: 0 {{PLACEHOLDER}} markers anywhere in .machine_readable/
21+
- corrective: Search and replace all {{PLACEHOLDER}} markers with my-lang values
2322
- severity: advisory
24-
- notes: This check only applies to repos that copied from this template
2523

26-
### template-version-drift
27-
- description: Template version should match RSR spec version
28-
- tolerance: Template version matches current RSR spec
29-
- corrective: Update template to match latest RSR spec
24+
### template-identity-drift
25+
- description: Contractiles and machine-readable files identify as my-lang, not
26+
as the upstream RSR template
27+
- tolerance: 0 'rsr-template-repo' self-identifiers
28+
- corrective: Re-author copied template prose to be about my-lang
3029
- severity: advisory
30+
- notes: my-lang is a consumer of the RSR template
3131

3232
## Documentation Drift
3333

3434
### readme-completeness
35-
- description: README should document all template features
36-
- tolerance: README covers all contractiles and directory structure
37-
- corrective: Update README.adoc with missing sections
35+
- description: README should document the contractile set and the bust/dust design
36+
- tolerance: README covers all six verbs and the multi-file bust/dust directories
37+
- corrective: Update .machine_readable/contractiles/README.adoc
3838
- severity: advisory
3939

40-
### example-accuracy
41-
- description: Examples in documentation should match actual template content
42-
- tolerance: All code examples in docs are accurate
43-
- corrective: Audit and fix examples in documentation
40+
### status-doc-currency
41+
- description: proofs/STATUS.md + 6a2/STATE.a2ml reflect the actual proof state
42+
- tolerance: Status registry matches the mechanised cores
43+
- corrective: Refresh STATUS.md / STATE.a2ml after any proof rung lands
4444
- severity: advisory
4545

4646
## Structural Drift
4747

4848
### contractile-sync
49-
- description: All contractiles should have matching a2ml and ncl implementations
50-
- tolerance: Every .a2ml has a corresponding .ncl
51-
- corrective: Generate missing .ncl files from .a2ml
49+
- description: Singular contractiles have matching a2ml (+ ncl where runners exist)
50+
- tolerance: Every singular *.a2ml has a corresponding runner where one is expected
51+
- corrective: Generate missing runner files from the a2ml
5252
- severity: advisory
5353

5454
### no-broken-symlinks
55-
- description: No broken symbolic links in template structure
55+
- description: No broken symbolic links in the repo structure
5656
- tolerance: 0 broken symlinks
5757
- corrective: Run symlink-check script
5858
- severity: advisory
5959

6060
## Accessibility Drift
6161

6262
### adoc-not-md
63-
- description: Template docs should prefer AsciiDoc
63+
- description: New prose docs should prefer AsciiDoc (estate convention)
6464
- tolerance: New prose docs are *.adoc
65-
- corrective: Convert any new *.md to *.adoc
65+
- corrective: Convert any new *.md to *.adoc where appropriate
6666
- severity: advisory
67+
- notes: Existing *.md (e.g. proofs/STATUS.md) are grandfathered
6768

6869
### spdx-header-consistency
69-
- description: All template files have correct SPDX headers
70+
- description: All source/doc files have correct SPDX headers
7071
- tolerance: 0 files missing SPDX-License-Identifier
7172
- corrective: Add SPDX headers to files that need them
7273
- severity: advisory
Lines changed: 63 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# SPDX-License-Identifier: MPL-2.0
2-
# Intentfile (A2ML Canonical) — north-star contractile for rsr-template-repo
2+
# Intentfile (A2ML Canonical) — north-star contractile for my-lang
33
# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
44
#
55
# Paired runner: intend.ncl
@@ -10,90 +10,107 @@
1010
# become. Two sections share one file because they answer
1111
# the same question at different ranges:
1212
# [[intents]] — "we WILL do this; track progress"
13-
# status: declared in_progress done |
13+
# status: declared -> in_progress -> done |
1414
# deferred | retired
1515
# [[wishes]] — "we WISH this were true; revisit later"
16-
# status: declared in_progress achieved |
16+
# status: declared -> in_progress -> achieved |
1717
# abandoned
1818
# grouped by horizon: near / mid / far.
1919
# Non-gating — this is a report, not a gate. See the `must`
2020
# contractile for hard gates.
2121

2222
@abstract:
23-
North-star contractile for rsr-template-repo. This repository is the
24-
canonical template for Rhodium Standard Repository compliance. It provides
25-
the scaffold that all hyperpolymath repos should copy and customize.
23+
North-star contractile for my-lang: a multi-dialect programming language with a
24+
Quantitative Type Theory (QTT) semantic core, whose affine Solo kernel is
25+
mechanised twice (Coq + Idris2) as a first-class deliverable alongside the Rust
26+
compiler. Echo-types are integrated into the formal type system.
2627
@end
2728

2829
## Purpose
2930

30-
The rsr-template-repo serves as the master template for all hyperpolymath
31-
repositories. It contains the complete set of contractile files, machine-readable
32-
specifications, and governance documentation that define the Rhodium Standard.
33-
34-
Every new repository in the hyperpolymath estate should be initialized by
35-
copying this template and substituting the placeholder values with
36-
repo-specific content.
31+
my-lang explores a QTT-cored language with THREE NESTED dialects —
32+
Solo (affine, single-agent) c Duet (session-typed, two-party) c Ensemble
33+
(multi-agent) — plus "Me", an on-the-fly agent-generated PROJECTION over the
34+
dialect hierarchy (NOT a fourth dialect). Formal verification of the kernel
35+
(progress + preservation over the separated QTT context, both products, and the
36+
Echo modality) is a first-class deliverable: the mechanised solo-core leads the
37+
Rust implementation and becomes the spec the checker must satisfy.
3738

3839
## Anti-Purpose
3940

40-
This repository is NOT:
41-
- A general-purpose project scaffold for external use (hyperpolymath-only)
42-
- A replacement for per-repo customization (all files must be bespoke)
43-
- A static template that never changes (evolves with RSR spec)
44-
- A runtime library or framework (build-time only)
41+
my-lang is NOT:
42+
- The RSR template repository (it is a CONSUMER of that template)
43+
- A single-dialect language (the dialect hierarchy is the point)
44+
- A dependently-typed language (Echo is the non-dependent approximation)
45+
- A finished compiler (the mechanised core currently leads the implementation)
4546

4647
## If In Doubt
4748

4849
If you are unsure whether a change is in scope, ask. Sensitive areas:
49-
- .machine_readable/ contractile definitions
50-
- RSR specification files
51-
- Governance templates
52-
- License policy documents
50+
- proofs/verification/ mechanised cores (Coq + Idris2 solo-core)
51+
- .machine_readable/ contractile + 6a2 definitions
52+
- the scope-arrest ANCHOR and AUTHORITY_STACK
53+
- governance / licence policy documents
5354

5455
## Committed Next-Actions
5556

56-
### repo-initialization
57-
- description: Provide just copy-and-substitute template for new repos
58-
- probe: test -f scripts/init-repo.sh
59-
- status: done
60-
- notes: Run with source scripts/init-repo.sh <new-repo-name>
57+
### proof-ci
58+
- description: Add a CI leg that runs coqc (solo-core) + idris2 --build so the
59+
proofs are machine-checked, not only locally-checked (closes proof-ci=absent)
60+
- probe: test -f .github/workflows/proofs.yml
61+
- status: declared
62+
- notes: Mirror echo-types' agda.yml pattern; the root F5 gap
6163

62-
### contractile-completeness
63-
- description: Every RSR contractile has an a2ml and ncl implementation
64-
- probe: ls .machine_readable/contractiles/*.a2ml | wc -l | grep -q "^6$"
64+
### idris-track-preservation
65+
- description: Discharge ?todo_preservation on the Idris2 twin (Coq F1.4 is done)
66+
- probe: test -z "$(grep -r '?todo_preservation' proofs/verification/idris 2>/dev/null)"
6567
- status: in_progress
66-
- notes: Currently 6 contractile verbs: intend, must, trust, adjust, bust, dust
68+
- notes: Open-context subst2 generalisation from the Coq track is the template
6769

68-
### automation-scripts
69-
- description: All repetitive tasks have just recipes
70-
- probe: grep -c "^# " Justfile | grep -q "^[6-9][0-9]*$"
71-
- status: in_progress
70+
### four-point-semiring
71+
- description: Extend the three-point QTT semiring to four-point affine (add ?)
72+
- status: declared
73+
- notes: F1.2; matches proofs/solo/affine-types/formal-system.md
74+
75+
### echo-parser-syntax
76+
- description: Surface syntax for Echo<A => B> in the solo dialect (slice 2)
77+
- status: declared
7278

7379
## Wishes
7480

7581
### Near Horizon
7682

77-
#### cross-repo-validation
78-
- description: Tooling to validate all repos against RSR spec
79-
- horizon: near
80-
- status: declared
81-
82-
#### automated-substitution
83-
- description: Script to automate repo-specific substitution in template
83+
#### dialect-parity
84+
- description: Duet + Ensemble mechanised cores reach the Solo core's rigour
8485
- horizon: near
8586
- status: declared
8687

8788
### Mid Horizon
8889

89-
#### formal-verification
90-
- description: Idris2 proofs for all critical contractile invariants
90+
#### effects-and-memory-metatheory
91+
- description: Mechanised effect-row + ownership/borrowing soundness (F2/F3)
9192
- horizon: mid
9293
- status: declared
9394

9495
### Far Horizon
9596

96-
#### ecosystem-visualization
97-
- description: Interactive graph of all hyperpolymath repos and dependencies
97+
#### me-projection-runtime
98+
- description: The "Me" projector renders dialect-hierarchy projections on the fly
9899
- horizon: far
99100
- status: declared
101+
- notes: Specified in tentacles-agentic-syllabus/me/README.adoc (out-of-repo)
102+
103+
## Structure Note
104+
105+
The six contractile verbs are intend / must / trust / adjust / bust / dust.
106+
intend, must, trust, adjust are SINGULAR (one flat *.a2ml each). bust and dust
107+
are MULTI-FILE by design and live as directories: one `bust` entry per
108+
failure-mode / issue, one `dust` entry per cleanup intention (e.g. uninstall,
109+
detach-a-component-as-plugin, larger teardown operations).
110+
111+
### contractile-completeness
112+
- description: Four singular verbs present as flat files; bust/ and dust/ present
113+
as (multi-file) directories
114+
- probe: test -f .machine_readable/contractiles/Intentfile.a2ml && test -f .machine_readable/contractiles/Mustfile.a2ml && test -f .machine_readable/contractiles/Trustfile.a2ml && test -f .machine_readable/contractiles/Adjustfile.a2ml && test -d .machine_readable/contractiles/bust && test -d .machine_readable/contractiles/dust
115+
- status: done
116+
- notes: Six verbs; bust/dust are directories (see Structure Note)

0 commit comments

Comments
 (0)