Skip to content

theory: Axis 8 graded access modality — thin slice (Access, ≤a, ≤a-trans, ≤a-prop)#68

Merged
hyperpolymath merged 2 commits into
mainfrom
theory/axis8-access-modality
May 20, 2026
Merged

theory: Axis 8 graded access modality — thin slice (Access, ≤a, ≤a-trans, ≤a-prop)#68
hyperpolymath merged 2 commits into
mainfrom
theory/axis8-access-modality

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Lands the thin-slice obligations 1–6 of the Axis 8 graded access modality (decision: refinement 2 of taxonomy.md §8 / the Axis 8 design study). Mirrors EchoGraded / EchoLinear's order-layer recipe verbatim.

New module proofs/agda/EchoAccess.agda ships:

  1. Access — 5-grade enum (free / decidable / enum / feasible / infeasible).
  2. _≤a_ — Hasse-enumerated access order (15 constructors, one per reachable pair along the chain).
  3. ≤a-trans — transitivity by case-split.
  4. ≤a-prop — propositionality by case-split + refl. The load-bearing lemma per the design's §6 falsifier — DID close on refl for all 15 cases. The recipe lives.
  5. CEcho + EchoAccess — per-grade carrier (freeEcho, decidableEchoDec, enum / feasible / infeasible → minimal Lift ⊤ placeholders) and the Σ-shape package.
  6. access-of, degrade-access — projection + _≤a_-indexed degrade primitive.

Wired into All.agda; headlines pinned in Smoke.agda. No postulates, no escape pragmas, --safe --without-K throughout.

Refs docs/echo-types/roadmap.md Axis 8 entries (line 31 "Theory work" and line 239 roadmap item 6). Does NOT close anything — the follow-up PR below is needed before the lane can be marked landed.

Deferred to follow-up PR

Per the body of EchoAccess.agda and Axis 8 design doc §5 items 5–8:

  • degrade-access-comp / -compose / -via-join — per-decoration composition; the factoring-free closer chain of composition.md §6.
  • _⊔a_ join + ≤a-⊔a-{left,right,univ} — categorical join.
  • Honest carrier for enum / feasible / infeasible (bridge to EchoFiberCount.FiberSize-fin) — the falsifier mode B of the design's §6. The current Lift ⊤ carriers are deliberately minimal so the order layer ships green; promoting them is the design's deferred mitigation.

Agda build

$ LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/All.agda
Checking All (.../proofs/agda/All.agda).
 Checking EchoAccess (.../proofs/agda/EchoAccess.agda).
 Checking Smoke (.../proofs/agda/Smoke.agda).
EXIT=0

$ LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/Smoke.agda
EXIT=0

Agda 2.8.0, stdlib v2.3.

Test plan

  • agda proofs/agda/All.agda exits 0 under --safe --without-K.
  • agda proofs/agda/Smoke.agda exits 0 (verifies pinned headlines resolve).
  • No postulates introduced (greppable in EchoAccess.agda).
  • No escape pragmas (NO_TERMINATION_CHECK, etc.) introduced.
  • ≤a-prop closes on case-split + refl for all 15 constructor pairs (the design's load-bearing test).
  • CI green on the PR.

🤖 Generated with Claude Code

…ans, ≤a-prop)

Lands the thin-slice obligations 1-6 of the Axis 8 graded access
modality (decision: refinement 2 of taxonomy.md §8 / the Axis 8
design study). Mirrors EchoGraded / EchoLinear's order-layer recipe
verbatim:

  1. Access            -- 5-grade enum (free / decidable / enum /
                           feasible / infeasible)
  2. _≤a_              -- Hasse-enumerated access order (15
                           constructors, one per reachable pair)
  3. ≤a-trans          -- transitivity by case-split
  4. ≤a-prop           -- propositionality by case-split + refl;
                           the load-bearing lemma per the design's
                           §6 falsifier — DID close on refl
  5. CEcho + EchoAccess -- per-grade carrier + Σ-shape package
  6. access-of,
     degrade-access    -- projection + _≤a_-indexed degrade

Deferred to the follow-up PR (per the body of EchoAccess.agda and
the Axis 8 design doc §5 items 5-8):

  * degrade-access-comp / -compose / -via-join — per-decoration
    composition; the factoring-free closer chain of
    composition.md §6.
  * _⊔a_ join + ≤a-⊔a-{left,right,univ} — categorical join.
  * Honest carrier for enum / feasible / infeasible (bridge to
    EchoFiberCount.FiberSize-fin) — the falsifier mode B of the
    design's §6. Current carriers are minimal Lift ⊤ placeholders
    so the order layer ships green.

Wired into All.agda; headlines pinned in Smoke.agda. No postulates,
no escape pragmas, --safe --without-K throughout.

Refs docs/echo-types/roadmap.md "Theory work" Axis 8 entry (line 31)
and roadmap item 6 (line 239). Does NOT close anything.

Agda build (Agda 2.8.0, stdlib v2.3):

  $ LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/All.agda
  Checking All (.../proofs/agda/All.agda).
   Checking EchoAccess (.../proofs/agda/EchoAccess.agda).
   Checking Smoke (.../proofs/agda/Smoke.agda).
  EXIT=0

  $ LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/Smoke.agda
  EXIT=0

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath marked this pull request as ready for review May 20, 2026 13:56
@hyperpolymath hyperpolymath merged commit ee1fcf5 into main May 20, 2026
@hyperpolymath hyperpolymath deleted the theory/axis8-access-modality branch May 20, 2026 13:56
hyperpolymath added a commit that referenced this pull request May 20, 2026
…tegration) (#73)

## Summary

Brings the `harden/ci-flake-pin-2026-05-18` stack onto main, with three
logical groupings:

* **Harden foundation (P0/P1)** — closure-hole closure, external fibre
triangulation against stdlib, reproducible CI-via-flake exact pin
(additive verifier). These are the earlier commits on the branch;
structural work, no Agda regressions.
* **Pillar E expansion (commit `8a24530`)** — clears two `[EXPAND]` tags
on `docs/echo-types/paper.adoc`:
- **Background and notation** primer: 6 subsections (type-theoretic
setting, Σ-types + identity, HoTT fibres, coeffect/graded-modality
lineage, thin-poset reindexing modalities, notation summary) plus an
18-row notation table whose every symbol is sourced from a real Agda
module. Explicit on the post-retraction framing.
- **Related work**: 8 per-neighbour subsections (HoTT fibres, graded
comonad/coeffect/QTT, lenses/optics, refinement types, setoid quotients,
provenance semirings, IFC/modal type theories, synthesis). All
`<<reframing-note>>` xrefs resolve.
- `types-abstract.adoc`: per-neighbour related-work positioning block
mirroring the paper. Abstract status remains "NOT submission-ready,
pending re-review" — content alignment only.
* **Licence sweep (commit `2e78761`)** — collapses the
`PMPL-1.0-or-later` SPDX identifier to `MPL-2.0` per owner direction
2026-05-20. 29 source/config files swept; README badge updated;
`stapeln.toml` + `arghda-core/Cargo.toml` license fields; new
`docs/PMPL-NARRATIVE.adoc` records the cultural/discipline overlay PMPL
represented (no legal effect change — MPL-2.0 was already the
lawyer-confirmed operative legal effect).

## Reconciliation needed before merge

`origin/main` has advanced by 7 PRs (#64#70) since this branch's last
merge from main:

* #64#66 bridge work (CNO Agda↔Coq↔Lean4 correspondence, EchoTropical
correspondence appendix, EchoJanusBridge OpKind mirror — substantive
`EchoJanusBridge.agda` +221 / `EchoApprox.agda` +132)
* #67 docs: rule out 2-categorical shape + roadmap credits
* #68 theory: Axis 8 graded access modality (new `EchoAccess.agda`, 262
lines)
* #69 theory: AntiEcho thin slice (new `AntiEcho.agda`, 93 lines)
* #70 theory: EchoApprox composition rung first slice

**Expected conflicts** (deliberate, owner-resolved):
* `paper.adoc` — this PR adds Background primer + Related work; parallel
sessions may have edited adjacent sections
* `types-abstract.adoc` — this PR adds a related-work block
* `flake.nix` — this PR is the full harden-P1 flake; parallel sessions
retained the simpler devShell flake
* `.github/workflows/*.yml`, `.machine_readable/6a2/*.a2ml`,
`contractiles/*.a2ml`, `stapeln.toml`, `README.md`,
`arghda-core/Cargo.toml`, `Containerfile`, `EXPLAINME.adoc`,
`QUICKSTART-*.adoc`, `TOPOLOGY.adoc`,
`docs/echidna-design-search-2026-04-28.adoc`,
`docs/echo-types/MAP.adoc`, `docs/echo-types/echo-kernel-note.adoc`,
`scripts/kernel-guard.sh`, `tools/check-guardrails.sh` — licence sweep;
conflicts with parallel sessions that kept PMPL headers (resolve by
taking this PR's MPL-2.0)

## Test plan

- [ ] CI green: governance + Agda + Hypatia scans + Scorecard
- [ ] `flake.nix` `nix flake check` passes (additive verifier)
- [ ] `agda proofs/agda/All.agda` and `agda proofs/agda/Smoke.agda` both
exit 0 under `--safe --without-K`, zero postulates (no Agda was touched
by this branch's recent commits, so this should be a verification-only
step)
- [ ] AsciiDoc render of `paper.adoc` — confirm all `<<reframing-note>>`
xrefs resolve
- [ ] `docs/PMPL-NARRATIVE.adoc` reads coherently
- [ ] No remaining `PMPL`/`Palimpsest` strings outside
`docs/PMPL-NARRATIVE.adoc` + the one intentional pointer in
`ECOSYSTEM.a2ml`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 20, 2026
…eferred) (#75)

## Summary

Extends `proofs/agda/EchoAccess.agda` (the PR #68 thin slice) with the
join structure and per-decoration composition trio, completing the same
recipe as `EchoGraded` and `EchoLinear` at the per-decoration
composition rung.

**Rung A — categorical join structure.** `_⊔a_` (componentwise max along
`free ≤ decidable ≤ enum ≤ feasible ≤ infeasible`) + `≤a-⊔a-left` +
`≤a-⊔a-right` + `≤a-⊔a-univ` (universal property).

**Rung B — per-decoration composition trio.**
* `degrade-access-comp` — two successive degrades along a factoring
agree with one degrade along the composed proof. Closes `refl` on every
reachable `(p12, p23)` constructor pair (the carriers reduce in
lock-step with `≤a-trans`).
* `degrade-access-compose` — factoring-free composition; corollary of
`degrade-access-comp` + `≤a-prop`.
* `degrade-access-via-join` — same law restated through the join.

**Rung C — honest carriers — deferred with design note.** An honest
`enum`-grade carrier needs an enumerator `Fin n → A` and a decider on
`B`. Neither can be supplied without breaking the parametricity over `A`
that `Echo f y` enjoys at the `free` grade. The two clean resolutions
are (a) parameterise the whole `CEcho` family on `Decidable B` + an
enumeration witness (forces every caller to supply them, even at `free`
where they do nothing), or (b) bury both in an existential inside the
`enum` / `feasible` / `infeasible` cases (loses the ability to extract
from outside). Both are real architectural choices — the PR brief's
Stop-condition explicitly flagged this as the design-decision case and
instructed landing A + B with a written deferral.

Importantly, the composition layer that lands here is **grade-indexed
not carrier-indexed**, so it is unaffected by the eventual carrier
choice. Module preamble carries the full deferral note.

All new headlines pinned in `Smoke.agda`. Module preamble section list
refreshed; `degrade-access` follow-up commentary updated. No new imports
beyond `sym` from `Relation.Binary.PropositionalEquality`. No
postulates. `--safe --without-K` preserved throughout.

## Build status

**BUILD UNVERIFIED LOCALLY** — the sandbox repeatedly blocked `agda`
invocations on positional file arguments (the known quirk that hit PRs
#71 + #72). Parent session will verify (`LC_ALL=C.UTF-8 agda -i
proofs/agda proofs/agda/All.agda` and same for `Smoke.agda`, both
expected to exit 0) and post a confirmation comment.

The mathematical content is mechanical mirror of
`EchoGraded.{degrade-comp, degrade-compose, degrade-via-join, ⊔g,
≤g-⊔g-*}` (with 5 grades instead of 3) and
`EchoLinear.{degradeMode-comp, degradeMode-compose,
degradeMode-via-join, ⊔m, ≤m-⊔m-*}` (with 5 grades instead of 2). Every
clause closes `refl` modulo the `≤a-trans` reduction table that already
ships in PR #68.

## Refs

Refs PR #68 (the thin slice), `docs/echo-types/roadmap.md` Axis 8 entry,
`/tmp/echo-types-exploration/axis8.md` §5 deferred list.

## Test plan

- [ ] `LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/All.agda` exits 0.
- [ ] `LC_ALL=C.UTF-8 agda -i proofs/agda proofs/agda/Smoke.agda` exits
0.
- [ ] No postulates / no escape pragmas / `--safe --without-K`
preserved.
- [ ] All seven new headline names resolve in `Smoke.agda`.

Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 20, 2026
…luster landed (#92)

## Summary

Three small accuracy passes through `docs/echo-types/` after the
earn-back programme, the §"Theory work — no proof assistant needed"
section, and the canonical examples cluster (5/9/10) all closed in
this session. Pure prose; no Agda changes.

### 1. `roadmap.md` §"Theory work" — two stale items refreshed

* **Axis 8** line said the *decidability-respecting* candidate had
  shipped but listed the other three as still candidate refinements.
  All four have now shipped: `EchoDecidable`, `EchoCost` (#85),
  `EchoAccess` (#68 / #75), `EchoSearch` (#80). Updated to credit all
  four.
* **Negative / co-echoes** line was `[unblocked]`; now `[landed]` —
  `AntiEcho` (#69), tropical decomposition concrete + generic (#72 +
  #91), `antiecho-partition-dec` (#90). Names the `coecho.md` §5
  obligation-5 / obligation-6 closures explicitly.

After these edits, every item in §"Theory work — no proof assistant
needed" is either `[landed]` or `[ruled out]`/`[refreshed]` — the
section is genuinely closed.

### 2. `roadmap.md` §"Example work" — three items landed

* ex. 5 (`EchoExampleProvenance`, #81) → `[landed]`
* ex. 9 (`EchoExampleParser`, #83) → `[landed]`
* ex. 10 (`EchoExampleAbsInt`, #82) → `[landed]`

Only ex. 6 (approximate-echo numeric example) remains `[unblocked]`.

### 3. `earn-back-plan.adoc` — stale `roadmap-gates.adoc` claim
corrected

* Header note used to say "the gate discipline was historically
  attributed to a `roadmap-gates.adoc`; that file does not exist
  in-tree". The file **does** exist (created 2026-05-18; see its
  preamble). Header rewritten to list `roadmap-gates.adoc` alongside
  `retractions.adoc` / this plan / `next-questions.adoc` as the four
  canonical loci.
* Ledger row D (the "doesn't exist" entry) marked **CLOSED 2026-05-20**
  with the cite reflecting current reality.

## Test plan

* [x] Pure docs / `.adoc` / `.md` edits — no Agda touched
* [x] `agda proofs/agda/All.agda` exit 0 (confirms docs match code)
* [x] `agda proofs/agda/Smoke.agda` exit 0
* [x] No retracted-claim language moved; no earned-back claim
      overclaimed; `paper.adoc` / `types-abstract.adoc` /
      `conservativity.adoc` untouched

## Scope

Disjoint from all currently-open PRs:
* #88 (F3) — touches Agda + `retractions.adoc` (different sections)
  + `earn-back-plan.adoc` Status (different section from header /
  ledger-D)
* #90 (partition-dec) — touches Agda only
* #91 (generic-codomain) — touches Agda + preamble comments

No retracted claim is moved. No earned-back claim is overclaimed.
`paper.adoc` / `types-abstract.adoc` / `conservativity.adoc` are
intentionally untouched (owner-gated, per the posture set by #86 /
#88).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 10 issues detected

Severity Count
🔴 Critical 0
🟠 High 5
🟡 Medium 5
View findings
[
  {
    "reason": "No test directory or test files found",
    "type": "no_tests",
    "file": "/home/runner/work/echo-types/echo-types",
    "action": "flag",
    "rule_module": "honest_completion",
    "severity": "high",
    "deduction": 20
  },
  {
    "reason": "Issue in quality.yml",
    "type": "missing_workflow",
    "file": "quality.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in security-policy.yml",
    "type": "missing_workflow",
    "file": "security-policy.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in secret-scanner.yml",
    "type": "missing_workflow",
    "file": "secret-scanner.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Action actions/cache@v4 needs attention",
    "type": "unpinned_action",
    "file": "agda.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Action hyperpolymath/standards/.github/workflows/governance-reusable.yml@main needs attention",
    "type": "unpinned_action",
    "file": "governance.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "No dependabot.yml or renovate.json found in echo-types",
    "type": "DependencyUpdate",
    "file": "/home/runner/work/echo-types/echo-types",
    "action": "auto_fix",
    "rule_module": "scorecard",
    "severity": "high",
    "remediation": "Add .github/dependabot.yml or renovate.json configuration.",
    "scorecard_check": "Dependency-Update-Tool"
  },
  {
    "reason": "Nominal-only SAST in echo-types: codeql.yml language matrix contains no language present in the repo and lacks `actions`, so CodeQL records zero results on every commit. Remediation: set the CodeQL matrix to `language: actions`.",
    "type": "StaticAnalysis",
    "file": "/home/runner/work/echo-types/echo-types",
    "action": "auto_fix",
    "rule_module": "scorecard",
    "severity": "medium",
    "remediation": "Add CodeQL or equivalent SAST workflow.",
    "scorecard_check": "SAST"
  },
  {
    "reason": "1 workflow(s) with tag-pinned (not SHA-pinned) actions in echo-types",
    "type": "DependencyPinning",
    "file": "/home/runner/work/echo-types/echo-types",
    "action": "auto_fix",
    "rule_module": "scorecard",
    "severity": "medium",
    "remediation": "Pin GitHub Actions and Docker base images by SHA hash.",
    "scorecard_check": "Pinned-Dependencies"
  },
  {
    "reason": "Repository has 1 non-main remote branch(es). Policy: single main branch only.",
    "type": "GS007",
    "file": ".",
    "action": "delete_remote_branches",
    "rule_module": "git_state",
    "severity": "medium"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant