From 6c0519f8b1f1d625237e00712c7c2c7a2d806ce9 Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Sun, 6 Sep 2026 11:44:59 -0700 Subject: [PATCH 01/20] Add audited From Photons to the Macroverse research package Preserve candidate standing, repair measurement and subject-selection contracts, pin provenance, add a frozen synthetic preregistration, and keep canonical, empirical, and clinical standing nontransferring. --- .../workflows/from-photons-to-macroverse.yml | 28 + README.md | 5 +- research/from-photons-to-macroverse/AUDIT.md | 77 +++ .../CLAIM_LEDGER.json | 107 ++++ .../DOMAIN_CLAIM.json | 103 ++++ .../EXTERNAL_EVIDENCE.md | 22 + research/from-photons-to-macroverse/PAPER.md | 45 ++ .../PREREGISTRATION.md | 180 +++++++ research/from-photons-to-macroverse/README.md | 68 +++ .../SOURCE_RECEIPT.json | 58 +++ .../SYMBOL_REGISTRY.md | 42 ++ .../WORK_GRAPH.json | 152 ++++++ .../paper/00-frontmatter.md | 33 ++ .../paper/01-bound-states-and-open-systems.md | 411 +++++++++++++++ .../paper/01-claim-and-photons.md | 291 +++++++++++ .../paper/02-dynamics-and-agency.md | 487 ++++++++++++++++++ .../paper/03-arity-and-recursion.md | 320 ++++++++++++ .../03-availability-and-self-location.md | 282 ++++++++++ .../paper/04-subject-and-i-event.md | 414 +++++++++++++++ .../paper/05-geometry-heptad-neural.md | 457 ++++++++++++++++ ...6-falsification-program-and-limitations.md | 87 ++++ .../06-macroverse-ladder-and-predictions.md | 196 +++++++ .../paper/07-conclusion-and-appendices.md | 197 +++++++ .../paper/07-references-and-hmmm.md | 39 ++ .../paper/manifest.json | 79 +++ .../source/README.md | 17 + .../tests/test_contracts.py | 145 ++++++ .../tools/assemble_paper.py | 51 ++ 28 files changed, 4391 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/from-photons-to-macroverse.yml create mode 100644 research/from-photons-to-macroverse/AUDIT.md create mode 100644 research/from-photons-to-macroverse/CLAIM_LEDGER.json create mode 100644 research/from-photons-to-macroverse/DOMAIN_CLAIM.json create mode 100644 research/from-photons-to-macroverse/EXTERNAL_EVIDENCE.md create mode 100644 research/from-photons-to-macroverse/PAPER.md create mode 100644 research/from-photons-to-macroverse/PREREGISTRATION.md create mode 100644 research/from-photons-to-macroverse/README.md create mode 100644 research/from-photons-to-macroverse/SOURCE_RECEIPT.json create mode 100644 research/from-photons-to-macroverse/SYMBOL_REGISTRY.md create mode 100644 research/from-photons-to-macroverse/WORK_GRAPH.json create mode 100644 research/from-photons-to-macroverse/paper/00-frontmatter.md create mode 100644 research/from-photons-to-macroverse/paper/01-bound-states-and-open-systems.md create mode 100644 research/from-photons-to-macroverse/paper/01-claim-and-photons.md create mode 100644 research/from-photons-to-macroverse/paper/02-dynamics-and-agency.md create mode 100644 research/from-photons-to-macroverse/paper/03-arity-and-recursion.md create mode 100644 research/from-photons-to-macroverse/paper/03-availability-and-self-location.md create mode 100644 research/from-photons-to-macroverse/paper/04-subject-and-i-event.md create mode 100644 research/from-photons-to-macroverse/paper/05-geometry-heptad-neural.md create mode 100644 research/from-photons-to-macroverse/paper/06-falsification-program-and-limitations.md create mode 100644 research/from-photons-to-macroverse/paper/06-macroverse-ladder-and-predictions.md create mode 100644 research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md create mode 100644 research/from-photons-to-macroverse/paper/07-references-and-hmmm.md create mode 100644 research/from-photons-to-macroverse/paper/manifest.json create mode 100644 research/from-photons-to-macroverse/source/README.md create mode 100644 research/from-photons-to-macroverse/tests/test_contracts.py create mode 100755 research/from-photons-to-macroverse/tools/assemble_paper.py diff --git a/.github/workflows/from-photons-to-macroverse.yml b/.github/workflows/from-photons-to-macroverse.yml new file mode 100644 index 0000000..6f22ee0 --- /dev/null +++ b/.github/workflows/from-photons-to-macroverse.yml @@ -0,0 +1,28 @@ +name: from-photons-to-macroverse + +on: + pull_request: + paths: + - "research/from-photons-to-macroverse/**" + - "README.md" + - ".github/workflows/from-photons-to-macroverse.yml" + push: + branches: [main] + paths: + - "research/from-photons-to-macroverse/**" + - "README.md" + - ".github/workflows/from-photons-to-macroverse.yml" + +permissions: + contents: read + +jobs: + contracts: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-python@v6 + with: + python-version: "3.12" + - name: Validate From Photons to the Macroverse research boundaries + run: python -m unittest discover -s research/from-photons-to-macroverse/tests -q diff --git a/README.md b/README.md index 6ebc994..f7db32c 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,8 @@ stack/ │ ├── pcea/ # current PCEA research + BASE.json │ ├── ptcna/ # current PTCNA research + BASE.json │ ├── epac/ # extracted candidate remains forge-side until graduation completes -│ └── psychsocio-metafauna/ # proposed pattern-lineage, coalescence, accountability research +│ ├── psychsocio-metafauna/ # proposed pattern-lineage, coalescence, accountability research +│ └── from-photons-to-macroverse/ # audited consciousness-first candidate research ├── ahbg/ # emerging composed benchmark/game workspace ├── backend/ # PostgreSQL-backed durable fresh-making control plane ├── frontend/ @@ -78,7 +79,7 @@ stack-local implementation. Psychsocio metafauna remains in that pre-graduation state. EPAC has an independent extracted repository, but extraction is not graduation: its forge research remains here until EPAC completes its release, downstream reconsumption, and authority-transition -gates. +gates. From Photons to the Macroverse is also stack-local pre-graduation research. ### Make derived artifacts fresh without depending on hosted CI diff --git a/research/from-photons-to-macroverse/AUDIT.md b/research/from-photons-to-macroverse/AUDIT.md new file mode 100644 index 0000000..c49aa3a --- /dev/null +++ b/research/from-photons-to-macroverse/AUDIT.md @@ -0,0 +1,77 @@ +# Audit + +## Baseline + +- Target: `The-Interdependency/stack@77ef8c7fb0ff75a524181655ee9f9641372768f7` +- Original Markdown: external library artifact, SHA-256 `f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696` +- Editable DOCX: SHA-256 `18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa2`, rendered to 49 pages +- Submitted PDF: SHA-256 `e1715a26b46b210a821e8bef72df934646e330e03489bf1e9b97a1b8e786e6f4`, 49 pages +- Audit doctrine: `The-Interdependency/skill-lib@61eb3b14db440e6ee9b7bf8de3b646dbfd00fb32` +- Domain restraint: `The-Interdependency/metapat@d6699e21b11c8f8394998efc34a468e2d6efc8b0` +- Current UCNS candidate boundary: `The-Interdependency/ucns@ef98748309913588fb13f389f809d5ef6cb5fec3` + +The originals are immutable external evidence with exact hashes. `PAPER.md` indexes the full audited revision stored as ordered, hash-bound fragments in `paper/`. The package does not overwrite history or call stack-local placement canon. + +## Disposition + +**SURVIVED as a candidate research program.** It did not survive as established physics, established consciousness science, a validated measurement, or a human heptadic result. + +## Findings + +### F-00 - parsed-text endpoint was not a paper defect + +The source Markdown and rendered PDF page 15 state `D(Z) in [0,1]`. The parsed PDF text substituted a parenthesis for the closing bracket. The false finding was removed. + +### F-01 - degenerate boundary support - DEFECT, REPAIRED + +The original epsilon denominator returns an apparently perfect boundary score when both conditional entropy and mutual information vanish. The audited paper now requires `H_b >= tau_H`; otherwise the score is `hmmm_undefined`. + +### F-02 - uncertified expectations - UNDERSPECIFIED, REPAIRED + +Agency, model-to-action, global availability, self-location, and the descriptor family depended on expectations without fully binding reference distributions and support. The revision adds named reference distributions and a common measurement certificate. + +### F-03 - single argmax cannot select nonoverlapping subjects - DEFECT, REPAIRED BUT UNRESOLVED + +The original equation selected one candidate while the prose claimed a maximal nonoverlapping closure population. The audited revision defines a score-maximizing family with pairwise constitutive nonoverlap. Hard exclusion remains only one model and must compete with nesting and overlap-capable rules. + +### F-04 - triadic minimum could be read as sufficient - ARCHITECTURAL OVERREACH, REPAIRED + +Triadic mutual coupling with constraint modulation is now a candidate necessary architecture only. The bounded-subject conjunction remains mandatory; a triad alone is not a subject. + +### F-05 - ontological priority drifted into chronology - CLAIM DRIFT, REPAIRED + +The sentence claiming organized consciousness precedes biological life as a pattern class exceeded P0's declared ontological meaning. The revision preserves P0 while marking non-biological and pre-biological embodiments logically open and empirically unestablished. + +### F-06 - typography carried machine type information - INTERFACE DEFECT, REPAIRED + +Distinct mathematical fonts made several meanings legible to a human but collapse in plain text. `SYMBOL_REGISTRY.md` assigns machine names and forbids bare `consciousness` in executable schemas. + +### F-07 - neighboring repository state changed - STALE DEPENDENCY, UPDATED + +UCNS now has an executable candidate exact visible-circle continuum/gonal trace. It remains unratified, not native-Möbius complete, and semantically nontransferring. The revision records precisely that and nothing stronger. + +### F-08 - bibliography drift - METADATA DEFECT, UPDATED + +The revision binds the eLife Version of Record, the 2026 PDG edition, the complete Goff citation, and the 2026 cross-species causal protocol. None validates the paper's nonstandard claims. + +## Healthy load-bearing structure + +- The paper labels known, derived, model, hypothesis, postulate, and falsifier standings. +- It refuses the interference-to-matter shortcut and preserves established QED/QCD/nuclear/atomic boundaries. +- It distinguishes primitive presence, organized subjecthood, and content. +- It separates direct arity from recursion depth and requires exact carrier labels. +- It contains explicit predictions, failure conditions, limitations, and an honest subject-individuation problem. + +## Verification performed + +- All 49 submitted PDF pages rendered and visually inspected: healthy. +- Exact 49-page DOCX counterpart located, hashed, rendered, and compared structurally. +- Exact Markdown authoring source located and hashed; it remains an external input rather than being silently rewritten or promoted to repository authority. +- Current stack, skill-lib, METAPAT, UCNS, EDCM, PCEA, and EPAC identities pinned. +- Current primary-source reference metadata checked. +- Contract suite passes locally. +- Audited revision assembled from `paper/` and rendered to a 58-page PDF with Pandoc/XeLaTeX; all pages were rendered at 150 DPI and visually inspected with no clipping, overlap, blank pages, black squares, or missing glyphs observed. The convenience render is not repository authority and is not vendored. + +## hmmm + +References 21 and 22 remain unbound to immutable artifacts. The synthetic arity/recursion protocol is not run. Subject exclusion, heptadic necessity, biological carrier labels, the I-event, and P0 remain unresolved at their declared standings. The mathematics now has fewer loose shoelaces; it has not acquired wings. diff --git a/research/from-photons-to-macroverse/CLAIM_LEDGER.json b/research/from-photons-to-macroverse/CLAIM_LEDGER.json new file mode 100644 index 0000000..12ec8fe --- /dev/null +++ b/research/from-photons-to-macroverse/CLAIM_LEDGER.json @@ -0,0 +1,107 @@ +{ + "schema_version": "1.0.0", + "project": "from-photons-to-macroverse", + "revision": "0.2.0-audited", + "source_sha256": "f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696", + "paper_sha256": "aba1e180c8ecf1c9bda92b20bb0c773befc33ad7322f6cbc1e6c48564251aa92", + "claims": [ + { + "id": "P0_ONTOLOGICAL_PRIORITY", + "standing": "POSTULATE", + "status": "PRESERVED_NOT_VALIDATED", + "audited_statement": "Primitive intrinsic presence is ontologically prior within the theory dependency graph; this is not a chronology claim and is not derived from physics.", + "falsifier_or_boundary": "Empirical work may constrain consequences and explanatory value but cannot relabel the postulate as a known physical law without an independent derivation." + }, + { + "id": "PHYSICS_FIREWALL", + "standing": "KNOWN_DERIVED", + "status": "HEALTHY", + "audited_statement": "The physical ladder distinguishes photons, QED interactions, QCD hadrons, nuclei, atoms, radiative stabilization, and chemistry; it does not rename interference as matter or subjecthood.", + "falsifier_or_boundary": "Any consciousness interpretation must leave tested physics unchanged." + }, + { + "id": "DIFFERENTIATION_RANGE", + "standing": "DERIVED", + "status": "HEALTHY_PARSER_ARTIFACT_CLOSED", + "audited_statement": "The exact Markdown, DOCX render, and PDF page 15 state D(Z)=H(Z)/log|Z| in [0,1]. A parsed-text closing-parenthesis appearance was not a source defect.", + "falsifier_or_boundary": "The uniform distribution attains 1; any future source that excludes 1 is defective." + }, + { + "id": "BOUNDARY_INTEGRITY_SUPPORT", + "standing": "MODEL", + "status": "REPAIRED", + "audited_statement": "B_bdry is defined only when conditional entropy support H_b meets preregistered threshold tau_H; below threshold it is hmmm_undefined.", + "falsifier_or_boundary": "A constant system may not receive a perfect boundary score from a smoothing epsilon." + }, + { + "id": "MEASUREMENT_CERTIFICATE", + "standing": "MODEL_CONTRACT", + "status": "ADDED", + "audited_statement": "Every estimated component binds variables, scale, estimator, interventions, reference distribution, support, horizon, normalization, uncertainty, and data/code identity.", + "falsifier_or_boundary": "Uncertified or unsupported numbers have no comparable standing and cannot classify consciousness." + }, + { + "id": "TRIADIC_MINIMUM", + "standing": "HYPOTHESIS", + "status": "REPAIRED_NECESSARY_NOT_SUFFICIENT", + "audited_statement": "A mutually coupled triad with constraint modulation is a candidate necessary architecture only; triadicity alone is neither subjecthood nor consciousness.", + "falsifier_or_boundary": "Matched dyadic, triadic, higher-arity, feed-forward, and equal-capacity controls must test the structural claim." + }, + { + "id": "BIOLOGY_EMBODIMENT", + "standing": "POSTULATE_HYPOTHESIS_BOUNDARY", + "status": "REPAIRED", + "audited_statement": "P0 supplies ontological priority. Biology is an established embodiment considered by the paper; pre-biological or non-biological organized subjects remain logically open but empirically unestablished.", + "falsifier_or_boundary": "The mathematics does not establish chronological pre-biological organized consciousness." + }, + { + "id": "SUBJECT_FAMILY_SELECTION", + "standing": "MODEL_HYPOTHESIS", + "status": "REPAIRED_BUT_UNRESOLVED", + "audited_statement": "A hard-exclusion subject model now selects a score-maximizing family of pairwise constitutively nonoverlapping candidates rather than calling one argmax a nonoverlapping population.", + "falsifier_or_boundary": "Hard exclusion must be compared against nesting, overlap-penalty, split, and coupled-subject rules; no rule is selected as canon." + }, + { + "id": "ARITY_RECURSION_SEPARATION", + "standing": "MODEL_HYPOTHESIS", + "status": "HEALTHY_CANDIDATE", + "audited_statement": "Direct arity, exact carrier labels, and recursion depth remain distinct structural variables; circle count does not count nested contents.", + "falsifier_or_boundary": "Equal-budget lower-, adjacent-, wrong-tree, unnested, and label-shuffled controls must fail to reconstruct held-out structure." + }, + { + "id": "HUMAN_HEPTAD", + "standing": "HYPOTHESIS", + "status": "UNVALIDATED_HIGH_RISK", + "audited_statement": "Human consciousness is hypothesized to require seven outer carriers and recursion depth at least two; no empirical carrier map or advantage over matched controls exists.", + "falsifier_or_boundary": "Six, eight, arbitrary-seven, unnested-seven, and lower-arity controls are mandatory." + }, + { + "id": "UCNS_VISIBLE_BOUNDARY_TRACE", + "standing": "EXTERNAL_CANDIDATE_INPUT", + "status": "CURRENT_BOUNDARY_PINNED", + "audited_statement": "UCNS ef98748309913588fb13f389f809d5ef6cb5fec3 has an executable candidate exact visible-circle continuum/gonal trace with no ratification, no native Möbius completion, and no physical or consciousness meaning transfer.", + "falsifier_or_boundary": "Executability does not select the representation as UCNS canon or validate this theory." + }, + { + "id": "SOURCE_REFERENCES_21_22", + "standing": "HMMM", + "status": "UNRESOLVED_PROVENANCE", + "audited_statement": "The consolidation note identifies the two manuscript titles and roles, but no immutable file or repository identity was found for either manuscript.", + "falsifier_or_boundary": "Bind each title to an exact artifact hash or repository commit before treating it as independently inspectable evidence." + }, + { + "id": "REFERENCE_METADATA", + "standing": "BIBLIOGRAPHIC", + "status": "UPDATED", + "audited_statement": "Reference 17 now uses the eLife Version of Record DOI; reference 24 uses the 2026 PDG edition; reference 31 includes volume, issue, pages, and DOI; references 32-33 record current UCNS and a 2026 causal protocol.", + "falsifier_or_boundary": "Bibliographic currency does not transfer empirical support to the candidate theory." + } + ], + "hmmm": [ + "Immutable artifact identities for source manuscripts 21 and 22.", + "Run the frozen synthetic arity and recursion comparison.", + "Compare hard nonoverlap with nesting and overlap-capable subject rules.", + "Define and preregister any biological seven-carrier mapping only after synthetic structural discrimination.", + "Resolve repository-wide licensing before claiming reuse permissions." + ] +} diff --git a/research/from-photons-to-macroverse/DOMAIN_CLAIM.json b/research/from-photons-to-macroverse/DOMAIN_CLAIM.json new file mode 100644 index 0000000..3e6a129 --- /dev/null +++ b/research/from-photons-to-macroverse/DOMAIN_CLAIM.json @@ -0,0 +1,103 @@ +{ + "schema_version": "1.0.0", + "claim_id": "from-photons-to-macroverse", + "bounded_sense": "A stack-local candidate research program connecting established physical and mathematical descriptions to explicit, separately marked models, hypotheses, and metaphysical postulates about organized subjecthood and shared macroscopic reality.", + "claim_status": "stack-local research; not canon; not empirically validated; not clinical; not a human classifier", + "included_uses": [ + "audit claim standing and mathematical type consistency", + "construct matched synthetic arity and recursion controls", + "compare subject-boundary selection rules", + "design preregistered causal and recovery experiments", + "preserve source and revision provenance" + ], + "excluded_uses": [ + "derive primitive consciousness from Maxwell equations, quantum field theory, UCNS, METAPAT, EPAC, PCEA, or EDCM", + "treat a photon, standing wave, Möbius carrier, information score, triad, or heptad as automatic evidence for consciousness", + "clinical diagnosis, prognosis, treatment, or determination of personhood", + "classify a human, animal, model, organization, or machine as conscious", + "claim an extra spacetime dimension from organizational recursion", + "promote prime arities or seven carriers by numerology or diagram", + "transfer authority or validation from adjacent repositories" + ], + "defined_terms": [ + { + "term_id": "primitive_intrinsic_presence", + "symbol": "C0", + "standing": "postulate" + }, + { + "term_id": "organized_descriptor", + "symbol": "C_org(t)", + "standing": "model" + }, + { + "term_id": "candidate_content", + "symbol": "Z_t", + "standing": "model" + }, + { + "term_id": "boundary_integrity", + "symbol": "B_bdry", + "standing": "model" + }, + { + "term_id": "subject_family", + "symbol": "P_t", + "standing": "model/hypothesis" + }, + { + "term_id": "direct_arity", + "symbol": "n_out", + "standing": "structural model datum" + }, + { + "term_id": "recursion_depth", + "symbol": "d_rec", + "standing": "structural model datum" + }, + { + "term_id": "macroverse", + "symbol": "M_macro", + "standing": "model/hypothesis" + } + ], + "term_collisions": [ + { + "surface": "consciousness", + "resolution": "always qualify as primitive intrinsic presence, organized subjecthood, or content" + }, + { + "surface": "M", + "resolution": "separate macroverse, internal model, model efficacy, Möbius band, and filling manifold" + }, + { + "surface": "B", + "resolution": "separate boundary integrity, body, block, and carrier" + }, + { + "surface": "A", + "resolution": "separate action, agency score, torus automorphism, and aggregate" + }, + { + "surface": "I", + "resolution": "separate mutual information, identity map, incidence, and I-event" + } + ], + "no_transfer": { + "metapat_root_impact": "none", + "ucns_geometry_to_consciousness": false, + "ucns_ratification_transfer": false, + "edcm_validation_claim": false, + "pcea_security_to_ontology": false, + "epac_internal_result_to_external_physics": false, + "clinical_or_personhood_use": false, + "canon_selection": null + }, + "hmmm": [ + "Immutable artifact identities for source manuscripts 21 and 22.", + "Run the frozen synthetic arity and recursion comparison.", + "Compare hard nonoverlap with nesting and overlap-capable subject rules.", + "Define and preregister any biological seven-carrier mapping only after synthetic structural discrimination.", + "Resolve repository-wide licensing before claiming reuse permissions." + ] +} diff --git a/research/from-photons-to-macroverse/EXTERNAL_EVIDENCE.md b/research/from-photons-to-macroverse/EXTERNAL_EVIDENCE.md new file mode 100644 index 0000000..cfea391 --- /dev/null +++ b/research/from-photons-to-macroverse/EXTERNAL_EVIDENCE.md @@ -0,0 +1,22 @@ +# External evidence and non-transfer ledger + +Status checked: 2026-09-06. + +| Source | What it supports | What it does not support | +|---|---|---| +| 2025 Nature adversarial IIT/GNWT study, DOI `10.1038/s41586-025-08888-1` | preregistered divergent predictions, multimodal measurement, partial support and substantial challenges to both theories | P0, prime arities, a seven-carrier decomposition, Möbius substrate, or the I-event | +| Luppi et al. 2024 eLife Version of Record, DOI `10.7554/eLife.88173.4` | reduced synergistic workspace integration under anesthesia and disorders of consciousness with restoration on recovery | a validated `Phi_c`, a direct arity count, or a heptadic threshold | +| Gibbons et al. 2026 PLOS ONE protocol, DOI `10.1371/journal.pone.0342770` | cross-species adversarial design with planned causal manipulation | experimental results or support for this theory | +| 2026 Particle Data Group, DOI `10.1142/S0217751X26300115` | current particle-physics reference baseline | consciousness, subjecthood, or scale closure | +| NIST Atomic Spectra Database 5.12, DOI `10.18434/T4W30F` | current official atomic spectra and ionization reference used by the paper | any metaphysical or consciousness bridge | +| Goff 2024, DOI `10.53765/20512201.31.3.056` | corrected bibliographic identity for one philosophical comparison source | empirical validation of P0 or subject formation | +| UCNS `ef98748309913588fb13f389f809d5ef6cb5fec3` | executable candidate exact visible-circle continuum/gonal trace within declared geometry | UCNS ratification, native Möbius completion, physical selection, PCEA/EPAC meaning, or consciousness | +| METAPAT `d6699e21b11c8f8394998efc34a468e2d6efc8b0` | domain-restraint rule: imported domains may clarify tools without altering the root | ownership of the paper's consciousness ontology or empirical claims | + +## Consequence + +The paper remains a candidate program. External work can constrain methods, known physics, and comparison baselines. It cannot silently turn a metaphysical postulate or arity hypothesis into an established result. + +## hmmm + +The literature can sharpen the knife; it cannot perform the missing experiment for us. diff --git a/research/from-photons-to-macroverse/PAPER.md b/research/from-photons-to-macroverse/PAPER.md new file mode 100644 index 0000000..fd240c0 --- /dev/null +++ b/research/from-photons-to-macroverse/PAPER.md @@ -0,0 +1,45 @@ +# From Photons to the Macroverse - audited paper source + +The full `0.2.0-audited` paper is stored as ordered, hash-bound Markdown fragments in [`paper/`](paper/). This entrypoint remains small so GitHub readers can navigate the paper without treating a generated binary as source authority. + +## Read in order + +1. [`00-frontmatter.md`](paper/00-frontmatter.md) +2. [`01-claim-and-photons.md`](paper/01-claim-and-photons.md) +3. [`01-bound-states-and-open-systems.md`](paper/01-bound-states-and-open-systems.md) +4. [`02-dynamics-and-agency.md`](paper/02-dynamics-and-agency.md) +5. [`03-arity-and-recursion.md`](paper/03-arity-and-recursion.md) +6. [`03-availability-and-self-location.md`](paper/03-availability-and-self-location.md) +7. [`04-subject-and-i-event.md`](paper/04-subject-and-i-event.md) +8. [`05-geometry-heptad-neural.md`](paper/05-geometry-heptad-neural.md) +9. [`06-macroverse-ladder-and-predictions.md`](paper/06-macroverse-ladder-and-predictions.md) +10. [`06-falsification-program-and-limitations.md`](paper/06-falsification-program-and-limitations.md) +11. [`07-conclusion-and-appendices.md`](paper/07-conclusion-and-appendices.md) +12. [`07-references-and-hmmm.md`](paper/07-references-and-hmmm.md) + +## Assemble the exact paper + +From the repository root: + +```bash +python research/from-photons-to-macroverse/tools/assemble_paper.py \ + --output /tmp/from_photons_to_macroverse_audited_0.2.0.md +``` + +The assembler validates every fragment and the complete paper against [`paper/manifest.json`](paper/manifest.json). It refuses partial or drifted input. + +## Render a convenience PDF + +```bash +pandoc /tmp/from_photons_to_macroverse_audited_0.2.0.md \ + --from=markdown+tex_math_single_backslash+tex_math_dollars \ + --pdf-engine=xelatex --toc --number-sections \ + --metadata linkcolor=blue \ + -o /tmp/from_photons_to_macroverse_audited_0.2.0.pdf +``` + +The Markdown fragments and their manifest are authority. The PDF is a derived reading artifact. + +## hmmm + +A monolith is convenient until it becomes the only place a distinction can hide. The assembler has been instructed not to develop opinions. diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md new file mode 100644 index 0000000..ed0ad2c --- /dev/null +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -0,0 +1,180 @@ +# Preregistration: matched arity and recursion discrimination + +```text +protocol version: 0.2.0 +run status: not-run +human subjects: none +animal subjects: none +clinical use: none +LLM calls: none +primary domain: synthetic stochastic dynamical systems +``` + +## Question + +Do direct arity and recursion depth provide held-out intervention and recovery structure +that cannot be recovered by matched lower-arity, wrong-arity, partitioned, unnested, or +label-shuffled models? + +This experiment does **not** test P0 or whether any system is conscious. It tests whether +the structural variables used by the theory earn predictive standing before biological +interpretation. +It is a model-recovery and identifiability test. Even a `SURVIVED` result would show only +that the frozen synthetic structures are distinguishable under the admitted observations +and interventions; it would not show that nature uses those structures. + +## Frozen hypotheses + +- `H_A`: when data are generated by a declared irreducible `n`-carrier closure, the + correct direct-arity model outperforms all preregistered controls on held-out + interventional prediction and perturbation recovery. +- `H_R`: when data are generated by a declared nested closure, the correct recursion + tree outperforms an unnested model with matched state dimension and parameter budget. +- `H_7`: a seven-carrier nested model receives no special standing unless it passes the + same criteria as every other arity and additionally beats six-carrier, eight-carrier, + arbitrary-seven, and unnested-seven controls. + +## Systems + +Construct synthetic systems at direct arities `n in {2,3,5,6,7,8}`. Each carrier has the +same local state dimension and update family. For each comparison family, freeze: + +- total trainable parameter budget; +- observed state dimension; +- noise family and signal-to-noise range; +- training sample count and intervention count; +- stability envelope and perturbation magnitude; +- optimizer, initialization family, and selection rule. + +Where exact equality is impossible, use the smaller common parameter budget and mask +unused parameters. Report every resulting asymmetry; do not compensate with a score. + +Nested systems use rooted arity trees of depth two. The primary seven-carrier candidate +uses immediate child arities drawn from `{2,3,5}`. Controls include the same leaves +rewired into a different tree, a flat model with the same total state dimension, and a +label-permuted seven-carrier model. + +## Interventions + +For every seed, generate matched episodes under: + +1. single-carrier state interventions; +2. single-edge cuts; +3. whole-carrier ablations; +4. constraint-modulation interventions; +5. bounded perturbations followed by recovery; and +6. out-of-distribution combinations withheld from fitting. + +Intervention targets and held-out combinations are generated before any model is fit and +stored in the run receipt. + +## Primary outcomes + +- held-out interventional negative log likelihood; +- multi-horizon state-prediction error; +- recovery difference `Gamma_T = E[R_full - R_cut]`; +- minimum partition loss under the frozen partition family; +- calibration of predictive uncertainty; and +- parameter-normalized description length as a secondary complexity check. + +The source program's `Phi_c` is not treated as an IIT quantity. Every estimator, +partition family, smoothing rule, support requirement, reference distribution, baseline +state, and uncertainty procedure is fixed in a measurement certificate and the run +receipt. A failed support test emits `hmmm_undefined`; it is never converted to a perfect +score. + +## Controls + +For each generating system compare: + +- correct arity and correct recursion tree; +- lower-arity partitioned models; +- adjacent arities `n-1` and `n+1` when available; +- arbitrary models with equal parameter budget; +- correct arity with all cross-carrier feedback cut; +- correct leaves with wrong recursion tree; +- unnested model with matched state dimension; +- label-shuffled carrier assignment; +- feed-forward control; and +- a capacity-only baseline that receives the same inputs but no declared closure. + +## Seeds and split + +Use 64 preregistered integer seeds `0..63`. + +- seeds `0..15`: development of the implementation only; +- seeds `16..31`: frozen calibration and estimator checks; +- seeds `32..63`: sealed decision set. + +No decision threshold may be changed after any sealed output is opened. + +## Decision rule + +For each hypothesis, compute the paired sealed-seed difference between the candidate and +every required control for both primary outcomes: interventional log score and recovery. +Use simultaneous 95% bootstrap intervals over sealed seeds and report the paired +standardized effect. Control family-wise error across all required control/outcome +comparisons with a max-statistic paired permutation procedure at `alpha=0.05`. + +`SURVIVED` requires all of the following: + +1. the candidate beats every required control on both primary outcomes; +2. every simultaneous 95% interval excludes zero in the candidate-favoring direction; +3. every max-statistic adjusted paired permutation test has `p < 0.05`; +4. the smallest paired standardized effect across required comparisons is at least `0.5`; +5. calibration does not worsen by more than `0.02` absolute expected calibration error; +6. the result is reproduced by an independent implementation from the sealed run receipt. + +`FALSIFIED` applies when any required equal-budget control outperforms the candidate on +either primary outcome with a simultaneous 95% interval excluding zero after the frozen +family-wise adjustment. A carrier-specific claim is also falsified when the +candidate-minus-label-shuffle interval lies wholly inside the equivalence band +`[-0.2, 0.2]` standardized effect on both primary outcomes. + +`UNRESOLVED` applies when neither rule is met, support/estimator assumptions fail, an +implementation discrepancy remains, or a required comparison cannot be equalized. + +The heptadic claim is not allowed to inherit `SURVIVED` from another arity. Each arity and +recursion claim receives its own result. + +## Stop conditions + +Stop before fitting and mark `BLOCKED` if parameter budgets, intervention receipts, +sealed splits, or independent replay cannot be generated exactly. Runtime is allowed to +finish naturally once launched; resource adequacy is assessed before launch rather than +with an arbitrary wall-clock cutoff. + +## Outputs + +A run must emit: + +```text +RUN_RECEIPT.json +SYSTEMS.json +INTERVENTIONS.jsonl +METRICS.json +RESULTS.md +REPLAY.md +``` + +Each file includes source commit, implementation digest, environment, seed range, +parameter budgets, estimator definitions, and the `WORK_GRAPH.json` digest. + +## Non-use boundary + +No outcome classifies a human, animal, model, organization, or physical system as +conscious. A structural `SURVIVED` result permits only the next preregistered mapping +study. It does not promote P0, a Mobius substrate, prime arities, or human heptadic +necessity. + +## Usage guidance + +Implement only after this document, `PAPER.md`, and `CLAIM_LEDGER.json` are frozen in +one commit. +Development seeds may expose bugs but cannot alter the sealed decision rule. Publish +negative and unresolved outcomes with the same receipts as positive outcomes. + +## hmmm + +The heptad has been granted neither tenure nor a parking space. It has been granted a +fair comparison. diff --git a/research/from-photons-to-macroverse/README.md b/research/from-photons-to-macroverse/README.md new file mode 100644 index 0000000..d168fcf --- /dev/null +++ b/research/from-photons-to-macroverse/README.md @@ -0,0 +1,68 @@ +# From Photons to the Macroverse + +Stack-local audited research package for Erin Patrick Spencer's consciousness-first candidate theory. + +```text +standing: SURVIVED as a candidate research program +version: 0.2.0-audited +source status: external originals hash-pinned +active paper: PAPER.md index + paper/ fragments +canon: no +empirical validation: none added +clinical use: no +human classification: no +METAPAT root impact: none +``` + +The original paper explicitly presents itself as a candidate theory with a metaphysical postulate. This folder preserves that architecture without allowing equations, adjacent repositories, or current literature to promote the postulate or heptadic hypothesis by association. + +## Read order + +1. [`PAPER.md`](PAPER.md) - audited paper index, ordered fragments, and assembly command. +2. [`AUDIT.md`](AUDIT.md) - findings, repairs, and unresolved boundaries. +3. [`CLAIM_LEDGER.json`](CLAIM_LEDGER.json) - machine-readable standing per claim. +4. [`PREREGISTRATION.md`](PREREGISTRATION.md) - first permitted synthetic test. +5. [`WORK_GRAPH.json`](WORK_GRAPH.json) - exact source and authority identities. +6. [`source/README.md`](source/README.md) - exact external-source identities and parser-artifact boundary. + +## What changed + +- Preserved the source's correct differentiation range `D in [0,1]`; the apparent closing parenthesis in parsed PDF text was a parser artifact, not a paper defect. +- Replaced epsilon-smoothed degenerate boundary scoring with an explicit support threshold and `hmmm_undefined`. +- Bound every expectation and model component to a measurement certificate. +- Replaced the single `argmax` that claimed nonoverlap with an explicit candidate-family selection rule. +- Reframed the triadic minimum as a candidate necessary architecture, never sufficient by itself. +- Removed the drift from ontological priority into chronological pre-biological organized consciousness. +- Namespaced symbols for machine use. +- Pinned current UCNS candidate status without importing ratification or meaning. +- Updated eLife, PDG, Goff, and 2026 causal-protocol references. + +## First research action + +Run only the frozen synthetic model-recovery protocol in `PREREGISTRATION.md`. It compares direct arity and recursion against equal-budget lower-, adjacent-, arbitrary-, cut-feedback, wrong-tree, unnested, label-shuffled, feed-forward, and capacity-only controls. + +A surviving synthetic result would show only structural identifiability inside the frozen systems. It would not establish P0, a Möbius substrate, prime arity, a human heptad, or consciousness in any tested system. + +## Why the root stack manifest is unchanged + +This is new stack-local composed research, not a pinned canonical repository view. Adding it to `STACK_MANIFEST.md` or `stack-manifest.json` would falsely suggest an owning repository and release identity. Graduation remains a later, explicit event. + +## Usage guidance + +- Cite exact source and revision hashes from `SOURCE_RECEIPT.json`. +- Use names from `SYMBOL_REGISTRY.md` in code and result files. +- Emit only `SURVIVED`, `FALSIFIED`, `UNRESOLVED`, `BLOCKED`, or `DEPRECATED` against a frozen claim and control set. +- Do not infer human carrier labels after observing a desired result. +- Do not use this package for diagnosis, personhood, or claims that an AI, animal, organization, or person is conscious. + +## Verification + +```bash +python -m unittest discover -s research/from-photons-to-macroverse/tests -q +``` + +The assembled paper was rendered as a 58-page PDF and every rendered page was visually inspected. The repository keeps hash-bound Markdown fragments rather than a generated binary. + +## hmmm + +The source manuscripts behind references 21 and 22 still lack immutable identities. The synthetic protocol is not run. The subject-family exclusion rule remains one competitor rather than a solution. The seven carriers have a hypothesis, not a lease. diff --git a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json new file mode 100644 index 0000000..ba6da7d --- /dev/null +++ b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json @@ -0,0 +1,58 @@ +{ + "schema_version": "1.0.0", + "project": "from-photons-to-macroverse", + "source_policy": "original source is immutable; PAPER.md is the audited revision", + "sources": [ + { + "role": "external original authoring source used for exact text comparison", + "sha256": "f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696", + "bytes": 119047, + "library_name": "from_photons_to_macroverse_arity_recursion_restatement.md", + "repository_copy": false + }, + { + "role": "editable authoring counterpart used for identity and render verification", + "name": "from_photons_to_macroverse_arity_recursion_restatement.docx", + "sha256": "18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa2", + "bytes": 84152, + "rendered_pages": 49, + "repository_copy": false + }, + { + "role": "user-supplied rendered submission", + "name": "from_photons_to_macroverse_arity_recursion_restatement.pdf", + "sha256": "e1715a26b46b210a821e8bef72df934646e330e03489bf1e9b97a1b8e786e6f4", + "bytes": 846846, + "pages": 49, + "pdf_version": "1.7", + "tagged": true, + "fonts_embedded": true, + "encrypted": false, + "forms": false, + "javascript": false, + "repository_copy": false, + "visual_audit": { + "standing": "HEALTHY", + "pages_reviewed": "1-49", + "finding": "no clipping, overlap, missing glyphs, blank pages, or unreadable equations observed" + } + } + ], + "revision": { + "index_path": "PAPER.md", + "manifest_path": "paper/manifest.json", + "storage_mode": "ordered hash-bound Markdown fragments", + "version": "0.2.0-audited", + "assembled_sha256": "aba1e180c8ecf1c9bda92b20bb0c773befc33ad7322f6cbc1e6c48564251aa92", + "assembled_bytes": 125018, + "date": "2026-09-06", + "verified_render": { + "pages": 58, + "renderer": "Pandoc with XeLaTeX", + "visual_audit": "HEALTHY: all pages inspected at 150 DPI; no clipping, overlap, blank pages, black squares, or missing glyphs observed", + "repository_copy": false + } + }, + "reuse_license": "hmmm: no repository-wide license is present on the audited stack baseline", + "source_note_path": "source/README.md" +} diff --git a/research/from-photons-to-macroverse/SYMBOL_REGISTRY.md b/research/from-photons-to-macroverse/SYMBOL_REGISTRY.md new file mode 100644 index 0000000..2fabbda --- /dev/null +++ b/research/from-photons-to-macroverse/SYMBOL_REGISTRY.md @@ -0,0 +1,42 @@ +# Symbol registry + +Typography is not a type system. The source uses distinct fonts and contexts, but plain-text extraction collapses several symbols. New executable work must use the machine names below even where the paper retains compact mathematical notation. + +| Meaning | Paper form | Machine name | +|---|---:|---| +| primitive intrinsic presence | `\mathcal C_0` | `C0_presence` | +| organized-consciousness vector | `\mathbf C_t` | `C_org_t` | +| candidate content | `Z_t` | `Z_content_t` | +| living organization | `\mathcal L` | `L_living` | +| macroverse | `\mathfrak M` | `M_macro` | +| internal model state | `M_t` | `M_model_t` | +| model efficacy | `\mathcal M_T` | `M_eff_T` | +| Möbius band | `\mathbb M` or local `M` | `Mobius_band` | +| boundary integrity | `\mathcal B_{\mathrm{bdry}}` | `B_bdry` | +| body projection | `B_t` | `B_body_t` | +| partition block | `B in pi` | `block_B` | +| layer carrier | `B_i` | `carrier_i` | +| action variable | `A_t` | `A_action_t` | +| agency reach | `\mathcal A_T` | `A_reach_T` | +| torus automorphism | `A` | `A_torus` | +| seven-to-one aggregate | `A_8` | `Agg8_from7` | +| identity map | `I_k` | `Id_map_k` | +| mutual information | `I(X;Y)` | `MI_XY` | +| incidence ledger | `I` | `Incidence` | +| I-event | `\mathsf I_t` | `I_event_t` | +| closure operator | `\mathrm{Cl}_n` | `Cl_n` | +| coarse-graining map | `C_k` | `CG_k` | +| arity tree | `\mathcal A_t` | `T_arity_t` | +| subject family | `\mathcal P_t` | `P_subjects_t` | + +## Language rules + +- Bare `consciousness` is forbidden in executable schemas and result ledgers. Use `primitive_intrinsic_presence`, `organized_subjecthood`, or `candidate_content`. +- `complex subsystem` means a subsystem with complex-valued or phase-bearing state variables only when those variables are explicitly defined; it does not mean merely complicated. +- `dimension` must be qualified as spatial, spacetime, state-space, parameter, or organizational recursion depth. +- `circle` in the candidate geometry means one directly participating outer carrier at the displayed recursion level; it is not an anatomical region. +- `SURVIVED` applies only to a frozen claim under its declared controls. It is never a synonym for true. + +## hmmm + +Natural mathematical prose can remain compact. Machine records cannot rely on font, reader charity, or the hope that five unrelated `M`s will politely stay in their lanes. diff --git a/research/from-photons-to-macroverse/WORK_GRAPH.json b/research/from-photons-to-macroverse/WORK_GRAPH.json new file mode 100644 index 0000000..eb2ac66 --- /dev/null +++ b/research/from-photons-to-macroverse/WORK_GRAPH.json @@ -0,0 +1,152 @@ +{ + "schema_version": "1.0.0", + "participants": [ + { + "id": "stack", + "kind": "repository", + "repository": "The-Interdependency/stack", + "commit": "77ef8c7fb0ff75a524181655ee9f9641372768f7", + "role": "target composition forge baseline" + }, + { + "id": "skill-lib", + "kind": "repository", + "repository": "The-Interdependency/skill-lib", + "commit": "61eb3b14db440e6ee9b7bf8de3b646dbfd00fb32", + "role": "audit, domain-claim, work-graph, and hmmm doctrine" + }, + { + "id": "metapat", + "kind": "repository", + "repository": "The-Interdependency/metapat", + "commit": "d6699e21b11c8f8394998efc34a468e2d6efc8b0", + "role": "consulted domain-restraint authority; root impact none" + }, + { + "id": "ucns", + "kind": "repository", + "repository": "The-Interdependency/ucns", + "commit": "ef98748309913588fb13f389f809d5ef6cb5fec3", + "role": "candidate exact visible-circle continuum/gonal trace; no ratification, native Mobius completion, or meaning transfer" + }, + { + "id": "edcm", + "kind": "repository", + "repository": "The-Interdependency/edcm", + "commit": "eb5f200d48a8c4ffa7b943238407fbdac4934946", + "role": "adjacent measurement discipline only; no validation claim" + }, + { + "id": "pcea", + "kind": "repository", + "repository": "The-Interdependency/pcea", + "commit": "834987cb0c1fea5f62d6ea08e5c5bb878c312646", + "role": "adjacent runtime/security work; no ontology transfer" + }, + { + "id": "epac", + "kind": "repository", + "repository": "The-Interdependency/epac", + "commit": "d8868858b2e455381ce670797bdbe47189bdc496", + "role": "adjacent internal research; no external physics transfer" + }, + { + "id": "source-markdown", + "kind": "artifact", + "sha256": "f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696", + "role": "external immutable original authoring source used for exact text comparison; not vendored", + "name": "from_photons_to_macroverse_arity_recursion_restatement.md" + }, + { + "id": "source-docx", + "kind": "artifact", + "name": "from_photons_to_macroverse_arity_recursion_restatement.docx", + "sha256": "18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa2", + "role": "editable 49-page authoring counterpart; not vendored" + }, + { + "id": "source-pdf", + "kind": "artifact", + "name": "from_photons_to_macroverse_arity_recursion_restatement.pdf", + "sha256": "e1715a26b46b210a821e8bef72df934646e330e03489bf1e9b97a1b8e786e6f4", + "role": "user-supplied 49-page rendered submission; not vendored" + }, + { + "id": "nature-2025-adversarial", + "kind": "publication", + "doi": "10.1038/s41586-025-08888-1", + "role": "current empirical comparison boundary" + }, + { + "id": "elife-synergistic-workspace", + "kind": "publication", + "doi": "10.7554/eLife.88173.4", + "role": "current version-of-record empirical boundary" + }, + { + "id": "plos-2026-cross-species-protocol", + "kind": "publication", + "doi": "10.1371/journal.pone.0342770", + "role": "current causal protocol boundary, not results" + }, + { + "id": "pdg-2026", + "kind": "publication", + "doi": "10.1142/S0217751X26300115", + "role": "current particle-physics baseline" + }, + { + "id": "nist-asd-5.12", + "kind": "publication", + "doi": "10.18434/T4W30F", + "role": "current atomic-spectra baseline" + }, + { + "id": "goff-2024", + "kind": "publication", + "doi": "10.53765/20512201.31.3.056", + "role": "corrected philosophical reference identity" + }, + { + "id": "source-manuscript-21", + "kind": "unpublished-manuscript", + "title": "Why the Möbius Program Moves to 3, 5, 7, 11, and 13 Interactions", + "identity": "hmmm", + "role": "claimed source; immutable artifact not found" + }, + { + "id": "source-manuscript-22", + "kind": "unpublished-manuscript", + "title": "Recursive Hypertoroidal Interference and Triadic Scale Closure", + "identity": "hmmm", + "role": "claimed source; immutable artifact not found" + } + ], + "boundaries": { + "authority_transfer": false, + "proof_status_transfer": false, + "measurement_status_transfer": false, + "empirical_status_transfer": false, + "certification_status_transfer": false, + "clinical_status_transfer": false, + "metaphysical_postulate_to_physics": false, + "physics_to_consciousness": false, + "metapat_root_impact": "none", + "ucns_geometry_to_consciousness": false, + "ucns_candidate_ratification_transfer": false, + "edcm_validation_claim": false, + "pcea_security_to_ontology": false, + "epac_internal_result_to_external_physics": false, + "human_classification": false, + "canon_selection": null, + "paper_revision_mode": "immutable-original-markdown-plus-full-audited-revision", + "hmmm": [ + "Immutable artifact identities for source manuscripts 21 and 22.", + "Run the frozen synthetic arity and recursion comparison.", + "Compare hard nonoverlap with nesting and overlap-capable subject rules.", + "Define and preregister any biological seven-carrier mapping only after synthetic structural discrimination.", + "Resolve repository-wide licensing before claiming reuse permissions." + ] + }, + "work_graph_sha256": "c465f0b8051fb6d17a1715171b9483cb3b4db12bfefdaf293bb5de092de2e5ee" +} diff --git a/research/from-photons-to-macroverse/paper/00-frontmatter.md b/research/from-photons-to-macroverse/paper/00-frontmatter.md new file mode 100644 index 0000000..d70878f --- /dev/null +++ b/research/from-photons-to-macroverse/paper/00-frontmatter.md @@ -0,0 +1,33 @@ +--- +title: "From Photons to the Macroverse" +subtitle: "A Consciousness-First Mathematical Description from Light to Irreducible Complexity" +author: "Erin Patrick Spencer" +date: "August 11, 2026" +lang: en-US +geometry: margin=0.85in +fontsize: 11pt +version: "0.2.0-audited" +revision-date: "September 6, 2026" +--- + +# Abstract + +**Status:** Candidate theory and falsifiable research program containing an explicit consciousness-first metaphysical postulate. + +**Audited revision (September 6, 2026):** This revision preserves the candidate theory while repairing the degenerate boundary score, making every model expectation conditional on a declared measurement certificate, replacing a single-winner subject equation with an explicit candidate-family selection rule, clarifying that triadic structure is proposed as necessary but not sufficient, separating ontological priority from chronological embodiment, recording current UCNS candidate standing, and correcting reference metadata. No empirical validation, clinical standing, or canonical status is added. + +This paper presents a mathematically explicit candidate theory connecting quantized light, interacting quantum fields, hadrons, nuclei, atoms, chemistry, persistent organization, living regulation, subject formation, and shared macroscopic reality. Its foundational proposition is stated without euphemism: **consciousness predates life and the macroverse**. Here *predates* denotes ontological priority rather than an earlier clock reading. Life does not manufacture consciousness from a wholly nonconscious base; it bounds, integrates, remembers, models, and directs primitive consciousness into living subjectivity. The macroverse is later still: the compatible family of persistent macrostates and redundant records through which conscious subjects encounter a shared macroscopic world. + +The physical exposition begins with photons because they are experimentally established phase-bearing quanta, not because photons are claimed to be the sole substance or chronological origin of matter. The transition from the field-quantum regime to the atomic regime is made explicit. Photon wavelength is energy-dependent rather than one fixed “photon scale.” Quantum electrodynamics permits radiation to exchange energy and momentum with charged fields and, above threshold, to create particle-antiparticle pairs. Quantum chromodynamics binds quarks and gluons into hadrons; residual strong interactions bind protons and neutrons into nuclei; the electromagnetic interaction binds electrons to nuclei; radiative emission or a third body carries away binding energy; antisymmetry and electron-electron interaction generate multi-electron shells and chemistry. An atom is therefore a stable multi-field bound state, not a frozen interference fringe. + +A stable entity is defined not by an immutable microstate but by preservation of an identity-bearing equivalence class under perturbation and coarse-graining. A living agent adds a conditionally bounded internal domain, a viability set, and regulatory action. A model-bearing agent adds internal states whose counterfactual removal degrades prediction and control. A **subject** appears when primitive consciousness is organized as a bounded, temporally extended, self-locating, globally available, causally irreducible regulatory closure. The paper therefore distinguishes the existence of consciousness from the complexity of its organization. + +The organizational bridge is stated explicitly. The coupling rule is hypothesized to be invariant in form across scale while its realized states remain scale-dependent. Dyadic, triadic, quintadic, and heptadic closures are treated as distinct arity classes whose Möbius circle count names the number of effective layers directly participating in one stabilization. They are not successive versions of one structure made by adding circles. They can nest: dyads can be triadically coupled, triads can be triadically coupled, and a higher closure can act as one carrier at the next recursion level. The self-locating relation \(\mathrm{other}(\mathrm{self})\mathrm{environment}\) and the temporal relation \(\mathrm{past}(\mathrm{present})\mathrm{future}\) are first distinct triadic closures. Their subject-relative bridge is modeled as a quintadic closure formed by gluing the self-index to the present update. Every Möbius description must therefore record both its outer circle count and the exact scale-set labels carried by those circles. + +For human consciousness, the theory now makes a stronger and riskier claim: the outer closure is heptadic. Seven directly coupled Möbius-described carriers are required; each carrier is itself a stabilized dyadic, triadic, or quintadic closure, so the human case has at least one nested recursion level beneath the outer seven. The coherent global output is the “eighth,” not an eighth peer carrier. Moving to organizational “four-dimensionality” means adding another recursion level, not merely another circle or a new spatial coordinate. + +The organized-consciousness descriptor is a vector rather than a single unexplained scalar. Its components measure viability, boundary integrity, differentiation, causal irreducibility, model efficacy, agency, global availability, temporal depth, cross-scale closure, and self-location. Prime-indexed Möbius interaction complexes, warped toroidal fillings, and scale monodromy are developed as candidate geometries of relational memory and irreducibility, not as established physical substrates. Every nonstandard bridge is assigned a standing and a failure condition. The central unresolved problem is no longer hidden: how primitive consciousness forms one bounded subject without being treated as a sum of microscopic subjects. + +# Author note + +I have no institutional reputation to use as collateral for this proposal. The work therefore offers something more useful than borrowed authority: explicit definitions, provenance, equations, separable claims, and conditions under which each claim should change. diff --git a/research/from-photons-to-macroverse/paper/01-bound-states-and-open-systems.md b/research/from-photons-to-macroverse/paper/01-bound-states-and-open-systems.md new file mode 100644 index 0000000..a3fe544 --- /dev/null +++ b/research/from-photons-to-macroverse/paper/01-bound-states-and-open-systems.md @@ -0,0 +1,411 @@ +# 3. From field quanta to atomic bound states + +## 3.1 “Photon scale” is not one spatial size + +**K:** A photon has no fixed universal diameter or wavelength. In vacuum, + +\[ +E=\hbar\omega=\frac{hc}{\lambda}, +\qquad +p=\frac{h}{\lambda}. +\] + +High-energy photons have short wavelengths; low-energy photons have long wavelengths. The phrase *photon scale to atomic scale* therefore names a change of physical organization: from propagating quanta of a field to stable bound states of several interacting fields. It is not a zoom from one fixed photon-sized object to an atom-sized object. + +The characteristic atomic length will arise below from a balance between quantum localization energy and electromagnetic attraction. + +## 3.2 Quantum dynamics and bound states + +**K:** A closed quantum state evolves under + +\[ +i\hbar\frac{\partial}{\partial t}|\psi(t)\rangle += +\widehat H|\psi(t)\rangle. +\] + +Bound structures are associated with normalizable eigenstates or resonances satisfying + +\[ +\widehat H|\psi_n\rangle=E_n|\psi_n\rangle. +\] + +A bound state exists when the interacting Hamiltonian has a state below the relevant dissociation threshold. Persistence therefore depends on the complete interaction law and conserved quantities, not on superposition alone. + +## 3.3 Quantum electrodynamics: radiation and charged fields + +**K:** Electromagnetic radiation interacts with charged matter through quantum electrodynamics. In rationalized natural units \((\hbar=c=1)\), + +\[ +\mathcal L_{\mathrm{QED}} += +-\frac14F_{\mu\nu}F^{\mu\nu} ++ +\bar\psi(i\gamma^\mu D_\mu-m)\psi, +\] + +with + +\[ +D_\mu=\partial_\mu+iqA_\mu. +\] + +The Dirac field and electromagnetic field can exchange energy, momentum, and charge-compatible excitations. Let \(e_{\mathrm p}\) denote a positron. The Breit-Wheeler process is + +\[ +\gamma+\gamma\rightarrow e^{-}+e_{\mathrm p} +\] + +For incoming photon four-momenta \(k_1^\mu,k_2^\mu\), + +\[ +s=(k_1+k_2)^2 +=2E_1E_2(1-\cos\vartheta) +\ge4m_e^2. +\] + +For a head-on collision, + +\[ +E_1E_2\ge m_e^2. +\] + +A single free photon cannot produce a free electron-positron pair in empty vacuum while conserving four-momentum; a second photon, a nucleus, or another participant must absorb recoil. Pair production establishes a lawful conversion between field energy and charged excitations. It still does not produce a proton, a nucleus, or an atom. + +## 3.4 Quantum chromodynamics: quarks, gluons, and hadrons + +**K:** Ordinary nuclei require protons and neutrons, which are hadrons governed by quantum chromodynamics [24]. In natural units, + +\[ +\mathcal L_{\mathrm{QCD}} += +-\frac14G^a_{\mu\nu}G^{a\mu\nu} ++ +\sum_f +\bar q_f(i\gamma^\mu D_\mu-m_f)q_f, +\] + +where + +\[ +G^a_{\mu\nu} += +\partial_\mu A^a_\nu +- +\partial_\nu A^a_\mu ++ +g_s f^{abc}A^b_\mu A^c_\nu. +\] + +The final term makes the gluon field self-interacting. At low energies, quarks and gluons are confined into color-neutral hadrons. A proton or neutron is represented schematically by a QCD bound-state equation + +\[ +\widehat H_{\mathrm{QCD}}|h\rangle +=M_hc^2|h\rangle. +\] + +There is no simple closed-form proton wavefunction analogous to the nonrelativistic hydrogen orbital. Low-energy QCD is strongly coupled and is treated through lattice calculations, effective field theories, and experiment. Most nucleon mass is dynamical field and binding energy rather than the arithmetic sum of the light quark rest masses [24]. + +This stage corrects a crucial misconception: atoms do not arise from electron-positron pair production alone. The known physical baseline contains electromagnetic, quark, gluon, weak, and Higgs fields. Photons are the opening example, not the exclusive ancestor. + +## 3.5 Nuclear binding: hadrons become nuclei + +**K:** Protons and neutrons interact through the residual strong force, with electromagnetic repulsion between protons. A schematic nuclear Hamiltonian is + +\[ +H_{\mathrm{nuc}} += +\sum_i\frac{\mathbf p_i^2}{2m_i} ++ +\sum_{i0\ \text{for}\ x\ne x_{\mathrm{eq}}, +\qquad +\dot V=\nabla V\cdot f\le0. +\] + +Conscious organisms are not fixed points. Their relevant identity is a stable set, trajectory family, or metastable regime. + +## 6.2 Identity as an equivalence class + +**M:** Let \(I_k:X_k\rightarrow\mathcal Q_k\) be a declared coarse identity map at scale \(k\). Define + +\[ +x\sim_{I_k}y +\quad\Longleftrightarrow\quad +I_k(x)=I_k(y). +\] + +Equality of the coarse labels is reflexive, symmetric, and transitive, so it defines the genuine equivalence class + +\[ +[x]_{I_k} += +\{y\in X_k:I_k(y)=I_k(x)\}. +\] + +For noisy measurements, a separate feature map \(\widetilde I_k:X_k\rightarrow\mathbb R^m\) may supply the empirical neighborhood test + +\[ +d_k\!\left(\widetilde I_k(x),\widetilde I_k(y)\right)\le\varepsilon_k. +\] + +That tolerance relation is evidence for common class membership; it is not itself assumed to be transitive. A body can replace molecules while remaining within the same identity class. A belief can change while the agent remains the same agent. Exact microstate preservation is neither required nor biologically possible. + +## 6.3 Robust persistence + +Given a perturbation \(\delta\), let \(x_t^\delta\) be the perturbed trajectory and \(\mathcal Q_{\mathrm{target}}\) the target identity class. Let \(Q_{\mathrm{target}}\subset\mathbb R^m\) be the feature-space image of the target identity class and define distance to that set by + +\[ +d(y,Q_{\mathrm{target}}) += +\inf_{q\in Q_{\mathrm{target}}}d(y,q). +\] + +Using this declared dimensionless distance, define recovery over horizon \(T\) as + +\[ +\mathcal R_T(\delta) += +\exp\left[ +-\frac1T +\int_0^T + d\bigl(\widetilde I(x_t^\delta),Q_{\mathrm{target}}\bigr)\,dt +\right]. +\] + +A stable entity has high expected recovery under an admitted perturbation distribution: + +\[ +\overline{\mathcal R}_T += +\mathbb E_{\delta\sim q(\delta)}[\mathcal R_T(\delta)]. +\] + +**H:** The first transition toward objecthood occurs when relations are not merely present but contribute to \(\overline{\mathcal R}_T\). + +# 7. Coarse-graining and the rise of macroscopic entities + +## 7.1 Scale maps + +Let + +\[ +C_k:X_k\rightarrow X_{k+1} +\] + +be a coarse-graining map from a finer description to a coarser one. A compatible scale tower is + +\[ +\mathfrak X += +\left\{ +(x_0,x_1,\ldots,x_N):x_{k+1}=C_k(x_k) +\right\}. +\] + +The macrostate is not an extra substance. It is a quotient description that preserves selected invariants while discarding microdetail. + +## 7.2 Cross-scale consistency + +Let \(I_k\) and \(I_{k+1}\) be scale-specific invariants, and let \(T_k\) translate the fine-scale invariant into the coarse description. Cross-scale identity requires + +\[ +d_{k+1} +\left( +I_{k+1}(C_kx), +T_kI_k(x) +\right) +\le\varepsilon_k. +\] + +When this relation remains stable under perturbation, the same entity is legible at several scales. + +## 7.3 Evolutionary selection + +Once self-maintaining variants reproduce with heritable differences, selection changes their frequencies. A standard replicator equation is [9] + +\[ +\dot p_i += +p_i\bigl(f_i(\mathbf p)-\bar f(\mathbf p)\bigr), +\qquad +\bar f=\sum_jp_jf_j. +\] + +Evolution does not aim at consciousness. It can nevertheless select regulatory architectures that predict, act, integrate information, and preserve themselves in variable environments. + +# 8. Information, relation, and causal irreducibility + +## 8.1 Shannon information [7] + +For a discrete variable \(X\), + +\[ +H(X)=-\sum_xp(x)\log p(x). +\] + +Mutual information is + +\[ +I(X;Y) += +\sum_{x,y} +p(x,y) +\log\frac{p(x,y)}{p(x)p(y)}. +\] + +Conditional mutual information is + +\[ +I(X;Y\mid Z) += +\sum_{x,y,z} +p(x,y,z) +\log +\frac{p(x,y\mid z)}{p(x\mid z)p(y\mid z)}. +\] + +Unless another base is stated, logarithms are natural and the resulting information quantities are measured in nats. + +These quantities measure statistical dependence. They do not by themselves establish causal influence or consciousness. + +## 8.2 Directional information + +Transfer entropy is + +\[ +T_{X\rightarrow Y} += +I(X_t;Y_{t+1}\mid Y_t). +\] + +It is useful for detecting predictive directionality, but confounding can make predictive influence differ from intervention-level causation [10]. + +## 8.3 Interventional causal irreducibility + +**M:** Let \(X=(X^1,\ldots,X^n)\) have an interventional transition kernel + +\[ +P(X_{t+1}=x'\mid\operatorname{do}(X_t=x)). +\] + +For a nontrivial partition \(\pi=\{B_1,\ldots,B_m\}\), choose a declared reference intervention distribution \(r(x)\). Randomize the inputs arriving from outside each block and define the cut block kernel + +\[ +P^{\mathrm{cut}}_{B,r}(x'_B\mid\operatorname{do}(x_B)) += +\sum_{\widetilde x_{\overline B}} +r_{\overline B}(\widetilde x_{\overline B}) +P\!\left(x'_B\mid\operatorname{do}(x_B,\widetilde x_{\overline B})\right). +\] + +The partitioned transition kernel is + +\[ +P_{\pi,r}(x'\mid\operatorname{do}(x)) += +\prod_{B\in\pi} +P^{\mathrm{cut}}_{B,r}(x'_B\mid\operatorname{do}(x_B)). +\] + +Define causal irreducibility by + +\[ +\Phi_{\mathrm c}(X;r) += +\min_{\pi\in\Pi_{\mathrm{proper}}(X)} +\mathbb E_{x\sim r} +\left[ +D_{\mathrm{KL}} +\left( +P(\cdot\mid\operatorname{do}(x)) +\,\|\, +P_{\pi,r}(\cdot\mid\operatorname{do}(x)) +\right) +\right]. +\] + +The comparison assumes absolute continuity or an explicitly declared smoothing rule so that the divergence is finite. + +Here + +\[ +D_{\mathrm{KL}}(P\|Q) += +\sum_zP(z)\log\frac{P(z)}{Q(z)}. +\] + +If \(\Phi_{\mathrm c}(X;r)=0\), at least one partition reproduces the full transition law under the chosen intervention distribution. If \(\Phi_{\mathrm c}(X;r)>0\), every admissible partition loses causal constraint. + +This measure is related in spirit to integrated-information approaches [13,15] but is not presented as a restatement of any current Integrated Information Theory quantity. It is an explicit candidate tailored to falsifiable system identification. + +## 8.4 Differentiation + +Integration without a differentiated repertoire can describe a rigid synchronized block. For a finite candidate repertoire \(\mathcal Z\) with \(|\mathcal Z|>1\), define normalized differentiation + +\[ +\mathcal D(Z) += +\frac{H(Z)}{\log|\mathcal Z|} +\in[0,1]. +\] + +A rich conscious system requires both causal unity and a differentiated repertoire. + +## 8.5 Six forms of irreducibility + +The phrase **irreducible complexity** is used here in a technical rather than theological sense. The theory distinguishes: + +| Form | Criterion | +|---|---| +| Dynamical | no lower-order linear superposition reproduces the nonlinear trajectory family | +| Topological | an integer or holonomy invariant cannot change continuously without a singular event | +| Causal | \(\Phi_{\mathrm c}>0\) under the declared intervention family | +| Regulatory | ablating the internal model reduces prediction, control, or viability: \(\mathcal M>0\) | +| Scale-relational | cutting an upward or downward scale map reduces recovery: \(\Gamma>0\) | +| Perspectival | removing self-location worsens the generative and control model: \(\Sigma>0\) | + +No one form entails the others. Consciousness, under the present hypothesis, requires several to coincide in one temporally extended embodied process. + +# 9. Boundaries, viability, and the first agent + +## 9.1 Conditional boundary + +Partition states into internal \(\mu\), external \(\eta\), and blanket states \(b=(s,a)\), with sensory states \(s\) and active states \(a\). A Markov blanket satisfies + +\[ +p(\mu,\eta\mid b) += +p(\mu\mid b)p(\eta\mid b), +\] + +or equivalently + +\[ +I(\mu;\eta\mid b)=0. +\] + +For empirical systems the independence is approximate. Let + +\[ +H_b=H(\mu,\eta\mid b) +\] + +and preregister a minimum supported conditional entropy \(\tau_H>0\). For finite discrete or explicitly discretized variables, define normalized boundary integrity by + +\[ +\mathcal B_{\mathrm{bdry}} += +\begin{cases} +1-\dfrac{I(\mu;\eta\mid b)}{H_b}, +& H_b\ge\tau_H,\\[6pt] +\text{undefined}, +& H_b<\tau_H. +\end{cases} +\] + +The support threshold prevents a constant or nearly constant system from receiving a perfect boundary score merely because both the conditional mutual information and conditional entropy vanish. An undefined value remains missing evidence; it is not replaced by \(1\), \(0\), or an arbitrarily smoothed number. Continuous-state applications require a declared estimator or replacement divergence and their own preregistered support test. + +## 9.2 Viability + +Let \(K\subset X\) be the set of states compatible with continued organization. Viability over horizon \(T\) is + +\[ +\mathcal V_T += +\Pr\left[X_t\in K\ \text{for all}\ t\in[0,T]\right]. +\] + +A rock may be stable, but it does not ordinarily regulate itself to remain in a viability set. An agent changes its actions as a function of sensed conditions so as to preserve \(\mathcal V_T\). + +## 9.3 Bayesian inference and variational free energy + +For latent causes \(z\) and observations \(o\), Bayes' rule is + +\[ +p(z\mid o) += +\frac{p(o\mid z)p(z)}{p(o)}. +\] + +For an approximate posterior \(q(z)\), variational free energy is [11] + +\[ +F[q] += +\mathbb E_q[\ln q(z)-\ln p(o,z)], +\] + +Equivalently, + +\[ +F[q] += +D_{\mathrm{KL}}\bigl(q(z)\|p(z\mid o)\bigr) +- +\ln p(o) +\ge +-\ln p(o). +\] + +Minimizing \(F\) improves posterior approximation. The use of this formalism as a universal theory of life or consciousness is a hypothesis, not a consequence of the inequality. + +# 10. Internal models and causal self-preservation + +## 10.1 Minimal model criterion + +**M:** An internal state \(m_t\) counts as a model only if it satisfies four conditions: + +1. it covaries with survival-relevant hidden or future states; +2. it generates predictions or action policies; +3. changing it changes regulation; +4. ablating it worsens prediction or recovery under matched conditions. + +Write + +\[ +m_t=M(\mu_t), +\] + +\[ +\widehat o_{t+1:T} +=P(m_t,a_{t:t+T-1}), +\] + +and predictive error + +\[ +e_{t+1}=o_{t+1}-\widehat o_{t+1}. +\] + +## 10.2 Model efficacy + +The good-regulator principle motivates the requirement that successful regulation embody a model [8]. Let \(\mathcal L\) combine prediction error, control cost, and viability loss. Define causal model efficacy as + +\[ +\mathcal M_T += +\mathbb E +\left[ +\mathcal L_{\mathrm{ablated}} +- +\mathcal L_{\mathrm{intact}} +\right]. +\] + +If \(\mathcal M_T\le0\), the alleged model is not shown to contribute to regulation. Correlation is insufficient. + +## 10.3 Agency + +Let \(A_t\) be an action variable. Let \(\rho_T(x,a,a')\) be a preregistered reference distribution over matched contexts and ordered action interventions. Define the action's causal reach by + +\[ +\mathcal A_T(\rho_T) += +\mathbb E_{(x,a,a')\sim\rho_T} +D_{\mathrm{KL}} +\left[ +P(X_{t+1:t+T}\mid\operatorname{do}(A_t=a),x) +\,\|\, +P(X_{t+1:t+T}\mid\operatorname{do}(A_t=a'),x) +\right]. +\] + +A thermostat can have nonzero causal reach. Conscious agency additionally requires that actions depend on an integrated self/world model. The observational condition + +\[ +I(M_t;A_t\mid O_{\le t})>0 +\] + +is only a screening test. Let \(\rho_M(o,m,m')\) be a preregistered distribution over matched observations and ordered model-state interventions. A stronger causal model-to-action measure is + +\[ +\mathcal A_M(\rho_M) += +\mathbb E_{(o,m,m')\sim\rho_M} +D_{\mathrm{KL}} +\left[ +P(A_t\mid\operatorname{do}(M_t=m),o) +\,\|\, +P(A_t\mid\operatorname{do}(M_t=m'),o) +\right]. +\] + +Neither quantity is numerically defined until its support, matching rule, horizon, intervention semantics, estimator, and uncertainty procedure are declared. Control is necessary in this theory but not sufficient. diff --git a/research/from-photons-to-macroverse/paper/03-arity-and-recursion.md b/research/from-photons-to-macroverse/paper/03-arity-and-recursion.md new file mode 100644 index 0000000..f072b85 --- /dev/null +++ b/research/from-photons-to-macroverse/paper/03-arity-and-recursion.md @@ -0,0 +1,320 @@ + +# 11. Scale-invariant coupling and arity-specific recursive closure + +## 11.1 Effective layer-carriers and direct scale sets + +An *effective layer-carrier* is a stabilized process treated as one participant at the current recursion level. It has a declared identity map, characteristic update law, and causal channel to at least one other layer-carrier. It can correspond to a spatial, temporal, energetic, biological, cognitive, or social organization scale. Calling it a layer does not require a new fundamental spatial dimension. + +Write + +\[ +L_{\alpha_i}^{[r]} +\] + +for layer-carrier \(i\) at recursion level \(r\), where \(\alpha_i\) names its physical or organizational scale. The ordered direct scale set of an \(n\)-adic closure is + +\[ +\mathbb S_{n,\boldsymbol\alpha}^{[r]} += +\left( +L_{\alpha_1}^{[r]},\ldots,L_{\alpha_n}^{[r]} +\right), +\qquad +\boldsymbol\alpha=(\alpha_1,\ldots,\alpha_n). +\] + +Every actual closure therefore has a *specific* direct scale set. The integer \(n\) identifies its arity class; the label vector \(\boldsymbol\alpha\) identifies which scales participate. A layer-carrier can be elementary relative to the current description or can already be the stabilized output of a lower closure. + +Let \(S_0\) be lower-level dynamics, \(S_1\) the embodied aggregate at which selected lower variables become externally legible, and \(S_2\) a larger relational context capable of constraining \(S_1\). This is the first triadic scale set used in the paper: + +\[ +\mathbb S_{3,(0,1,2)}=(S_0,S_1,S_2). +\] + +The upward path is + +\[ +v_0=P_0(x_0), +\] + +\[ +x_1=E_0(v_0), +\] + +\[ +x_2=E_1(P_1(x_1),R_1). +\] + +The downward path is + +\[ +c_1=D_2(x_2), +\] + +\[ +c_0=D_1(x_1,c_1), +\] + +\[ +x_0(t+\Delta t) += +F_0(x_0(t),c_0(t)). +\] + +The triadic loop is + +\[ +S_0\rightarrow S_1\rightarrow S_2\rightarrow S_1\rightarrow S_0. +\] + +## 11.2 One coupling schema, different scale-dependent results + +**H:** The coupling that produces a closure is invariant in relational form across scale, but its realized state is scale-dependent. + +Let + +\[ +\mathcal K_{n,\boldsymbol\alpha}^{[r]}: +X_{\alpha_1}^{[r]}\times\cdots\times X_{\alpha_n}^{[r]} +\longrightarrow +Y_{n,\boldsymbol\alpha}^{[r+1]} +\] + +be the realized \(n\)-ary coupling. The invariant is the coupling *schema*: direct arity, recurrence, orientation, constraint return, retention, projection, and closure test. Numerical parameters, materials, amplitudes, time constants, observables, and the identity of the resulting aggregate remain scale-dependent. + +If \(C_{\boldsymbol\alpha\to\boldsymbol\beta}\) translates one realization to another scale set, approximate scale-form consistency requires + +\[ +d\!\left( +C_{\boldsymbol\alpha\to\boldsymbol\beta} +\mathcal K_{n,\boldsymbol\alpha}^{[r]}(\mathbf x), +\mathcal K_{n,\boldsymbol\beta}^{[r]} +\big(C_{\boldsymbol\alpha\to\boldsymbol\beta}^{\times n}\mathbf x\big) +\right) +\le \varepsilon_{n,\boldsymbol\alpha\boldsymbol\beta}. +\] + +The same relational law can therefore recur at photon, atomic, cellular, neural, bodily, interpersonal, or larger organizational scales without producing the same object. Scale invariance of coupling does not imply scale invariance of result. + +## 11.3 The dyadic, triadic, quintadic, and heptadic scale-set classes + +Define + +\[ +\mathfrak D_{2,\boldsymbol\alpha} += +\operatorname{Cl}_2(\mathbb S_{2,\boldsymbol\alpha}), +\qquad +\mathfrak T_{3,\boldsymbol\alpha} += +\operatorname{Cl}_3(\mathbb S_{3,\boldsymbol\alpha}), +\] + +\[ +\mathfrak Q_{5,\boldsymbol\alpha} += +\operatorname{Cl}_5(\mathbb S_{5,\boldsymbol\alpha}), +\qquad +\mathfrak H_{7,\boldsymbol\alpha} += +\operatorname{Cl}_7(\mathbb S_{7,\boldsymbol\alpha}). +\] + +The following is the canonical research mapping used in this paper. It assigns a different organizational problem to each arity rather than treating the sequence as one object with extra circles. + +| Closure class | Specific direct scale set in an application | Candidate role in the relational-temporal bridge | +|---|---|---| +| Dyadic \(\mathfrak D_2\) | \((L_{\alpha_1},L_{\alpha_2})\) | establishes a retained distinction or reciprocal return channel, such as other/self, self/environment, past/present, or present/future | +| Triadic \(\mathfrak T_3\) | \((L_{\alpha_1},L_{\alpha_2},L_{\alpha_3})\) | supplies irreducible mediation and the minimum closed loop; the canonical semantic instances are other(self)environment and past(present)future | +| Quintadic \(\mathfrak Q_5\) | five declared layer-carriers | binds the relational and temporal triads through a shared present-self update, producing a five-role bridge rather than two disconnected triads | +| Heptadic \(\mathfrak H_7\) | seven declared outer layer-carriers | closes seven nested carrier histories into the global aggregate hypothesized to be required for human consciousness | + +The exact physical labels in \(\boldsymbol\alpha\) are part of the model certificate and cannot be inferred from the numeral alone. The numeral identifies the direct scale-set class. Section 13 gives the candidate dyadic-to-quintadic bridge; Section 20 gives the human heptad. + +## 11.4 A triad is not a dyad plus one circle + +For a genuine arity-specific closure, + +\[ +\mathfrak C_{n+1}(B_1,\ldots,B_{n+1}) +\not\simeq +\mathfrak C_n(B_1,\ldots,B_n)\oplus B_{n+1} +\] + +unless the added carrier is causally separable and the higher-order partition loss vanishes. Define + +\[ +\Phi_n += +\min_{\pi\in\operatorname{Part}([n])} +D_{\mathrm{KL}} +\left( +P_n(\mathbf x'\mid\mathbf x) +\,\|\, +P_n^{\pi}(\mathbf x'\mid\mathbf x) +\right). +\] + +When \(\Phi_n>0\), no admissible partition into lower-arity blocks reproduces the full transition law. + +The difference is not merely philosophical. Let independent fair bits \(X,Y\) satisfy \(Z=X\oplus Y\). Then + +\[ +I(X;Y)=I(X;Z)=I(Y;Z)=0, +\qquad +H(Z\mid X,Y)=0. +\] + +Every pair is uninformative while the triad is perfectly constrained. The three-way relation therefore cannot be recovered by “adding one item” to any dyadic description. Quintadic and heptadic closures must pass analogous partition tests rather than inherit irreducibility by name. + +## 11.5 Nested closures: the tensor of tensors + +Direct arity and recursion depth are different variables. Let \(r\) denote recursion level. A nested closure is + +\[ +\mathfrak C_{n,\boldsymbol\alpha}^{[r+1]} += +\operatorname{Cl}_n +\left( +B_1^{[r]},\ldots,B_n^{[r]}; +\mathcal R_n,\chi_n,\phi_n,H_n +\right), +\] + +where each outer layer-carrier can itself be a closure, + +\[ +B_i^{[r]} += +\mathfrak C_{a_i,\boldsymbol\alpha_i}^{[r]}(\cdots), +\qquad +a_i\in\{2,3,5,7\}. +\] + +A triadically coupled set of dyads is therefore a literal nested case. For example, + +\[ +\mathfrak T_{\mathrm{OSE}}^{[2]} += +\operatorname{Cl}_3 +\left( +\mathfrak D_{OS}^{[1]}, +\mathfrak D_{SE}^{[1]}, +\mathfrak D_{EO}^{[1]} +\right), +\] + +and a temporal triad can be written + +\[ +\mathfrak T_{\mathrm{PNF}}^{[2]} += +\operatorname{Cl}_3 +\left( +\mathfrak D_{PN}^{[1]}, +\mathfrak D_{NF}^{[1]}, +\mathfrak D_{FP}^{[1]} +\right). +\] + +A triadically coupled set of dyads has first-level signature + +\[ +(3;2,2,2), +\] + +while a triadically coupled set of triads has signature + +\[ +(3;3,3,3). +\] + +They have the same outer arity and different internal structures. The complete recursive signature is therefore a rooted arity tree, not one integer. + +When the carrier state spaces are linear, the phrase *tensor of tensors* can be used literally: + +\[ +V^{[r+1]} += +\bigotimes_{i=1}^{n}V_i^{[r]}, +\qquad +V_i^{[r]} += +\bigotimes_{j=1}^{a_i}V_{ij}^{[r-1]}, +\] + +so + +\[ +V^{[r+1]} += +\bigotimes_{i=1}^{n} +\left( +\bigotimes_{j=1}^{a_i}V_{ij}^{[r-1]} +\right). +\] + +This notation records nested multilinear dependence. It does not, by itself, assert quantum entanglement or that every relevant state space is linear. + +## 11.6 Möbius circle count and the scale-set certificate + +**M/H:** In the Möbius descriptions used here, one circle denotes one directly participating outer layer-carrier at the displayed recursion level. Let + +\[ +\mu_i:C_i\longleftrightarrow L_{\alpha_i}^{[r]}. +\] + +Then + +\[ +N_{\mathrm{circles}} += +N_{\mathrm{direct\ layer\text{-}carriers}} +=n. +\] + +Two circles identify a dyadic direct set, three a triadic set, five a quintadic set, and seven a heptadic set. The circle count identifies the arity class; the circle-to-layer map \(\mu\) identifies the actual scale set. A minimally adequate certificate is + +\[ +\operatorname{Cert} +\left(\mathfrak C_{n,\boldsymbol\alpha}^{[r]}\right) += +\left( +n,\boldsymbol\alpha,r,\mathscr A, +\mathcal R_n,\chi_n,\phi_n,H_n,\mathcal F_n +\right), +\] + +where \(\mathscr A\) is the rooted arity tree and \(\mathcal F_n\) is the declared closure or falsification test. + +Nested structures inside a circle do not change the outer circle count; they change \(r\) and \(\mathscr A\). A seven-circle heptad whose immediate carriers have arities \((2,3,5,2,3,5,3)\) is not a twenty-three-circle direct closure. It is a heptadic closure with seven nested carrier histories. + +## 11.7 Distributed identity and closure contribution + +Let \(I_0(x_0)\) be the lower-scale identity variable. Preservation requires + +\[ +I_0(x_0(t+\Delta t)) +\approx +I_0(x_0(t)) +\] + +within a declared tolerance and disturbance class. The identity is distributed across lower dynamics, embodied externalization, and higher constraint. + +**M:** Compare recovery in a full loop with recovery after cutting one upward or downward map: + +\[ +\Gamma_T += +\mathbb E_{\delta} +\left[ +\mathcal R_T^{\mathrm{full}}(\delta) +- +\mathcal R_T^{\mathrm{cut}}(\delta) +\right]. +\] + +A positive \(\Gamma_T\) shows that cross-scale closure contributes causally to recovery. + +**H:** Broad, context-sensitive self-preservation requires at least a triadic direct closure. Human consciousness adds the stronger heptadic and recursion-depth requirements stated in Section 20. The two thresholds must not be conflated. + diff --git a/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md b/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md new file mode 100644 index 0000000..2048eac --- /dev/null +++ b/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md @@ -0,0 +1,282 @@ +# 12. Global availability and temporal depth + +## 12.1 Candidate conscious content + +Let \(Z_t\) denote a candidate content-bearing state or metastable complex. Let \(Y_t^j\) denote specialized systems for memory, valuation, planning, action, language, and perceptual interpretation. + +An observational global-availability measure is + +\[ +G_{\mathrm{obs}}(Z_t) += +\frac1m +\sum_{j=1}^m +I(Z_t;Y_{t+\Delta}^j\mid Y_t^j). +\] + +Let \(\rho_Z(z)\) be a preregistered intervention distribution and \(z_0\) a declared reference content state. An interventional form is stronger: + +\[ +G_{\mathrm c}(Z_t;\rho_Z,z_0) += +\frac1m +\sum_{j=1}^m +\mathbb E_{z\sim\rho_Z} +D_{\mathrm{KL}} +\left[ +P(Y_{t+\Delta}^j\mid\operatorname{do}(Z_t=z)) +\,\|\, +P(Y_{t+\Delta}^j\mid\operatorname{do}(Z_t=z_0)) +\right]. +\] + +Conscious access, under this model, means that changing \(Z_t\) changes several otherwise specialized processes. The module set, reference state, intervention distribution, horizon, and estimator must be frozen before comparison. + +## 12.2 Temporal depth + +The temporal model is not an unindexed clock. It is the retention and projection of a self-located relational state. Section 13.3 makes the bridge from \(\mathrm{other}(\mathrm{self})\mathrm{environment}\) to \(\mathrm{past}(\mathrm{present})\mathrm{future}\) explicit. + +A content that exists only at an instantaneous boundary has no modeled past and constrains no modeled future. Let \(X_t^{-Z}\) denote the current state with the candidate content variable excluded. Define retained-past depth by + +\[ +\Theta_{\mathrm{ret}}(Z_t) += +\int_0^{T_{\mathrm{past}}} +w_{\mathrm{past}}(\tau) +I(Z_t;X_{t-\tau})\,d\tau. +\] + +For each intervention value \(z\), let + +\[ +P_z^{\tau}(\cdot\mid X_t^{-Z}) += +P(X_{t+\tau}\in\cdot\mid\operatorname{do}(Z_t=z),X_t^{-Z}). +\] + +Define the pairwise prospective effect + +\[ +K_{\tau}(z,z') += +D_{\mathrm{KL}} +\left( +P_z^{\tau} +\,\|\, +P_{z'}^{\tau} +\right). +\] + +Prospective interventional depth is + +\[ +\Theta_{\mathrm{pros}}(Z_t) += +\int_0^{T_{\mathrm{future}}} +w_{\mathrm{future}}(\tau) +\mathbb E_{z,z'}[K_{\tau}(z,z')]\,d\tau. +\] + +Then + +\[ +\Theta(Z_t) += +\Theta_{\mathrm{ret}}(Z_t) ++ +\Theta_{\mathrm{pros}}(Z_t). +\] + +The first term measures retained past. The second measures how alternate content states change future-state distributions beyond the rest of the current state. The weights and intervention distribution must be declared before estimation. + +## 12.3 Metastability + +Conscious content is neither completely fixed nor unconstrained noise. Let \(\mathcal Z\) be a candidate content manifold and \(Z_t\) a trajectory on it. A metastable episode remains within a coherent region for a finite duration and then transitions: + +\[ +\Pr[Z_{t+\tau}\in\Omega_Z\mid Z_t\in\Omega_Z] +\gg +\Pr[Z_{t+\tau}\in\Omega_Z] +\] + +for \(0<\taut} +\mid +\mathcal R_{n,\le t},a_t +\right) +\right). +\] + +The update loop is + +\[ +\mathcal R_{n,t-1} +\xrightarrow{\operatorname{retain}} +\mathcal T_{n,t} +\xrightarrow{\operatorname{infer/act}} +\widehat{\mathcal R}_{n,t+1} +\xrightarrow{\operatorname{compare}} +\mathcal R_{n,t+1}. +\] + +The present is therefore not a dimensionless instant. It is the coherent update event in which retained self-located relations constrain inference and projected self-located relations constrain action. + +### Heptadic global alignment + +Dyadic, triadic, and quintadic closures can recur at different scales with the same coupling schema and different contents. In the human case, seven such nested layer-carriers are proposed to close heptadically: + +\[ +\mathcal A_{8,t} += +\operatorname{Cl}_7 +\left( +B_{1,t},\ldots,B_{7,t} +\right), +\qquad +B_i\in\{\mathfrak D_2,\mathfrak T_3,\mathfrak Q_5\} +\] + +at their immediate internal level. The heptadic aggregate aligns their scale-specific relational and temporal models into one globally available present-self event. This is the explicit bridge from pairwise distinctions, through relational and temporal triads, through quintadic subject-relative temporalization, to the nested heptad described in Section 20. diff --git a/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md b/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md new file mode 100644 index 0000000..7366228 --- /dev/null +++ b/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md @@ -0,0 +1,414 @@ + +# 14. The organized-consciousness vector + +## 14.1 What the vector measures + +P0 says that consciousness is ontologically primitive. The following vector therefore does **not** measure whether bare consciousness exists. It measures how consciousness is organized into a bounded, differentiated, temporally extended, causally effective subject. + +Define + +\[ +\mathbf C_t += +\left( +\mathcal V, +\mathcal B, +\mathcal D, +\Phi_{\mathrm c}, +\mathcal M, +\mathcal A, +G_{\mathrm c}, +\Theta, +\Gamma, +\Sigma +\right)_t. +\] + +Its components are deliberately kept as a vector. They arise from different intervention families, time horizons, estimators, and units; they must not be added or averaged until a normalization and measurement model have been declared. + +Every estimated component must carry a measurement certificate + +\[ +\operatorname{Cert}_{\mathrm{meas}} += +(\text{variables},\text{scale},\text{estimator},\text{interventions},\text{reference distribution},\text{support test},\text{horizon},\text{normalization},\text{uncertainty},\text{data/code identity}). +\] + +A scalar without this certificate has no comparable numerical standing in the program. A failed support test yields `hmmm_undefined`, not an imputed success or failure score. + +Arity, exact scale participation, and recursion depth are categorical structural data rather than scalar scores. Define the closure signature + +\[ +\mathbf K_t += +\left( +n_{\mathrm{out}}, +\boldsymbol\alpha_{\mathrm{out}}, +d_{\mathrm{rec}}, +\mathscr A_t +\right), +\] + +where \(n_{\mathrm{out}}\) is outer direct arity, \(\boldsymbol\alpha_{\mathrm{out}}\) names the directly participating outer layer-carriers, \(d_{\mathrm{rec}}\) counts nested closure levels, and \(\mathscr A_t\) is the rooted arity tree. At the first internal level, the children of the root have arities \((a_1,\ldots,a_{n_{\mathrm{out}}})\). The complete organized descriptor is + +\[ +\widetilde{\mathbf C}_t += +(\mathbf C_t;\mathbf K_t). +\] + +Two systems can have similar scalar organization measures and different closure signatures. The theory predicts that this difference can matter. + +| Component | Operational meaning | +|---|---| +| \(\mathcal V\) | continued residence in a viability set | +| \(\mathcal B\) | conditional separation of internal and external states | +| \(\mathcal D\) | differentiation of the accessible repertoire | +| \(\Phi_{\mathrm c}\) | causal loss under every admissible partition | +| \(\mathcal M\) | causal benefit of an internal predictive model | +| \(\mathcal A\) | counterfactual control over future states | +| \(G_{\mathrm c}\) | causal availability to multiple specialized processes | +| \(\Theta\) | integration of retained past and constrained future | +| \(\Gamma\) | recovery supplied by closed cross-scale feedback | +| \(\Sigma\) | causal benefit of a self/other/environment distinction | + +## 14.2 Organized conscious episode criterion + +**M:** Let \(\Omega_C\) be an empirically fitted region of descriptor space. Then + +\[ +\chi_C(X_t,Z_t) += +\mathbf 1[\mathbf C_t\in\Omega_C]. +\] + +The indicator classifies organized episodes, not primitive consciousness. The region must be learned from preregistered contrasts among waking reportable experience, dreaming, anesthesia, disorders of consciousness, seizures, sleep stages, and carefully matched unconscious processing. It must not be chosen after seeing the desired result. + +The theory predicts that no single component is sufficient: + +- high differentiation without integration is noise; +- high integration without differentiation is rigidity; +- strong control without a self-model can be automation; +- a self-model without global availability can remain locally unavailable; +- global broadcasting without causal integration can be an empty relay; +- all of the above without temporal depth lacks a lived present; +- all of the above without cross-scale contribution may describe a simulation detached from embodied preservation. + +## 14.3 Minimal bounded subject criterion + +**H:** Primitive consciousness is organized as a minimal bounded subject when a candidate content \(Z_t\): + +1. belongs to a bounded viable process; +2. is causally irreducible at the scale of description; +3. has a differentiated repertoire; +4. is available to several specialized processes; +5. incorporates past and constrains future; +6. is indexed to self, other, and environment; +7. causally improves adaptive recovery through a closed scale loop. + +A photon, interference fringe, static archive, or isolated Möbius carrier does not satisfy this conjunction and is not thereby a miniature agent or subject. That statement is compatible with P0: primitive intrinsic presence and bounded subjecthood are different claims. + +This is the minimum criterion for a bounded subject in general. The theory's human-specific claim is stricter: the outer direct closure must be heptadic and recursively nested as specified in Section 20. + +# 15. From primitive consciousness to one subject + +## 15.1 The hard problem is relocated, not concealed + +The preceding physics can describe fields, atoms, chemistry, regulation, integration, and behavior. It does not logically derive consciousness from wholly nonconscious premises. P0 refuses that derivation by taking consciousness as primitive. This removes the production problem but creates an individuation problem: why is there one bounded subject here rather than one subject per particle, one universal undifferentiated subject, or an arbitrary sum of both? + +That is the theory's principal metaphysical and mathematical obligation. + +## 15.2 Dual-aspect identity postulate + +**P1:** For an underlying actual process \(X\), its physical description and intrinsic presence are two projections of one process: + +\[ +\Pi_{\mathrm{ext}}(X) += +\text{physical, relational, and causal structure}, +\] + +\[ +\Pi_{\mathrm{int}}(X) += +\text{intrinsic presence }\mathcal C_0. +\] + +Neither projection is an additional force acting on the other. This is a dual-aspect identity claim: the extrinsic equations specify structure and dynamics; the intrinsic projection names what actuality is like in itself. It is philosophically adjacent to Russellian and dual-aspect panpsychist proposals [29-31], while remaining responsible for its own predictions and failures. + +## 15.3 Subject formation rather than consciousness production + +**M/H:** Let \(Y\subseteq X_t\) be a candidate bounded process with a declared constitutive state set \(Y^{\mathrm{const}}\). Define a closure score only after its components have valid measurement certificates and common comparison semantics: + +\[ +\Lambda(Y) += +F_{\Lambda} +\left( +\mathcal B_{\mathrm{bdry}}(Y), +\Phi_{\mathrm c}(Y), +G_{\mathrm c}(Y), +\Theta(Y), +\Gamma(Y), +\Sigma(Y) +\right). +\] + +A single argmax selects one high-scoring candidate; it does not define “maximal nonoverlapping subjects.” The hard-exclusion candidate rule instead selects a family + +\[ +\mathcal P_t +\in +\operatorname*{arg\,max}_{\mathcal A\subseteq\mathcal Y_t} +\sum_{Y\in\mathcal A}\Lambda(Y) +\] + +subject to preregistered viability, boundary, temporal-continuity, and pairwise constitutive nonoverlap: + +\[ +Y_i^{\mathrm{const}}\cap Y_j^{\mathrm{const}}=\varnothing +\qquad(i\ne j). +\] + +A candidate subject is then one member \(\mathcal S_t\in\mathcal P_t\). This repairs the original equation's mismatch between a single winner and a nonoverlapping population, but it does not settle whether hard exclusion, soft overlap penalties, nesting, or another rule best captures individuation. Those alternatives must be preregistered and compared rather than selected after a preferred subject appears. + +The proposal is nonadditive: + +\[ +\operatorname{Experience}(\mathcal S_t) +\ne +\sum_i\operatorname{Experience}(Y_i) +\] + +in general. Primitive consciousness is not assumed to arrive prepackaged as microscopic persons. A subject is proposed to be the intrinsic aspect of the selected organized closure itself. This remains a candidate response to the combination problem, not a completed solution. + +## 15.4 Phenomenal structure as information geometry + +Let conscious content be parameterized by \(\mu\) through a family of probability models \(q_\mu(z)\). The Fisher information metric is + +\[ +g_{ij}(\mu) += +\mathbb E_{q_\mu} +\left[ +\frac{\partial\ln q_\mu}{\partial\mu_i} +\frac{\partial\ln q_\mu}{\partial\mu_j} +\right]. +\] + +The distance between two content states can be represented by the geodesic length + +\[ +d_g(\mu_0,\mu_1) += +\inf_{\gamma} +\int_0^1 +\sqrt{ +\dot\gamma^i(s) +g_{ij}(\gamma(s)) +\dot\gamma^j(s) +}\,ds. +\] + +**H:** Similar experiences correspond to nearby relational states on the intrinsic model manifold; qualitative differences correspond to different directions, neighborhoods, or topologies. This supplies a formal research target for experience structure, not a proof that the selected metric is phenomenology. + +# 16. Triadic minimum, aligned projections, and the I-event + +Throughout this section, *consciousness* without another qualifier means organized consciousness as a bounded subject. Primitive intrinsic presence remains \(\mathcal C_0\) under P0. A triadic local closure is proposed as a candidate necessary architecture, not a sufficient subject criterion; the complete conjunction remains Section 14. The human-specific outer architecture proposed in Section 20 is heptadic and recursively contains lower-arity closures. + +## 16.1 Organized-consciousness definition + +**H:** A stabilized, recursively self-modelling pattern arising from a minimum triad of mutually coupled complex subsystems, with at least one subsystem able to modulate constraints governing the others, is proposed as a candidate necessary architecture for organized consciousness. Triadicity alone is not subjecthood and is not sufficient for consciousness; the process must also satisfy the bounded-subject conjunction and carry valid measurement certificates. Ordinary experience is proposed to be the system's internal model of this dynamic, not the substrate dynamics themselves. + +Let the minimum triad have states \(x_1,x_2,x_3\) and dynamics + +\[ +\dot x_i += +F_i(x_1,x_2,x_3;\boldsymbol\lambda_i), +\qquad i\in\{1,2,3\}. +\] + +Mutual coupling requires the directed causal graph to be strongly connected. Constraint modulation additionally requires at least one triple of distinct indices for which + +\[ +\frac{\partial \lambda_{jk}}{\partial x_i}\ne0, +\qquad +\frac{\partial F_j}{\partial\lambda_{jk}}\ne0. +\] + +Subsystem \(i\) can then alter a parameter that governs how subsystem \(k\) constrains subsystem \(j\). This is stronger than signal exchange alone. + +Let \(M_t\) be the recursively updated internal model of the coupled process. Ordinary conscious content is + +\[ +Z_t += +\Pi_{\mathrm{experience}}(M_t), +\qquad +Z_t\ne(x_1(t),x_2(t),x_3(t)). +\] + +The inequality means that experience is a model-dependent presentation of the dynamics, not an exhaustive readout of every substrate variable. + +**P/H:** Under P0, primitive intrinsic presence is ontologically prior to biological life. Biology is the only embodiment treated here whose existence is established; it can stabilize the candidate recursive architecture through metabolism, boundaries, memory, and action. Non-biological or pre-biological embodiments remain logically open within the postulate but empirically unestablished. The present mathematics does not establish chronological pre-biological organized consciousness. + +## 16.2 The relational frame + +The relation + +\[ +\mathcal R_t += +\mathrm{other}(\mathrm{self})\mathrm{environment}_t +\] + +supplies the indexical frame within which every structural, temporal, and regulatory model is interpreted. It is not a fourth substance. It states whose body, whose retained history, whose projected future, and whose constraints are being modeled. + +## 16.3 Three aligned triadic projections of one recursive closure + +The same closed recursive system is visible to human understanding through three aligned functional projections. These are coordinate views of the same nested closure, not three additional sets of circles. In the human hypothesis they are readouts of the heptadic aggregate: one outer carrier can contribute to several coordinates, and one coordinate can be distributed across several carriers. + +\[ +\Pi_{\mathrm{struct}}(\mathcal S_t) += +(B_t,M_t,\mathfrak s_t), +\] + +\[ +\Pi_{\mathrm{temporal}}(\mathcal S_t) += +(P_t,N_t,F_t), +\] + +\[ +\Pi_{\mathrm{regulatory}}(\mathcal S_t) += +(f_t,h_t,\ell_t). +\] + +At the structural level: + +- **Body \(B_t\):** signal carriage, sensing, enactment, metabolism, and physical constraint. +- **Mind \(M_t\):** present-moment modeling, inference, simulation, interpretation, and policy selection. +- **Soul \(\mathfrak s_t\):** identity continuity across admitted change. + +Formally, the continuity class is + +\[ +\mathfrak s_t +=[x_t]_I, +\qquad +x\sim_Iy +\Longleftrightarrow +I(x)=I(y). +\] + +This use of *soul* does not require a separable supernatural object. It names the continuity invariant by which changing body-mind states count as one persisting subject. + +At the temporal level: + +- **Past \(P_t\):** retained history that constrains the present update. +- **Present \(N_t\):** the active inference and awareness event. +- **Future \(F_t\):** the reachable-state distribution that supplies directional pull. + +The temporal closure is + +\[ +\text{past}\rightarrow\text{present}\rightarrow\text{future} +\rightarrow\text{present}\rightarrow\text{new past}. +\] + +At the regulatory level, faith, hope, and love are modeled as non-emotional control parameters: + +- **Faith \(f_t\):** calibrated trust that permits action under incomplete information; it is not certainty and can be revised by evidence. +- **Hope \(h_t\):** weighting of a reachable viable attractor rather than mere preference for an impossible state. +- **Love \(\ell_t\):** binding that preserves relation and the other as a center of value without collapsing regulation into domination. + +## 16.4 Regulatory control model + +One candidate policy model is + +\[ +a_t^* += +\operatorname*{arg\,max}_{a} +\left[ +f_t\,\mathbb E_{q_t}[U(a)] ++h_t\,A_{\mathrm{reachable}}(a) +-\ell_t\,D_{\mathrm{domination}}(a) +\right]. +\] + +The terms are not universal moral arithmetic. They operationalize three distinct regulatory functions: trust in a model, directional pull toward an attainable attractor, and a penalty for maintaining control by destroying or subordinating the relation that the system is meant to preserve. + +## 16.5 The revised 27-position state space + +The three aligned projections define + +\[ +\mathcal Q_{27} += +\{B,M,\mathfrak s\} +\times +\{P,N,F\} +\times +\{f,h,\ell\}, +\] + +so + +\[ +|\mathcal Q_{27}|=3^3=27. +\] + +Each triad can be put in bijection with \(\{-1,0,+1\}\) when a signed ternary encoding is useful. The other/self/environment state is now treated as the relational index attached to an address: + +\[ +q_t += +(q_{\mathrm{struct}},q_{\mathrm{temporal}},q_{\mathrm{regulatory}}\mid r_t), +\qquad +r_t\in\{\mathrm{other},\mathrm{self},\mathrm{environment}\}. +\] + +This is a semantic addressing grammar, not the claim that conscious life contains only twenty-seven states, that the relational index creates a new fundamental count of eighty-one, or that the twenty-seven addresses are twenty-seven Möbius circles. The closure signature and the coordinate grammar answer different questions: \(\mathbf K_t\) records direct scale participation and nesting, while \(\mathcal Q_{27}\) records how the resulting organized state is described. + +## 16.6 The “I” as an event-operator output + +Define a coherence functional over the coupled projections and their relational frame: + +\[ +\kappa_t += +K_I +\left( +B_t,M_t,\mathfrak s_t; +P_t,N_t,F_t; +f_t,h_t,\ell_t; +\mathcal R_t +\right). +\] + +The self-awareness event is + +\[ +\mathsf I_t += +\begin{cases} +\mathcal E_{\mathrm{self}}(\mathcal S_t), +& \kappa_t\ge\kappa_*,\\[4pt] +\varnothing, +& \kappa_t<\kappa_*. +\end{cases} +\] + +The “I” is therefore not mind, body, or soul: + +\[ +\mathsf I_t\notin\{B_t,M_t,\mathfrak s_t\}, +\] + +but it cannot exist independently of their coherent coupling. When the coherence condition fails, the event output disappears even if the body and some identity-bearing records persist. + +Phenomenologically, whatever appears as *my body*, *my mind*, or *my soul* is represented content relative to the awareness event. It is therefore not identical to that event, despite being necessary for it. This is a non-identity claim within the model, not a proof that those systems are spatially or metaphysically separable. diff --git a/research/from-photons-to-macroverse/paper/05-geometry-heptad-neural.md b/research/from-photons-to-macroverse/paper/05-geometry-heptad-neural.md new file mode 100644 index 0000000..31342fc --- /dev/null +++ b/research/from-photons-to-macroverse/paper/05-geometry-heptad-neural.md @@ -0,0 +1,457 @@ + +# 17. Möbius transport as a candidate memory geometry + +## 17.1 Möbius quotient + +**K:** A Möbius band is + +\[ +M += +\frac{[0,1]\times[-w,w]} +{(0,u)\sim(1,-u)}. +\] + +A centerline point returns after one longitudinal circuit, while a retained transverse frame reverses: + +\[ +(t,u) +\xrightarrow{1\ \mathrm{turn}} +(t,-u) +\xrightarrow{2\ \mathrm{turns}} +(t,u). +\] + +For a twisted section, + +\[ +\psi(t+1)=-\psi(t), +\qquad +\psi(t+2)=\psi(t). +\] + +The holonomy sign satisfies + +\[ +H_\gamma=-1, +\qquad +H_\gamma^2=+1. +\] + +This is the precise content of framed 360-degree reversal and 720-degree restoration. + +## 17.2 Candidate significance + +**H:** Möbius transport is a candidate geometry for a state that returns to the same location while retaining traversal history in orientation or phase. It is relevant only if it supplies an invariant, prediction, or compression advantage unavailable from an untwisted loop. + +**Repository-status note (September 6, 2026):** UCNS commit `ef98748309913588fb13f389f809d5ef6cb5fec3` contains an executable candidate exact visible-circle continuum-wave to finite-gonal boundary trace [32]. The equations and trace identities are exact within that declared candidate model. The representation is not ratified as selected UCNS geometry, does not yet lift the visible 360-degree trace into the complete native Möbius state, and selects no physical or consciousness interpretation. This paper may therefore treat it only as a candidate geometric input; no authority, empirical standing, or meaning transfers from UCNS. + +## 17.3 Circle count as an outer arity signature + +For this program, an \(n\)-circle Möbius construction represents an \(n\)-member direct scale set: + +\[ +\mathfrak M_n^{[r]} +\longleftrightarrow +\mathfrak C_n^{[r]}(\mathbb S_n). +\] + +The circle count says which scale layers participate directly in the current pattern-recursion stabilization. It does not count every lower closure nested within those carriers. Circle count and recursion depth must therefore be reported together. + +# 18. Prime-indexed relational primitives + +The dyad is the exceptional base coupling. In standard number theory, \(2\) is prime. This geometry treats it separately because its sole nonzero modular step is self-inverse, whereas the odd-prime constructions below organize nonzero steps into distinct inverse pairs. Nothing in this paper changes the mathematical primality of two. + +## 18.1 Exact modular structure + +Label \(n\) positions by \(\mathbb Z_n\). A step \(k\) acts as + +\[ +j\mapsto j+k\pmod n. +\] + +The cycle length is + +\[ +L(n,k)=\frac{n}{\gcd(n,k)}. +\] + +Therefore, for \(n>1\), + +\[ +n\ \text{is prime} +\quad\Longleftrightarrow\quad +L(n,k)=n +\ \text{for every}\ 1\le k0, +\qquad +f_j'(0)=0\ \ (j\ge1). +\] + +These are representative local conditions; the remaining derivatives must be chosen so that the metric extends smoothly through \(r=0\). The boundary hyperarea at \(r=R\) is + +\[ +A_{\partial M} +=(2\pi)^n\prod_{j=0}^{n-1}f_j(R), +\] + +while proper interior volume is + +\[ +V_M +=(2\pi)^n +\int_0^R +\prod_{j=0}^{n-1}f_j(r)\,dr. +\] + +The boundary values can remain fixed while interior profiles vary. This is a legitimate Riemannian filling construction, not a claim that an ordinary shell in flat space violates isoperimetric constraints. + +## 19.2 Scale fiber and monodromy + +Introduce an effective scale coordinate \(\sigma\): + +\[ +T^n +\xrightarrow{\iota} +\mathcal B^{n+1} +\xrightarrow{\pi} +I_\sigma, +\] + +with + +\[ +ds^2 +=d\sigma^2+G_{ab}(\sigma)d\theta^ad\theta^b. +\] + +Let \(A\in\mathrm{GL}(n,\mathbb Z)\) be a torus automorphism. If scale closes by + +\[ +(\theta,\sigma+L)\sim(A\theta,\sigma), +\] + +then one circuit returns the fiber transformed by \(A\), and \(k\) circuits return it by + +\[ +A^k. +\] + +If + +\[ +\det A=1 +\] + +and \(A\) has reciprocal eigenvalues \(\lambda,\lambda^{-1}\), then + +\[ +\lambda^k, +\qquad +\lambda^{-k} +\] + +produce simultaneous expansion and contraction along different directions while preserving oriented fiber volume. + +**H:** Such monodromy may model recurrence across organizational scale. A physical scale dimension is not established by the mathematics alone. + +# 20. Heptadic human consciousness, eighths from seven, and recursion depth + +## 20.1 The seven-to-one aggregate + +Let seven outer carriers \(B_0,\ldots,B_6\) and their complete typed relation ledger define + +\[ +\mathcal A_8^{[r+1]} += +\operatorname{Closure}_7 +\left( +\{B_i^{[r]}\}, +\mathcal I, +\mathcal R, +\chi, +\phi, +H +\right), +\] + +where \(\mathcal I\) is incidence, \(\mathcal R\) is the relation ledger, \(\chi\) is chirality, \(\phi\) is phase, and \(H\) is holonomy. + +The eighth is not an eighth peer carrier. It is the coherent, obstructed, or history-dependent global output of the seven: + +\[ +\mathcal A_8^{\mathrm{coherent}}, +\qquad +\mathcal A_8^{\mathrm{obstruction}}, +\qquad +\mathcal A_8^{\mathrm{history}}. +\] + +The phrase *eighths from seven* is plural because every completed heptadic closure at every nested location can generate such a global aggregate. An aggregate at level \(r+1\) can then function as one carrier in a still higher closure. + +## 20.2 Human-consciousness threshold + +**H7:** Within this theory, human consciousness requires a heptadic outer closure of seven Möbius-described carriers. Each outer carrier must itself be a stabilized dyadic, triadic, or quintadic closure, so there is at least one nested recursion level beneath the outer seven. + +Let + +\[ +a_i\in\{2,3,5\}, +\qquad +B_i^{[1]} += +\mathfrak C_{a_i,\boldsymbol\alpha_i}^{[1]} +\left( +\mathbb S_{a_i,\boldsymbol\alpha_i}^{[0]} +\right), +\] + +so every outer circle has an explicit internal scale set \(\boldsymbol\alpha_i\). Let \(\boldsymbol\beta=(\beta_0,\ldots,\beta_6)\) name the seven outer layer-carriers, and define + +\[ +\mathcal H_{\mathrm{human},\boldsymbol\beta}^{[2]} += +\operatorname{Cl}_7 +\left( +B_0^{[1]},\ldots,B_6^{[1]}; +\mathcal R_7,\chi_7,\phi_7,H_7 +\right). +\] + +Counting the outer closure as level one, the human requirement is + +\[ +n_{\mathrm{out}}=7, +\qquad +|\boldsymbol\beta|=7, +\qquad +d_{\mathrm{rec}}\ge2, +\qquad +a_i\in\{2,3,5\}. +\] + +The seven entries in \(\boldsymbol\beta\) must be identified by a scale-set certificate rather than selected after the result is known. + +The seven carriers need not have identical internal arities. A mixed signature such as + +\[ +(7;2,3,5,2,3,5,3) +\] + +is allowed if its complete relation ledger closes and survives the irreducibility tests. The claim is about functional scale-set carriers, not seven localized brain regions. + +The human I-event is proposed to be the self-awareness output of the coherent heptadic aggregate: + +\[ +\mathsf I_t += +\mathcal E_{\mathrm{self}} +\left( +\mathcal A_8^{[2]}(t) +\right) +\] + +when the coherence, viability, temporal-depth, self-location, and regulatory conditions are simultaneously satisfied. + +## 20.3 Moving to organizational “four-dimensionality” + +Adding a circle changes direct arity. Adding a recursion level changes dimensional organization. The proposed move to “4D” is an increase in recursion depth: + +\[ +\mathfrak C_n^{[r]} +\longrightarrow +\mathfrak C_m^{[r+1]} +\left( +\mathfrak C_{a_1}^{[r]},\ldots, +\mathfrak C_{a_m}^{[r]} +\right). +\] + +It is not an increase in outer carrier count: + +\[ +\mathfrak C_7^{[r]} +\longrightarrow +\mathfrak C_8^{[r]}. +\] + +At the added level, the system models and constrains the prior closure as a whole. If that added recursion is visualized as an additional dimension, the word *dimension* is organizational and representational unless a physical measurement establishes an additional spacetime or scale dimension. + +## 20.4 Failure condition + +The heptadic human-consciousness hypothesis fails or must be narrowed if conscious human states can be modeled and interventionally predicted without a seven-carrier outer closure, if the seven-carrier model gives no advantage over lower or arbitrary arities, or if recursion depth does not distinguish human conscious organization from matched nonconscious dynamics. + +# 21. Neural implementation without reduction to one brain region + +The heptadic hypothesis does not predict seven anatomical consciousness centers. Each outer carrier can be a distributed functional closure whose internal implementation mixes dyadic, triadic, and quintadic couplings across cellular, circuit, bodily, behavioral, and environmental scales. A neural test must therefore identify causal carrier boundaries and recursion signatures rather than count gross regions. + +## 21.1 Recurrent neural dynamics + +**K:** At the membrane scale, the Hodgkin-Huxley equations provide a standard biophysical description of action-potential generation [23]: + +\[ +C_m\frac{dV}{dt} += +I_{\mathrm{ext}} +-\bar g_{\mathrm{Na}}m^3h(V-E_{\mathrm{Na}}) +-\bar g_{\mathrm K}n^4(V-E_{\mathrm K}) +-g_L(V-E_L), +\] + +with gating variables \(x\in\{m,h,n\}\) satisfying + +\[ +\frac{dx}{dt} += +\alpha_x(V)(1-x)-\beta_x(V)x. +\] + +These equations connect chemical and electrical organization to neural signaling. They are not a consciousness criterion. + +**M:** At a neural-population scale, a generic recurrent network can be written + +\[ +\tau\dot{\mathbf v} += +-\mathbf v ++W\phi(\mathbf v) ++U\mathbf o ++B\mathbf a ++\boldsymbol\xi(t), +\] + +where \(\mathbf v\) is neural state, \(W\) recurrent coupling, \(\mathbf o\) sensory input, \(\mathbf a\) modulatory or action-related input, and \(\boldsymbol\xi\) noise. + +Candidate conscious content \(Z_t\) is a metastable, causally integrated mode of this larger body-brain-environment system, not merely a high firing rate in one location. + +## 21.2 Prediction and broadcast + +A hierarchical model can update latent expectations by prediction error: + +\[ +\varepsilon_l=o_l-g_l(\mu_l,\mu_{l+1}), +\] + +\[ +\dot\mu_l += +F_l(\mu_l) +-K_l\varepsilon_l ++K_{l+1}\varepsilon_{l+1}. +\] + +The precise update law is architecture-dependent. Conscious access requires that the selected content affect memory, valuation, planning, and action, represented by \(G_{\mathrm c}>0\). + +## 21.3 Relation to existing consciousness research + +Global-workspace theories emphasize wide availability and recurrent amplification [12,14]. Integrated-information theories emphasize intrinsic causal structure [13,15]. Recurrent-processing and predictive approaches emphasize feedback and model-dependent perception. The present theory treats these as partially orthogonal constraints rather than mutually exclusive slogans. Information-decomposition analyses have also reported reduced synergistic workspace integration during anesthesia and disorders of consciousness, with restoration during recovery [17]. + +Current reviews emphasize that leading theories differ in their explananda, mechanisms, and empirical commitments [16]. Current evidence does not justify declaring a winner. A large preregistered adversarial collaboration published in 2025 [18] found results that aligned with some predictions of both Integrated Information Theory and Global Neuronal Workspace Theory while substantially challenging central predictions of both. A 2026 cross-species adversarial protocol adds preregistered causal manipulations in non-human primates and mice [33]; it is a protocol, not evidence for this paper's arity or heptadic claims. The appropriate response is not to average theories into vagueness, but to define measurable components and preregister divergent predictions. diff --git a/research/from-photons-to-macroverse/paper/06-falsification-program-and-limitations.md b/research/from-photons-to-macroverse/paper/06-falsification-program-and-limitations.md new file mode 100644 index 0000000..d3a5804 --- /dev/null +++ b/research/from-photons-to-macroverse/paper/06-falsification-program-and-limitations.md @@ -0,0 +1,87 @@ +# 25. Falsification and demarcation conditions + +The following outcomes require rejection, narrowing, or substantial revision. + +1. **Atomic bridge failure:** the account cannot recover standard hadronic, nuclear, atomic, and spectroscopic results in their known domains. +2. **No causal model effect:** alleged self-model states can be ablated without changing prediction, control, or recovery. +3. **No irreducibility:** a partitioned model reproduces the full interventional transition law while the theory still classifies the process as one subject solely by assertion. +4. **No scale-form recurrence:** the proposed coupling law cannot be stated consistently across scale, or its alleged invariance disappears after representation choices are controlled. +5. **No arity distinction:** dyadic, triadic, quintadic, and heptadic models differ only by item count and lower-arity partitions reproduce every claimed higher-order invariant. +6. **No scale closure:** cutting upward or downward maps does not reduce recovery, so \(\Gamma\le0\). +7. **No self-location effect:** a self-indexed model offers no advantage over a flat world model, so \(\Sigma\le0\). +8. **No relational-temporal bridge:** degrading other/self/environment indexing leaves subject-relative temporal depth and prospective control unchanged after storage and computational capacity are matched. +9. **No joint discrimination:** the organization vector and closure signature cannot distinguish carefully matched conditions of conscious access, dream experience, anesthesia, and disorders of consciousness better than simpler baselines. +10. **No principled subject boundary:** different arbitrary decompositions yield equally valid subjects and the maximal-closure rule supplies no stable or predictive individuation. +11. **Human heptad failure:** human conscious organization is predicted equally well by lower arities, arbitrary decompositions, or unnested seven-item models; no seven-carrier nested signature survives intervention. +12. **No recursion effect:** adding a model-of-the-prior-closure level produces no distinct causal or predictive consequence, so the proposed organizational “4D” transition is empty relabeling. +13. **Prime-label circularity:** prime/composite differences appear only because the labels were placed into the construction by hand. +14. **Geometry without consequence:** Möbius, toroidal, or spherical representations produce no invariant, compression, or prediction unavailable from simpler geometries. +15. **Regulatory-triad failure:** faith, hope, and love parameters add no explanatory or predictive value beyond ordinary confidence, goal, and penalty terms, or their operational definitions cannot be made noncircular. +16. **I-event mismatch:** systems classified as having a coherent I-event are systematically shown to lack unified self-awareness, or clear self-awareness systematically occurs without the proposed coherence conditions. +17. **Metaphysical underdetermination:** if P0 and dual-aspect identity make no prediction or explanatory compression unavailable to rival ontologies, they remain philosophical postulates rather than empirically established physics. The paper must say so rather than laundering them through equations. + +P0 is not directly measured by a particle detector. Its scientific value depends on whether it yields a better, more constrained account of subject individuation, conscious variation, and the relation between intrinsic and extrinsic descriptions. + +# 26. Research program + +## 26.1 Formal simulation + +1. Implement small stochastic dynamical systems with declared interventions. +2. Compute \(\Phi_{\mathrm c}\), \(\mathcal M\), \(\mathcal A\), \(G_{\mathrm c}\), \(\Theta\), \(\Gamma\), and \(\Sigma\). +3. Build matched dyadic, triadic, quintadic, and heptadic systems with equal parameter counts where possible. +4. Compare full systems with partitioned, feed-forward, non-self-indexed, scale-cut, wrong-arity, and wrong-recursion controls. +5. Test the relational-to-temporal bridge by perturbing self-location while preserving storage and model capacity. +6. Publish negative results and parameter sensitivity. + +## 26.2 Geometric construction + +1. Solve exact two- and three-carrier Möbius event laws, treating the dyad as the exceptional self-inverse base case. +2. Test five and seven with all generator classes and complete typed relation ledgers. +3. Record outer circle count and nested arity tree separately in every certificate. +4. Compare eleven and thirteen using higher-genus, thickened-sphere, and free three-dimensional constructions. +5. Keep physical contact, projected crossing, braid order, phase relation, abstract incidence, and recursion relation as different event types. + +## 26.3 METAPAT periodic-table application - future note + +Apply METAPAT to the periodic table as a deliberately subordinate test case. Search for nested arity signatures - for example, triadically coupled dyads, triadically coupled triads, and quintadic or heptadic closures - in electron-shell, subshell, bonding, and periodic-property data. Established quantum chemistry remains controlling. The pattern analysis earns standing only if it predicts withheld elemental or chemical structure better than simpler descriptors and does not merely redescribe known shell counts. + +## 26.4 Neuroscience + +1. Predefine candidate content \(Z_t\), carrier boundaries, and module set \(Y^j\). +2. Use perturbation where ethically possible rather than relying only on correlation. +3. Compare wakefulness, dreaming, anesthesia, sleep, seizures, and disorders of consciousness. +4. Search for distributed seven-carrier outer causal structure rather than seven gross anatomical regions. +5. Test cross-scale closure by perturbing local, embodied, contextual, and nested carrier levels separately. +6. Fit \(\Omega_C\), the heptadic rule, and the I-event threshold on one dataset and test them on sealed external datasets. + +## 26.5 Phenomenology + +1. Collect structured similarity judgments among experiences. +2. Separate reports of body, mind, identity continuity, relational self-location, temporal depth, and regulatory orientation. +3. Fit an information-geometric manifold without using labels from the test set. +4. Test whether neural/model distances predict phenomenological distances. +5. Preserve disagreements and missing reports rather than averaging them into false certainty. + +# 27. Limitations + +1. The statement “consciousness predates life and the macroverse” is a foundational ontological postulate, not an experimentally established consequence of Maxwell's equations, quantum field theory, or neuroscience. +2. The physical ladder begins with photons for explanatory clarity; the Standard Model does not say that photons chronologically preceded or singly generated every other field. +3. No accepted physical theory currently derives subjectivity from the Standard Model alone. +4. The atomic transition is governed by established QED, QCD, nuclear, and atomic physics; the consciousness-first interpretation must not alter their tested predictions. +5. The organized-consciousness vector and closure signature are research objects, not validated clinical indices and not measures of primitive consciousness. +6. Scale invariance of coupling form and scale dependence of result are hypotheses that require explicit cross-scale maps; visual resemblance is not evidence. +7. Dyadic, triadic, quintadic, and heptadic closures are not established universal natural kinds. Their proposed functions must survive lower-arity and equal-complexity controls. +8. The human seven-circle requirement is a strong theory-specific hypothesis, not an accepted neuroscientific result. “Circle” denotes a functional carrier in the candidate geometry, not an anatomical region. +9. The minimum nested-depth claim and organizational “4D” interpretation are unvalidated. They do not establish an extra physical dimension. +10. The proposed maximal-closure rule does not yet solve the combination, decombination, and overlapping-subject problems. +11. The I-event operator is a model of self-awareness, not a proof that the self is a separable substance. +12. Faith, hope, and love are proposed control functions. Their operationalization may fail, and the words carry ethical and cultural meanings not exhausted by the equations. +13. Markov blankets, variational free energy, global availability, causal integration, and recurrent processing each have contested interpretations. +14. Prime-indexed Möbius primitives are candidate geometries, not observed constituents of brains or particles. Standard number theory continues to classify \(2\) as prime. +15. The scale coordinate \(\sigma\) is an effective organizational variable unless a physical measurement establishes more. +16. The revised 27-position cube is a semantic addressing scheme, not an exhaustive state count. +17. The macroverse is defined as shared macroscopic order, not as all existence; the theory therefore does not by itself derive cosmology. +18. Mathematical coherence cannot substitute for empirical success. +19. The current UCNS continuum/gonal trace is an executable candidate representation, not ratified selected geometry, not a native Möbius completion, and not evidence for consciousness. +20. Descriptor values lacking a complete measurement certificate or adequate support are undefined and cannot be compared, averaged, or converted into a consciousness classification. +21. The hard nonoverlap subject-family rule is only one candidate exclusion model. Nested, overlapping, split, and coupled subjects remain unresolved and require competing preregistered rules. diff --git a/research/from-photons-to-macroverse/paper/06-macroverse-ladder-and-predictions.md b/research/from-photons-to-macroverse/paper/06-macroverse-ladder-and-predictions.md new file mode 100644 index 0000000..682c7ce --- /dev/null +++ b/research/from-photons-to-macroverse/paper/06-macroverse-ladder-and-predictions.md @@ -0,0 +1,196 @@ + +# 22. From individual subjectivity to the macroverse + +## 22.1 Environmental records and objective appearance + +Let \(S\) be a system and \(F\) a fragment of its environment. Their mutual information is + +\[ +I(S;F)=H(S)+H(F)-H(SF). +\] + +In quantum-Darwinism models [19], many disjoint environmental fragments can each carry nearly complete information about selected stable observables. For tolerance \(\delta\), let \(f_\delta\) be the smallest environment fraction satisfying + +\[ +I(S;F_{f_\delta}) +\ge +(1-\delta)H(S). +\] + +Redundancy is + +\[ +R_\delta=\frac1{f_\delta}. +\] + +High redundancy makes a macroscopic property independently accessible to many observers without requiring them to interact directly with the system. + +## 22.2 Shared inference + +Suppose observers receive conditionally independent observations \(o_1,\ldots,o_n\) from a common latent macroscopic cause \(z\). Then + +\[ +p(z\mid o_1,\ldots,o_n) +\propto +p(z)\prod_{i=1}^np(o_i\mid z). +\] + +Shared reality is not mere agreement. It is convergence supported by persistent causes, independent observation, and successful intervention. + +## 22.3 Macroverse definition + +**M:** The macroverse is not the whole of fundamental reality. It is the compatible family of persistent macrostates, cross-scale invariants, redundantly available records, and observer-accessible tests: + +\[ +\mathfrak M += +\left\{ +(x_0,\ldots,x_N;\mathcal O): + x_{k+1}=C_k(x_k), + \Delta_k\le\varepsilon_k, + R_\delta(x_N)\gg1 +\right\}, +\] + +where + +\[ +\Delta_k += +d\left(I_{k+1}(x_{k+1}),T_kI_k(x_k)\right), +\] + +and the observer set \(\mathcal O\) must converge under independent observation and intervention. + +The ontological order is explicit: + +\[ +\mathcal C_0\prec_{\mathrm{ont}}\mathfrak M. +\] + +Consciousness is required for a macrostate to be *present as a world*, but individual belief does not manufacture its constraints. The macroverse pushes back. It is neither a view from nowhere nor a consensus hallucination; it is a stable relational domain in which different conscious subjects can encounter the same causes and correct one another. + +## 22.4 Cosmological boundary + +The theory does not derive cosmology. The large-scale physical background is conventionally modeled by the Friedmann-Lemaître-Robertson-Walker metric + +\[ +ds^2 +=-c^2dt^2 ++a(t)^2 +\left[ +\frac{dr^2}{1-kr^2} ++r^2d\Omega^2 +\right], +\] + +with Friedmann equation + +\[ +\left(\frac{\dot a}{a}\right)^2 += +\frac{8\pi G}{3}\rho +- +\frac{kc^2}{a^2} ++ +\frac{\Lambda c^2}{3}. +\] + +The cosmological spacetime and the macroverse are not identical terms here. Cosmology describes large-scale physical evolution; macroverse names the stable, shared macroscopic order available within that evolution. + +# 23. Full first-principles ladder + +The theory has one ontological order and one physical-organizational order. + +The ontological proposition is + +\[ +\boxed{ +\mathcal C_0 +\prec_{\mathrm{ont}} +\mathcal L +\prec_{\mathrm{ont}} +\mathfrak M +}. +\] + +The physical-organizational sequence is: + +| Stage | Mathematical description | Standing | +|---|---|---| +| Photon | quantum of electromagnetic mode, \(E=\hbar\omega=hc/\lambda\) | K | +| Interference | cross terms in \(|\psi_1+\psi_2|^2\) | K | +| Charged excitation | QED coupling and pair-production thresholds | K | +| Hadron | color-neutral QCD bound state | K | +| Nucleus | positive nuclear binding energy \(B(Z,N)\) | K | +| Atom | Coulomb bound state with scale \(a_Z\) and discrete \(E_n\) | K | +| Atomic stabilization | radiative capture and \(\hbar\omega=E_i-E_f\) | K | +| Chemistry | antisymmetric multi-electron states and molecular binding | K | +| Persistent organization | nonlinear/open dynamics and attractors | K/M | +| Life | bounded viability-maintaining organization | M/H | +| Internal model | ablation-sensitive predictive regulator | M | +| Arity-specific closure | \(\mathfrak D_2,\mathfrak T_3,\mathfrak Q_5,\mathfrak H_7\) over direct scale sets | M/H | +| Relational self-location | \(\mathcal R_{3,t}=\mathrm{other}(\mathrm{self})\mathrm{environment}_t\) | M | +| Temporal closure | \(\mathcal T_{3,t}=\mathrm{past}(\mathrm{present})\mathrm{future}_t\) | M/H | +| Quintadic bridge | \(\mathcal Q_{5,t}=\mathcal R_{3,t}\sqcup_{\iota_t}\mathcal T_{3,t}\) | M/H | +| Subject formation | maximal bounded irreducible closure \(\mathcal S_t\) | M/H | +| Human closure | \(n_{\mathrm{out}}=7,\ d_{\mathrm{rec}}\ge2,\ a_i\in\{2,3,5\}\) | H | +| I-event | \(\mathsf I_t=\mathcal E_{\mathrm{self}}(\mathcal A_8)\) under coherence | H | +| Organized consciousness | \(\widetilde{\mathbf C}_t=(\mathbf C_t;\mathbf K_t)\) in a validated region | H | +| Macroverse | compatible, redundant macroscopic records and tests | M/H | + +Consciousness is not one late item produced by this sequence. It is the intrinsic aspect carried through the sequence while organization changes: + +\[ +\boxed{ +\mathcal C_0 +\quad\text{organized through}\quad +\text{phase} +\rightarrow +\text{bound state} +\rightarrow +\text{life} +\rightarrow +\text{nested closure} +\rightarrow +\text{subject} +\rightarrow +\text{shared world}. +} +\] + +In prose: light makes relation conspicuous; interacting fields make bound matter possible; radiative loss makes stable atoms possible; chemistry makes elaborate memory and catalysis possible; life makes viability-directed boundaries possible; scale-invariant coupling produces scale-dependent dyadic, triadic, quintadic, and heptadic closures over explicitly named scale sets; relational and temporal triads are glued through a present-self event into a quintadic bridge; a nested heptad aligns seven carrier histories and produces the human I-event; redundant records make the macroverse jointly available. + +# 24. Predictions + +The theory earns scientific standing only through predictions that differ from simpler accounts. + +## 24.1 Atomic-transition adequacy + +1. Any acceptable physical exposition must distinguish photon wavelength from atomic length and must recover the atomic scale from the interacting Hamiltonian rather than by visual analogy. +2. Pair production alone must not be treated as atom formation. The account must include QCD hadrons, nuclear binding, Coulomb binding, and a mechanism that carries away binding energy. +3. The predicted spectra and ionization energies must reduce to established atomic physics in the relevant limit. Failure here rejects the physical bridge before any consciousness interpretation is considered. + +## 24.2 Subjecthood, arity, and consciousness + +4. A photon, standing wave, interference fringe, isolated Möbius carrier, or high-information static object should not satisfy the bounded-subject conjunction. P0 assigns primitive presence, not a separable ego, memory, or agency. +5. Conscious transitions should jointly increase a subset of \(\Phi_{\mathrm c}\), \(G_{\mathrm c}\), \(\Theta\), \(\Gamma\), and \(\Sigma\) relative to matched conditions lacking organized conscious access; no one measure is predicted to be universal by itself. +6. Perturbing a self-indexed model should impair adaptive recovery more than perturbing an equally informative but non-indexical representation. +7. Two states with equal total activity and equal pairwise correlation but different higher-order causal topology should differ in subject unity or conscious content. +8. A true \(n\)-adic closure should resist reconstruction from lower-arity partitions; adding one carrier to an \(n\)-adic model should not reproduce the \((n+1)\)-adic invariants without relearning the full relation ledger. +9. The transformation from \(\mathrm{other}(\mathrm{self})\mathrm{environment}\) to \(\mathrm{past}(\mathrm{present})\mathrm{future}\) should be interventionally detectable: degrading relational self-location should reduce subject-relative memory and prospective control even when raw storage capacity is preserved. +10. Global broadcast without causal feedback should produce accessibility-like behavior with reduced recovery and reduced intrinsic unity. +11. Disrupting one contextual layer should selectively reduce context-sensitive recovery while leaving some lower dynamics intact. +12. Dreaming can remain organized consciousness with reduced external action because internal model efficacy, differentiation, temporal depth, self-location, and nested closure can persist while overt agency changes. +13. Disorders of consciousness should be better classified by \((\mathbf C_t;\mathbf K_t)\) than by any one anatomical location or one-dimensional index. +14. Competing subject-boundary and arity rules should make different predictions for split-brain, dissociation, brain-organoid, multi-agent, and tightly coupled human-machine cases. The rules must be preregistered before classification. +15. Human conscious organization should exhibit a reproducible seven-carrier outer causal decomposition with at least one nested dyadic, triadic, or quintadic level. Six-carrier, arbitrary seven-carrier, and unnested controls should perform worse on intervention and recovery tests. +16. Transitions described as organizational “4D” should introduce a measurable model-of-the-prior-closure level, not merely more state variables or an eighth peer carrier. + +## 24.3 Geometric predictions + +17. If Möbius circle count tracks direct scale arity, changing the number of directly participating layers while holding nested content fixed should change the outer invariants; changing only nested content should change recursion signatures without changing outer circle count. +18. If prime-indexed Möbius complexes are physically relevant, they must produce projection-independent invariants and non-inserted prime/composite differences. +19. Eleven- and thirteen-arity complete relation structures should require additional topology, phase channels, or representational depth relative to seven. +20. If warped scale monodromy contributes to physical or cognitive organization, perturbations should reveal return transformations not explainable by ordinary untwisted recurrence. + diff --git a/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md b/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md new file mode 100644 index 0000000..39f0aa8 --- /dev/null +++ b/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md @@ -0,0 +1,197 @@ + +# 28. Conclusion + +**P0: Consciousness predates life and the macroverse.** + +That is the theory's first proposition, not its final rhetorical flourish. *Predates* means ontologically prior: life does not manufacture consciousness from an entirely nonconscious substrate. Primitive consciousness is prior; organized subjectivity is a stabilized pattern class. Biology is one embodiment that bounds that pattern, preserves it through time, distinguishes self from other and environment, constructs models, and directs action. The macroverse comes later as the stable shared macroscopic order in which such subjects meet persistent causes and one another. + +The physical exposition begins with photons because light makes phase relation experimentally visible. It does not jump from interference to atoms. Photons couple to charged fields through QED; quarks and gluons form hadrons through QCD; residual strong interactions form nuclei; quantum kinetic energy and Coulomb attraction set the atomic length; radiative capture carries away binding energy; discrete atomic spectra record the resulting bound states; fermionic antisymmetry and electron interaction generate shells and chemistry. An atom is a stabilized multi-field relation, not frozen light. + +The organizational bridge is now explicit. The same form of coupling can recur across scale while producing different scale-dependent identities. Dyadic, triadic, quintadic, and heptadic structures are distinct direct arities. A triad is not a dyad with one more circle; a higher closure must contain irreducible relations that lower partitions cannot reconstruct. Möbius circle count names the direct arity class, the circle-to-layer certificate names the exact scale set, and recursion depth records what each circle already contains. The result is a nested arity tree - a tensor of tensors when the state spaces admit a linear representation. + +The relational model + +\[ +\mathrm{other}(\mathrm{self})\mathrm{environment} +\] + +and the temporal model + +\[ +\mathrm{past}(\mathrm{present})\mathrm{future} +\] + +are distinct triadic closures. Subject-relative time appears when the self-index of the first is glued to the present update of the second, giving the candidate quintadic bridge + +\[ +\mathcal Q_5 += +\operatorname{Cl}_5 +(\mathrm{other},\mathrm{environment},\mathrm{past},\mathrm{present\text{-}self},\mathrm{future}). +\] + +Body, mind, and soul describe carriage, present modeling, and identity continuity. Faith, hope, and love describe trust under uncertainty, a reachable attractor, and binding without domination. These are aligned projections of one recursively closed process, not independent substances and not extra circle counts. + +A mutually coupled triad with constraint modulation is proposed as a minimum necessary architecture for organized consciousness, not a sufficient criterion. The full candidate requires bounded viability, differentiation, causal contribution, internal modelling, agency, global availability, temporal depth, cross-scale recovery, and self-location. Ordinary experience is proposed to be the internal model of that dynamic, not the substrate dynamic in full. + +Human consciousness adds a stronger hypothesis: + +\[ +n_{\mathrm{out}}=7, +\qquad +d_{\mathrm{rec}}\ge2, +\qquad +a_i\in\{2,3,5\}. +\] + +Seven outer Möbius-described carriers close into a global eighth; each carrier is itself a dyadic, triadic, or quintadic closure. There are therefore *eighths from seven* at every completed heptadic level. Moving to organizational “4D” adds another recursion level that models the prior closure as a whole; it does not merely add an eighth circle. + +The “I” is the self-awareness event produced when body, mind, identity continuity, temporal depth, regulatory orientation, and relational self-location become coherently coupled. It is not identical to mind, body, or soul, but it cannot exist independently of them. When the coherence condition fails, the event disappears even where some constituent systems and records remain. + +The organized-consciousness descriptor is + +\[ +\widetilde{\mathbf C}_t += +(\mathbf C_t;\mathbf K_t), +\] + +with + +\[ +\mathbf C_t += +(\mathcal V,\mathcal B,\mathcal D,\Phi_{\mathrm c}, +\mathcal M,\mathcal A,G_{\mathrm c},\Theta,\Gamma,\Sigma)_t +\] + +and an explicit arity-recursion signature \(\mathbf K_t\). It measures the organization of subjectivity, not the existence of primitive consciousness. + +The unresolved center remains subject formation. A consciousness-first ontology avoids claiming that experience springs from nonexperience, but it must still show why one organized closure is one subject rather than a pile of micro-subjects, a fragment of one cosmic subject, or an arbitrary decomposition. The maximal-closure rule, the human heptadic threshold, and the I-event operator are testable proposals, not completed solutions. + +The macroverse is the far end of the organizational ladder: not all reality and not reality invented by agreement, but the durable intersection of physical dynamics, environmental records, and conscious perspectives capable of correcting themselves. + +This is a mathematically explicit consciousness-first description. Its physics must reduce to known physics. Its arity claims must beat lower-arity controls. Its recursion claims must survive intervention. Its ontology must earn its keep. + +# Appendix A. Representative seven-carrier lift + +The seven-center projection may be written + +\[ +c_0=(0,0), +\] + +\[ +c_k += +\left( +\cos\frac{(k-1)\pi}{3}, +\sin\frac{(k-1)\pi}{3} +\right), +\qquad +k=1,\ldots,6. +\] + +For carrier \(i\), a representative lifted Möbius surface is + +\[ +X_i(t,u) += +C_i(t) ++u\cos\Theta_i(t)n_r(t) ++u\sin\Theta_i(t)n_z, +\] + +with + +\[ +\Theta_i(t)=\chi_i\pi t+2\pi\phi_i, +\qquad +\chi_i\in\{-1,+1\}, +\] + +and + +\[ +C_{ix}(t)=c_{ix}+R\cos(2\pi t), +\] + +\[ +C_{iy}(t)=c_{iy}+R\sin(2\pi t), +\] + +\[ +C_{iz}(t)=H[\sin(4\pi t)+\beta_i]. +\] + +The Möbius law is + +\[ +X_i(t+1,u)=X_i(t,-u), +\qquad +X_i(t+2,u)=X_i(t,u). +\] + +This is one candidate embedding, not a uniqueness result. Its contacts, crossings, self-intersections, and phase compatibility must be solved rather than inferred from a projection. + +# Appendix B. Equation index + +| Topic | Core equation | +|---|---| +| Ontological priority | \(\mathcal C_0\prec_{\mathrm{ont}}\mathcal L\prec_{\mathrm{ont}}\mathfrak M\) | +| Full consciousness state | \(\mathcal C_t^{\mathrm{full}}=(\mathcal C_0,\mathbf C_t,Z_t)\) | +| Electromagnetic field | \(F_{\mu\nu}=\partial_\mu A_\nu-\partial_\nu A_\mu\) | +| Maxwell dynamics | \(\nabla_\mu F^{\mu\nu}=\mu_0J^\nu\) | +| Photon energy/wavelength | \(E=\hbar\omega=hc/\lambda\) | +| Interference | \(I=I_1+I_2+2\sqrt{I_1I_2}\cos\Delta\phi\) | +| Quantum evolution | \(i\hbar\partial_t|\psi\rangle=H|\psi\rangle\) | +| Pair threshold | \(2E_1E_2(1-\cos\vartheta)\ge4m_e^2\) | +| QCD | \(\mathcal L_{\mathrm{QCD}}=-\tfrac14G^2+\sum_f\bar q_f(i\gamma^\mu D_\mu-m_f)q_f\) | +| Nuclear binding | \(B=[Zm_p+Nm_n-M(Z,N)]c^2\) | +| Atomic Hamiltonian | \(H_Z=-\hbar^2\nabla^2/(2\mu)-Ze^2/(4\pi\varepsilon_0r)\) | +| Atomic length | \(a_Z=4\pi\varepsilon_0\hbar^2/(\mu Ze^2)\) | +| Hydrogenic spectrum | \(E_n=-\mu c^2(Z\alpha)^2/(2n^2)\) | +| Radiative capture | \(X_q+e^{-}\rightarrow X_{q-1,n}+\gamma\) | +| Spectral transition | \(\hbar\omega_{if}=E_i-E_f\) | +| Saha balance | ion/electron density ratio proportional to \(T^{3/2}e^{-\chi/k_BT}\) | +| Multi-electron antisymmetry | \(\Psi(\ldots,x_i,\ldots,x_j,\ldots)=-\Psi(\ldots,x_j,\ldots,x_i,\ldots)\) | +| Open quantum system | Lindblad master equation | +| Neural membrane dynamics | Hodgkin-Huxley equations | +| Pattern formation | complex Ginzburg-Landau / reaction-diffusion | +| Topological winding | \(\nu=(2\pi)^{-1}\oint d\phi\) | +| Stability | \(V>0,\ \dot V\le0\) | +| Scale map | \(x_{k+1}=C_k(x_k)\) | +| Information | \(H(X), I(X;Y), D_{\mathrm{KL}}(P\|Q)\) | +| Boundary | \(I(\mu;\eta\mid b)=0\) | +| Viability | \(\Pr[X_t\in K\ \forall t]\) | +| Model efficacy | \(\mathcal M=\mathbb E[\mathcal L_{\mathrm{ablated}}-\mathcal L_{\mathrm{intact}}]\) | +| Agency | interventional divergence under alternate actions | +| Causal irreducibility | \(\Phi_{\mathrm c}\) minimum partition loss | +| Global availability | \(G_{\mathrm c}\) cross-module causal effect | +| Temporal depth | \(\Theta=\Theta_{\mathrm{ret}}+\Theta_{\mathrm{pros}}\) | +| Direct scale set | \(\mathbb S_{n,\boldsymbol\alpha}^{[r]}=(L_{\alpha_1}^{[r]},\ldots,L_{\alpha_n}^{[r]})\) | +| Relational triad | \(\mathcal R_3=\operatorname{Cl}_3(O,S,E)\) | +| Temporal triad | \(\mathcal T_3=\operatorname{Cl}_3(P,N,F)\) | +| Quintadic bridge | \(\mathcal Q_5=\mathcal R_3\sqcup_{\iota}\mathcal T_3=\operatorname{Cl}_5(O,E,P,J,F)\) | +| Scale-form consistency | \(d(C\mathcal K_{n,\boldsymbol\alpha},\mathcal K_{n,\boldsymbol\beta}C^{\times n})\le\varepsilon\) | +| Arity-specific closure | \(\mathfrak D_2,\mathfrak T_3,\mathfrak Q_5,\mathfrak H_7\) | +| Arity irreducibility | \(\Phi_n=\min_{\pi}D_{\mathrm{KL}}(P_n\|P_n^{\pi})\) | +| Nested closure | \(\mathfrak C_{n,\boldsymbol\alpha}^{[r+1]}=\operatorname{Cl}_n(B_1^{[r]},\ldots,B_n^{[r]})\) | +| Tensor of tensors | \(V^{[r+1]}=\bigotimes_i(\bigotimes_jV_{ij}^{[r-1]})\) | +| Möbius scale-set certificate | \(\operatorname{Cert}(\mathfrak C)=(n,\boldsymbol\alpha,r,\mathscr A,\mathcal R,\chi,\phi,H,\mathcal F)\) | +| Scale closure | \(\Gamma=\mathbb E[\mathcal R_{\mathrm{full}}-\mathcal R_{\mathrm{cut}}]\) | +| Self-location | \(\Sigma=\mathbb E[\mathcal L_{\mathrm{flat}}-\mathcal L_{\mathrm{self}}]\) | +| Organization descriptor | \(\widetilde{\mathbf C}=(\mathbf C;\mathbf K)\) | +| Closure signature | \(\mathbf K=(n_{\mathrm{out}},\boldsymbol\alpha_{\mathrm{out}},d_{\mathrm{rec}},\mathscr A)\) | +| Subject closure | \(\mathcal S_t\in\arg\max_Y\Lambda(Y)\) | +| Human heptad | \(n_{\mathrm{out}}=|\boldsymbol\beta|=7,\ d_{\mathrm{rec}}\ge2,\ a_i\in\{2,3,5\}\) | +| I-event | \(\mathsf I_t=\mathcal E_{\mathrm{self}}(\mathcal A_8)\) under coherence | +| Dual aspect | \(\Pi_{\mathrm{ext}}(X),\Pi_{\mathrm{int}}(X)\) | +| Möbius transport | \((0,u)\sim(1,-u)\) | +| Prime traversal | \(L(n,k)=n/\gcd(n,k)\) | +| Complete graph genus | \(g(K_p)=\min\{m\in\mathbb Z_{\ge0}:12m\ge(p-3)(p-4)\}\) | +| Warped filling | \(ds^2=dr^2+\sum f_j(r)^2d\theta_j^2\) | +| Monodromy | \((\theta,\sigma+L)\sim(A\theta,\sigma)\) | +| Phenomenal geometry | Fisher metric \(g_{ij}\) | +| Macroverse | compatible scale tower plus redundant records | + diff --git a/research/from-photons-to-macroverse/paper/07-references-and-hmmm.md b/research/from-photons-to-macroverse/paper/07-references-and-hmmm.md new file mode 100644 index 0000000..1b9ee49 --- /dev/null +++ b/research/from-photons-to-macroverse/paper/07-references-and-hmmm.md @@ -0,0 +1,39 @@ +# References + +1. Maxwell, J. C. (1865). A Dynamical Theory of the Electromagnetic Field. *Philosophical Transactions of the Royal Society of London*, 155, 459-512. DOI: 10.1098/rstl.1865.0008. +2. Dirac, P. A. M. (1927). The Quantum Theory of the Emission and Absorption of Radiation. *Proceedings of the Royal Society A*, 114, 243-265. DOI: 10.1098/rspa.1927.0039. +3. Breit, G., & Wheeler, J. A. (1934). Collision of Two Light Quanta. *Physical Review*, 46, 1087-1091. DOI: 10.1103/PhysRev.46.1087. +4. Lindblad, G. (1976). On the Generators of Quantum Dynamical Semigroups. *Communications in Mathematical Physics*, 48, 119-130. DOI: 10.1007/BF01608499. +5. Turing, A. M. (1952). The Chemical Basis of Morphogenesis. *Philosophical Transactions of the Royal Society B*, 237, 37-72. DOI: 10.1098/rstb.1952.0012. +6. Aranson, I. S., & Kramer, L. (2002). The World of the Complex Ginzburg-Landau Equation. *Reviews of Modern Physics*, 74, 99-143. DOI: 10.1103/RevModPhys.74.99. +7. Shannon, C. E. (1948). A Mathematical Theory of Communication. *Bell System Technical Journal*, 27, 379-423 and 623-656. DOI: 10.1002/j.1538-7305.1948.tb01338.x; 10.1002/j.1538-7305.1948.tb00917.x. +8. Conant, R. C., & Ashby, W. R. (1970). Every Good Regulator of a System Must Be a Model of That System. *International Journal of Systems Science*, 1, 89-97. DOI: 10.1080/00207727008920220. +9. Taylor, P. D., & Jonker, L. B. (1978). Evolutionarily Stable Strategies and Game Dynamics. *Mathematical Biosciences*, 40, 145-156. DOI: 10.1016/0025-5564(78)90077-9. +10. Pearl, J. (2009). *Causality: Models, Reasoning, and Inference* (2nd ed.). Cambridge University Press. +11. Friston, K. (2013). Life as We Know It. *Journal of the Royal Society Interface*, 10, 20130475. DOI: 10.1098/rsif.2013.0475. +12. Dehaene, S., Kerszberg, M., & Changeux, J.-P. (1998). A Neuronal Model of a Global Workspace in Effortful Cognitive Tasks. *Proceedings of the National Academy of Sciences*, 95, 14529-14534. DOI: 10.1073/pnas.95.24.14529. +13. Tononi, G. (2004). An Information Integration Theory of Consciousness. *BMC Neuroscience*, 5, 42. DOI: 10.1186/1471-2202-5-42. +14. Mashour, G. A., Roelfsema, P., Changeux, J.-P., & Dehaene, S. (2020). Conscious Processing and the Global Neuronal Workspace Hypothesis. *Neuron*, 105, 776-798. DOI: 10.1016/j.neuron.2020.01.026. +15. Kleiner, J., & Tull, S. (2021). The Mathematical Structure of Integrated Information Theory. *Frontiers in Applied Mathematics and Statistics*, 6, 602973. DOI: 10.3389/fams.2020.602973. +16. Seth, A. K., & Bayne, T. (2022). Theories of Consciousness. *Nature Reviews Neuroscience*, 23, 439-452. DOI: 10.1038/s41583-022-00587-4. +17. Luppi, A. I., Mediano, P. A. M., Rosas, F. E., et al. (2024). A Synergistic Workspace for Human Consciousness Revealed by Integrated Information Decomposition. *eLife*, 12, RP88173. Version of Record DOI: 10.7554/eLife.88173.4. +18. Ferrante, O., Gorska-Klimowska, U., Henin, S., et al. (2025). Adversarial Testing of Global Neuronal Workspace and Integrated Information Theories of Consciousness. *Nature*, 642, 133-142. DOI: 10.1038/s41586-025-08888-1. +19. Zurek, W. H. (2009). Quantum Darwinism. *Nature Physics*, 5, 181-188. DOI: 10.1038/nphys1202. +20. Ringel, G., & Youngs, J. W. T. (1968). Solution of the Heawood Map-Coloring Problem. *Proceedings of the National Academy of Sciences*, 60, 438-445. DOI: 10.1073/pnas.60.2.438. +21. Spencer, E. P. (2026a). *Why the Möbius Program Moves to 3, 5, 7, 11, and 13 Interactions*. Unpublished working manuscript. +22. Spencer, E. P. (2026b). *Recursive Hypertoroidal Interference and Triadic Scale Closure*. Unpublished working manuscript. +23. Hodgkin, A. L., & Huxley, A. F. (1952). A Quantitative Description of Membrane Current and Its Application to Conduction and Excitation in Nerve. *The Journal of Physiology*, 117, 500-544. DOI: 10.1113/jphysiol.1952.sp004764. +24. Takahashi, F., et al. (Particle Data Group). (2026). Review of Particle Physics. *International Journal of Modern Physics A*, 41, 2630011. DOI: 10.1142/S0217751X26300115. +25. Kramida, A., Ralchenko, Yu., Reader, J., & NIST ASD Team. (2024). *NIST Atomic Spectra Database* (version 5.12). National Institute of Standards and Technology. DOI: 10.18434/T4W30F. +26. Bethe, H. A., & Salpeter, E. E. (1957). *Quantum Mechanics of One- and Two-Electron Atoms*. Springer. +27. Born, M., & Oppenheimer, J. R. (1927). Zur Quantentheorie der Molekeln. *Annalen der Physik*, 389, 457-484. DOI: 10.1002/andp.19273892002. +28. Saha, M. N. (1920). Ionization in the Solar Chromosphere. *Philosophical Magazine*, 40, 472-488. +29. Shani, I. (2015). Cosmopsychism: A Holistic Approach to the Metaphysics of Experience. *Philosophical Papers*, 44, 389-437. +30. Hashemi, A. (2024). How to Understand Russellian Panpsychism. *Erkenntnis*, 90, 3747-3766. +31. Goff, P. (2024). How Exactly Does Panpsychism Help Explain Consciousness? *Journal of Consciousness Studies*, 31(3-4), 56-82. DOI: 10.53765/20512201.31.3.056. +32. The Interdependency. (2026). UCNS commit `ef98748309913588fb13f389f809d5ef6cb5fec3`: candidate modular-orbit and visible-circle continuum/gonal boundary-trace status. GitHub commit, September 6, 2026. +33. Gibbons, M., McBride, E., Venkatasubbaiah, R. H., et al. (2026). Protocol for testing global neuronal workspace and integrated information theories of consciousness in non-human primates and mice. *PLOS ONE*, 21, e0342770. DOI: 10.1371/journal.pone.0342770. + +# hmmm + +The unresolved boundary has sharpened. The paper now says exactly what must exist between primitive presence and a human I-event: supported measurement certificates, declared scale-set certificates, distinct arity classes, dyadic prerequisites, separate relational and temporal triads, a quintadic present-self bridge, a nested heptad, and an eighth that is an aggregate rather than a peer. None is established by wishing, diagram, vocabulary, or a neighboring repository's executable candidate. References 21 and 22 still need immutable source identities. The subject-family rule still must beat overlap and nesting alternatives. The next useful act is the frozen synthetic comparison in `PREREGISTRATION.md`; only after structural discrimination survives should a biological carrier-mapping protocol be written. A tensor of tensors is still required to survive contact with a tensor of tests; the tensors have retained counsel. diff --git a/research/from-photons-to-macroverse/paper/manifest.json b/research/from-photons-to-macroverse/paper/manifest.json new file mode 100644 index 0000000..b3c7ab6 --- /dev/null +++ b/research/from-photons-to-macroverse/paper/manifest.json @@ -0,0 +1,79 @@ +{ + "schema_version": "1.0.0", + "assembled_filename": "from_photons_to_macroverse_audited_0.2.0.md", + "assembled_sha256": "aba1e180c8ecf1c9bda92b20bb0c773befc33ad7322f6cbc1e6c48564251aa92", + "fragments": [ + { + "path": "paper/00-frontmatter.md", + "sha256": "c3c72e786a3256fc11d5c9de42fa2c228009d5aaaaf35661b1c05eca3d513324", + "bytes": 6059, + "role": "front matter, abstract, and author note" + }, + { + "path": "paper/01-claim-and-photons.md", + "sha256": "561ac6b056634e2c8a27fe2651cf6cfbf95a84ca2b4ea49ae7f30d340e7e8520", + "bytes": 9472, + "role": "claim discipline and photon phase-bearing baseline, sections 1-2" + }, + { + "path": "paper/01-bound-states-and-open-systems.md", + "sha256": "189775eb5087c6214f41ce329ad8183462a1557b52671abde271e0773628538f", + "bytes": 11524, + "role": "bound states, atomic physics, and open systems, sections 3-4" + }, + { + "path": "paper/02-dynamics-and-agency.md", + "sha256": "b3fb8582cb2d1d77a2b438d52fa559c19f5598ca211001c60515a5da751712dc", + "bytes": 13784, + "role": "pattern formation, stability, scale, information, boundaries, and agency, sections 5-10" + }, + { + "path": "paper/03-arity-and-recursion.md", + "sha256": "6429cdabe4e739683027875999a300910cf6aa83aac66519dc45b65d95ba9f41", + "bytes": 9773, + "role": "arity-specific closure and nested recursion, section 11" + }, + { + "path": "paper/03-availability-and-self-location.md", + "sha256": "5ee8c70e099a7227970776690902d64cdebb2f7f6ad9d4562d6fe1387dc38b86", + "bytes": 8228, + "role": "global availability, temporal depth, and self-location, sections 12-13" + }, + { + "path": "paper/04-subject-and-i-event.md", + "sha256": "38c041d56e0048f49950cd8dd9821982d83e1639f7279f66289307801b78e0fb", + "bytes": 16430, + "role": "organized descriptor, subject formation, and I-event, sections 14-16" + }, + { + "path": "paper/05-geometry-heptad-neural.md", + "sha256": "4432249e613e15044863b1adabf256179467e86920b7872b8c9db524fa099c94", + "bytes": 13387, + "role": "Möbius, prime geometry, heptad, and neural implementation, sections 17-21" + }, + { + "path": "paper/06-macroverse-ladder-and-predictions.md", + "sha256": "71fc1c4ea77892b6f3235f8f855158d1cdcb5fddc99dcf80302964399355bab3", + "bytes": 9917, + "role": "macroverse, first-principles ladder, and predictions, sections 22-24" + }, + { + "path": "paper/06-falsification-program-and-limitations.md", + "sha256": "81c722d62c84d19cc9e9bb63e42c107d63841f7ec57b264d563a6d9b5a0b08cc", + "bytes": 9651, + "role": "falsifiers, research program, and limitations, sections 25-27" + }, + { + "path": "paper/07-conclusion-and-appendices.md", + "sha256": "06f6aab6eedd111e80eae424eeda5b2161d4354250bb1a021ae53f5b89abd8f6", + "bytes": 10407, + "role": "conclusion and mathematical appendices" + }, + { + "path": "paper/07-references-and-hmmm.md", + "sha256": "39f40c60e9b8f0bcb615ebb20e8903c99f53a3f76bde24c0d2461d1d24d8b235", + "bytes": 6386, + "role": "references and hmmm" + } + ] +} diff --git a/research/from-photons-to-macroverse/source/README.md b/research/from-photons-to-macroverse/source/README.md new file mode 100644 index 0000000..271c4c8 --- /dev/null +++ b/research/from-photons-to-macroverse/source/README.md @@ -0,0 +1,17 @@ +# Original-source receipt + +The original authoring artifacts are external inputs, not repository authority and not vendored here. Their exact identities are pinned in [`../SOURCE_RECEIPT.json`](../SOURCE_RECEIPT.json): + +```text +Markdown SHA-256: f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696 +DOCX SHA-256: 18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa2 +PDF SHA-256: e1715a26b46b210a821e8bef72df934646e330e03489bf1e9b97a1b8e786e6f4 +``` + +The exact Markdown and 49-page DOCX were used to distinguish source text from PDF-parser artifacts. The submitted 49-page PDF was rendered and visually inspected in full. The audited revision is complete and self-contained under [`../paper/`](../paper/); it does not overwrite the external originals. + +One closed parser artifact matters: the source and rendered PDF state normalized differentiation as `D(Z) in [0,1]`. A parsed-text rendering that appeared to exclude `1` was not treated as a paper defect. + +## hmmm + +The original source identities are exact; references 21 and 22 inside the paper still need their own immutable artifact identities. Provenance is not hereditary. diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py new file mode 100644 index 0000000..f9ddc15 --- /dev/null +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -0,0 +1,145 @@ +"""Contracts for the stack-local From Photons to the Macroverse research package.""" + +from __future__ import annotations + +import hashlib +import json +import re +import unittest +from pathlib import Path + +PROJECT = Path(__file__).resolve().parents[1] +STACK = PROJECT.parents[1] +HEX40 = re.compile(r"^[0-9a-f]{40}$") +HEX64 = re.compile(r"^[0-9a-f]{64}$") +SOURCE_MD_SHA = "f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696" +SOURCE_DOCX_SHA = "18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa2" +SOURCE_PDF_SHA = "e1715a26b46b210a821e8bef72df934646e330e03489bf1e9b97a1b8e786e6f4" + + +def load_json(name: str) -> dict: + return json.loads((PROJECT / name).read_text(encoding="utf-8")) + + +class Contracts(unittest.TestCase): + def test_original_markdown_is_immutable_and_receipted(self) -> None: + receipt = load_json("SOURCE_RECEIPT.json") + by_role = {item["role"]: item for item in receipt["sources"]} + self.assertEqual(by_role["external original authoring source used for exact text comparison"]["sha256"], SOURCE_MD_SHA) + self.assertFalse(by_role["external original authoring source used for exact text comparison"]["repository_copy"]) + self.assertEqual(by_role["editable authoring counterpart used for identity and render verification"]["sha256"], SOURCE_DOCX_SHA) + self.assertEqual(by_role["user-supplied rendered submission"]["sha256"], SOURCE_PDF_SHA) + self.assertEqual(by_role["user-supplied rendered submission"]["visual_audit"]["standing"], "HEALTHY") + source_note = (PROJECT / receipt["source_note_path"]).read_text(encoding="utf-8") + for digest in (SOURCE_MD_SHA, SOURCE_DOCX_SHA, SOURCE_PDF_SHA): + self.assertIn(digest, source_note) + manifest = load_json("paper/manifest.json") + paper = b"".join((PROJECT / item["path"]).read_bytes() for item in manifest["fragments"]) + self.assertEqual(hashlib.sha256(paper).hexdigest(), receipt["revision"]["assembled_sha256"]) + self.assertEqual(manifest["assembled_sha256"], receipt["revision"]["assembled_sha256"]) + + def test_parser_artifact_is_not_misreported_as_defect(self) -> None: + source_note = (PROJECT / "source" / "README.md").read_text(encoding="utf-8") + audit = (PROJECT / "AUDIT.md").read_text(encoding="utf-8") + ledger = load_json("CLAIM_LEDGER.json") + self.assertIn("D(Z) in [0,1]", source_note) + self.assertIn("parsed-text endpoint was not a paper defect", audit) + claim = next(x for x in ledger["claims"] if x["id"] == "DIFFERENTIATION_RANGE") + self.assertEqual(claim["status"], "HEALTHY_PARSER_ARTIFACT_CLOSED") + + def test_active_paper_contains_actual_repairs(self) -> None: + manifest = load_json("paper/manifest.json") + text = b"".join((PROJECT / item["path"]).read_bytes() for item in manifest["fragments"]).decode("utf-8") + flat = " ".join(text.split()) + self.assertIn("hmmm_undefined", text) + self.assertIn(r"\mathcal B_{\mathrm{bdry}}", text) + self.assertNotIn(r"+\epsilon", text) + self.assertIn("measurement certificate", text) + self.assertIn("single argmax selects one high-scoring candidate", text) + self.assertIn("candidate necessary architecture", text) + self.assertNotIn("Consciousness precedes biological life as a pattern class", text) + self.assertIn("pre-biological embodiments remain logically open within the postulate but empirically unestablished", flat) + self.assertIn("not ratified as selected UCNS geometry", text) + self.assertIn("10.53765/20512201.31.3.056", text) + self.assertIn("10.1142/S0217751X26300115", text) + + def test_domain_claim_is_bounded(self) -> None: + claim = load_json("DOMAIN_CLAIM.json") + status = claim["claim_status"].lower() + for phrase in ("stack-local research", "not canon", "not empirically validated", "not clinical", "not a human classifier"): + self.assertIn(phrase, status) + exclusions = " ".join(claim["excluded_uses"]).lower() + for phrase in ("derive primitive consciousness", "automatic evidence for consciousness", "clinical diagnosis", "extra spacetime dimension"): + self.assertIn(phrase, exclusions) + self.assertEqual(claim["no_transfer"]["metapat_root_impact"], "none") + self.assertIsNone(claim["no_transfer"]["canon_selection"]) + + def test_claim_ledger_standing(self) -> None: + by_id = {x["id"]: x for x in load_json("CLAIM_LEDGER.json")["claims"]} + self.assertEqual(by_id["BOUNDARY_INTEGRITY_SUPPORT"]["status"], "REPAIRED") + self.assertEqual(by_id["TRIADIC_MINIMUM"]["status"], "REPAIRED_NECESSARY_NOT_SUFFICIENT") + self.assertEqual(by_id["SUBJECT_FAMILY_SELECTION"]["status"], "REPAIRED_BUT_UNRESOLVED") + self.assertEqual(by_id["HUMAN_HEPTAD"]["status"], "UNVALIDATED_HIGH_RISK") + self.assertEqual(by_id["SOURCE_REFERENCES_21_22"]["standing"], "HMMM") + + def test_symbol_registry_prevents_plain_text_collisions(self) -> None: + text = (PROJECT / "SYMBOL_REGISTRY.md").read_text(encoding="utf-8") + for token in ("`C0_presence`", "`C_org_t`", "`M_macro`", "`M_eff_T`", "`B_bdry`", "`A_torus`", "`I_event_t`", "`Cl_n`", "`CG_k`", "`T_arity_t`"): + self.assertIn(token, text) + self.assertIn("Bare `consciousness` is forbidden", text) + self.assertIn("Typography is not a type system", text) + + def test_work_graph_digest_and_nontransfer(self) -> None: + graph = load_json("WORK_GRAPH.json") + participants = graph["participants"] + boundaries = graph["boundaries"] + self.assertEqual(len({x["id"] for x in participants}), len(participants)) + for item in participants: + if item["kind"] == "repository": + self.assertRegex(item["commit"], HEX40) + elif item["kind"] == "artifact": + self.assertRegex(item["sha256"], HEX64) + elif item["kind"] == "publication": + self.assertRegex(item["doi"], r"^10\.") + elif item["kind"] == "unpublished-manuscript": + self.assertEqual(item["identity"], "hmmm") + payload = {"participants": participants, "boundaries": boundaries} + observed = hashlib.sha256(json.dumps(payload, sort_keys=True, separators=(",", ":")).encode()).hexdigest() + self.assertEqual(observed, graph["work_graph_sha256"]) + for key in ("authority_transfer", "proof_status_transfer", "measurement_status_transfer", "empirical_status_transfer", "clinical_status_transfer", "metaphysical_postulate_to_physics", "physics_to_consciousness", "ucns_geometry_to_consciousness", "ucns_candidate_ratification_transfer", "edcm_validation_claim", "pcea_security_to_ontology", "epac_internal_result_to_external_physics", "human_classification"): + self.assertIs(boundaries[key], False, key) + self.assertEqual(boundaries["metapat_root_impact"], "none") + self.assertIsNone(boundaries["canon_selection"]) + ucns = next(x for x in participants if x["id"] == "ucns") + self.assertEqual(ucns["commit"], "ef98748309913588fb13f389f809d5ef6cb5fec3") + self.assertIn("no ratification", ucns["role"]) + + def test_preregistration_is_frozen_and_nonclassifying(self) -> None: + text = (PROJECT / "PREREGISTRATION.md").read_text(encoding="utf-8") + flat = " ".join(text.split()) + for phrase in ("run status: not-run", "human subjects: none", "animal subjects: none", "LLM calls: none", "seeds `32..63`: sealed decision set", "`SURVIVED` requires all of the following", "`FALSIFIED` applies", "`UNRESOLVED` applies", "No outcome classifies a human, animal, model, organization, or physical system as conscious"): + self.assertIn(phrase, flat) + for control in ("six-carrier", "arbitrary-seven", "unnested-seven", "label-shuffled"): + self.assertIn(control, text) + self.assertIn("hmmm_undefined", text) + + def test_human_and_machine_entrypoints_agree(self) -> None: + readme = (PROJECT / "README.md").read_text(encoding="utf-8") + paper_index = (PROJECT / "PAPER.md").read_text(encoding="utf-8") + root = (STACK / "README.md").read_text(encoding="utf-8") + for phrase in ("SURVIVED as a candidate research program", "canon: no", "clinical use: no", "human classification: no", "Why the root stack manifest is unchanged", "## hmmm"): + self.assertIn(phrase, readme) + self.assertIn("ordered, hash-bound Markdown fragments", paper_index) + self.assertIn("from-photons-to-macroverse/", root) + self.assertIn("consciousness-first candidate research", root) + + def test_workflow_is_path_scoped(self) -> None: + workflow = (STACK / ".github/workflows/from-photons-to-macroverse.yml").read_text(encoding="utf-8") + self.assertGreaterEqual(workflow.count('"research/from-photons-to-macroverse/**"'), 2) + self.assertIn("actions/checkout@v6", workflow) + self.assertIn("actions/setup-python@v6", workflow) + self.assertIn("python -m unittest discover -s research/from-photons-to-macroverse/tests -q", workflow) + + +if __name__ == "__main__": + unittest.main() diff --git a/research/from-photons-to-macroverse/tools/assemble_paper.py b/research/from-photons-to-macroverse/tools/assemble_paper.py new file mode 100755 index 0000000..c946e23 --- /dev/null +++ b/research/from-photons-to-macroverse/tools/assemble_paper.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +"""Validate and assemble the audited paper's ordered Markdown fragments.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +from pathlib import Path + +PROJECT = Path(__file__).resolve().parents[1] +MANIFEST = PROJECT / "paper" / "manifest.json" + + +def sha256(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def assemble() -> bytes: + manifest = json.loads(MANIFEST.read_text(encoding="utf-8")) + parts: list[bytes] = [] + for item in manifest["fragments"]: + path = PROJECT / item["path"] + data = path.read_bytes() + observed = sha256(data) + if observed != item["sha256"]: + raise SystemExit( + f"fragment drift: {item['path']}: expected {item['sha256']}, observed {observed}" + ) + parts.append(data) + paper = b"".join(parts) + observed = sha256(paper) + expected = manifest["assembled_sha256"] + if observed != expected: + raise SystemExit(f"assembled paper drift: expected {expected}, observed {observed}") + return paper + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", type=Path, required=True, help="destination Markdown path") + args = parser.parse_args() + paper = assemble() + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_bytes(paper) + print(f"wrote {args.output} ({len(paper)} bytes, sha256={sha256(paper)})") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 6a955e2139363ff22dac66d6abd528af9be28134 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 13:19:04 +0000 Subject: [PATCH 02/20] docs(stack): expose source retrieval provenance gap --- research/from-photons-to-macroverse/AUDIT.md | 12 ++--- research/from-photons-to-macroverse/README.md | 9 ++-- .../SOURCE_RECEIPT.json | 41 +++++++++++++-- .../WORK_GRAPH.json | 31 ++++++++--- .../paper/manifest.json | 36 ++++++++----- .../source/README.md | 6 +-- .../tests/test_contracts.py | 52 +++++++++++++++++-- .../tools/assemble_paper.py | 12 +++++ 8 files changed, 160 insertions(+), 39 deletions(-) diff --git a/research/from-photons-to-macroverse/AUDIT.md b/research/from-photons-to-macroverse/AUDIT.md index c49aa3a..3183676 100644 --- a/research/from-photons-to-macroverse/AUDIT.md +++ b/research/from-photons-to-macroverse/AUDIT.md @@ -3,14 +3,14 @@ ## Baseline - Target: `The-Interdependency/stack@77ef8c7fb0ff75a524181655ee9f9641372768f7` -- Original Markdown: external library artifact, SHA-256 `f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696` -- Editable DOCX: SHA-256 `18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa2`, rendered to 49 pages -- Submitted PDF: SHA-256 `e1715a26b46b210a821e8bef72df934646e330e03489bf1e9b97a1b8e786e6f4`, 49 pages +- Original Markdown: external library artifact, SHA-256 `f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696`; durable retrieval `hmmm` +- Editable DOCX: SHA-256 `18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa2`, rendered to 49 pages; durable retrieval `hmmm` +- Submitted PDF: SHA-256 `e1715a26b46b210a821e8bef72df934646e330e03489bf1e9b97a1b8e786e6f4`, 49 pages; durable retrieval `hmmm` - Audit doctrine: `The-Interdependency/skill-lib@61eb3b14db440e6ee9b7bf8de3b646dbfd00fb32` - Domain restraint: `The-Interdependency/metapat@d6699e21b11c8f8394998efc34a468e2d6efc8b0` - Current UCNS candidate boundary: `The-Interdependency/ucns@ef98748309913588fb13f389f809d5ef6cb5fec3` -The originals are immutable external evidence with exact hashes. `PAPER.md` indexes the full audited revision stored as ordered, hash-bound fragments in `paper/`. The package does not overwrite history or call stack-local placement canon. +The originals are external evidence with exact hashes but no durable locator in this repository. `PAPER.md` indexes the full audited revision stored as ordered, hash-bound fragments in `paper/`; those fragments are repository-owned and validated by SHA-256 plus Git blob identity. The package does not overwrite history or call stack-local placement canon. ## Disposition @@ -66,7 +66,7 @@ The revision binds the eLife Version of Record, the 2026 PDG edition, the comple - All 49 submitted PDF pages rendered and visually inspected: healthy. - Exact 49-page DOCX counterpart located, hashed, rendered, and compared structurally. -- Exact Markdown authoring source located and hashed; it remains an external input rather than being silently rewritten or promoted to repository authority. +- Exact Markdown authoring source was located and hashed during audit; it remains an external input, and fresh-checkout retrievability is blocked until the bytes or a durable locator are supplied. - Current stack, skill-lib, METAPAT, UCNS, EDCM, PCEA, and EPAC identities pinned. - Current primary-source reference metadata checked. - Contract suite passes locally. @@ -74,4 +74,4 @@ The revision binds the eLife Version of Record, the 2026 PDG edition, the comple ## hmmm -References 21 and 22 remain unbound to immutable artifacts. The synthetic arity/recursion protocol is not run. Subject exclusion, heptadic necessity, biological carrier labels, the I-event, and P0 remain unresolved at their declared standings. The mathematics now has fewer loose shoelaces; it has not acquired wings. +Original Markdown/DOCX/PDF retrieval remains blocked on repository-owned copies or durable external locators. References 21 and 22 remain unbound to immutable artifacts. The synthetic arity/recursion protocol is not run. Subject exclusion, heptadic necessity, biological carrier labels, the I-event, and P0 remain unresolved at their declared standings. diff --git a/research/from-photons-to-macroverse/README.md b/research/from-photons-to-macroverse/README.md index d168fcf..59ae61b 100644 --- a/research/from-photons-to-macroverse/README.md +++ b/research/from-photons-to-macroverse/README.md @@ -5,7 +5,7 @@ Stack-local audited research package for Erin Patrick Spencer's consciousness-fi ```text standing: SURVIVED as a candidate research program version: 0.2.0-audited -source status: external originals hash-pinned +source status: audited fragments retrievable; external originals hash-only / retrieval hmmm active paper: PAPER.md index + paper/ fragments canon: no empirical validation: none added @@ -49,7 +49,8 @@ This is new stack-local composed research, not a pinned canonical repository vie ## Usage guidance -- Cite exact source and revision hashes from `SOURCE_RECEIPT.json`. +- Cite exact source and revision hashes from `SOURCE_RECEIPT.json`; do not claim fresh-checkout + reproduction of the external originals until their bytes or durable locators are supplied. - Use names from `SYMBOL_REGISTRY.md` in code and result files. - Emit only `SURVIVED`, `FALSIFIED`, `UNRESOLVED`, `BLOCKED`, or `DEPRECATED` against a frozen claim and control set. - Do not infer human carrier labels after observing a desired result. @@ -61,8 +62,8 @@ This is new stack-local composed research, not a pinned canonical repository vie python -m unittest discover -s research/from-photons-to-macroverse/tests -q ``` -The assembled paper was rendered as a 58-page PDF and every rendered page was visually inspected. The repository keeps hash-bound Markdown fragments rather than a generated binary. +The assembled paper was rendered as a 58-page PDF and every rendered page was visually inspected. The repository keeps hash-bound Markdown fragments rather than a generated binary; the assembler validates per-fragment SHA-256 and Git blob identities. ## hmmm -The source manuscripts behind references 21 and 22 still lack immutable identities. The synthetic protocol is not run. The subject-family exclusion rule remains one competitor rather than a solution. The seven carriers have a hypothesis, not a lease. +The original Markdown, DOCX, and PDF artifacts remain hash-only external evidence until supplied as repository-owned copies or durable retrieval locators. The source manuscripts behind references 21 and 22 still lack immutable identities. The synthetic protocol is not run. The subject-family exclusion rule remains one competitor rather than a solution. The seven carriers have a hypothesis, not a lease. diff --git a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json index ba6da7d..40a377c 100644 --- a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json +++ b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json @@ -1,14 +1,21 @@ { "schema_version": "1.0.0", "project": "from-photons-to-macroverse", - "source_policy": "original source is immutable; PAPER.md is the audited revision", + "source_policy": "original source artifacts are hash-pinned historical evidence; durable retrieval remains hmmm until bytes or locators are supplied; PAPER.md and paper/ are the repository-owned audited revision", "sources": [ { "role": "external original authoring source used for exact text comparison", "sha256": "f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696", "bytes": 119047, "library_name": "from_photons_to_macroverse_arity_recursion_restatement.md", - "repository_copy": false + "repository_copy": false, + "retrieval": { + "status": "BLOCKED_EXTERNAL_HASH_ONLY", + "durable_locator": "hmmm", + "repository_owned_copy": false, + "fresh_checkout_reproducible": false, + "requires_more": "supply the exact artifact bytes or a durable external locator before claiming fresh-checkout reproduction of this original source" + } }, { "role": "editable authoring counterpart used for identity and render verification", @@ -16,7 +23,14 @@ "sha256": "18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa2", "bytes": 84152, "rendered_pages": 49, - "repository_copy": false + "repository_copy": false, + "retrieval": { + "status": "BLOCKED_EXTERNAL_HASH_ONLY", + "durable_locator": "hmmm", + "repository_owned_copy": false, + "fresh_checkout_reproducible": false, + "requires_more": "supply the exact artifact bytes or a durable external locator before claiming fresh-checkout reproduction of this original source" + } }, { "role": "user-supplied rendered submission", @@ -35,6 +49,13 @@ "standing": "HEALTHY", "pages_reviewed": "1-49", "finding": "no clipping, overlap, missing glyphs, blank pages, or unreadable equations observed" + }, + "retrieval": { + "status": "BLOCKED_EXTERNAL_HASH_ONLY", + "durable_locator": "hmmm", + "repository_owned_copy": false, + "fresh_checkout_reproducible": false, + "requires_more": "supply the exact artifact bytes or a durable external locator before claiming fresh-checkout reproduction of this original source" } } ], @@ -51,6 +72,20 @@ "renderer": "Pandoc with XeLaTeX", "visual_audit": "HEALTHY: all pages inspected at 150 DPI; no clipping, overlap, blank pages, black squares, or missing glyphs observed", "repository_copy": false + }, + "repository_copy": true, + "retrieval": { + "status": "REPOSITORY_OWNED_FRAGMENTS", + "repository": "The-Interdependency/stack", + "index_path": "research/from-photons-to-macroverse/PAPER.md", + "manifest_path": "research/from-photons-to-macroverse/paper/manifest.json", + "fragment_manifest_carries": [ + "path", + "bytes", + "sha256", + "git_blob_sha1" + ], + "fresh_checkout_reproducible": true } }, "reuse_license": "hmmm: no repository-wide license is present on the audited stack baseline", diff --git a/research/from-photons-to-macroverse/WORK_GRAPH.json b/research/from-photons-to-macroverse/WORK_GRAPH.json index eb2ac66..ac2a2dc 100644 --- a/research/from-photons-to-macroverse/WORK_GRAPH.json +++ b/research/from-photons-to-macroverse/WORK_GRAPH.json @@ -54,22 +54,40 @@ "id": "source-markdown", "kind": "artifact", "sha256": "f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696", - "role": "external immutable original authoring source used for exact text comparison; not vendored", - "name": "from_photons_to_macroverse_arity_recursion_restatement.md" + "role": "external immutable original authoring source used for exact text comparison; not vendored; durable retrieval hmmm", + "name": "from_photons_to_macroverse_arity_recursion_restatement.md", + "retrieval": { + "status": "BLOCKED_EXTERNAL_HASH_ONLY", + "durable_locator": "hmmm", + "repository_owned_copy": false, + "fresh_checkout_reproducible": false + } }, { "id": "source-docx", "kind": "artifact", "name": "from_photons_to_macroverse_arity_recursion_restatement.docx", "sha256": "18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa2", - "role": "editable 49-page authoring counterpart; not vendored" + "role": "editable 49-page authoring counterpart; not vendored; durable retrieval hmmm", + "retrieval": { + "status": "BLOCKED_EXTERNAL_HASH_ONLY", + "durable_locator": "hmmm", + "repository_owned_copy": false, + "fresh_checkout_reproducible": false + } }, { "id": "source-pdf", "kind": "artifact", "name": "from_photons_to_macroverse_arity_recursion_restatement.pdf", "sha256": "e1715a26b46b210a821e8bef72df934646e330e03489bf1e9b97a1b8e786e6f4", - "role": "user-supplied 49-page rendered submission; not vendored" + "role": "user-supplied 49-page rendered submission; not vendored; durable retrieval hmmm", + "retrieval": { + "status": "BLOCKED_EXTERNAL_HASH_ONLY", + "durable_locator": "hmmm", + "repository_owned_copy": false, + "fresh_checkout_reproducible": false + } }, { "id": "nature-2025-adversarial", @@ -110,7 +128,7 @@ { "id": "source-manuscript-21", "kind": "unpublished-manuscript", - "title": "Why the Möbius Program Moves to 3, 5, 7, 11, and 13 Interactions", + "title": "Why the M\u00f6bius Program Moves to 3, 5, 7, 11, and 13 Interactions", "identity": "hmmm", "role": "claimed source; immutable artifact not found" }, @@ -141,6 +159,7 @@ "canon_selection": null, "paper_revision_mode": "immutable-original-markdown-plus-full-audited-revision", "hmmm": [ + "Durable retrieval locators or repository-owned copies for the original Markdown, DOCX, and PDF source artifacts.", "Immutable artifact identities for source manuscripts 21 and 22.", "Run the frozen synthetic arity and recursion comparison.", "Compare hard nonoverlap with nesting and overlap-capable subject rules.", @@ -148,5 +167,5 @@ "Resolve repository-wide licensing before claiming reuse permissions." ] }, - "work_graph_sha256": "c465f0b8051fb6d17a1715171b9483cb3b4db12bfefdaf293bb5de092de2e5ee" + "work_graph_sha256": "1ad5f6cff4af90c7d835c85062bc22f60fc4a90d04e72de7dd4af8acd85c9fdc" } diff --git a/research/from-photons-to-macroverse/paper/manifest.json b/research/from-photons-to-macroverse/paper/manifest.json index b3c7ab6..03ace14 100644 --- a/research/from-photons-to-macroverse/paper/manifest.json +++ b/research/from-photons-to-macroverse/paper/manifest.json @@ -7,73 +7,85 @@ "path": "paper/00-frontmatter.md", "sha256": "c3c72e786a3256fc11d5c9de42fa2c228009d5aaaaf35661b1c05eca3d513324", "bytes": 6059, - "role": "front matter, abstract, and author note" + "role": "front matter, abstract, and author note", + "git_blob_sha1": "d70878f0e3ff21b67fa14854a0350114d058a15f" }, { "path": "paper/01-claim-and-photons.md", "sha256": "561ac6b056634e2c8a27fe2651cf6cfbf95a84ca2b4ea49ae7f30d340e7e8520", "bytes": 9472, - "role": "claim discipline and photon phase-bearing baseline, sections 1-2" + "role": "claim discipline and photon phase-bearing baseline, sections 1-2", + "git_blob_sha1": "a391959fb52a14ab595996b63014f4849d41de1c" }, { "path": "paper/01-bound-states-and-open-systems.md", "sha256": "189775eb5087c6214f41ce329ad8183462a1557b52671abde271e0773628538f", "bytes": 11524, - "role": "bound states, atomic physics, and open systems, sections 3-4" + "role": "bound states, atomic physics, and open systems, sections 3-4", + "git_blob_sha1": "a3fe544fde75b996c5778e12896147fab4477c03" }, { "path": "paper/02-dynamics-and-agency.md", "sha256": "b3fb8582cb2d1d77a2b438d52fa559c19f5598ca211001c60515a5da751712dc", "bytes": 13784, - "role": "pattern formation, stability, scale, information, boundaries, and agency, sections 5-10" + "role": "pattern formation, stability, scale, information, boundaries, and agency, sections 5-10", + "git_blob_sha1": "e11133edb4aa1549ed54d2afd0127eb985e3dfcc" }, { "path": "paper/03-arity-and-recursion.md", "sha256": "6429cdabe4e739683027875999a300910cf6aa83aac66519dc45b65d95ba9f41", "bytes": 9773, - "role": "arity-specific closure and nested recursion, section 11" + "role": "arity-specific closure and nested recursion, section 11", + "git_blob_sha1": "f072b856455c9828859b60e677355be612048ec3" }, { "path": "paper/03-availability-and-self-location.md", "sha256": "5ee8c70e099a7227970776690902d64cdebb2f7f6ad9d4562d6fe1387dc38b86", "bytes": 8228, - "role": "global availability, temporal depth, and self-location, sections 12-13" + "role": "global availability, temporal depth, and self-location, sections 12-13", + "git_blob_sha1": "2048eacf0d62297e7c07bdae82295df72f2e6279" }, { "path": "paper/04-subject-and-i-event.md", "sha256": "38c041d56e0048f49950cd8dd9821982d83e1639f7279f66289307801b78e0fb", "bytes": 16430, - "role": "organized descriptor, subject formation, and I-event, sections 14-16" + "role": "organized descriptor, subject formation, and I-event, sections 14-16", + "git_blob_sha1": "7366228e35253c01bdc5ca21d1971a90f0fc7b16" }, { "path": "paper/05-geometry-heptad-neural.md", "sha256": "4432249e613e15044863b1adabf256179467e86920b7872b8c9db524fa099c94", "bytes": 13387, - "role": "Möbius, prime geometry, heptad, and neural implementation, sections 17-21" + "role": "M\u00f6bius, prime geometry, heptad, and neural implementation, sections 17-21", + "git_blob_sha1": "31342fc4169a79b11bf601317fa1a3a9ade46081" }, { "path": "paper/06-macroverse-ladder-and-predictions.md", "sha256": "71fc1c4ea77892b6f3235f8f855158d1cdcb5fddc99dcf80302964399355bab3", "bytes": 9917, - "role": "macroverse, first-principles ladder, and predictions, sections 22-24" + "role": "macroverse, first-principles ladder, and predictions, sections 22-24", + "git_blob_sha1": "682c7ce31e4ce25bffb71bd646d939f1a4f7ab99" }, { "path": "paper/06-falsification-program-and-limitations.md", "sha256": "81c722d62c84d19cc9e9bb63e42c107d63841f7ec57b264d563a6d9b5a0b08cc", "bytes": 9651, - "role": "falsifiers, research program, and limitations, sections 25-27" + "role": "falsifiers, research program, and limitations, sections 25-27", + "git_blob_sha1": "d3a580468c84fd2f634bdba5a9417c7547d710b5" }, { "path": "paper/07-conclusion-and-appendices.md", "sha256": "06f6aab6eedd111e80eae424eeda5b2161d4354250bb1a021ae53f5b89abd8f6", "bytes": 10407, - "role": "conclusion and mathematical appendices" + "role": "conclusion and mathematical appendices", + "git_blob_sha1": "39f0aa857734255b25af63e08bb33d638cee1c24" }, { "path": "paper/07-references-and-hmmm.md", "sha256": "39f40c60e9b8f0bcb615ebb20e8903c99f53a3f76bde24c0d2461d1d24d8b235", "bytes": 6386, - "role": "references and hmmm" + "role": "references and hmmm", + "git_blob_sha1": "1b9ee49ebb19dadbf55aeb7df18e90402f16c70b" } ] } diff --git a/research/from-photons-to-macroverse/source/README.md b/research/from-photons-to-macroverse/source/README.md index 271c4c8..9ca1469 100644 --- a/research/from-photons-to-macroverse/source/README.md +++ b/research/from-photons-to-macroverse/source/README.md @@ -1,6 +1,6 @@ # Original-source receipt -The original authoring artifacts are external inputs, not repository authority and not vendored here. Their exact identities are pinned in [`../SOURCE_RECEIPT.json`](../SOURCE_RECEIPT.json): +The original authoring artifacts are external inputs, not repository authority and not vendored here. Their hashes are pinned in [`../SOURCE_RECEIPT.json`](../SOURCE_RECEIPT.json), but their durable retrieval locators remain `hmmm` until the exact bytes or an artifact-store identity is supplied: ```text Markdown SHA-256: f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696 @@ -8,10 +8,10 @@ DOCX SHA-256: 18d08a24c2837e4455fb25c06294b4302d8187d1b0a449a826754b9a4d26aaa PDF SHA-256: e1715a26b46b210a821e8bef72df934646e330e03489bf1e9b97a1b8e786e6f4 ``` -The exact Markdown and 49-page DOCX were used to distinguish source text from PDF-parser artifacts. The submitted 49-page PDF was rendered and visually inspected in full. The audited revision is complete and self-contained under [`../paper/`](../paper/); it does not overwrite the external originals. +The exact Markdown and 49-page DOCX were used during the audit to distinguish source text from PDF-parser artifacts. The submitted 49-page PDF was rendered and visually inspected in full. A fresh checkout cannot reproduce those original-source comparisons from this repository alone. The audited revision is complete and self-contained under [`../paper/`](../paper/); it does not overwrite the external originals. One closed parser artifact matters: the source and rendered PDF state normalized differentiation as `D(Z) in [0,1]`. A parsed-text rendering that appeared to exclude `1` was not treated as a paper defect. ## hmmm -The original source identities are exact; references 21 and 22 inside the paper still need their own immutable artifact identities. Provenance is not hereditary. +The original source hashes are exact, but original-source retrievability is unresolved. References 21 and 22 inside the paper still need their own immutable artifact identities. Provenance is not hereditary. diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index f9ddc15..7305835 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -3,6 +3,7 @@ from __future__ import annotations import hashlib +import importlib.util import json import re import unittest @@ -21,20 +22,61 @@ def load_json(name: str) -> dict: return json.loads((PROJECT / name).read_text(encoding="utf-8")) +def load_assembler(): + path = PROJECT / "tools" / "assemble_paper.py" + spec = importlib.util.spec_from_file_location("from_photons_assembler", path) + if spec is None or spec.loader is None: + raise RuntimeError(f"cannot load assembler at {path}") + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + class Contracts(unittest.TestCase): def test_original_markdown_is_immutable_and_receipted(self) -> None: receipt = load_json("SOURCE_RECEIPT.json") by_role = {item["role"]: item for item in receipt["sources"]} - self.assertEqual(by_role["external original authoring source used for exact text comparison"]["sha256"], SOURCE_MD_SHA) - self.assertFalse(by_role["external original authoring source used for exact text comparison"]["repository_copy"]) - self.assertEqual(by_role["editable authoring counterpart used for identity and render verification"]["sha256"], SOURCE_DOCX_SHA) + self.assertEqual( + by_role["external original authoring source used for exact text comparison"]["sha256"], + SOURCE_MD_SHA, + ) + self.assertFalse( + by_role["external original authoring source used for exact text comparison"]["repository_copy"] + ) + self.assertEqual( + by_role["editable authoring counterpart used for identity and render verification"]["sha256"], + SOURCE_DOCX_SHA, + ) self.assertEqual(by_role["user-supplied rendered submission"]["sha256"], SOURCE_PDF_SHA) - self.assertEqual(by_role["user-supplied rendered submission"]["visual_audit"]["standing"], "HEALTHY") + self.assertEqual( + by_role["user-supplied rendered submission"]["visual_audit"]["standing"], "HEALTHY" + ) source_note = (PROJECT / receipt["source_note_path"]).read_text(encoding="utf-8") for digest in (SOURCE_MD_SHA, SOURCE_DOCX_SHA, SOURCE_PDF_SHA): self.assertIn(digest, source_note) + for source in receipt["sources"]: + retrieval = source["retrieval"] + self.assertEqual(retrieval["status"], "BLOCKED_EXTERNAL_HASH_ONLY") + self.assertEqual(retrieval["durable_locator"], "hmmm") + self.assertFalse(retrieval["fresh_checkout_reproducible"]) + + def test_audited_fragments_are_repository_owned_and_retrievable(self) -> None: + receipt = load_json("SOURCE_RECEIPT.json") + self.assertTrue(receipt["revision"]["repository_copy"]) + retrieval = receipt["revision"]["retrieval"] + self.assertEqual(retrieval["status"], "REPOSITORY_OWNED_FRAGMENTS") + self.assertTrue(retrieval["fresh_checkout_reproducible"]) + self.assertEqual( + retrieval["fragment_manifest_carries"], + ["path", "bytes", "sha256", "git_blob_sha1"], + ) manifest = load_json("paper/manifest.json") - paper = b"".join((PROJECT / item["path"]).read_bytes() for item in manifest["fragments"]) + assembler = load_assembler() + paper = assembler.assemble() + for item in manifest["fragments"]: + data = (PROJECT / item["path"]).read_bytes() + self.assertEqual(hashlib.sha256(data).hexdigest(), item["sha256"]) + self.assertEqual(assembler.git_blob_sha1(data), item["git_blob_sha1"]) self.assertEqual(hashlib.sha256(paper).hexdigest(), receipt["revision"]["assembled_sha256"]) self.assertEqual(manifest["assembled_sha256"], receipt["revision"]["assembled_sha256"]) diff --git a/research/from-photons-to-macroverse/tools/assemble_paper.py b/research/from-photons-to-macroverse/tools/assemble_paper.py index c946e23..225b840 100755 --- a/research/from-photons-to-macroverse/tools/assemble_paper.py +++ b/research/from-photons-to-macroverse/tools/assemble_paper.py @@ -16,6 +16,10 @@ def sha256(data: bytes) -> str: return hashlib.sha256(data).hexdigest() +def git_blob_sha1(data: bytes) -> str: + return hashlib.sha1(b"blob " + str(len(data)).encode() + b"\0" + data).hexdigest() + + def assemble() -> bytes: manifest = json.loads(MANIFEST.read_text(encoding="utf-8")) parts: list[bytes] = [] @@ -27,6 +31,14 @@ def assemble() -> bytes: raise SystemExit( f"fragment drift: {item['path']}: expected {item['sha256']}, observed {observed}" ) + blob = git_blob_sha1(data) + expected_blob = item.get("git_blob_sha1") + if expected_blob is None: + raise SystemExit(f"fragment missing git blob identity: {item['path']}") + if blob != expected_blob: + raise SystemExit( + f"fragment blob drift: {item['path']}: expected {expected_blob}, observed {blob}" + ) parts.append(data) paper = b"".join(parts) observed = sha256(paper) From f09673b7ebe5b20b47cadb86c4b815bef906703a Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 14:04:04 +0000 Subject: [PATCH 03/20] docs(stack): close research provenance review gaps --- .../workflows/from-photons-to-macroverse.yml | 4 ++ STACK_MANIFEST.md | 20 +++++- research/from-photons-to-macroverse/AUDIT.md | 4 +- .../DOMAIN_CLAIM.json | 4 +- research/from-photons-to-macroverse/README.md | 9 ++- .../SOURCE_RECEIPT.json | 11 +-- .../WORK_GRAPH.json | 10 ++- .../paper/04-subject-and-i-event.md | 8 ++- .../paper/manifest.json | 8 +-- .../tests/test_contracts.py | 47 ++++++++++++- stack-manifest.json | 69 ++++++++++++++++++- 11 files changed, 169 insertions(+), 25 deletions(-) diff --git a/.github/workflows/from-photons-to-macroverse.yml b/.github/workflows/from-photons-to-macroverse.yml index 6f22ee0..244e764 100644 --- a/.github/workflows/from-photons-to-macroverse.yml +++ b/.github/workflows/from-photons-to-macroverse.yml @@ -5,12 +5,16 @@ on: paths: - "research/from-photons-to-macroverse/**" - "README.md" + - "STACK_MANIFEST.md" + - "stack-manifest.json" - ".github/workflows/from-photons-to-macroverse.yml" push: branches: [main] paths: - "research/from-photons-to-macroverse/**" - "README.md" + - "STACK_MANIFEST.md" + - "stack-manifest.json" - ".github/workflows/from-photons-to-macroverse.yml" permissions: diff --git a/STACK_MANIFEST.md b/STACK_MANIFEST.md index 80e46c1..c7c28b4 100644 --- a/STACK_MANIFEST.md +++ b/STACK_MANIFEST.md @@ -7,8 +7,8 @@ Provenance and authority-boundary record for `The-Interdependency/stack`. - PCEA canonical refresh UTC: `2026-08-31T07:49:28Z` at `91ffa8c7249dfb810ca64a0bbc500481c0bd12a9` - EPAC extraction reconciliation UTC: `2026-09-05` at `d8868858b2e455381ce670797bdbe47189bdc496` - Stack-manifest schema: `the-interdependency.stack-manifest` version `1.0.0` -- Work-graph digest (SHA-256 over canonical `repositories` + `boundaries` JSON): - `b452b529e30cbb1045c82035b5ed022dea47f3515391de4e9b35a08c90f3c9d5` +- Work-graph digest (SHA-256 over canonical `repositories` + `research_participants` + `boundaries` JSON): + `bbcb6b7582192c02e79f5b98b8f857385a07cda3280f24602f825ecd15ac405f` - Machine-readable copy: [`stack-manifest.json`](stack-manifest.json) ## Directory contract @@ -38,6 +38,22 @@ meaning used by that repository. | `The-Interdependency/ptcna` | `97abdd1bbda61a68e0aac8595a32a3cb0ce73487` | main | prime tensor circled neural architecture | canon view `libs/ptcna/`; research `research/ptcna/` | | `The-Interdependency/epac` | `d8868858b2e455381ce670797bdbe47189bdc496` | main | independent extracted candidate repository; implementation/public-contract authority transition incomplete | extracted repo exists; forge candidate remains `research/epac/` until release/reconsumption; `libs/epac/` remains unpopulated | +## Research-Only Composition Participants + +These records bind stack-local research inputs without refreshing `libs/`, +changing canonical repository pins, or presenting the research package as a +release identity. + +| Workspace | Participant | Exact commit | Relation | Canonical release | +|---|---|---|---|---| +| `research/from-photons-to-macroverse/` | `The-Interdependency/stack` | `77ef8c7fb0ff75a524181655ee9f9641372768f7` | target composition forge baseline at audit start | no | +| `research/from-photons-to-macroverse/` | `The-Interdependency/skill-lib` | `61eb3b14db440e6ee9b7bf8de3b646dbfd00fb32` | audit, domain-claim, work-graph, and hmmm doctrine | no | +| `research/from-photons-to-macroverse/` | `The-Interdependency/metapat` | `d6699e21b11c8f8394998efc34a468e2d6efc8b0` | domain-restraint authority; root impact none | no | +| `research/from-photons-to-macroverse/` | `The-Interdependency/ucns` | `ef98748309913588fb13f389f809d5ef6cb5fec3` | candidate exact visible-circle continuum/gonal trace; no ratification or meaning transfer | no | +| `research/from-photons-to-macroverse/` | `The-Interdependency/edcm` | `eb5f200d48a8c4ffa7b943238407fbdac4934946` | adjacent measurement discipline only; no validation claim | no | +| `research/from-photons-to-macroverse/` | `The-Interdependency/pcea` | `834987cb0c1fea5f62d6ea08e5c5bb878c312646` | adjacent runtime/security work; no ontology transfer | no | +| `research/from-photons-to-macroverse/` | `The-Interdependency/epac` | `d8868858b2e455381ce670797bdbe47189bdc496` | adjacent internal research; no external physics transfer | no | + The imported `libs/` trees are the complete tracked working trees of their source repositories at the pinned commits, produced from Git trees / `git archive` contents. VCS metadata, virtualenvs, caches, and untracked files are excluded. diff --git a/research/from-photons-to-macroverse/AUDIT.md b/research/from-photons-to-macroverse/AUDIT.md index 3183676..62a7ff0 100644 --- a/research/from-photons-to-macroverse/AUDIT.md +++ b/research/from-photons-to-macroverse/AUDIT.md @@ -70,8 +70,8 @@ The revision binds the eLife Version of Record, the 2026 PDG edition, the comple - Current stack, skill-lib, METAPAT, UCNS, EDCM, PCEA, and EPAC identities pinned. - Current primary-source reference metadata checked. - Contract suite passes locally. -- Audited revision assembled from `paper/` and rendered to a 58-page PDF with Pandoc/XeLaTeX; all pages were rendered at 150 DPI and visually inspected with no clipping, overlap, blank pages, black squares, or missing glyphs observed. The convenience render is not repository authority and is not vendored. +- Prior audited revision assembled from `paper/` and rendered to a 58-page PDF with Pandoc/XeLaTeX; all pages were rendered at 150 DPI and visually inspected with no clipping, overlap, blank pages, black squares, or missing glyphs observed before the human-classifier text repair. The current Markdown fragments are hash-bound and assemble cleanly, but current visual render status is `hmmm` until rerendered. ## hmmm -Original Markdown/DOCX/PDF retrieval remains blocked on repository-owned copies or durable external locators. References 21 and 22 remain unbound to immutable artifacts. The synthetic arity/recursion protocol is not run. Subject exclusion, heptadic necessity, biological carrier labels, the I-event, and P0 remain unresolved at their declared standings. +Original Markdown/DOCX/PDF retrieval remains blocked on repository-owned copies or durable external locators. Current audited-revision visual render remains stale after the text repair. References 21 and 22 remain unbound to immutable artifacts. The synthetic arity/recursion protocol is not run. Subject exclusion, heptadic necessity, biological carrier labels, the I-event, and P0 remain unresolved at their declared standings. diff --git a/research/from-photons-to-macroverse/DOMAIN_CLAIM.json b/research/from-photons-to-macroverse/DOMAIN_CLAIM.json index 3e6a129..d1c06d7 100644 --- a/research/from-photons-to-macroverse/DOMAIN_CLAIM.json +++ b/research/from-photons-to-macroverse/DOMAIN_CLAIM.json @@ -85,7 +85,9 @@ ], "no_transfer": { "metapat_root_impact": "none", - "ucns_geometry_to_consciousness": false, + "ucns_geometry_to_primitive_intrinsic_presence": false, + "ucns_geometry_to_organized_subjecthood": false, + "ucns_geometry_to_candidate_content": false, "ucns_ratification_transfer": false, "edcm_validation_claim": false, "pcea_security_to_ontology": false, diff --git a/research/from-photons-to-macroverse/README.md b/research/from-photons-to-macroverse/README.md index 59ae61b..a5fb905 100644 --- a/research/from-photons-to-macroverse/README.md +++ b/research/from-photons-to-macroverse/README.md @@ -43,9 +43,12 @@ Run only the frozen synthetic model-recovery protocol in `PREREGISTRATION.md`. I A surviving synthetic result would show only structural identifiability inside the frozen systems. It would not establish P0, a Möbius substrate, prime arity, a human heptad, or consciousness in any tested system. -## Why the root stack manifest is unchanged +## Why the root canonical pins are unchanged -This is new stack-local composed research, not a pinned canonical repository view. Adding it to `STACK_MANIFEST.md` or `stack-manifest.json` would falsely suggest an owning repository and release identity. Graduation remains a later, explicit event. +This is new stack-local composed research, not a pinned canonical repository view. +The root stack manifests record its noncanonical research participants, but +those records do not refresh `libs/`, change canonical repository pins, or +create an owning release identity. Graduation remains a later, explicit event. ## Usage guidance @@ -62,7 +65,7 @@ This is new stack-local composed research, not a pinned canonical repository vie python -m unittest discover -s research/from-photons-to-macroverse/tests -q ``` -The assembled paper was rendered as a 58-page PDF and every rendered page was visually inspected. The repository keeps hash-bound Markdown fragments rather than a generated binary; the assembler validates per-fragment SHA-256 and Git blob identities. +The prior `0.2.0-audited` paper was rendered as a 58-page PDF and every rendered page was visually inspected before the human-classifier text repair. The current visual render is `hmmm` until rerendered. The repository keeps hash-bound Markdown fragments rather than a generated binary; the assembler validates per-fragment SHA-256 and Git blob identities. ## hmmm diff --git a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json index 40a377c..6e604ac 100644 --- a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json +++ b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json @@ -64,13 +64,14 @@ "manifest_path": "paper/manifest.json", "storage_mode": "ordered hash-bound Markdown fragments", "version": "0.2.0-audited", - "assembled_sha256": "aba1e180c8ecf1c9bda92b20bb0c773befc33ad7322f6cbc1e6c48564251aa92", - "assembled_bytes": 125018, + "assembled_sha256": "fb67e718b2c658671c8d60ca6a946921d14012d94d3e5f69f53d93a6b0f9ecaa", + "assembled_bytes": 125236, "date": "2026-09-06", "verified_render": { - "pages": 58, - "renderer": "Pandoc with XeLaTeX", - "visual_audit": "HEALTHY: all pages inspected at 150 DPI; no clipping, overlap, blank pages, black squares, or missing glyphs observed", + "status": "HMMM_STALE_AFTER_TEXT_REPAIR", + "prior_pages": 58, + "prior_renderer": "Pandoc with XeLaTeX", + "visual_audit": "prior 0.2.0-audited render was HEALTHY before the human-classifier text repair; rerender before claiming current visual layout", "repository_copy": false }, "repository_copy": true, diff --git a/research/from-photons-to-macroverse/WORK_GRAPH.json b/research/from-photons-to-macroverse/WORK_GRAPH.json index ac2a2dc..85564de 100644 --- a/research/from-photons-to-macroverse/WORK_GRAPH.json +++ b/research/from-photons-to-macroverse/WORK_GRAPH.json @@ -148,9 +148,13 @@ "certification_status_transfer": false, "clinical_status_transfer": false, "metaphysical_postulate_to_physics": false, - "physics_to_consciousness": false, + "physics_to_primitive_intrinsic_presence": false, + "physics_to_organized_subjecthood": false, + "physics_to_candidate_content": false, "metapat_root_impact": "none", - "ucns_geometry_to_consciousness": false, + "ucns_geometry_to_primitive_intrinsic_presence": false, + "ucns_geometry_to_organized_subjecthood": false, + "ucns_geometry_to_candidate_content": false, "ucns_candidate_ratification_transfer": false, "edcm_validation_claim": false, "pcea_security_to_ontology": false, @@ -167,5 +171,5 @@ "Resolve repository-wide licensing before claiming reuse permissions." ] }, - "work_graph_sha256": "1ad5f6cff4af90c7d835c85062bc22f60fc4a90d04e72de7dd4af8acd85c9fdc" + "work_graph_sha256": "902fef7a2c7bacf7a97fc4a1e7e80a7327a52cb41197b60a323e9cd034c74916" } diff --git a/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md b/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md index 7366228..d2a8c2c 100644 --- a/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md +++ b/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md @@ -82,7 +82,13 @@ Two systems can have similar scalar organization measures and different closure \mathbf 1[\mathbf C_t\in\Omega_C]. \] -The indicator classifies organized episodes, not primitive consciousness. The region must be learned from preregistered contrasts among waking reportable experience, dreaming, anesthesia, disorders of consciousness, seizures, sleep stages, and carefully matched unconscious processing. It must not be chosen after seeing the desired result. +The indicator is non-operational in this package. It is a future protocol sketch +for candidate organized-episode contrasts, not a classifier available for use on +humans, patients, models, organizations, or machines. Before it can become an +executable protocol, \(\Omega_C\) must be preregistered, every component must +carry a measurement certificate, and outputs must be limited to protocol-level +model diagnostics. It must not classify a person or episode as conscious, support +clinical or personhood decisions, or be chosen after seeing the desired result. The theory predicts that no single component is sufficient: diff --git a/research/from-photons-to-macroverse/paper/manifest.json b/research/from-photons-to-macroverse/paper/manifest.json index 03ace14..313ef18 100644 --- a/research/from-photons-to-macroverse/paper/manifest.json +++ b/research/from-photons-to-macroverse/paper/manifest.json @@ -1,7 +1,7 @@ { "schema_version": "1.0.0", "assembled_filename": "from_photons_to_macroverse_audited_0.2.0.md", - "assembled_sha256": "aba1e180c8ecf1c9bda92b20bb0c773befc33ad7322f6cbc1e6c48564251aa92", + "assembled_sha256": "fb67e718b2c658671c8d60ca6a946921d14012d94d3e5f69f53d93a6b0f9ecaa", "fragments": [ { "path": "paper/00-frontmatter.md", @@ -47,10 +47,10 @@ }, { "path": "paper/04-subject-and-i-event.md", - "sha256": "38c041d56e0048f49950cd8dd9821982d83e1639f7279f66289307801b78e0fb", - "bytes": 16430, + "sha256": "bf5e59410eedc4ef84baab356b8bbca1fd395ccbac004244db3d4b6fbf9f6e80", + "bytes": 16648, "role": "organized descriptor, subject formation, and I-event, sections 14-16", - "git_blob_sha1": "7366228e35253c01bdc5ca21d1971a90f0fc7b16" + "git_blob_sha1": "d2a8c2c37a88b788c0cb1eec89099b16f9d9349e" }, { "path": "paper/05-geometry-heptad-neural.md", diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index 7305835..7d3c7b3 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -63,6 +63,10 @@ def test_original_markdown_is_immutable_and_receipted(self) -> None: def test_audited_fragments_are_repository_owned_and_retrievable(self) -> None: receipt = load_json("SOURCE_RECEIPT.json") self.assertTrue(receipt["revision"]["repository_copy"]) + self.assertEqual( + receipt["revision"]["verified_render"]["status"], + "HMMM_STALE_AFTER_TEXT_REPAIR", + ) retrieval = receipt["revision"]["retrieval"] self.assertEqual(retrieval["status"], "REPOSITORY_OWNED_FRAGMENTS") self.assertTrue(retrieval["fresh_checkout_reproducible"]) @@ -102,6 +106,9 @@ def test_active_paper_contains_actual_repairs(self) -> None: self.assertNotIn("Consciousness precedes biological life as a pattern class", text) self.assertIn("pre-biological embodiments remain logically open within the postulate but empirically unestablished", flat) self.assertIn("not ratified as selected UCNS geometry", text) + self.assertIn("The indicator is non-operational in this package", text) + self.assertNotIn("The indicator classifies organized episodes", text) + self.assertNotIn("learned from preregistered contrasts among waking reportable experience", text) self.assertIn("10.53765/20512201.31.3.056", text) self.assertIn("10.1142/S0217751X26300115", text) @@ -148,8 +155,10 @@ def test_work_graph_digest_and_nontransfer(self) -> None: payload = {"participants": participants, "boundaries": boundaries} observed = hashlib.sha256(json.dumps(payload, sort_keys=True, separators=(",", ":")).encode()).hexdigest() self.assertEqual(observed, graph["work_graph_sha256"]) - for key in ("authority_transfer", "proof_status_transfer", "measurement_status_transfer", "empirical_status_transfer", "clinical_status_transfer", "metaphysical_postulate_to_physics", "physics_to_consciousness", "ucns_geometry_to_consciousness", "ucns_candidate_ratification_transfer", "edcm_validation_claim", "pcea_security_to_ontology", "epac_internal_result_to_external_physics", "human_classification"): + for key in ("authority_transfer", "proof_status_transfer", "measurement_status_transfer", "empirical_status_transfer", "clinical_status_transfer", "metaphysical_postulate_to_physics", "physics_to_primitive_intrinsic_presence", "physics_to_organized_subjecthood", "physics_to_candidate_content", "ucns_geometry_to_primitive_intrinsic_presence", "ucns_geometry_to_organized_subjecthood", "ucns_geometry_to_candidate_content", "ucns_candidate_ratification_transfer", "edcm_validation_claim", "pcea_security_to_ontology", "epac_internal_result_to_external_physics", "human_classification"): self.assertIs(boundaries[key], False, key) + self.assertNotIn("physics_to_consciousness", boundaries) + self.assertNotIn("ucns_geometry_to_consciousness", boundaries) self.assertEqual(boundaries["metapat_root_impact"], "none") self.assertIsNone(boundaries["canon_selection"]) ucns = next(x for x in participants if x["id"] == "ucns") @@ -169,15 +178,49 @@ def test_human_and_machine_entrypoints_agree(self) -> None: readme = (PROJECT / "README.md").read_text(encoding="utf-8") paper_index = (PROJECT / "PAPER.md").read_text(encoding="utf-8") root = (STACK / "README.md").read_text(encoding="utf-8") - for phrase in ("SURVIVED as a candidate research program", "canon: no", "clinical use: no", "human classification: no", "Why the root stack manifest is unchanged", "## hmmm"): + for phrase in ("SURVIVED as a candidate research program", "canon: no", "clinical use: no", "human classification: no", "Why the root canonical pins are unchanged", "## hmmm"): self.assertIn(phrase, readme) self.assertIn("ordered, hash-bound Markdown fragments", paper_index) + self.assertIn("current visual render is `hmmm` until rerendered", readme) self.assertIn("from-photons-to-macroverse/", root) self.assertIn("consciousness-first candidate research", root) + def test_root_manifest_records_noncanonical_research_participants(self) -> None: + root_manifest_text = (STACK / "STACK_MANIFEST.md").read_text(encoding="utf-8") + root_manifest = json.loads((STACK / "stack-manifest.json").read_text(encoding="utf-8")) + self.assertIn("Research-Only Composition Participants", root_manifest_text) + records = [ + item + for item in root_manifest["research_participants"] + if item["workspace"] == "research/from-photons-to-macroverse/" + ] + self.assertEqual(len(records), 7) + by_repo = {item["repository"]: item for item in records} + self.assertEqual( + by_repo["The-Interdependency/skill-lib"]["commit"], + "61eb3b14db440e6ee9b7bf8de3b646dbfd00fb32", + ) + self.assertEqual( + by_repo["The-Interdependency/ucns"]["commit"], + "ef98748309913588fb13f389f809d5ef6cb5fec3", + ) + self.assertTrue(all(item["canonical_release"] is False for item in records)) + payload = { + "repositories": root_manifest["repositories"], + "research_participants": root_manifest["research_participants"], + "boundaries": root_manifest["boundaries"], + } + observed = hashlib.sha256( + json.dumps(payload, sort_keys=True, separators=(",", ":")).encode() + ).hexdigest() + self.assertEqual(observed, root_manifest["work_graph_sha256"]) + self.assertIn(root_manifest["work_graph_sha256"], root_manifest_text) + def test_workflow_is_path_scoped(self) -> None: workflow = (STACK / ".github/workflows/from-photons-to-macroverse.yml").read_text(encoding="utf-8") self.assertGreaterEqual(workflow.count('"research/from-photons-to-macroverse/**"'), 2) + self.assertGreaterEqual(workflow.count('"STACK_MANIFEST.md"'), 2) + self.assertGreaterEqual(workflow.count('"stack-manifest.json"'), 2) self.assertIn("actions/checkout@v6", workflow) self.assertIn("actions/setup-python@v6", workflow) self.assertIn("python -m unittest discover -s research/from-photons-to-macroverse/tests -q", workflow) diff --git a/stack-manifest.json b/stack-manifest.json index 00bcab9..5d24197 100644 --- a/stack-manifest.json +++ b/stack-manifest.json @@ -1,7 +1,7 @@ { "schema": "the-interdependency.stack-manifest", "version": "1.0.0", - "work_graph_sha256": "b452b529e30cbb1045c82035b5ed022dea47f3515391de4e9b35a08c90f3c9d5", + "work_graph_sha256": "bbcb6b7582192c02e79f5b98b8f857385a07cda3280f24602f825ecd15ac405f", "repositories": [ { "repository": "The-Interdependency/skill-lib", @@ -57,5 +57,70 @@ "epac exists independently at d8868858b2e455381ce670797bdbe47189bdc496, but clean install, license, stable release, downstream reconsumption, and authority-transition receipt remain incomplete; libs/epac/ stays unpopulated until graduation", "skill-lib remains a special operational snapshot at stack root rather than following the libs/research pair" ] - } + }, + "research_participants": [ + { + "workspace": "research/from-photons-to-macroverse/", + "participant_id": "stack-baseline", + "repository": "The-Interdependency/stack", + "commit": "77ef8c7fb0ff75a524181655ee9f9641372768f7", + "relation": "target composition forge baseline at audit start", + "canonical_release": false, + "authority_transfer": false + }, + { + "workspace": "research/from-photons-to-macroverse/", + "participant_id": "skill-lib", + "repository": "The-Interdependency/skill-lib", + "commit": "61eb3b14db440e6ee9b7bf8de3b646dbfd00fb32", + "relation": "audit, domain-claim, work-graph, and hmmm doctrine", + "canonical_release": false, + "authority_transfer": false + }, + { + "workspace": "research/from-photons-to-macroverse/", + "participant_id": "metapat", + "repository": "The-Interdependency/metapat", + "commit": "d6699e21b11c8f8394998efc34a468e2d6efc8b0", + "relation": "domain-restraint authority; root impact none", + "canonical_release": false, + "authority_transfer": false + }, + { + "workspace": "research/from-photons-to-macroverse/", + "participant_id": "ucns", + "repository": "The-Interdependency/ucns", + "commit": "ef98748309913588fb13f389f809d5ef6cb5fec3", + "relation": "candidate exact visible-circle continuum/gonal trace; no ratification or meaning transfer", + "canonical_release": false, + "authority_transfer": false + }, + { + "workspace": "research/from-photons-to-macroverse/", + "participant_id": "edcm", + "repository": "The-Interdependency/edcm", + "commit": "eb5f200d48a8c4ffa7b943238407fbdac4934946", + "relation": "adjacent measurement discipline only; no validation claim", + "canonical_release": false, + "authority_transfer": false + }, + { + "workspace": "research/from-photons-to-macroverse/", + "participant_id": "pcea", + "repository": "The-Interdependency/pcea", + "commit": "834987cb0c1fea5f62d6ea08e5c5bb878c312646", + "relation": "adjacent runtime/security work; no ontology transfer", + "canonical_release": false, + "authority_transfer": false + }, + { + "workspace": "research/from-photons-to-macroverse/", + "participant_id": "epac", + "repository": "The-Interdependency/epac", + "commit": "d8868858b2e455381ce670797bdbe47189bdc496", + "relation": "adjacent internal research; no external physics transfer", + "canonical_release": false, + "authority_transfer": false + } + ] } From ee3f76c7e4eec81d83e993431212b602c06ef1ba Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 14:19:43 +0000 Subject: [PATCH 04/20] docs(stack): close paper preregistration review gaps --- research/from-photons-to-macroverse/AUDIT.md | 4 +- .../PREREGISTRATION.md | 60 +++++++++++++------ research/from-photons-to-macroverse/README.md | 2 +- .../SOURCE_RECEIPT.json | 8 +-- .../paper/03-arity-and-recursion.md | 7 ++- .../paper/04-subject-and-i-event.md | 15 +++-- .../paper/07-conclusion-and-appendices.md | 13 +++- .../paper/manifest.json | 20 +++---- .../tests/test_contracts.py | 12 +++- 9 files changed, 96 insertions(+), 45 deletions(-) diff --git a/research/from-photons-to-macroverse/AUDIT.md b/research/from-photons-to-macroverse/AUDIT.md index 62a7ff0..3c8fad7 100644 --- a/research/from-photons-to-macroverse/AUDIT.md +++ b/research/from-photons-to-macroverse/AUDIT.md @@ -70,8 +70,8 @@ The revision binds the eLife Version of Record, the 2026 PDG edition, the comple - Current stack, skill-lib, METAPAT, UCNS, EDCM, PCEA, and EPAC identities pinned. - Current primary-source reference metadata checked. - Contract suite passes locally. -- Prior audited revision assembled from `paper/` and rendered to a 58-page PDF with Pandoc/XeLaTeX; all pages were rendered at 150 DPI and visually inspected with no clipping, overlap, blank pages, black squares, or missing glyphs observed before the human-classifier text repair. The current Markdown fragments are hash-bound and assemble cleanly, but current visual render status is `hmmm` until rerendered. +- Prior audited revision assembled from `paper/` and rendered to a 58-page PDF with Pandoc/XeLaTeX; all pages were rendered at 150 DPI and visually inspected with no clipping, overlap, blank pages, black squares, or missing glyphs observed before the paper text repairs. The current Markdown fragments are hash-bound and assemble cleanly, but current visual render status is `hmmm` until rerendered. ## hmmm -Original Markdown/DOCX/PDF retrieval remains blocked on repository-owned copies or durable external locators. Current audited-revision visual render remains stale after the text repair. References 21 and 22 remain unbound to immutable artifacts. The synthetic arity/recursion protocol is not run. Subject exclusion, heptadic necessity, biological carrier labels, the I-event, and P0 remain unresolved at their declared standings. +Original Markdown/DOCX/PDF retrieval remains blocked on repository-owned copies or durable external locators. Current audited-revision visual render remains stale after the paper text repairs. References 21 and 22 remain unbound to immutable artifacts. The synthetic arity/recursion protocol is not run. Subject exclusion, heptadic necessity, biological carrier labels, the I-event, and P0 remain unresolved at their declared standings. diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index ed0ad2c..0b63c41 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -37,17 +37,37 @@ and interventions; it would not show that nature uses those structures. ## Systems Construct synthetic systems at direct arities `n in {2,3,5,6,7,8}`. Each carrier has the -same local state dimension and update family. For each comparison family, freeze: - -- total trainable parameter budget; -- observed state dimension; -- noise family and signal-to-noise range; -- training sample count and intervention count; -- stability envelope and perturbation magnitude; -- optimizer, initialization family, and selection rule. +same local state dimension and update family. + +## Frozen implementation configuration + +Use configuration `arity-recursion-synthetic-v1` exactly: + +- carrier state dimension: `2` real coordinates per carrier; +- update family: discrete-time Gaussian state-space updates with `tanh` local + dynamics, declared cross-carrier terms, and no undeclared latent carriers; +- trainable parameter ceiling: `4096` parameters per candidate/control family; +- parameter equalization: use the smaller common unmasked budget when exact + equality is impossible; unused parameters are masked and reported; +- episode length: `128` transitions after a `32`-transition burn-in; +- per-seed data: `64` observational training episodes, `16` calibration episodes, + `16` held-out test episodes, and all six intervention classes below; +- noise family: independent Gaussian process noise with standard deviations + `0.01`, `0.05`, and `0.10`, crossed with the sealed seeds; +- stability envelope: reject generated systems whose no-intervention trajectories + leave `[-3,3]` in any coordinate before burn-in completes; +- perturbation magnitude: single-coordinate additive interventions of `0.5`; +- cut duration: cross-carrier terms are zeroed for `16` transitions; +- optimizer: Adam, learning rate `0.001`, batch size `64`, and `2000` updates; +- initialization family: Glorot-uniform weights and zero biases from + `(seed, model_id, restart)` for restarts `0..4`; +- selection rule: select the restart with lowest calibration negative log + likelihood before opening sealed test outputs. Where exact equality is impossible, use the smaller common parameter budget and mask unused parameters. Report every resulting asymmetry; do not compensate with a score. +If any frozen value cannot be implemented exactly, stop before fitting and report +`BLOCKED`. Nested systems use rooted arity trees of depth two. The primary seven-carrier candidate uses immediate child arities drawn from `{2,3,5}`. Controls include the same leaves @@ -68,13 +88,18 @@ For every seed, generate matched episodes under: Intervention targets and held-out combinations are generated before any model is fit and stored in the run receipt. -## Primary outcomes +## Outcomes + +Primary decision outcomes: - held-out interventional negative log likelihood; +- recovery difference `Gamma_T = E[R_full - R_cut]`. + +Guardrail and diagnostic outcomes: + - multi-horizon state-prediction error; -- recovery difference `Gamma_T = E[R_full - R_cut]`; -- minimum partition loss under the frozen partition family; -- calibration of predictive uncertainty; and +- minimum partition loss under the frozen proper partition family; +- calibration of predictive uncertainty; - parameter-normalized description length as a secondary complexity check. The source program's `Phi_c` is not treated as an IIT quantity. Every estimator, @@ -111,14 +136,15 @@ No decision threshold may be changed after any sealed output is opened. ## Decision rule For each hypothesis, compute the paired sealed-seed difference between the candidate and -every required control for both primary outcomes: interventional log score and recovery. +every required control for both primary decision outcomes: interventional log score and +recovery. Use simultaneous 95% bootstrap intervals over sealed seeds and report the paired standardized effect. Control family-wise error across all required control/outcome comparisons with a max-statistic paired permutation procedure at `alpha=0.05`. `SURVIVED` requires all of the following: -1. the candidate beats every required control on both primary outcomes; +1. the candidate beats every required control on both primary decision outcomes; 2. every simultaneous 95% interval excludes zero in the candidate-favoring direction; 3. every max-statistic adjusted paired permutation test has `p < 0.05`; 4. the smallest paired standardized effect across required comparisons is at least `0.5`; @@ -126,10 +152,10 @@ comparisons with a max-statistic paired permutation procedure at `alpha=0.05`. 6. the result is reproduced by an independent implementation from the sealed run receipt. `FALSIFIED` applies when any required equal-budget control outperforms the candidate on -either primary outcome with a simultaneous 95% interval excluding zero after the frozen -family-wise adjustment. A carrier-specific claim is also falsified when the +either primary decision outcome with a simultaneous 95% interval excluding zero after the +frozen family-wise adjustment. A carrier-specific claim is also falsified when the candidate-minus-label-shuffle interval lies wholly inside the equivalence band -`[-0.2, 0.2]` standardized effect on both primary outcomes. +`[-0.2, 0.2]` standardized effect on both primary decision outcomes. `UNRESOLVED` applies when neither rule is met, support/estimator assumptions fail, an implementation discrepancy remains, or a required comparison cannot be equalized. diff --git a/research/from-photons-to-macroverse/README.md b/research/from-photons-to-macroverse/README.md index a5fb905..bcb3075 100644 --- a/research/from-photons-to-macroverse/README.md +++ b/research/from-photons-to-macroverse/README.md @@ -65,7 +65,7 @@ create an owning release identity. Graduation remains a later, explicit event. python -m unittest discover -s research/from-photons-to-macroverse/tests -q ``` -The prior `0.2.0-audited` paper was rendered as a 58-page PDF and every rendered page was visually inspected before the human-classifier text repair. The current visual render is `hmmm` until rerendered. The repository keeps hash-bound Markdown fragments rather than a generated binary; the assembler validates per-fragment SHA-256 and Git blob identities. +The prior `0.2.0-audited` paper was rendered as a 58-page PDF and every rendered page was visually inspected before the paper text repairs. The current visual render is `hmmm` until rerendered. The repository keeps hash-bound Markdown fragments rather than a generated binary; the assembler validates per-fragment SHA-256 and Git blob identities. ## hmmm diff --git a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json index 6e604ac..690f256 100644 --- a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json +++ b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json @@ -64,14 +64,14 @@ "manifest_path": "paper/manifest.json", "storage_mode": "ordered hash-bound Markdown fragments", "version": "0.2.0-audited", - "assembled_sha256": "fb67e718b2c658671c8d60ca6a946921d14012d94d3e5f69f53d93a6b0f9ecaa", - "assembled_bytes": 125236, + "assembled_sha256": "5ee955f78e8d274a9b644d0efae737c413e90d0e5e66b0d426f041bf02a0fcf6", + "assembled_bytes": 125882, "date": "2026-09-06", "verified_render": { - "status": "HMMM_STALE_AFTER_TEXT_REPAIR", + "status": "HMMM_STALE_AFTER_PAPER_TEXT_REPAIRS", "prior_pages": 58, "prior_renderer": "Pandoc with XeLaTeX", - "visual_audit": "prior 0.2.0-audited render was HEALTHY before the human-classifier text repair; rerender before claiming current visual layout", + "visual_audit": "prior 0.2.0-audited render was HEALTHY before the paper text repairs; rerender before claiming current visual layout", "repository_copy": false }, "repository_copy": true, diff --git a/research/from-photons-to-macroverse/paper/03-arity-and-recursion.md b/research/from-photons-to-macroverse/paper/03-arity-and-recursion.md index f072b85..492371d 100644 --- a/research/from-photons-to-macroverse/paper/03-arity-and-recursion.md +++ b/research/from-photons-to-macroverse/paper/03-arity-and-recursion.md @@ -146,7 +146,7 @@ unless the added carrier is causally separable and the higher-order partition lo \[ \Phi_n = -\min_{\pi\in\operatorname{Part}([n])} +\min_{\pi\in\operatorname{Part}_{\mathrm{proper}}([n])} D_{\mathrm{KL}} \left( P_n(\mathbf x'\mid\mathbf x) @@ -155,6 +155,10 @@ P_n^{\pi}(\mathbf x'\mid\mathbf x) \right). \] +Here \(\operatorname{Part}_{\mathrm{proper}}([n])\) excludes the one-block +partition \(\{[n]\}\) and admits only partitions with at least two blocks. The +unpartitioned transition law is therefore not its own control. + When \(\Phi_n>0\), no admissible partition into lower-arity blocks reproduces the full transition law. The difference is not merely philosophical. Let independent fair bits \(X,Y\) satisfy \(Z=X\oplus Y\). Then @@ -317,4 +321,3 @@ within a declared tolerance and disturbance class. The identity is distributed a A positive \(\Gamma_T\) shows that cross-scale closure contributes causally to recovery. **H:** Broad, context-sensitive self-preservation requires at least a triadic direct closure. Human consciousness adds the stronger heptadic and recursion-depth requirements stated in Section 20. The two thresholds must not be conflated. - diff --git a/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md b/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md index d2a8c2c..ba5a199 100644 --- a/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md +++ b/research/from-photons-to-macroverse/paper/04-subject-and-i-event.md @@ -107,10 +107,12 @@ The theory predicts that no single component is sufficient: 1. belongs to a bounded viable process; 2. is causally irreducible at the scale of description; 3. has a differentiated repertoire; -4. is available to several specialized processes; -5. incorporates past and constrains future; -6. is indexed to self, other, and environment; -7. causally improves adaptive recovery through a closed scale loop. +4. has positive internal-model efficacy under ablation; +5. has agency through model-dependent counterfactual action; +6. is available to several specialized processes; +7. incorporates past and constrains future; +8. is indexed to self, other, and environment; +9. causally improves adaptive recovery through a closed scale loop. A photon, interference fringe, static archive, or isolated Möbius carrier does not satisfy this conjunction and is not thereby a miniature agent or subject. That statement is compatible with P0: primitive intrinsic presence and bounded subjecthood are different claims. @@ -153,6 +155,8 @@ F_{\Lambda} \left( \mathcal B_{\mathrm{bdry}}(Y), \Phi_{\mathrm c}(Y), +\mathcal M_T(Y), +\mathcal A_M(Y), G_{\mathrm c}(Y), \Theta(Y), \Gamma(Y), @@ -169,7 +173,8 @@ A single argmax selects one high-scoring candidate; it does not define “maxima \sum_{Y\in\mathcal A}\Lambda(Y) \] -subject to preregistered viability, boundary, temporal-continuity, and pairwise constitutive nonoverlap: +subject to preregistered viability, boundary, model-efficacy, agency, +temporal-continuity, and pairwise constitutive nonoverlap: \[ Y_i^{\mathrm{const}}\cap Y_j^{\mathrm{const}}=\varnothing diff --git a/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md b/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md index 39f0aa8..487ff6e 100644 --- a/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md +++ b/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md @@ -102,6 +102,14 @@ C_i(t) +u\sin\Theta_i(t)n_z, \] +using the explicitly declared period-one orthonormal frame + +\[ +n_r(t)=(\cos 2\pi t,\sin 2\pi t,0), +\qquad +n_z=(0,0,1). +\] + with \[ @@ -175,7 +183,7 @@ This is one candidate embedding, not a uniqueness result. Its contacts, crossing | Quintadic bridge | \(\mathcal Q_5=\mathcal R_3\sqcup_{\iota}\mathcal T_3=\operatorname{Cl}_5(O,E,P,J,F)\) | | Scale-form consistency | \(d(C\mathcal K_{n,\boldsymbol\alpha},\mathcal K_{n,\boldsymbol\beta}C^{\times n})\le\varepsilon\) | | Arity-specific closure | \(\mathfrak D_2,\mathfrak T_3,\mathfrak Q_5,\mathfrak H_7\) | -| Arity irreducibility | \(\Phi_n=\min_{\pi}D_{\mathrm{KL}}(P_n\|P_n^{\pi})\) | +| Arity irreducibility | \(\Phi_n=\min_{\pi\in\operatorname{Part}_{\mathrm{proper}}([n])}D_{\mathrm{KL}}(P_n\|P_n^{\pi})\) | | Nested closure | \(\mathfrak C_{n,\boldsymbol\alpha}^{[r+1]}=\operatorname{Cl}_n(B_1^{[r]},\ldots,B_n^{[r]})\) | | Tensor of tensors | \(V^{[r+1]}=\bigotimes_i(\bigotimes_jV_{ij}^{[r-1]})\) | | Möbius scale-set certificate | \(\operatorname{Cert}(\mathfrak C)=(n,\boldsymbol\alpha,r,\mathscr A,\mathcal R,\chi,\phi,H,\mathcal F)\) | @@ -183,7 +191,7 @@ This is one candidate embedding, not a uniqueness result. Its contacts, crossing | Self-location | \(\Sigma=\mathbb E[\mathcal L_{\mathrm{flat}}-\mathcal L_{\mathrm{self}}]\) | | Organization descriptor | \(\widetilde{\mathbf C}=(\mathbf C;\mathbf K)\) | | Closure signature | \(\mathbf K=(n_{\mathrm{out}},\boldsymbol\alpha_{\mathrm{out}},d_{\mathrm{rec}},\mathscr A)\) | -| Subject closure | \(\mathcal S_t\in\arg\max_Y\Lambda(Y)\) | +| Subject closure | \(\mathcal P_t\in\operatorname*{arg\,max}_{\mathcal A\subseteq\mathcal Y_t}\sum_{Y\in\mathcal A}\Lambda(Y)\) | | Human heptad | \(n_{\mathrm{out}}=|\boldsymbol\beta|=7,\ d_{\mathrm{rec}}\ge2,\ a_i\in\{2,3,5\}\) | | I-event | \(\mathsf I_t=\mathcal E_{\mathrm{self}}(\mathcal A_8)\) under coherence | | Dual aspect | \(\Pi_{\mathrm{ext}}(X),\Pi_{\mathrm{int}}(X)\) | @@ -194,4 +202,3 @@ This is one candidate embedding, not a uniqueness result. Its contacts, crossing | Monodromy | \((\theta,\sigma+L)\sim(A\theta,\sigma)\) | | Phenomenal geometry | Fisher metric \(g_{ij}\) | | Macroverse | compatible scale tower plus redundant records | - diff --git a/research/from-photons-to-macroverse/paper/manifest.json b/research/from-photons-to-macroverse/paper/manifest.json index 313ef18..c127cb5 100644 --- a/research/from-photons-to-macroverse/paper/manifest.json +++ b/research/from-photons-to-macroverse/paper/manifest.json @@ -1,7 +1,7 @@ { "schema_version": "1.0.0", "assembled_filename": "from_photons_to_macroverse_audited_0.2.0.md", - "assembled_sha256": "fb67e718b2c658671c8d60ca6a946921d14012d94d3e5f69f53d93a6b0f9ecaa", + "assembled_sha256": "5ee955f78e8d274a9b644d0efae737c413e90d0e5e66b0d426f041bf02a0fcf6", "fragments": [ { "path": "paper/00-frontmatter.md", @@ -33,10 +33,10 @@ }, { "path": "paper/03-arity-and-recursion.md", - "sha256": "6429cdabe4e739683027875999a300910cf6aa83aac66519dc45b65d95ba9f41", - "bytes": 9773, + "sha256": "a3c1530fbfd76f4e519b6d1d551c8295a6001f5d0c810a3a12f45c80c3073f41", + "bytes": 10008, "role": "arity-specific closure and nested recursion, section 11", - "git_blob_sha1": "f072b856455c9828859b60e677355be612048ec3" + "git_blob_sha1": "492371d87d490fe5c3714025fb12aa0cdfd3667f" }, { "path": "paper/03-availability-and-self-location.md", @@ -47,10 +47,10 @@ }, { "path": "paper/04-subject-and-i-event.md", - "sha256": "bf5e59410eedc4ef84baab356b8bbca1fd395ccbac004244db3d4b6fbf9f6e80", - "bytes": 16648, + "sha256": "e723b0c902ceb1b718db4f2f73c66ff15a22046fa19921b0231afe6195d3e0b4", + "bytes": 16823, "role": "organized descriptor, subject formation, and I-event, sections 14-16", - "git_blob_sha1": "d2a8c2c37a88b788c0cb1eec89099b16f9d9349e" + "git_blob_sha1": "ba5a199cfc3e5c2b493b9df043ef5f3dae383a80" }, { "path": "paper/05-geometry-heptad-neural.md", @@ -75,10 +75,10 @@ }, { "path": "paper/07-conclusion-and-appendices.md", - "sha256": "06f6aab6eedd111e80eae424eeda5b2161d4354250bb1a021ae53f5b89abd8f6", - "bytes": 10407, + "sha256": "bfecf60ade0e476dc2ea62b5943d1f28999087d3b3e21338c7759ce8fab0087e", + "bytes": 10643, "role": "conclusion and mathematical appendices", - "git_blob_sha1": "39f0aa857734255b25af63e08bb33d638cee1c24" + "git_blob_sha1": "487ff6eebeb06a8e84c3ee255ad5472b535ce4ba" }, { "path": "paper/07-references-and-hmmm.md", diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index 7d3c7b3..eaa605d 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -65,7 +65,7 @@ def test_audited_fragments_are_repository_owned_and_retrievable(self) -> None: self.assertTrue(receipt["revision"]["repository_copy"]) self.assertEqual( receipt["revision"]["verified_render"]["status"], - "HMMM_STALE_AFTER_TEXT_REPAIR", + "HMMM_STALE_AFTER_PAPER_TEXT_REPAIRS", ) retrieval = receipt["revision"]["retrieval"] self.assertEqual(retrieval["status"], "REPOSITORY_OWNED_FRAGMENTS") @@ -109,6 +109,13 @@ def test_active_paper_contains_actual_repairs(self) -> None: self.assertIn("The indicator is non-operational in this package", text) self.assertNotIn("The indicator classifies organized episodes", text) self.assertNotIn("learned from preregistered contrasts among waking reportable experience", text) + self.assertIn(r"\operatorname{Part}_{\mathrm{proper}}([n])", text) + self.assertNotIn(r"\Phi_n=\min_{\pi}D_{\mathrm{KL}}", text) + self.assertIn(r"\mathcal M_T(Y)", text) + self.assertIn(r"\mathcal A_M(Y)", text) + self.assertIn(r"n_r(t)=(\cos 2\pi t,\sin 2\pi t,0)", text) + self.assertIn(r"\mathcal P_t\in\operatorname*{arg\,max}_{\mathcal A\subseteq\mathcal Y_t}", text) + self.assertNotIn(r"\mathcal S_t\in\arg\max_Y\Lambda(Y)", text) self.assertIn("10.53765/20512201.31.3.056", text) self.assertIn("10.1142/S0217751X26300115", text) @@ -170,6 +177,9 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: flat = " ".join(text.split()) for phrase in ("run status: not-run", "human subjects: none", "animal subjects: none", "LLM calls: none", "seeds `32..63`: sealed decision set", "`SURVIVED` requires all of the following", "`FALSIFIED` applies", "`UNRESOLVED` applies", "No outcome classifies a human, animal, model, organization, or physical system as conscious"): self.assertIn(phrase, flat) + for phrase in ("configuration `arity-recursion-synthetic-v1` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam, learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): + self.assertIn(phrase, flat) + self.assertNotIn("both primary outcomes: interventional log score and recovery", flat) for control in ("six-carrier", "arbitrary-seven", "unnested-seven", "label-shuffled"): self.assertIn(control, text) self.assertIn("hmmm_undefined", text) From 580ac07b8c716d8d75e28229a59fea016d26e9cd Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 14:22:12 +0000 Subject: [PATCH 05/20] docs(stack): finish exact-head review repairs --- STACK_MANIFEST.md | 2 +- .../CLAIM_LEDGER.json | 4 ++-- .../SOURCE_RECEIPT.json | 4 ++-- .../03-availability-and-self-location.md | 11 +++++++++- .../paper/05-geometry-heptad-neural.md | 4 +++- .../paper/07-conclusion-and-appendices.md | 2 +- .../paper/manifest.json | 20 +++++++++---------- .../tests/test_contracts.py | 6 ++++++ stack-manifest.json | 2 +- 9 files changed, 36 insertions(+), 19 deletions(-) diff --git a/STACK_MANIFEST.md b/STACK_MANIFEST.md index c7c28b4..4415d84 100644 --- a/STACK_MANIFEST.md +++ b/STACK_MANIFEST.md @@ -6,7 +6,7 @@ Provenance and authority-boundary record for `The-Interdependency/stack`. - Layout migration UTC: `2026-08-30T02:58:49Z` - PCEA canonical refresh UTC: `2026-08-31T07:49:28Z` at `91ffa8c7249dfb810ca64a0bbc500481c0bd12a9` - EPAC extraction reconciliation UTC: `2026-09-05` at `d8868858b2e455381ce670797bdbe47189bdc496` -- Stack-manifest schema: `the-interdependency.stack-manifest` version `1.0.0` +- Stack-manifest schema: `the-interdependency.stack-manifest` version `1.1.0` - Work-graph digest (SHA-256 over canonical `repositories` + `research_participants` + `boundaries` JSON): `bbcb6b7582192c02e79f5b98b8f857385a07cda3280f24602f825ecd15ac405f` - Machine-readable copy: [`stack-manifest.json`](stack-manifest.json) diff --git a/research/from-photons-to-macroverse/CLAIM_LEDGER.json b/research/from-photons-to-macroverse/CLAIM_LEDGER.json index 12ec8fe..7613dd1 100644 --- a/research/from-photons-to-macroverse/CLAIM_LEDGER.json +++ b/research/from-photons-to-macroverse/CLAIM_LEDGER.json @@ -3,7 +3,7 @@ "project": "from-photons-to-macroverse", "revision": "0.2.0-audited", "source_sha256": "f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696", - "paper_sha256": "aba1e180c8ecf1c9bda92b20bb0c773befc33ad7322f6cbc1e6c48564251aa92", + "paper_sha256": "2cc536bde374b2ba96bed756c86687b3b602b492299ebaf0e366f6cd4a674ee4", "claims": [ { "id": "P0_ONTOLOGICAL_PRIORITY", @@ -79,7 +79,7 @@ "id": "UCNS_VISIBLE_BOUNDARY_TRACE", "standing": "EXTERNAL_CANDIDATE_INPUT", "status": "CURRENT_BOUNDARY_PINNED", - "audited_statement": "UCNS ef98748309913588fb13f389f809d5ef6cb5fec3 has an executable candidate exact visible-circle continuum/gonal trace with no ratification, no native Möbius completion, and no physical or consciousness meaning transfer.", + "audited_statement": "UCNS ef98748309913588fb13f389f809d5ef6cb5fec3 has an executable candidate exact visible-circle continuum/gonal trace with no ratification, no native M\u00f6bius completion, and no physical or consciousness meaning transfer.", "falsifier_or_boundary": "Executability does not select the representation as UCNS canon or validate this theory." }, { diff --git a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json index 690f256..0bb0009 100644 --- a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json +++ b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json @@ -64,8 +64,8 @@ "manifest_path": "paper/manifest.json", "storage_mode": "ordered hash-bound Markdown fragments", "version": "0.2.0-audited", - "assembled_sha256": "5ee955f78e8d274a9b644d0efae737c413e90d0e5e66b0d426f041bf02a0fcf6", - "assembled_bytes": 125882, + "assembled_sha256": "2cc536bde374b2ba96bed756c86687b3b602b492299ebaf0e366f6cd4a674ee4", + "assembled_bytes": 126221, "date": "2026-09-06", "verified_render": { "status": "HMMM_STALE_AFTER_PAPER_TEXT_REPAIRS", diff --git a/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md b/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md index 2048eac..baa0ef2 100644 --- a/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md +++ b/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md @@ -30,7 +30,16 @@ P(Y_{t+\Delta}^j\mid\operatorname{do}(Z_t=z_0)) \right]. \] -Conscious access, under this model, means that changing \(Z_t\) changes several otherwise specialized processes. The module set, reference state, intervention distribution, horizon, and estimator must be frozen before comparison. +The mean alone is not sufficient. Define the per-module effect \(g_j\) as the +summand inside \(G_{\mathrm c}\), and define +\[ +S_G=\{j:g_j>\tau_G\}. +\] +Conscious access, under this model, requires \(G_{\mathrm c}>0\), per-module +effects above \(\tau_G\) for the preregistered memory, valuation, planning, and +action modules, and \(|S_G|\ge k_G\). The module set, \(\tau_G\), \(k_G\), +reference state, intervention distribution, horizon, and estimator must be +frozen before comparison. ## 12.2 Temporal depth diff --git a/research/from-photons-to-macroverse/paper/05-geometry-heptad-neural.md b/research/from-photons-to-macroverse/paper/05-geometry-heptad-neural.md index 31342fc..9120bf8 100644 --- a/research/from-photons-to-macroverse/paper/05-geometry-heptad-neural.md +++ b/research/from-photons-to-macroverse/paper/05-geometry-heptad-neural.md @@ -448,7 +448,9 @@ F_l(\mu_l) +K_{l+1}\varepsilon_{l+1}. \] -The precise update law is architecture-dependent. Conscious access requires that the selected content affect memory, valuation, planning, and action, represented by \(G_{\mathrm c}>0\). +The precise update law is architecture-dependent. Conscious access requires that +the selected content affect memory, valuation, planning, and action above the +preregistered per-module threshold; \(G_{\mathrm c}>0\) by itself is not enough. ## 21.3 Relation to existing consciousness research diff --git a/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md b/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md index 487ff6e..680dec9 100644 --- a/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md +++ b/research/from-photons-to-macroverse/paper/07-conclusion-and-appendices.md @@ -175,7 +175,7 @@ This is one candidate embedding, not a uniqueness result. Its contacts, crossing | Model efficacy | \(\mathcal M=\mathbb E[\mathcal L_{\mathrm{ablated}}-\mathcal L_{\mathrm{intact}}]\) | | Agency | interventional divergence under alternate actions | | Causal irreducibility | \(\Phi_{\mathrm c}\) minimum partition loss | -| Global availability | \(G_{\mathrm c}\) cross-module causal effect | +| Global availability | \(G_{\mathrm c}>0,\ g_j>\tau_G\) for required modules, and \(|S_G|\ge k_G\) | | Temporal depth | \(\Theta=\Theta_{\mathrm{ret}}+\Theta_{\mathrm{pros}}\) | | Direct scale set | \(\mathbb S_{n,\boldsymbol\alpha}^{[r]}=(L_{\alpha_1}^{[r]},\ldots,L_{\alpha_n}^{[r]})\) | | Relational triad | \(\mathcal R_3=\operatorname{Cl}_3(O,S,E)\) | diff --git a/research/from-photons-to-macroverse/paper/manifest.json b/research/from-photons-to-macroverse/paper/manifest.json index c127cb5..407096e 100644 --- a/research/from-photons-to-macroverse/paper/manifest.json +++ b/research/from-photons-to-macroverse/paper/manifest.json @@ -1,7 +1,7 @@ { "schema_version": "1.0.0", "assembled_filename": "from_photons_to_macroverse_audited_0.2.0.md", - "assembled_sha256": "5ee955f78e8d274a9b644d0efae737c413e90d0e5e66b0d426f041bf02a0fcf6", + "assembled_sha256": "2cc536bde374b2ba96bed756c86687b3b602b492299ebaf0e366f6cd4a674ee4", "fragments": [ { "path": "paper/00-frontmatter.md", @@ -40,10 +40,10 @@ }, { "path": "paper/03-availability-and-self-location.md", - "sha256": "5ee8c70e099a7227970776690902d64cdebb2f7f6ad9d4562d6fe1387dc38b86", - "bytes": 8228, + "sha256": "12493dd87d58b0d405e9808e6eec7b002988746434e31a07463f583f5dd0e402", + "bytes": 8482, "role": "global availability, temporal depth, and self-location, sections 12-13", - "git_blob_sha1": "2048eacf0d62297e7c07bdae82295df72f2e6279" + "git_blob_sha1": "baa0ef2b339f98d58cb6af5d9efcd5244e3651bb" }, { "path": "paper/04-subject-and-i-event.md", @@ -54,10 +54,10 @@ }, { "path": "paper/05-geometry-heptad-neural.md", - "sha256": "4432249e613e15044863b1adabf256179467e86920b7872b8c9db524fa099c94", - "bytes": 13387, + "sha256": "ee7921c0d5d0a64728943b68510aad649dde52a09a12ba98b6c4e4ec3e20410f", + "bytes": 13441, "role": "M\u00f6bius, prime geometry, heptad, and neural implementation, sections 17-21", - "git_blob_sha1": "31342fc4169a79b11bf601317fa1a3a9ade46081" + "git_blob_sha1": "9120bf8292888e0c067489dbcf5ef7969d827c13" }, { "path": "paper/06-macroverse-ladder-and-predictions.md", @@ -75,10 +75,10 @@ }, { "path": "paper/07-conclusion-and-appendices.md", - "sha256": "bfecf60ade0e476dc2ea62b5943d1f28999087d3b3e21338c7759ce8fab0087e", - "bytes": 10643, + "sha256": "539b6d43f17c635ce5cac222616cbd01f90e6cfa10f6bd0a86093e7db844c6a5", + "bytes": 10674, "role": "conclusion and mathematical appendices", - "git_blob_sha1": "487ff6eebeb06a8e84c3ee255ad5472b535ce4ba" + "git_blob_sha1": "680dec962dca1b550f0ecd8270cbf4e1d03f4d05" }, { "path": "paper/07-references-and-hmmm.md", diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index eaa605d..88d701d 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -75,6 +75,7 @@ def test_audited_fragments_are_repository_owned_and_retrievable(self) -> None: ["path", "bytes", "sha256", "git_blob_sha1"], ) manifest = load_json("paper/manifest.json") + ledger = load_json("CLAIM_LEDGER.json") assembler = load_assembler() paper = assembler.assemble() for item in manifest["fragments"]: @@ -83,6 +84,7 @@ def test_audited_fragments_are_repository_owned_and_retrievable(self) -> None: self.assertEqual(assembler.git_blob_sha1(data), item["git_blob_sha1"]) self.assertEqual(hashlib.sha256(paper).hexdigest(), receipt["revision"]["assembled_sha256"]) self.assertEqual(manifest["assembled_sha256"], receipt["revision"]["assembled_sha256"]) + self.assertEqual(ledger["paper_sha256"], receipt["revision"]["assembled_sha256"]) def test_parser_artifact_is_not_misreported_as_defect(self) -> None: source_note = (PROJECT / "source" / "README.md").read_text(encoding="utf-8") @@ -116,6 +118,8 @@ def test_active_paper_contains_actual_repairs(self) -> None: self.assertIn(r"n_r(t)=(\cos 2\pi t,\sin 2\pi t,0)", text) self.assertIn(r"\mathcal P_t\in\operatorname*{arg\,max}_{\mathcal A\subseteq\mathcal Y_t}", text) self.assertNotIn(r"\mathcal S_t\in\arg\max_Y\Lambda(Y)", text) + self.assertIn(r"\(|S_G|\ge k_G\)", text) + self.assertIn(r"\(G_{\mathrm c}>0\) by itself is not enough", text) self.assertIn("10.53765/20512201.31.3.056", text) self.assertIn("10.1142/S0217751X26300115", text) @@ -199,6 +203,8 @@ def test_root_manifest_records_noncanonical_research_participants(self) -> None: root_manifest_text = (STACK / "STACK_MANIFEST.md").read_text(encoding="utf-8") root_manifest = json.loads((STACK / "stack-manifest.json").read_text(encoding="utf-8")) self.assertIn("Research-Only Composition Participants", root_manifest_text) + self.assertEqual(root_manifest["version"], "1.1.0") + self.assertIn("version `1.1.0`", root_manifest_text) records = [ item for item in root_manifest["research_participants"] diff --git a/stack-manifest.json b/stack-manifest.json index 5d24197..fe4bb69 100644 --- a/stack-manifest.json +++ b/stack-manifest.json @@ -1,6 +1,6 @@ { "schema": "the-interdependency.stack-manifest", - "version": "1.0.0", + "version": "1.1.0", "work_graph_sha256": "bbcb6b7582192c02e79f5b98b8f857385a07cda3280f24602f825ecd15ac405f", "repositories": [ { From 0be0fcb192e2631eb189f364ccd0097f66383550 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 14:23:01 +0000 Subject: [PATCH 06/20] docs(stack): restore pregraduation wording contract --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f7db32c..dd7ba78 100644 --- a/README.md +++ b/README.md @@ -76,10 +76,11 @@ coherent enough to graduate, create its independent repository, preserve provena package/release it, then let stack consume the released project rather than a hidden stack-local implementation. -Psychsocio metafauna remains in that pre-graduation state. EPAC has an independent -extracted repository, but extraction is not graduation: its forge research remains here -until EPAC completes its release, downstream reconsumption, and authority-transition -gates. From Photons to the Macroverse is also stack-local pre-graduation research. +EPAC and psychsocio metafauna are currently in this pre-graduation state. EPAC +has an independent extracted repository, but extraction is not graduation: its +forge research remains here until EPAC completes its release, downstream +reconsumption, and authority-transition gates. From Photons to the Macroverse is +also stack-local pre-graduation research. ### Make derived artifacts fresh without depending on hosted CI From a9fc35bf50a5f6a1d53982484a2e2b67e14204fc Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 22:23:57 +0000 Subject: [PATCH 07/20] docs(stack): resolve exact-head review blockers --- .../CLAIM_LEDGER.json | 2 +- .../PREREGISTRATION.md | 67 +++++++++++++++++++ .../SOURCE_RECEIPT.json | 4 +- .../03-availability-and-self-location.md | 22 +++--- .../06-macroverse-ladder-and-predictions.md | 33 ++++----- .../paper/manifest.json | 14 ++-- .../tests/test_contracts.py | 10 +++ 7 files changed, 119 insertions(+), 33 deletions(-) diff --git a/research/from-photons-to-macroverse/CLAIM_LEDGER.json b/research/from-photons-to-macroverse/CLAIM_LEDGER.json index 7613dd1..dece9f4 100644 --- a/research/from-photons-to-macroverse/CLAIM_LEDGER.json +++ b/research/from-photons-to-macroverse/CLAIM_LEDGER.json @@ -3,7 +3,7 @@ "project": "from-photons-to-macroverse", "revision": "0.2.0-audited", "source_sha256": "f25960d3f691788d3c79bf11a1c6fa47ae1a76700e7d7c042e911f6b56579696", - "paper_sha256": "2cc536bde374b2ba96bed756c86687b3b602b492299ebaf0e366f6cd4a674ee4", + "paper_sha256": "cf8af499c3a0e9544eb22d0947b0e836123a60c75adcacbfb1e41a81112afd3b", "claims": [ { "id": "P0_ONTOLOGICAL_PRIORITY", diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index 0b63c41..35d48c5 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -64,6 +64,55 @@ Use configuration `arity-recursion-synthetic-v1` exactly: - selection rule: select the restart with lowest calibration negative log likelihood before opening sealed test outputs. +### Synthetic generator + +For direct arity `n`, the observed state is +`x_t=(x_{t,0},...,x_{t,n-1})` with each `x_{t,i} in R^2`. For seed `s`, +noise standard deviation `sigma`, and intervention input `u_t`, generate + +```text +x_{t+1,i} += tanh( + L_i x_{t,i} + + beta_n/(n-1) sum_{j != i} W_{ij} x_{t,j} + + gamma_n h_i prod_{j != i} tanh(v_{ij}^T x_{t,j}) + + A_i u_t + + b_i + ) + + eta_{t,i} +``` + +with `eta_{t,i} ~ N(0, sigma^2 I_2)`, `beta_n=0.35`, and `gamma_n=0.20`. +The `prod` term is omitted only for the declared feed-forward controls and for +controls whose relation ledger says the relevant edge or carrier is cut. +Interventions are applied through the declared `u_t` before the `tanh` +nonlinearity, except additive state perturbations, which are applied directly to +the selected coordinate after the transition and before noise. + +All generator coefficients and initial states are deterministic functions of +`arity-recursion-synthetic-v1`, seed, arity, noise level, role, and coefficient +index. The pseudorandom stream is SHA-256 counter mode over the UTF-8 key +`arity-recursion-synthetic-v1|seed=s|arity=n|sigma=sigma|role=role|index=k`; +each digest is split into four big-endian unsigned 64-bit words. Each word `w` +maps to the open-unit uniform `(w+0.5)/2^64`; uniform pairs map to standard +normal pairs by the Box-Muller transform in IEEE-754 double precision. +Coefficients are: + +```text +L_i = 0.45 I_2 + 0.10 N_{2x2} +W_{ij} = N_{2x2}/sqrt(2n) +v_{ij} = N_2/sqrt(2) +h_i = N_2/sqrt(2) +A_i = 0.20 N_{2xr}/sqrt(r) for r declared intervention channels +b_i = 0.05 N_2 +x_{0,i} = 0.10 N_2 +``` + +where every `N` entry is drawn from the counter stream with the listed index +order. `SYSTEMS.json` must carry the realized coefficient tensors, stream keys, +and coefficient hashes. If an implementation cannot reproduce these bytes from +the frozen stream, the run is `BLOCKED` before fitting. + Where exact equality is impossible, use the smaller common parameter budget and mask unused parameters. Report every resulting asymmetry; do not compensate with a score. If any frozen value cannot be implemented exactly, stop before fitting and report @@ -123,6 +172,24 @@ For each generating system compare: - feed-forward control; and - a capacity-only baseline that receives the same inputs but no declared closure. +All candidate and control likelihoods are evaluated on the generator's observed +`R^(2n)` state, never on a private wrong-arity coordinate space. A control with +`m != n` carriers uses a fixed, nontrainable observation adapter declared before +fitting: + +```text +q_{m,n}(i) = floor(i*m/n) for m < n, i in {0,...,n-1} +r_{m,n}(a) = floor(a*n/m) for m > n, a in {0,...,m-1} +``` + +For `m < n`, control carrier `q_{m,n}(i)` supplies the predicted mean for +observed carrier `i`. For `m > n`, all control carriers assigned by +`r_{m,n}` to observed carrier `i` are averaged to form the predicted mean for +that observed carrier. The predictive covariance is always a normalized +diagonal Gaussian over the same `2n` observed coordinates and is included in the +same parameter-budget accounting. Adjacent-arity comparisons are `BLOCKED` if +this adapter and likelihood cannot be emitted exactly. + ## Seeds and split Use 64 preregistered integer seeds `0..63`. diff --git a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json index 0bb0009..6132487 100644 --- a/research/from-photons-to-macroverse/SOURCE_RECEIPT.json +++ b/research/from-photons-to-macroverse/SOURCE_RECEIPT.json @@ -64,8 +64,8 @@ "manifest_path": "paper/manifest.json", "storage_mode": "ordered hash-bound Markdown fragments", "version": "0.2.0-audited", - "assembled_sha256": "2cc536bde374b2ba96bed756c86687b3b602b492299ebaf0e366f6cd4a674ee4", - "assembled_bytes": 126221, + "assembled_sha256": "cf8af499c3a0e9544eb22d0947b0e836123a60c75adcacbfb1e41a81112afd3b", + "assembled_bytes": 127008, "date": "2026-09-06", "verified_render": { "status": "HMMM_STALE_AFTER_PAPER_TEXT_REPAIRS", diff --git a/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md b/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md index baa0ef2..fe9ec5c 100644 --- a/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md +++ b/research/from-photons-to-macroverse/paper/03-availability-and-self-location.md @@ -55,24 +55,26 @@ w_{\mathrm{past}}(\tau) I(Z_t;X_{t-\tau})\,d\tau. \] -For each intervention value \(z\), let +Let \(\mu_{-Z}\) be a preregistered distribution over the current context +\(X_t^{-Z}\), or a point mass when a single context is being evaluated. For +each intervention value \(z\) and context \(x^{-Z}\), let \[ -P_z^{\tau}(\cdot\mid X_t^{-Z}) +P_z^{\tau}(\cdot\mid x^{-Z}) = -P(X_{t+\tau}\in\cdot\mid\operatorname{do}(Z_t=z),X_t^{-Z}). +P(X_{t+\tau}\in\cdot\mid\operatorname{do}(Z_t=z),X_t^{-Z}=x^{-Z}). \] Define the pairwise prospective effect \[ -K_{\tau}(z,z') +K_{\tau}(z,z'\mid x^{-Z}) = D_{\mathrm{KL}} \left( -P_z^{\tau} +P_z^{\tau}(\cdot\mid x^{-Z}) \,\|\, -P_{z'}^{\tau} +P_{z'}^{\tau}(\cdot\mid x^{-Z}) \right). \] @@ -83,7 +85,8 @@ Prospective interventional depth is = \int_0^{T_{\mathrm{future}}} w_{\mathrm{future}}(\tau) -\mathbb E_{z,z'}[K_{\tau}(z,z')]\,d\tau. +\mathbb E_{x^{-Z}\sim\mu_{-Z}} +\mathbb E_{z,z'}[K_{\tau}(z,z'\mid x^{-Z})]\,d\tau. \] Then @@ -96,7 +99,10 @@ Then \Theta_{\mathrm{pros}}(Z_t). \] -The first term measures retained past. The second measures how alternate content states change future-state distributions beyond the rest of the current state. The weights and intervention distribution must be declared before estimation. +The first term measures retained past. The second measures how alternate content +states change future-state distributions beyond the rest of the current state. +The weights, current-context distribution or point context, and intervention +distribution must be declared before estimation. ## 12.3 Metastability diff --git a/research/from-photons-to-macroverse/paper/06-macroverse-ladder-and-predictions.md b/research/from-photons-to-macroverse/paper/06-macroverse-ladder-and-predictions.md index 682c7ce..f54dd19 100644 --- a/research/from-photons-to-macroverse/paper/06-macroverse-ladder-and-predictions.md +++ b/research/from-photons-to-macroverse/paper/06-macroverse-ladder-and-predictions.md @@ -9,21 +9,25 @@ Let \(S\) be a system and \(F\) a fragment of its environment. Their mutual info I(S;F)=H(S)+H(F)-H(SF). \] -In quantum-Darwinism models [19], many disjoint environmental fragments can each carry nearly complete information about selected stable observables. For tolerance \(\delta\), let \(f_\delta\) be the smallest environment fraction satisfying +In quantum-Darwinism models [19], many disjoint environmental fragments can each +carry nearly complete information about selected stable observables. For +tolerance \(\delta\), define redundancy by the number of disjoint informative +fragments, not by one unusually informative small fragment: \[ -I(S;F_{f_\delta}) -\ge -(1-\delta)H(S). -\] - -Redundancy is - -\[ -R_\delta=\frac1{f_\delta}. +R_\delta^{\mathrm{disj}}(S) += +\max\left\{ +k: +\exists\,F_1,\ldots,F_k\ \mathrm{pairwise\ disjoint}, +\ \forall i,\ I(S;F_i)\ge(1-\delta)H(S) +\right\}. \] -High redundancy makes a macroscopic property independently accessible to many observers without requiring them to interact directly with the system. +High redundancy makes a macroscopic property independently accessible to many +observers without requiring them to interact directly with the system. A small +environment fraction is not sufficient unless the corresponding number of +disjoint fragments also satisfies the same information threshold. ## 22.2 Shared inference @@ -48,7 +52,7 @@ Shared reality is not mere agreement. It is convergence supported by persistent (x_0,\ldots,x_N;\mathcal O): x_{k+1}=C_k(x_k), \Delta_k\le\varepsilon_k, - R_\delta(x_N)\gg1 + R_\delta^{\mathrm{disj}}(x_N)\gg1 \right\}, \] @@ -182,8 +186,8 @@ The theory earns scientific standing only through predictions that differ from s 10. Global broadcast without causal feedback should produce accessibility-like behavior with reduced recovery and reduced intrinsic unity. 11. Disrupting one contextual layer should selectively reduce context-sensitive recovery while leaving some lower dynamics intact. 12. Dreaming can remain organized consciousness with reduced external action because internal model efficacy, differentiation, temporal depth, self-location, and nested closure can persist while overt agency changes. -13. Disorders of consciousness should be better classified by \((\mathbf C_t;\mathbf K_t)\) than by any one anatomical location or one-dimensional index. -14. Competing subject-boundary and arity rules should make different predictions for split-brain, dissociation, brain-organoid, multi-agent, and tightly coupled human-machine cases. The rules must be preregistered before classification. +13. In nonclinical protocol studies using independently supplied task states or archival labels, \((\mathbf C_t;\mathbf K_t)\) should improve model comparison over any one anatomical location or one-dimensional index. The descriptor itself must not diagnose, classify, or determine the conscious status of any person. +14. Competing subject-boundary and arity rules should make different preregistered, nonclinical protocol predictions for split-brain, dissociation, brain-organoid, multi-agent, and tightly coupled human-machine cases. The rules must be preregistered before any comparison. 15. Human conscious organization should exhibit a reproducible seven-carrier outer causal decomposition with at least one nested dyadic, triadic, or quintadic level. Six-carrier, arbitrary seven-carrier, and unnested controls should perform worse on intervention and recovery tests. 16. Transitions described as organizational “4D” should introduce a measurable model-of-the-prior-closure level, not merely more state variables or an eighth peer carrier. @@ -193,4 +197,3 @@ The theory earns scientific standing only through predictions that differ from s 18. If prime-indexed Möbius complexes are physically relevant, they must produce projection-independent invariants and non-inserted prime/composite differences. 19. Eleven- and thirteen-arity complete relation structures should require additional topology, phase channels, or representational depth relative to seven. 20. If warped scale monodromy contributes to physical or cognitive organization, perturbations should reveal return transformations not explainable by ordinary untwisted recurrence. - diff --git a/research/from-photons-to-macroverse/paper/manifest.json b/research/from-photons-to-macroverse/paper/manifest.json index 407096e..a9b4b1f 100644 --- a/research/from-photons-to-macroverse/paper/manifest.json +++ b/research/from-photons-to-macroverse/paper/manifest.json @@ -1,7 +1,7 @@ { "schema_version": "1.0.0", "assembled_filename": "from_photons_to_macroverse_audited_0.2.0.md", - "assembled_sha256": "2cc536bde374b2ba96bed756c86687b3b602b492299ebaf0e366f6cd4a674ee4", + "assembled_sha256": "cf8af499c3a0e9544eb22d0947b0e836123a60c75adcacbfb1e41a81112afd3b", "fragments": [ { "path": "paper/00-frontmatter.md", @@ -40,10 +40,10 @@ }, { "path": "paper/03-availability-and-self-location.md", - "sha256": "12493dd87d58b0d405e9808e6eec7b002988746434e31a07463f583f5dd0e402", - "bytes": 8482, + "sha256": "38cd5f6a2a11fa3c899bcad03f8c1037636daf7215e54aa5a86f7862f8d3b86b", + "bytes": 8793, "role": "global availability, temporal depth, and self-location, sections 12-13", - "git_blob_sha1": "baa0ef2b339f98d58cb6af5d9efcd5244e3651bb" + "git_blob_sha1": "fe9ec5c415886b4529271b901d6a7237d4015f79" }, { "path": "paper/04-subject-and-i-event.md", @@ -61,10 +61,10 @@ }, { "path": "paper/06-macroverse-ladder-and-predictions.md", - "sha256": "71fc1c4ea77892b6f3235f8f855158d1cdcb5fddc99dcf80302964399355bab3", - "bytes": 9917, + "sha256": "19b047a99da9e8073cbd49046b33437ea1a0415124762412475e2532424fbb73", + "bytes": 10393, "role": "macroverse, first-principles ladder, and predictions, sections 22-24", - "git_blob_sha1": "682c7ce31e4ce25bffb71bd646d939f1a4f7ab99" + "git_blob_sha1": "f54dd19025bcdf5df8a6d0c6eab3e701f7d49739" }, { "path": "paper/06-falsification-program-and-limitations.md", diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index 88d701d..8696773 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -120,6 +120,12 @@ def test_active_paper_contains_actual_repairs(self) -> None: self.assertNotIn(r"\mathcal S_t\in\arg\max_Y\Lambda(Y)", text) self.assertIn(r"\(|S_G|\ge k_G\)", text) self.assertIn(r"\(G_{\mathrm c}>0\) by itself is not enough", text) + self.assertIn(r"K_{\tau}(z,z'\mid x^{-Z})", text) + self.assertIn("current-context distribution or point context", text) + self.assertIn(r"R_\delta^{\mathrm{disj}}", text) + self.assertNotIn(r"R_\delta=\frac1{f_\delta}", text) + self.assertNotIn("Disorders of consciousness should be better classified", text) + self.assertIn("must not diagnose, classify, or determine the conscious status of any person", text) self.assertIn("10.53765/20512201.31.3.056", text) self.assertIn("10.1142/S0217751X26300115", text) @@ -183,6 +189,10 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: self.assertIn(phrase, flat) for phrase in ("configuration `arity-recursion-synthetic-v1` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam, learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): self.assertIn(phrase, flat) + for phrase in ("Synthetic generator", "SHA-256 counter mode", "SYSTEMS.json` must carry the realized coefficient tensors", "same `2n` observed coordinates", "Adjacent-arity comparisons are `BLOCKED`"): + self.assertIn(phrase, text) + self.assertIn("q_{m,n}(i) = floor(i*m/n)", text) + self.assertIn("r_{m,n}(a) = floor(a*n/m)", text) self.assertNotIn("both primary outcomes: interventional log score and recovery", flat) for control in ("six-carrier", "arbitrary-seven", "unnested-seven", "label-shuffled"): self.assertIn(control, text) From 547a33f8912219de587a4f4414f1c71cc756a1fb Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 22:39:24 +0000 Subject: [PATCH 08/20] docs(stack): freeze arity replay protocol --- .../PREREGISTRATION.md | 151 +++++++++++++++--- .../tests/test_contracts.py | 6 +- 2 files changed, 134 insertions(+), 23 deletions(-) diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index 35d48c5..2d81c32 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -89,14 +89,35 @@ Interventions are applied through the declared `u_t` before the `tanh` nonlinearity, except additive state perturbations, which are applied directly to the selected coordinate after the transition and before noise. -All generator coefficients and initial states are deterministic functions of -`arity-recursion-synthetic-v1`, seed, arity, noise level, role, and coefficient -index. The pseudorandom stream is SHA-256 counter mode over the UTF-8 key -`arity-recursion-synthetic-v1|seed=s|arity=n|sigma=sigma|role=role|index=k`; +Every result-bearing stochastic draw is deterministic under +`arity-recursion-synthetic-v1`, seed, arity, noise level, stream domain, role, +and index tuple. The pseudorandom stream is SHA-256 counter mode over the UTF-8 +key +`arity-recursion-synthetic-v1|seed=s|arity=n|sigma=sigma|domain=domain|role=role|index=k`; each digest is split into four big-endian unsigned 64-bit words. Each word `w` maps to the open-unit uniform `(w+0.5)/2^64`; uniform pairs map to standard -normal pairs by the Box-Muller transform in IEEE-754 double precision. -Coefficients are: +normal pairs by the Box-Muller transform in IEEE-754 double precision. No other +random-number source is admissible. + +The stream domains are exactly: + +```text +coefficients: role, tensor_name, carrier_i, carrier_j, row, column +initial_state: episode_id, carrier_i, coordinate +process_noise: episode_id, time, carrier_i, coordinate +intervention_plan: episode_id, intervention_class, draw_index +model_initializers: model_id, restart, tensor_name, row, column +minibatch_order: model_id, restart, update_index, draw_index +bootstrap: outcome_id, bootstrap_index, sealed_seed_index +permutation: comparison_id, permutation_index, sealed_seed_index +``` + +All index tuples are emitted in lexicographic order and written to the run +receipt. Discrete choices use `floor(u*K)` for a stream uniform `u` and a +declared option count `K`. Without-replacement schedules sort candidate options +by their stream uniforms, consume them in that order, then reshuffle with the +next stream block when exhausted. Minibatches draw 64 training transition +indices with replacement by the same `floor(u*K)` rule. Coefficients are: ```text L_i = 0.45 I_2 + 0.10 N_{2x2} @@ -108,20 +129,48 @@ b_i = 0.05 N_2 x_{0,i} = 0.10 N_2 ``` -where every `N` entry is drawn from the counter stream with the listed index -order. `SYSTEMS.json` must carry the realized coefficient tensors, stream keys, -and coefficient hashes. If an implementation cannot reproduce these bytes from -the frozen stream, the run is `BLOCKED` before fitting. +where every `N` entry is drawn from the `coefficients` stream. `SYSTEMS.json` +must carry the realized coefficient tensors, stream keys, and coefficient +hashes. `INTERVENTIONS.jsonl` must carry the intervention plans and matched +noise-stream keys. If an implementation cannot reproduce these bytes from the +frozen streams, the run is `BLOCKED` before fitting. Where exact equality is impossible, use the smaller common parameter budget and mask unused parameters. Report every resulting asymmetry; do not compensate with a score. If any frozen value cannot be implemented exactly, stop before fitting and report `BLOCKED`. -Nested systems use rooted arity trees of depth two. The primary seven-carrier candidate -uses immediate child arities drawn from `{2,3,5}`. Controls include the same leaves -rewired into a different tree, a flat model with the same total state dimension, and a -label-permuted seven-carrier model. +Nested systems use rooted arity trees of depth two. For an outer arity `n`, the +ordered child-arity vector is + +```text +a_i = (2, 3, 5)[i mod 3] for i in {0,...,n-1} +``` + +so the primary seven-carrier candidate has child arities +`(2,3,5,2,3,5,2)`. Leaf states are +`y_{t,i,l} in R^2` for outer carrier `i` and child slot +`l in {0,...,a_i-1}`. The observed nested state is the lexicographic leaf list; +the outer summary used for inter-outer coupling is +`x_{t,i}=a_i^{-1} sum_l y_{t,i,l}` and is not an additional observed variable. + +Within each outer carrier, leaf updates use the same direct generator with +arity `a_i` and coefficient role `nested_local/i`. Between outer carriers, the +direct `n`-carrier generator is applied to the outer summaries; its contribution +to target carrier `i` is broadcast additively to each child leaf of `i` with +scale `1/a_i` before the leaf `tanh`. An outer-edge cut zeros the corresponding +summary-to-summary term and its broadcast. A child-edge cut zeros the matching +within-carrier leaf term. Whole-carrier ablation zeros all leaves under that +outer carrier for the ablation interval. + +Wrong-tree controls preserve the same flattened leaf coordinates and total +observed dimension but regroup them by the left-rotated child-arity vector +`b_i=a_{(i+1) mod n}`. The flattened lexicographic leaf list is repartitioned +into contiguous blocks of sizes `b_i`; those blocks define the wrong outer +carriers and summaries. Flat controls preserve the same leaf coordinates but +remove the outer-summary broadcast. Label-permuted controls apply the sealed +carrier permutation from the `intervention_plan` stream before fitting and +invert it before scoring. ## Interventions @@ -137,6 +186,20 @@ For every seed, generate matched episodes under: Intervention targets and held-out combinations are generated before any model is fit and stored in the run receipt. +For all intervention classes, transition times are drawn from +`{0,...,127-cut_duration}` after burn-in unless the class is the recovery +perturbation, whose time is fixed below. Single-carrier state interventions +choose one carrier and one coordinate without replacement, then add the declared +`0.5` perturbation for one transition. Single-edge cuts choose one declared +directed edge without replacement and zero that edge for `16` transitions. +Whole-carrier ablations choose one carrier without replacement and zero its +observed coordinates for `16` transitions. Constraint-modulation interventions +choose one declared coupling term without replacement and multiply it by `0.5` +for `16` transitions. Out-of-distribution combinations are lexicographic pairs +of the preceding intervention classes selected by the `intervention_plan` stream +and withheld from fitting. Matched candidate/control comparisons use the same +episode ids, times, targets, and process-noise stream keys. + ## Outcomes Primary decision outcomes: @@ -144,6 +207,44 @@ Primary decision outcomes: - held-out interventional negative log likelihood; - recovery difference `Gamma_T = E[R_full - R_cut]`. +Held-out interventional negative log likelihood is the mean one-step predictive +Gaussian NLL over every post-burn-in transition and observed scalar coordinate +in the held-out intervention episodes: + +```text +NLL = mean 0.5 * ((x_{t+1,c} - mu_{t,c})^2 / v_{t,c} + + log(2*pi*v_{t,c})) +``` + +where `mu` and diagonal variance `v` are decoded to the generator's observed +coordinate system before scoring, and `v >= 1e-6`. The same held-out episode +ids, intervention plans, and process-noise keys are used for every compared +candidate/control family. + +Recovery is frozen as follows. Matched full and cut recovery episodes share +initial state, perturbation target, perturbation time, and process-noise stream. +The perturbation time is transition `0` after burn-in. The perturbation target is +one observed scalar coordinate drawn from the `intervention_plan` stream without +replacement until every coordinate has appeared once, then reshuffled by the same +stream. The recovery horizon set is `{1,2,4,8,16}`. For mode +`M in {full, cut}`, let `x^0` be the matched unperturbed trajectory in the same +observed coordinate system and let `x^M` be the perturbed trajectory decoded to +that coordinate system. The identity map is the observed coordinate identity for +direct systems and the lexicographic leaf identity for nested systems; wrong +arity controls are scored only after the fixed adapter below decodes them to the +generator's observed coordinates. + +```text +R_M = - mean_{h in {1,2,4,8,16}} ||x^M_{t0+h} - x^0_{t0+h}||_2^2 + / (N_obs * 0.5^2) +Gamma_T = E[R_full - R_cut] +``` + +where `N_obs` is the number of observed scalar coordinates. The expectation is +the arithmetic mean over sealed recovery episodes and sealed seeds. The +measurement certificate records these values and their stream keys; it may not +replace this estimator after sealed outputs are opened. + Guardrail and diagnostic outcomes: - multi-horizon state-prediction error; @@ -173,9 +274,8 @@ For each generating system compare: - a capacity-only baseline that receives the same inputs but no declared closure. All candidate and control likelihoods are evaluated on the generator's observed -`R^(2n)` state, never on a private wrong-arity coordinate space. A control with -`m != n` carriers uses a fixed, nontrainable observation adapter declared before -fitting: +state, never on a private wrong-arity coordinate space. A direct control with +`m != n` carriers uses a fixed, nontrainable adapter declared before fitting: ```text q_{m,n}(i) = floor(i*m/n) for m < n, i in {0,...,n-1} @@ -185,10 +285,19 @@ r_{m,n}(a) = floor(a*n/m) for m > n, a in {0,...,m-1} For `m < n`, control carrier `q_{m,n}(i)` supplies the predicted mean for observed carrier `i`. For `m > n`, all control carriers assigned by `r_{m,n}` to observed carrier `i` are averaged to form the predicted mean for -that observed carrier. The predictive covariance is always a normalized -diagonal Gaussian over the same `2n` observed coordinates and is included in the -same parameter-budget accounting. Adjacent-arity comparisons are `BLOCKED` if -this adapter and likelihood cannot be emitted exactly. +that observed carrier. The input encoding is the dual map: for `m < n`, control +carrier `a` receives the arithmetic mean of all observed carriers with +`q_{m,n}(i)=a`; for `m > n`, control carrier `a` receives observed carrier +`r_{m,n}(a)`. Carrier-targeted additive interventions are encoded by the same +map before dynamics: merged controls receive the arithmetic mean of all +interventions in their bucket, and split controls receive the same intervention +on every split carrier assigned to the targeted observed carrier. Edge cuts with +endpoints collapsed into one merged carrier become recorded self-edge no-ops; +all other cuts map to the corresponding encoded edge. The predictive covariance +is always a normalized diagonal Gaussian over the generator's observed +coordinates and is included in the same parameter-budget accounting. +Adjacent-arity comparisons are `BLOCKED` if this adapter and likelihood cannot +be emitted exactly. ## Seeds and split diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index 8696773..d303c28 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -189,8 +189,10 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: self.assertIn(phrase, flat) for phrase in ("configuration `arity-recursion-synthetic-v1` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam, learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): self.assertIn(phrase, flat) - for phrase in ("Synthetic generator", "SHA-256 counter mode", "SYSTEMS.json` must carry the realized coefficient tensors", "same `2n` observed coordinates", "Adjacent-arity comparisons are `BLOCKED`"): - self.assertIn(phrase, text) + for phrase in ("Synthetic generator", "SHA-256 counter mode", "process_noise", "intervention_plan", "model_initializers", "Discrete choices use `floor(u*K)`", "Matched candidate/control comparisons use the same", "Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL", "ordered child-arity vector", "left-rotated child-arity vector", "Recovery is frozen as follows", "same observed coordinate system", "input encoding is the dual map", "Adjacent-arity comparisons are `BLOCKED`"): + self.assertIn(phrase, flat) + self.assertIn("No other random-number source is admissible", flat) + self.assertIn("`SYSTEMS.json` must carry the realized coefficient tensors", flat) self.assertIn("q_{m,n}(i) = floor(i*m/n)", text) self.assertIn("r_{m,n}(a) = floor(a*n/m)", text) self.assertNotIn("both primary outcomes: interventional log score and recovery", flat) From 9bbca8561b26501d4c61ac4d568072b08a78b15c Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Mon, 7 Sep 2026 21:54:05 -0700 Subject: [PATCH 09/20] docs(stack): freeze sealed preregistration contracts --- .../PREREGISTRATION.md | 471 +++++++++++++----- .../tests/test_contracts.py | 63 ++- 2 files changed, 419 insertions(+), 115 deletions(-) diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index 2d81c32..f556fd3 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -1,7 +1,7 @@ # Preregistration: matched arity and recursion discrimination ```text -protocol version: 0.2.0 +protocol version: 0.3.0 run status: not-run human subjects: none animal subjects: none @@ -41,24 +41,26 @@ same local state dimension and update family. ## Frozen implementation configuration -Use configuration `arity-recursion-synthetic-v1` exactly: +Use configuration `arity-recursion-synthetic-v2` exactly. The version changes +because the repairs below change result-bearing bytes; no earlier identifier is +an alias. - carrier state dimension: `2` real coordinates per carrier; - update family: discrete-time Gaussian state-space updates with `tanh` local dynamics, declared cross-carrier terms, and no undeclared latent carriers; -- trainable parameter ceiling: `4096` parameters per candidate/control family; -- parameter equalization: use the smaller common unmasked budget when exact - equality is impossible; unused parameters are masked and reported; +- trainable parameter ceiling: `4096` active parameters per candidate/control + family, with the exact common-budget rule frozen under **Fitted families**; - episode length: `128` transitions after a `32`-transition burn-in; -- per-seed data: `64` observational training episodes, `16` calibration episodes, - `16` held-out test episodes, and all six intervention classes below; +- per `(seed, arity, noise level)` observational data: `64` training episodes, + `16` calibration episodes, and `16` held-out test episodes; these counts exclude + the separately frozen intervention allocation below; - noise family: independent Gaussian process noise with standard deviations `0.01`, `0.05`, and `0.10`, crossed with the sealed seeds; -- stability envelope: reject generated systems whose no-intervention trajectories - leave `[-3,3]` in any coordinate before burn-in completes; +- stability envelope: accept only by the deterministic probe-and-retry rule below; - perturbation magnitude: single-coordinate additive interventions of `0.5`; - cut duration: cross-carrier terms are zeroed for `16` transitions; -- optimizer: Adam, learning rate `0.001`, batch size `64`, and `2000` updates; +- optimizer: Adam with learning rate `0.001`, `beta_1=0.9`, `beta_2=0.999`, + `epsilon=1e-8`, no weight decay, batch size `64`, and `2000` updates; - initialization family: Glorot-uniform weights and zero biases from `(seed, model_id, restart)` for restarts `0..4`; - selection rule: select the restart with lowest calibration negative log @@ -67,8 +69,8 @@ Use configuration `arity-recursion-synthetic-v1` exactly: ### Synthetic generator For direct arity `n`, the observed state is -`x_t=(x_{t,0},...,x_{t,n-1})` with each `x_{t,i} in R^2`. For seed `s`, -noise standard deviation `sigma`, and intervention input `u_t`, generate +`x_t=(x_{t,0},...,x_{t,n-1})` with each `x_{t,i} in R^2`. For seed `s` and +noise standard deviation `sigma`, generate ```text x_{t+1,i} @@ -76,28 +78,44 @@ x_{t+1,i} L_i x_{t,i} + beta_n/(n-1) sum_{j != i} W_{ij} x_{t,j} + gamma_n h_i prod_{j != i} tanh(v_{ij}^T x_{t,j}) - + A_i u_t + b_i ) + eta_{t,i} ``` with `eta_{t,i} ~ N(0, sigma^2 I_2)`, `beta_n=0.35`, and `gamma_n=0.20`. -The `prod` term is omitted only for the declared feed-forward controls and for -controls whose relation ledger says the relevant edge or carrier is cut. -Interventions are applied through the declared `u_t` before the `tanh` -nonlinearity, except additive state perturbations, which are applied directly to -the selected coordinate after the transition and before noise. +The generator has exactly `r=0` generic intervention channels: `u_t=()` at every +transition, `A_i` is the unique `2 x 0` empty matrix, and there is no `A_i u_t` +term to sample or fit. Structured interventions are the coefficient masks, +modulators, and state operators declared under **Interventions**. Additive state +perturbations are applied after the deterministic `tanh` transition and before +process noise. No intervention may be re-expressed as an undeclared additive +input channel. Every result-bearing stochastic draw is deterministic under -`arity-recursion-synthetic-v1`, seed, arity, noise level, stream domain, role, -and index tuple. The pseudorandom stream is SHA-256 counter mode over the UTF-8 -key -`arity-recursion-synthetic-v1|seed=s|arity=n|sigma=sigma|domain=domain|role=role|index=k`; -each digest is split into four big-endian unsigned 64-bit words. Each word `w` -maps to the open-unit uniform `(w+0.5)/2^64`; uniform pairs map to standard -normal pairs by the Box-Muller transform in IEEE-754 double precision. No other -random-number source is admissible. +`arity-recursion-synthetic-v2`, seed, arity, noise level, stream domain, role, +index tuple, and digest-block number. The SHA-256 input is the UTF-8 encoding of +this whitespace-free JSON array: + +```text +["arity-recursion-synthetic-v2",s,n,sigma_milli,domain,role,[k0,...,kp],block] +``` + +Integers use minimal unsigned base-10 notation (`0`, never `00`); `sigma_milli` +is exactly `10`, `50`, or `100`; `block` starts at `0`; and every string token is +restricted to lowercase ASCII `[a-z0-9_./-]+`, so JSON escaping is never used. +An index tuple element is either such a quoted token or an unsigned integer in +the domain-field order below. The complete tuple, including `block`, is the +counter-stream key; concatenated placeholders or language-native float strings +are forbidden. Every listed field is present; use the literal token `"none"` +for an inapplicable field. A nested carrier or tensor component is one token +such as `outer/3/leaf/2`, not an implementation-native tuple string. + +Each digest is split in order into four big-endian unsigned 64-bit words. Each +word `w` maps to the open-unit uniform `(w+0.5)/2^64`. Words `(0,1)` and `(2,3)` +map to standard-normal pairs as +`sqrt(-2 ln u0)*(cos(2*pi*u1), sin(2*pi*u1))` in IEEE-754 binary64. No other +random-number source or key encoding is admissible. The stream domains are exactly: @@ -105,11 +123,12 @@ The stream domains are exactly: coefficients: role, tensor_name, carrier_i, carrier_j, row, column initial_state: episode_id, carrier_i, coordinate process_noise: episode_id, time, carrier_i, coordinate +stability_probe: attempt, probe_episode, phase, time, carrier_i, coordinate intervention_plan: episode_id, intervention_class, draw_index model_initializers: model_id, restart, tensor_name, row, column minibatch_order: model_id, restart, update_index, draw_index -bootstrap: outcome_id, bootstrap_index, sealed_seed_index -permutation: comparison_id, permutation_index, sealed_seed_index +bootstrap: hypothesis_id, bootstrap_index, draw_index +permutation: hypothesis_id, permutation_index, sealed_seed_index ``` All index tuples are emitted in lexicographic order and written to the run @@ -124,19 +143,32 @@ L_i = 0.45 I_2 + 0.10 N_{2x2} W_{ij} = N_{2x2}/sqrt(2n) v_{ij} = N_2/sqrt(2) h_i = N_2/sqrt(2) -A_i = 0.20 N_{2xr}/sqrt(r) for r declared intervention channels b_i = 0.05 N_2 x_{0,i} = 0.10 N_2 ``` -where every `N` entry is drawn from the `coefficients` stream. `SYSTEMS.json` +where coefficient `N` entries are drawn from the `coefficients` stream and +`x_0` entries are drawn from `initial_state`. `SYSTEMS.json` must carry the realized coefficient tensors, stream keys, and coefficient hashes. `INTERVENTIONS.jsonl` must carry the intervention plans and matched noise-stream keys. If an implementation cannot reproduce these bytes from the frozen streams, the run is `BLOCKED` before fitting. -Where exact equality is impossible, use the smaller common parameter budget and mask -unused parameters. Report every resulting asymmetry; do not compensate with a score. +For each `(seed, arity, sigma, generator_role)`, coefficient attempt `a` is +encoded by appending `/attempt/a` to the coefficient role. Test attempts +`a=0,...,255` in order. Each attempt is simulated without intervention for the +`32` burn-in transitions from exactly `16` probe initial states named +`stability/00` through `stability/15`; their initial-state keys use phase +`initial` and time `0`, while their noise keys use phase `noise` and the actual +transition index in the `stability_probe` tuple above. Initial probe normals are +scaled by `0.10` and noise probe normals by `sigma`, exactly as for dataset +states and noise. Accept the +first attempt for which every coordinate of every probe remains in `[-3,3]` +after each burn-in transition. Rejected attempts consume no dataset episode id +and are recorded with their coefficient and probe hashes. If no attempt is +accepted, that system is `BLOCKED`; coefficients are never silently dropped, +redrawn from an unkeyed stream, or replaced by another seed. + If any frozen value cannot be implemented exactly, stop before fitting and report `BLOCKED`. @@ -154,14 +186,36 @@ so the primary seven-carrier candidate has child arities the outer summary used for inter-outer coupling is `x_{t,i}=a_i^{-1} sum_l y_{t,i,l}` and is not an additional observed variable. -Within each outer carrier, leaf updates use the same direct generator with -arity `a_i` and coefficient role `nested_local/i`. Between outer carriers, the -direct `n`-carrier generator is applied to the outer summaries; its contribution -to target carrier `i` is broadcast additively to each child leaf of `i` with -scale `1/a_i` before the leaf `tanh`. An outer-edge cut zeros the corresponding -summary-to-summary term and its broadcast. A child-edge cut zeros the matching -within-carrier leaf term. Whole-carrier ablation zeros all leaves under that -outer carrier for the ablation interval. +The nested transition has one leaf noise source and no hidden outer state, +outer local update, outer bias, outer activation, or outer process noise. Define + +```text +ell_{t,i,l} += L^leaf_{i,l} y_{t,i,l} + + beta_{a_i}/(a_i-1) sum_{q != l} W^leaf_{i,lq} y_{t,i,q} + + gamma_{a_i} h^leaf_{i,l} + prod_{q != l} tanh((v^leaf_{i,lq})^T y_{t,i,q}) + + b^leaf_{i,l} + +g_{t,i} += beta_n/(n-1) sum_{j != i} W^outer_{ij} x_{t,j} + + gamma_n h^outer_i + prod_{j != i} tanh((v^outer_{ij})^T x_{t,j}) + +y_{t+1,i,l} = tanh(ell_{t,i,l} + g_{t,i}/a_i) + eta^leaf_{t,i,l} +eta^leaf_{t,i,l} ~ N(0, sigma^2 I_2) +``` + +Here `beta_k=0.35` and `gamma_k=0.20` for every admitted arity. Leaf +coefficients use role `nested_leaf/i`; outer coefficients use role +`nested_outer`; leaf noise uses role `nested_leaf/i`; and no other coefficient +or noise role contributes to this transition. Coefficient masks and modulators +are applied to `ell` or `g` before the one leaf `tanh`; state operators are +applied afterward at the point declared under **Interventions**. An outer-edge +cut zeros its `W^outer` summand and the entire target `g` product term, whose +all-source closure would otherwise still contain the cut source. A child-edge +cut applies the same rule to the corresponding `ell` terms. Whole-outer-carrier +ablation clamps every leaf under that carrier as declared below. Wrong-tree controls preserve the same flattened leaf coordinates and total observed dimension but regroup them by the left-rotated child-arity vector @@ -174,7 +228,7 @@ invert it before scoring. ## Interventions -For every seed, generate matched episodes under: +For every `(seed, arity, noise level)`, generate matched episodes under: 1. single-carrier state interventions; 2. single-edge cuts; @@ -183,33 +237,70 @@ For every seed, generate matched episodes under: 5. bounded perturbations followed by recovery; and 6. out-of-distribution combinations withheld from fitting. -Intervention targets and held-out combinations are generated before any model is fit and -stored in the run receipt. - -For all intervention classes, transition times are drawn from -`{0,...,127-cut_duration}` after burn-in unless the class is the recovery -perturbation, whose time is fixed below. Single-carrier state interventions -choose one carrier and one coordinate without replacement, then add the declared -`0.5` perturbation for one transition. Single-edge cuts choose one declared -directed edge without replacement and zero that edge for `16` transitions. -Whole-carrier ablations choose one carrier without replacement and zero its -observed coordinates for `16` transitions. Constraint-modulation interventions -choose one declared coupling term without replacement and multiply it by `0.5` -for `16` transitions. Out-of-distribution combinations are lexicographic pairs -of the preceding intervention classes selected by the `intervention_plan` stream -and withheld from fitting. Matched candidate/control comparisons use the same -episode ids, times, targets, and process-noise stream keys. +The frozen intervention allocation is: + +| class | training | calibration | held-out test | +|---|---:|---:|---:| +| `1` state | 8 | 4 | 8 | +| `2` edge cut | 8 | 4 | 8 | +| `3` ablation | 8 | 4 | 8 | +| `4` modulation | 8 | 4 | 8 | +| `5` recovery | 0 | 0 | 16 | +| `6` OOD pair | 0 | 0 | 12 | + +These are additional to the `64/16/16` observational episodes. Episode ids are +exactly `obs//` and +`int///`, where `split` is `train`, `cal`, or +`test`. Class `5` and `6` are never used for fitting or restart selection. +Class `6` contains the six unordered pairs from classes `1..4`, in lexicographic +order, exactly twice each. Both interventions in a class-`6` episode start at +the same scheduled transition. This allocation is crossed with all three noise +levels; it is not multiplied or reweighted after sealed outputs are opened. + +All plans are generated before any model is fit and stored in +`INTERVENTIONS.jsonl`. For class `1`, choose a scalar observed coordinate without +replacement and choose a start in `{0,...,127}`; add `+0.5` after the +deterministic transition and before process noise for that one transition. For +classes `2`, `3`, and `4`, choose respectively a declared directed edge, a +carrier, or one declared cross-carrier summand without replacement and choose a +start in `{0,...,112}`. The intervention is active for the `16` transitions +whose indices are `start,...,start+15`: + +- an edge cut zeros its directed `W` summand and the target's all-source product + term before `tanh`; +- an ablation clamps all selected carrier coordinates to exactly zero after + process noise at every active transition, so no residual noise survives the + clamp; a fitted predictive distribution is clamped to mean `0` and variance + `1e-6` on those coordinates while the ablation is active; +- a modulation multiplies the selected `W` summand or the selected all-source + product term, named in the plan, by exactly `0.5` before `tanh`. + +Nested plans name `outer/i` or `leaf/i/l` targets and apply the explicit nested +equation above. Class `5` uses the primary-outcome certificate below. Class `6` +composes the two corresponding operators in numeric class order; masks and +modulators act before `tanh`, then additive state, process noise, and ablation +clamp act in that order. Matched candidate/control comparisons use the same +episode ids, times, targets, and process-noise stream keys. Controls receive the +plan through these fixed operators and the adapter below, never through a +learned or undeclared `u_t` channel. ## Outcomes -Primary decision outcomes: +### Embedded primary-outcome certificate `primary-outcome-v1` + +This section is the complete primary certificate. Before any sealed run, the +implementation receipt must bind the exact Git commit and SHA-256 of this UTF-8 +file. A later measurement certificate may copy these definitions and record +their realized keys; it may not choose or replace a primary estimator. + +Primary decision outcomes are: - held-out interventional negative log likelihood; - recovery difference `Gamma_T = E[R_full - R_cut]`. Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL over every post-burn-in transition and observed scalar coordinate -in the held-out intervention episodes: +in all held-out intervention episodes from classes `1..6`: ```text NLL = mean 0.5 * ((x_{t+1,c} - mu_{t,c})^2 / v_{t,c} @@ -221,57 +312,173 @@ coordinate system before scoring, and `v >= 1e-6`. The same held-out episode ids, intervention plans, and process-noise keys are used for every compared candidate/control family. -Recovery is frozen as follows. Matched full and cut recovery episodes share -initial state, perturbation target, perturbation time, and process-noise stream. -The perturbation time is transition `0` after burn-in. The perturbation target is -one observed scalar coordinate drawn from the `intervention_plan` stream without -replacement until every coordinate has appeared once, then reshuffled by the same -stream. The recovery horizon set is `{1,2,4,8,16}`. For mode -`M in {full, cut}`, let `x^0` be the matched unperturbed trajectory in the same -observed coordinate system and let `x^M` be the perturbed trajectory decoded to -that coordinate system. The identity map is the observed coordinate identity for -direct systems and the lexicographic leaf identity for nested systems; wrong -arity controls are scored only after the fixed adapter below decodes them to the -generator's observed coordinates. +Recovery uses exactly the `16` held-out class-`5` episodes. Matched full and cut +episodes share accepted coefficients, true post-burn-in initial state, +perturbation target, perturbation time, and process-noise key. The perturbation +is always `+0.5` at transition `t0=0` after burn-in. Targets traverse the +lexicographic list of observed scalar coordinates without replacement in the +order ranked by the canonical `intervention_plan` stream; after exhausting the +list, a new ranked block is used. + +For a target in direct carrier `i`, the cut source is the element at index +`episode_ordinal mod (n-1)` of the ascending list +`[j for j in {0,...,n-1} if j != i]`. For a target leaf under nested outer +carrier `i`, use the same rule over outer sources. The cut starts before +transition `t0` and is active for transitions `t0,...,t0+15`. It zeros the +selected directed `W` summand and the target's all-source product term under the +edge-cut rule above. The full mode applies no cut. Adapter-collapsed edges and +families without the selected structural term emit a receipted no-op rather +than substituting another cut. + +For each fitted family, initialize a deterministic mean rollout at the shared +true state. Recursively feed back that family's decoded predictive mean; do not +sample predictive noise. Let `x^{0,f}` be its unperturbed mean rollout and +`x^{M,f}` its matched perturbed rollout in mode `M in {full,cut}`. The identity +map is the observed scalar-coordinate identity for direct systems and the +lexicographic leaf-scalar identity for nested systems. Every wrong-arity or +wrong-tree family is scored only after the fixed decoder below returns that +identity. The recovery horizon set is exactly `{1,2,4,8,16}`. ```text -R_M = - mean_{h in {1,2,4,8,16}} ||x^M_{t0+h} - x^0_{t0+h}||_2^2 +R_{M,f} = - mean_{h in {1,2,4,8,16}} ||x^{M,f}_{t0+h} - x^{0,f}_{t0+h}||_2^2 / (N_obs * 0.5^2) -Gamma_T = E[R_full - R_cut] +Gamma_{s,f} = mean_{sigma, episode}(R_{full,f} - R_{cut,f}) +Gamma_{T,f} = mean_{sealed seed s}(Gamma_{s,f}) ``` -where `N_obs` is the number of observed scalar coordinates. The expectation is -the arithmetic mean over sealed recovery episodes and sealed seeds. The -measurement certificate records these values and their stream keys; it may not -replace this estimator after sealed outputs are opened. +`N_obs` is the generator's number of observed scalar coordinates. The only +normalizer is `N_obs * 0.5^2`; the only aggregation is the arithmetic mean shown +above with equal weight per episode, noise level, and sealed seed. Larger +`Gamma_T` is the candidate-favoring direction. The run receipt records every +target, cut, horizon, adapter result, and stream key. Guardrail and diagnostic outcomes: - multi-horizon state-prediction error; - minimum partition loss under the frozen proper partition family; -- calibration of predictive uncertainty; +- calibration of predictive uncertainty, using the frozen ECE below; - parameter-normalized description length as a secondary complexity check. -The source program's `Phi_c` is not treated as an IIT quantity. Every estimator, -partition family, smoothing rule, support requirement, reference distribution, baseline -state, and uncertainty procedure is fixed in a measurement certificate and the run -receipt. A failed support test emits `hmmm_undefined`; it is never converted to a perfect +Predictive calibration uses randomized-free Gaussian probability-integral +transform values `p=Phi((x_next-mu)/sqrt(v))` for the same scalar observations as +NLL. For each fitted family and sealed seed, pool classes `1..6`, transitions, +coordinates, and the three noise levels. At thresholds +`q in {0.05,0.10,...,0.95}`, compute `F_hat(q)=mean(1[p <= q])` and +`ECE=mean_q |F_hat(q)-q|`; then average seed ECEs arithmetically. The calibration +guardrail is evaluated for every required candidate/control pair as +`ECE_candidate - ECE_control <= 0.02`. Ties use `<=`; NaN, infinite, empty, or +unsupported values emit `hmmm_undefined` and force `UNRESOLVED`. + +The source program's `Phi_c` is not treated as an IIT quantity. Remaining +diagnostic estimators, partitions, and smoothing rules are non-decision-bearing +and must be frozen before execution if reported. They cannot change a status. +A failed support test emits `hmmm_undefined`; it is never converted to a perfect score. ## Controls -For each generating system compare: +### Fitted-family equations and registry -- correct arity and correct recursion tree; -- lower-arity partitioned models; -- adjacent arities `n-1` and `n+1` when available; -- arbitrary models with equal parameter budget; -- correct arity with all cross-carrier feedback cut; -- correct leaves with wrong recursion tree; -- unnested model with matched state dimension; -- label-shuffled carrier assignment; -- feed-forward control; and -- a capacity-only baseline that receives the same inputs but no declared closure. +Every structural direct family over `m` model carriers uses one-step mean + +```text +mu_i = tanh( + Lhat_i z_i + + 0.35/(m-1) sum_{j in E_i} What_{ij} z_j + + C_i * 0.20 hhat_i prod_{j in E_i} tanh(vhat_{ij}^T z_j) + + bhat_i) +``` + +where the registry fixes the directed predecessor set `E_i` and closure switch +`C_i in {0,1}`. An empty product is not used: if `C_i=0` the entire product +term is absent. Every structural nested family uses the explicit nested equation +above with hats on every coefficient and with registry-fixed leaf and outer edge +masks. The capacity-only family over flattened observed dimension `D` is exactly + +```text +h = tanh(U z + a) with hidden width 32 +mu = tanh(V h + c) +``` + +with dense `U in R^(32 x D)` and `V in R^(D x 32)`. It has no carrier, +edge, closure-product, or tree parameters. For every family and decoded observed +scalar coordinate `c`, predictive variance is the state-independent diagonal +head `v_c = 1e-6 + softplus(rho_c)`. `rho` is trainable, participates in the +budget, and is decoded by the same copy/average map as the mean. There are no +other heads, skip paths, hidden layers, attention terms, or learned intervention +embeddings. + +The fitted family ids and masks are exactly: + +| id | fixed architecture | +|---|---| +| `direct-n` | structural direct family, every `j != i`, `C_i=1` | +| `partition-m` / `adjacent-m` | the same family over adapter-encoded `m` carriers | +| `arbitrary-n` | `direct-n` after a sealed scalar-coordinate permutation; consecutive coordinate pairs form carriers, then predictions are inverse-permuted | +| `feedback-cut-n` | `direct-n` with `E_i` empty and `C_i=0` | +| `label-shuffle-n` | `direct-n` after a sealed permutation of whole two-coordinate carriers, inverted before scoring | +| `feed-forward-n` | structural direct family with `E_i={j:j` and are +written before fitting. Whole-carrier label shuffles preserve membership; +arbitrary partitions change membership. This is the only distinction between +those controls. + +Every tensor scalar has a canonical path formed from family id, tensor name, +and row-major indices. Every `rho` entry is mandatory so each decoded coordinate +has an explicit variance; biases enter the ranked pool. For each hypothesis, +let `P_f` be the resulting raw trainable count for each required family and set +`B_H=min(4096,min_f P_f)`. If mandatory entries exceed `B_H`, the comparison is +`BLOCKED`. Otherwise rank every nonmandatory path by SHA-256 of the UTF-8 string +`arity-recursion-synthetic-v2||` and activate the +lowest hashes until exactly `B_H` scalars are active; inactive scalars are fixed +to zero. Hash ties break by path bytes. The pre-fit receipt records `P_f`, `B_H`, +the sorted active paths, and their SHA-256. Thus every required family has the +same number of output-bearing trainable scalars; unused capacity cannot hide in +nuisance parameters. + +Each active matrix uses Glorot-uniform bounds +`+/-sqrt(6/(fan_in+fan_out))` from `model_initializers`, with fan sizes taken +from the declared full tensor before masking. Treat `v` as a `1 x 2` +matrix and `h` as a `2 x 1` matrix for those bounds. Active biases start at zero. +For a model fitted at noise level `sigma`, every active `rho` starts at +`softplus_inverse(max(sigma^2-1e-6,1e-12))`; inactive entries remain exactly +zero and never receive an optimizer state. Adam arithmetic and all model, +adapter, loss, and rollout arithmetic use IEEE-754 binary64. + +All families minimize the mean training Gaussian NLL over observational and +class-`1..4` training episodes using the frozen optimizer. Restart selection +uses the corresponding observational and class-`1..4` calibration episodes. +Inputs are the current adapted state plus the externally applied fixed +intervention operators; class `5` and `6` never influence fitting or restart +selection. + +### Required comparisons + +- `H_A(n)` requires `partition-m` for every `m in {2,3,5,6,7,8}` with `m=2`, `adjacent-(n+1)`, `arbitrary-n`, + `feedback-cut-n`, `label-shuffle-n`, `feed-forward-n`, and + `capacity-only-(2n)`. Duplicate `m` families are fitted once. +- `H_R(n)` requires `wrong-tree-n`, `outer-cut-n`, `feed-forward-tree-n`, + `arbitrary-tree-n`, `unnested-n`, the whole-outer-carrier label shuffle of + `nested-n`, and `capacity-only-(2*N_leaf)`. +- `H_7` uses the union of `H_R(7)` and exactly four named heptadic controls: + `balanced-6-tree`, `balanced-8-tree`, `arbitrary-tree-7`, and `unnested-7`. + Duplicates in the union are fitted and tested once. + +Each balanced tree uses the table's floor grouping on the same `N_leaf` +observations, so six- and eight-carrier controls neither drop nor invent a leaf. +No control outside these sets affects `SURVIVED`, `FALSIFIED`, or `UNRESOLVED`. All candidate and control likelihoods are evaluated on the generator's observed state, never on a private wrong-arity coordinate space. A direct control with @@ -285,7 +492,9 @@ r_{m,n}(a) = floor(a*n/m) for m > n, a in {0,...,m-1} For `m < n`, control carrier `q_{m,n}(i)` supplies the predicted mean for observed carrier `i`. For `m > n`, all control carriers assigned by `r_{m,n}` to observed carrier `i` are averaged to form the predicted mean for -that observed carrier. The input encoding is the dual map: for `m < n`, control +that observed carrier. Variances use the same copy rule for `mn`. The input encoding is +the dual map: for `m < n`, control carrier `a` receives the arithmetic mean of all observed carriers with `q_{m,n}(i)=a`; for `m > n`, control carrier `a` receives observed carrier `r_{m,n}(a)`. Carrier-targeted additive interventions are encoded by the same @@ -293,8 +502,11 @@ map before dynamics: merged controls receive the arithmetic mean of all interventions in their bucket, and split controls receive the same intervention on every split carrier assigned to the targeted observed carrier. Edge cuts with endpoints collapsed into one merged carrier become recorded self-edge no-ops; -all other cuts map to the corresponding encoded edge. The predictive covariance -is always a normalized diagonal Gaussian over the generator's observed +all other cuts map to the corresponding encoded edge. Ablations use the same +merged/split carrier mapping. Modulations map their endpoints and named summand; +if that summand is absent in the family, the receipt records a no-op. OOD pairs +compose these mapped operators in numeric class order. The predictive covariance +is always the declared diagonal Gaussian over the generator's observed coordinates and is included in the same parameter-budget accounting. Adjacent-arity comparisons are `BLOCKED` if this adapter and likelihood cannot be emitted exactly. @@ -311,12 +523,42 @@ No decision threshold may be changed after any sealed output is opened. ## Decision rule -For each hypothesis, compute the paired sealed-seed difference between the candidate and -every required control for both primary decision outcomes: interventional log score and -recovery. -Use simultaneous 95% bootstrap intervals over sealed seeds and report the paired -standardized effect. Control family-wise error across all required control/outcome -comparisons with a max-statistic paired permutation procedure at `alpha=0.05`. +For each `H_A(n)`, `H_R(n)`, and `H_7`, first average each family outcome within +each sealed seed equally over the three noise levels and the specified held-out +episodes. For every required control `c`, define candidate-favoring paired values + +```text +d_{s,c,NLL} = NLL_{s,c} - NLL_{s,candidate} +d_{s,c,recovery} = Gamma_{s,candidate} - Gamma_{s,c} +``` + +over the `32` sealed seeds. The point estimate is the arithmetic mean. The paired +standardized effect is `mean(d)/sd(d)` with sample standard deviation denominator +`31`; `sd=0`, NaN, or infinity emits `hmmm_undefined` and forces `UNRESOLVED`. + +The simultaneous interval uses exactly `B=65536` nonparametric paired bootstrap +draws. For bootstrap index `b`, draw `32` sealed-seed indices with replacement +from the canonical `bootstrap` stream and use the same index vector for every +required control and both outcomes in that hypothesis. For each cell compute its +bootstrap mean and sample standard error `se_b`; define +`Z_b=max_{c,outcome}|(mean_b(d)-mean(d))/se_b|`. A zero or nonfinite `se_b` +emits `hmmm_undefined`. Let `q95` be sorted +`Z[ceil(0.95*B)-1]` under zero-based indexing. With original +`se=sd(d)/sqrt(32)`, the simultaneous interval for each mean is +`[mean(d)-q95*se, mean(d)+q95*se]`; endpoints equal to zero do not exclude zero. + +The family-wise test uses exactly `P=65536` sampled paired sign permutations. +For permutation `p`, obtain one sign per sealed seed from the canonical +`permutation` stream (`u<0.5` gives `-1`, otherwise `+1`) and reuse that sign +vector for every required control and both outcomes in the hypothesis. Define +`T_{c,o}=mean(d)/(sd(d)/sqrt(32))`; recompute both the mean and sample standard +deviation after applying each sign vector, and set +`M_p=max_{c,o}|T_{c,o}^{(p)}|`. The two-sided adjusted value for each comparison +is +`p_adj=(1 + count_p[M_p >= |T_{c,o}|])/(P+1)`. Comparisons use `>=`, include the +finite-sample `+1` correction, and are never replaced by an exact-enumeration or +different resampling method. `alpha=0.05`; direction is determined separately +by the sign of `mean(d)`. `SURVIVED` requires all of the following: @@ -324,12 +566,13 @@ comparisons with a max-statistic paired permutation procedure at `alpha=0.05`. 2. every simultaneous 95% interval excludes zero in the candidate-favoring direction; 3. every max-statistic adjusted paired permutation test has `p < 0.05`; 4. the smallest paired standardized effect across required comparisons is at least `0.5`; -5. calibration does not worsen by more than `0.02` absolute expected calibration error; +5. every required candidate/control pair satisfies the frozen `0.02` ECE guardrail; 6. the result is reproduced by an independent implementation from the sealed run receipt. -`FALSIFIED` applies when any required equal-budget control outperforms the candidate on -either primary decision outcome with a simultaneous 95% interval excluding zero after the -frozen family-wise adjustment. A carrier-specific claim is also falsified when the +`FALSIFIED` applies when any required equal-budget control has a negative +candidate-favoring mean on either primary outcome, its simultaneous interval is +strictly below zero, and its adjusted permutation value is `<0.05`. A +carrier-specific claim is also falsified when the candidate-minus-label-shuffle interval lies wholly inside the equivalence band `[-0.2, 0.2]` standardized effect on both primary decision outcomes. @@ -341,10 +584,11 @@ recursion claim receives its own result. ## Stop conditions -Stop before fitting and mark `BLOCKED` if parameter budgets, intervention receipts, -sealed splits, or independent replay cannot be generated exactly. Runtime is allowed to -finish naturally once launched; resource adequacy is assessed before launch rather than -with an arbitrary wall-clock cutoff. +Stop before fitting and mark `BLOCKED` if the accepted-system attempt, canonical +stream keys, family masks, parameter budgets, intervention receipts, embedded +primary certificate, sealed splits, or independent replay cannot be generated +exactly. Runtime is allowed to finish naturally once launched; resource adequacy +is assessed before launch rather than with an arbitrary wall-clock cutoff. ## Outputs @@ -360,7 +604,8 @@ REPLAY.md ``` Each file includes source commit, implementation digest, environment, seed range, -parameter budgets, estimator definitions, and the `WORK_GRAPH.json` digest. +parameter budgets, estimator definitions, the SHA-256 of this exact +`PREREGISTRATION.md`, and the `WORK_GRAPH.json` digest. ## Non-use boundary @@ -372,7 +617,9 @@ necessity. ## Usage guidance Implement only after this document, `PAPER.md`, and `CLAIM_LEDGER.json` are frozen in -one commit. +one commit. The implementation must first emit the accepted-system attempts, +canonical stream keys, fitted-family masks, intervention allocation, and embedded +primary-certificate hash without opening sealed outputs. Development seeds may expose bugs but cannot alter the sealed decision rule. Publish negative and unresolved outcomes with the same receipts as positive outcomes. diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index d303c28..c61669d 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -187,11 +187,11 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: flat = " ".join(text.split()) for phrase in ("run status: not-run", "human subjects: none", "animal subjects: none", "LLM calls: none", "seeds `32..63`: sealed decision set", "`SURVIVED` requires all of the following", "`FALSIFIED` applies", "`UNRESOLVED` applies", "No outcome classifies a human, animal, model, organization, or physical system as conscious"): self.assertIn(phrase, flat) - for phrase in ("configuration `arity-recursion-synthetic-v1` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam, learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): + for phrase in ("configuration `arity-recursion-synthetic-v2` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam with learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): self.assertIn(phrase, flat) - for phrase in ("Synthetic generator", "SHA-256 counter mode", "process_noise", "intervention_plan", "model_initializers", "Discrete choices use `floor(u*K)`", "Matched candidate/control comparisons use the same", "Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL", "ordered child-arity vector", "left-rotated child-arity vector", "Recovery is frozen as follows", "same observed coordinate system", "input encoding is the dual map", "Adjacent-arity comparisons are `BLOCKED`"): + for phrase in ("Synthetic generator", "SHA-256 input is the UTF-8 encoding", "process_noise", "intervention_plan", "model_initializers", "Discrete choices use `floor(u*K)`", "Matched candidate/control comparisons use the same", "Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL", "ordered child-arity vector", "left-rotated child-arity vector", "Embedded primary-outcome certificate", "observed scalar-coordinate identity", "input encoding is the dual map", "Adjacent-arity comparisons are `BLOCKED`"): self.assertIn(phrase, flat) - self.assertIn("No other random-number source is admissible", flat) + self.assertIn("No other random-number source or key encoding is admissible", flat) self.assertIn("`SYSTEMS.json` must carry the realized coefficient tensors", flat) self.assertIn("q_{m,n}(i) = floor(i*m/n)", text) self.assertIn("r_{m,n}(a) = floor(a*n/m)", text) @@ -200,6 +200,63 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: self.assertIn(control, text) self.assertIn("hmmm_undefined", text) + def test_preregistration_closes_exact_head_replay_blockers(self) -> None: + text = (PROJECT / "PREREGISTRATION.md").read_text(encoding="utf-8") + flat = " ".join(text.split()) + + for phrase in ( + "protocol version: 0.3.0", + '["arity-recursion-synthetic-v2",s,n,sigma_milli,domain,role,[k0,...,kp],block]', + "concatenated placeholders or language-native float strings are forbidden", + "stability/00` through `stability/15", + "If no attempt is accepted, that system is `BLOCKED`", + ): + self.assertIn(phrase, flat) + + for phrase in ( + "exactly `r=0` generic intervention channels", + "`u_t=()` at every transition", + "there is no `A_i u_t` term to sample or fit", + "additional to the `64/16/16` observational episodes", + "Class `5` and `6` are never used for fitting or restart selection", + ): + self.assertIn(phrase, flat) + + for phrase in ( + "The nested transition has one leaf noise source", + "g_{t,i}", + "y_{t+1,i,l} = tanh(ell_{t,i,l} + g_{t,i}/a_i)", + "no other coefficient or noise role contributes", + ): + self.assertIn(phrase, flat) + + for phrase in ( + "Fitted-family equations and registry", + "capacity-only family over flattened observed dimension `D`", + "v_c = 1e-6 + softplus(rho_c)", + "`B_H=min(4096,min_f P_f)`", + "### Required comparisons", + "`H_A(n)` requires", + "`H_R(n)` requires", + "`H_7` uses the union", + ): + self.assertIn(phrase, flat) + + for phrase in ( + "Embedded primary-outcome certificate `primary-outcome-v1`", + "it may not choose or replace a primary estimator", + "Recovery uses exactly the `16` held-out class-`5` episodes", + "active for transitions `t0,...,t0+15`", + "Recursively feed back that family's decoded predictive mean", + "`ECE_candidate - ECE_control <= 0.02`", + "exactly `B=65536` nonparametric paired bootstrap draws", + "exactly `P=65536` sampled paired sign permutations", + "finite-sample `+1` correction", + ): + self.assertIn(phrase, flat) + + self.assertNotIn("arity-recursion-synthetic-v1", text) + def test_human_and_machine_entrypoints_agree(self) -> None: readme = (PROJECT / "README.md").read_text(encoding="utf-8") paper_index = (PROJECT / "PAPER.md").read_text(encoding="utf-8") From d9ad5f0f583ac7279eac9ead517a49f604f9630b Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Mon, 7 Sep 2026 22:19:38 -0700 Subject: [PATCH 10/20] docs(stack): close exact-head replay ambiguities --- .../PREREGISTRATION.md | 124 +++++++++++++++--- .../tests/test_contracts.py | 14 +- 2 files changed, 116 insertions(+), 22 deletions(-) diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index f556fd3..85875c5 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -111,11 +111,20 @@ are forbidden. Every listed field is present; use the literal token `"none"` for an inapplicable field. A nested carrier or tensor component is one token such as `outer/3/leaf/2`, not an implementation-native tuple string. -Each digest is split in order into four big-endian unsigned 64-bit words. Each -word `w` maps to the open-unit uniform `(w+0.5)/2^64`. Words `(0,1)` and `(2,3)` -map to standard-normal pairs as -`sqrt(-2 ln u0)*(cos(2*pi*u1), sin(2*pi*u1))` in IEEE-754 binary64. No other -random-number source or key encoding is admissible. +Each digest is split in order into four big-endian unsigned 64-bit words and +each word `w_k` maps to the open-unit uniform `u_k=(w_k+0.5)/2^64`. One scalar +key consumes exactly one lane from `block=0`: + +```text +uniform or discrete scalar: u_0 +standard-normal scalar: sqrt(-2 ln u_0) * cos(2*pi*u_1) +``` + +`u_2`, `u_3`, and the Box-Muller sine result are discarded. A requested scalar +must have its own complete index tuple; implementations never take a second lane +or advance to `block>0`. Exhaustion of the declared index space is `BLOCKED` and +requires a new protocol version, not implicit block consumption. No other +random-number source, output lane, block rule, or key encoding is admissible. The stream domains are exactly: @@ -300,7 +309,7 @@ Primary decision outcomes are: Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL over every post-burn-in transition and observed scalar coordinate -in all held-out intervention episodes from classes `1..6`: +in all held-out intervention episode ids from classes `1..6`: ```text NLL = mean 0.5 * ((x_{t+1,c} - mu_{t,c})^2 / v_{t,c} @@ -310,7 +319,11 @@ NLL = mean 0.5 * ((x_{t+1,c} - mu_{t,c})^2 / v_{t,c} where `mu` and diagonal variance `v` are decoded to the generator's observed coordinate system before scoring, and `v >= 1e-6`. The same held-out episode ids, intervention plans, and process-noise keys are used for every compared -candidate/control family. +candidate/control family. A class-`5` id contains both modes; compute its +episode value as exactly `0.5*NLL_full + 0.5*NLL_cut`. Each other id has one +trajectory. For each `(seed, sigma)`, average the resulting `60` episode-id +values with equal weight; then average the three noise-level values equally. +Neither class-`5` mode is omitted or counted as an additional episode. Recovery uses exactly the `16` held-out class-`5` episodes. Matched full and cut episodes share accepted coefficients, true post-burn-in initial state, @@ -434,18 +447,45 @@ written before fitting. Whole-carrier label shuffles preserve membership; arbitrary partitions change membership. This is the only distinction between those controls. -Every tensor scalar has a canonical path formed from family id, tensor name, -and row-major indices. Every `rho` entry is mandatory so each decoded coordinate -has an explicit variance; biases enter the ranked pool. For each hypothesis, -let `P_f` be the resulting raw trainable count for each required family and set +Every tensor scalar path is the UTF-8 encoding of this whitespace-free JSON +array: + +```text +["arity-recursion-synthetic-v2","parameter-mask",family_id,tensor_name,[i0,...,iq]] +``` + +`family_id` and `tensor_name` obey `[a-z0-9_./-]+`. A concrete family id replaces +the table's metavariable with `/` plus its minimal integer, for example +`direct/7`, `partition/3`, `balanced/6/tree`, and `capacity-only/44`. Structural +direct tensor names are exactly `l`, `w`, `v`, `h`, `b`, and `rho`; nested names +are exactly `leaf/l`, `leaf/w`, `leaf/v`, `leaf/h`, `leaf/b`, `outer/w`, +`outer/v`, `outer/h`, and `rho`; dense names are exactly `u`, `a`, `v`, `c`, and +`rho`. Indices use minimal unsigned base-10 integers in row-major axis order, +and a scalar tensor uses `[]`. No bracket notation, delimiter substitution, +escaping, omitted axis, or implementation-native tuple string is admissible. + +Every `rho` path is mandatory so each decoded coordinate has an explicit +variance; biases enter the ranked pool. For each hypothesis, let `P_f` be the +resulting raw trainable count for each required family and set `B_H=min(4096,min_f P_f)`. If mandatory entries exceed `B_H`, the comparison is -`BLOCKED`. Otherwise rank every nonmandatory path by SHA-256 of the UTF-8 string -`arity-recursion-synthetic-v2||` and activate the -lowest hashes until exactly `B_H` scalars are active; inactive scalars are fixed -to zero. Hash ties break by path bytes. The pre-fit receipt records `P_f`, `B_H`, -the sorted active paths, and their SHA-256. Thus every required family has the -same number of output-bearing trainable scalars; unused capacity cannot hide in -nuisance parameters. +`BLOCKED`. Otherwise rank every nonmandatory path by SHA-256 of those exact path +bytes and activate the lowest hashes until exactly `B_H` scalars are active; +inactive scalars are fixed to zero. Hash ties break by path bytes. + +The label-shuffle families are the sole exception to independent ranking. First +select the `direct-n` or `nested-n` candidate mask. Derive the corresponding +`label-shuffle-n` or `label-shuffle-tree-n` mask by applying the sealed carrier +permutation to every candidate parameter path, including `rho` and biases, and +replace only the concrete family-id element with the corresponding +`label-shuffle/` or `label-shuffle/tree/` id. +Initialize its tensors and Adam states by the same permutation of the candidate +restart, and use the candidate minibatch indices on permuted inputs. No +family-id hash is evaluated for a label-shuffle mask. + +The pre-fit receipt records `P_f`, `B_H`, the canonical active path bytes, their +SHA-256, and any candidate-to-shuffle path map. Thus every required family has +the same number of output-bearing trainable scalars; unused capacity cannot hide +in nuisance parameters or a label-specific mask lottery. Each active matrix uses Glorot-uniform bounds `+/-sqrt(6/(fan_in+fan_out))` from `model_initializers`, with fan sizes taken @@ -508,6 +548,40 @@ if that summand is absent in the family, the receipt records a no-op. OOD pairs compose these mapped operators in numeric class order. The predictive covariance is always the declared diagonal Gaussian over the generator's observed coordinates and is included in the same parameter-budget accounting. + +For every permutation or regrouping family, let `S_f(a)` be the set of original +observed scalar coordinates assigned to model carrier `a`, and for a nested +family let `O_f(g)` be the set of original leaf pairs assigned to outer group +`g`; these sets are determined completely by the registry's permutation, +contiguous-block, unnested-singleton, or floor-grouping rule. Apply interventions +as follows: + +- `label-shuffle-n` and `label-shuffle-tree-n` conjugate the complete operator + by the sealed permutation, including targets, sources, tensor terms, state + coordinates, and duration, then inverse-permute the prediction; +- `arbitrary-n` maps a scalar state target to its unique permuted coordinate. + A generator edge from carrier coordinate set `J` to target set `I` maps to + every model edge `a -> b` with `S_f(a) intersect J` and `S_f(b) intersect I` + nonempty; ablation clamps every mapped coordinate; modulation changes that + same edge set and each affected target product term exactly once; +- `wrong-tree-n`, `arbitrary-tree-n`, and `balanced-m-tree` map an outer edge + `J -> I` to every outer edge `g -> h` whose `O_f(g)` overlaps source leaves + `J` and whose `O_f(h)` overlaps target leaves `I`. A child edge maps to the + corresponding leaf edge when both leaves remain in one outer group, otherwise + to the outer edge between their assigned groups. State targets and ablations + follow the unique leaf-scalar identity; +- `unnested-n` treats each leaf pair as one direct carrier. Both original outer + and child edges map to every direct leaf edge whose source and target leaf + identities belong to the original source and target sets; +- `capacity-only-D` has no structural edge or product term, so cuts and + modulations are receipted no-ops; scalar additions and ablation clamps still + apply to their identical flattened coordinates. + +For any mapped edge set, an architecture mask such as feed-forward or outer-cut +removes absent edges after mapping; only an empty resulting set is a no-op. The +class-`5` recovery cut uses this same map. Every `S_f`, `O_f`, mapped edge list, +and no-op is emitted before fitting in lexicographic order. + Adjacent-arity comparisons are `BLOCKED` if this adapter and likelihood cannot be emitted exactly. @@ -547,6 +621,14 @@ emits `hmmm_undefined`. Let `q95` be sorted `se=sd(d)/sqrt(32)`, the simultaneous interval for each mean is `[mean(d)-q95*se, mean(d)+q95*se]`; endpoints equal to zero do not exclude zero. +The same bootstrap index vectors also define the standardized-effect interval. +For every cell compute `g=mean(d)/sd(d)` and +`g_b=mean_b(d)/sd_b(d)`, then +`G_b=max_{c,outcome}|g_b-g|` across the same hypothesis family. Let `q95_g` be +sorted `G[ceil(0.95*B)-1]`. The simultaneous standardized-effect interval is +`I_g=[g-q95_g,g+q95_g]`. A zero or nonfinite original or bootstrap standard +deviation emits `hmmm_undefined`; no raw-mean interval is rescaled or substituted. + The family-wise test uses exactly `P=65536` sampled paired sign permutations. For permutation `p`, obtain one sign per sealed seed from the canonical `permutation` stream (`u<0.5` gives `-1`, otherwise `+1`) and reuse that sign @@ -572,9 +654,9 @@ by the sign of `mean(d)`. `FALSIFIED` applies when any required equal-budget control has a negative candidate-favoring mean on either primary outcome, its simultaneous interval is strictly below zero, and its adjusted permutation value is `<0.05`. A -carrier-specific claim is also falsified when the -candidate-minus-label-shuffle interval lies wholly inside the equivalence band -`[-0.2, 0.2]` standardized effect on both primary decision outcomes. +carrier-specific claim is also falsified when the candidate-minus-label-shuffle +`I_g` lies wholly inside the closed equivalence band `[-0.2,0.2]` on both +primary decision outcomes. Equality to either band endpoint counts as inside. `UNRESOLVED` applies when neither rule is met, support/estimator assumptions fail, an implementation discrepancy remains, or a required comparison cannot be equalized. diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index c61669d..86c3497 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -191,7 +191,7 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: self.assertIn(phrase, flat) for phrase in ("Synthetic generator", "SHA-256 input is the UTF-8 encoding", "process_noise", "intervention_plan", "model_initializers", "Discrete choices use `floor(u*K)`", "Matched candidate/control comparisons use the same", "Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL", "ordered child-arity vector", "left-rotated child-arity vector", "Embedded primary-outcome certificate", "observed scalar-coordinate identity", "input encoding is the dual map", "Adjacent-arity comparisons are `BLOCKED`"): self.assertIn(phrase, flat) - self.assertIn("No other random-number source or key encoding is admissible", flat) + self.assertIn("No other random-number source, output lane, block rule, or key encoding is admissible", flat) self.assertIn("`SYSTEMS.json` must carry the realized coefficient tensors", flat) self.assertIn("q_{m,n}(i) = floor(i*m/n)", text) self.assertIn("r_{m,n}(a) = floor(a*n/m)", text) @@ -255,6 +255,18 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: ): self.assertIn(phrase, flat) + for phrase in ( + "One scalar key consumes exactly one lane from `block=0`", + "implementations never take a second lane or advance to `block>0`", + '["arity-recursion-synthetic-v2","parameter-mask",family_id,tensor_name,[i0,...,iq]]', + "The label-shuffle families are the sole exception to independent ranking", + "let `S_f(a)` be the set of original observed scalar coordinates", + "The class-`5` recovery cut uses this same map", + "exactly `0.5*NLL_full + 0.5*NLL_cut`", + "The simultaneous standardized-effect interval is `I_g=[g-q95_g,g+q95_g]`", + ): + self.assertIn(phrase, flat) + self.assertNotIn("arity-recursion-synthetic-v1", text) def test_human_and_machine_entrypoints_agree(self) -> None: From 68bab5fe41799030498fc29ed14cbf90fb880ebd Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Mon, 7 Sep 2026 22:43:43 -0700 Subject: [PATCH 11/20] docs(stack): close sealed replay edge cases --- .../PREREGISTRATION.md | 222 ++++++++++++------ .../tests/test_contracts.py | 21 +- 2 files changed, 163 insertions(+), 80 deletions(-) diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index 85875c5..6d443b4 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -1,7 +1,7 @@ # Preregistration: matched arity and recursion discrimination ```text -protocol version: 0.3.0 +protocol version: 0.3.1 run status: not-run human subjects: none animal subjects: none @@ -13,8 +13,8 @@ primary domain: synthetic stochastic dynamical systems ## Question Do direct arity and recursion depth provide held-out intervention and recovery structure -that cannot be recovered by matched lower-arity, wrong-arity, partitioned, unnested, or -label-shuffled models? +that cannot be recovered by matched lower-arity, wrong-arity, partitioned, or unnested +models, while an isomorphic label-shuffled model reproduces the candidate exactly? This experiment does **not** test P0 or whether any system is conscious. It tests whether the structural variables used by the theory earn predictive standing before biological @@ -26,10 +26,12 @@ and interventions; it would not show that nature uses those structures. ## Frozen hypotheses - `H_A`: when data are generated by a declared irreducible `n`-carrier closure, the - correct direct-arity model outperforms all preregistered controls on held-out - interventional prediction and perturbation recovery. + correct direct-arity model outperforms every non-isomorphic preregistered control on + held-out interventional prediction and perturbation recovery, while its isomorphic + label shuffle passes the exact invariance check below. - `H_R`: when data are generated by a declared nested closure, the correct recursion - tree outperforms an unnested model with matched state dimension and parameter budget. + tree outperforms an unnested model with matched state dimension and parameter budget, + while its isomorphic whole-tree label shuffle passes the exact invariance check below. - `H_7`: a seven-carrier nested model receives no special standing unless it passes the same criteria as every other arity and additionally beats six-carrier, eight-carrier, arbitrary-seven, and unnested-seven controls. @@ -41,7 +43,7 @@ same local state dimension and update family. ## Frozen implementation configuration -Use configuration `arity-recursion-synthetic-v2` exactly. The version changes +Use configuration `arity-recursion-synthetic-v3` exactly. The version changes because the repairs below change result-bearing bytes; no earlier identifier is an alias. @@ -93,12 +95,12 @@ process noise. No intervention may be re-expressed as an undeclared additive input channel. Every result-bearing stochastic draw is deterministic under -`arity-recursion-synthetic-v2`, seed, arity, noise level, stream domain, role, +`arity-recursion-synthetic-v3`, seed, arity, noise level, stream domain, role, index tuple, and digest-block number. The SHA-256 input is the UTF-8 encoding of this whitespace-free JSON array: ```text -["arity-recursion-synthetic-v2",s,n,sigma_milli,domain,role,[k0,...,kp],block] +["arity-recursion-synthetic-v3",s,n,sigma_milli,domain,role,[k0,...,kp],block] ``` Integers use minimal unsigned base-10 notation (`0`, never `00`); `sigma_milli` @@ -113,7 +115,7 @@ such as `outer/3/leaf/2`, not an implementation-native tuple string. Each digest is split in order into four big-endian unsigned 64-bit words and each word `w_k` maps to the open-unit uniform `u_k=(w_k+0.5)/2^64`. One scalar -key consumes exactly one lane from `block=0`: +draw consumes these fixed lanes from its keyed block: ```text uniform or discrete scalar: u_0 @@ -121,11 +123,30 @@ standard-normal scalar: sqrt(-2 ln u_0) * cos(2*pi*u_1) ``` `u_2`, `u_3`, and the Box-Muller sine result are discarded. A requested scalar -must have its own complete index tuple; implementations never take a second lane -or advance to `block>0`. Exhaustion of the declared index space is `BLOCKED` and -requires a new protocol version, not implicit block consumption. No other +must have its own complete index tuple; implementations never take a second +output from a digest. `block=0` for every draw except a declared +without-replacement schedule. For a schedule with a lexicographically ordered +candidate list of size `K`, requested ordinal `r` uses +`block=floor(r/K)`, ranks all `K` candidates by their `u_0` under that block +(ties break by candidate bytes), and selects rank `r mod K`. Thus ordinal `K` +starts the deterministic block-`1` reshuffle, ordinal `2K` starts block `2`, +and no digest lane is carried across a cycle. `K=0`, an unlisted schedule, or a +block outside the minimal unsigned integer grammar is `BLOCKED`. No other random-number source, output lane, block rule, or key encoding is admissible. +For an `intervention_plan` target schedule, candidate position `k` is the +`draw_index` in tuple +`["schedule//",intervention_class,k]`. The only +`choice_kind` tokens are `state_target`, `edge_target`, `carrier_target`, +`summand_target`, and `recovery_target` for classes `1` through `5`, +respectively; `split` is the allocation-table split, and `r` is that class and +split's zero-based episode ordinal. A model-partition permutation instead uses +role `model_partition/`, tuple +`["schedule/model_partition",0,k]`, `r` equal to the output position, and +`block=0`. Candidate `k` is its position in the emitted lexicographic candidate +list. These fixed schedule tuples, not an actual episode id or a mutable draw +cursor, supply the three `intervention_plan` domain fields. + The stream domains are exactly: ```text @@ -142,9 +163,8 @@ permutation: hypothesis_id, permutation_index, sealed_seed_index All index tuples are emitted in lexicographic order and written to the run receipt. Discrete choices use `floor(u*K)` for a stream uniform `u` and a -declared option count `K`. Without-replacement schedules sort candidate options -by their stream uniforms, consume them in that order, then reshuffle with the -next stream block when exhausted. Minibatches draw 64 training transition +declared option count `K`. Without-replacement schedules use the ordinal/block +rule above, including every repeated recovery-target cycle. Minibatches draw 64 training transition indices with replacement by the same `floor(u*K)` rule. Coefficients are: ```text @@ -374,10 +394,16 @@ Guardrail and diagnostic outcomes: Predictive calibration uses randomized-free Gaussian probability-integral transform values `p=Phi((x_next-mu)/sqrt(v))` for the same scalar observations as -NLL. For each fitted family and sealed seed, pool classes `1..6`, transitions, -coordinates, and the three noise levels. At thresholds -`q in {0.05,0.10,...,0.95}`, compute `F_hat(q)=mean(1[p <= q])` and -`ECE=mean_q |F_hat(q)-q|`; then average seed ECEs arithmetically. The calibration +NLL. At each threshold `q in {0.05,0.10,...,0.95}`, first define an episode-id +empirical CDF. For a class-`5` id it is exactly +`F_e(q)=0.5*mean_full(1[p<=q])+0.5*mean_cut(1[p<=q])`; for every other held-out +id it is `F_e(q)=mean_e(1[p<=q])`. Means within a trajectory cover all of its +post-burn-in transitions and observed scalar coordinates. For sealed seed `s`, +set +`F_hat_s(q)=(1/3)*sum_sigma (1/60)*sum_e F_{s,sigma,e}(q)`, using the same +`60` class-`1..6` episode ids per noise level as NLL. Then compute +`ECE_s=mean_q |F_hat_s(q)-q|` and average the `32` seed ECEs arithmetically. +Neither class-`5` mode becomes an extra episode or receives unit weight. The calibration guardrail is evaluated for every required candidate/control pair as `ECE_candidate - ECE_control <= 0.02`. Ties use `<=`; NaN, infinite, empty, or unsupported values emit `hmmm_undefined` and force `UNRESOLVED`. @@ -421,25 +447,28 @@ budget, and is decoded by the same copy/average map as the mean. There are no other heads, skip paths, hidden layers, attention terms, or learned intervention embeddings. -The fitted family ids and masks are exactly: - -| id | fixed architecture | -|---|---| -| `direct-n` | structural direct family, every `j != i`, `C_i=1` | -| `partition-m` / `adjacent-m` | the same family over adapter-encoded `m` carriers | -| `arbitrary-n` | `direct-n` after a sealed scalar-coordinate permutation; consecutive coordinate pairs form carriers, then predictions are inverse-permuted | -| `feedback-cut-n` | `direct-n` with `E_i` empty and `C_i=0` | -| `label-shuffle-n` | `direct-n` after a sealed permutation of whole two-coordinate carriers, inverted before scoring | -| `feed-forward-n` | structural direct family with `E_i={j:j` | structural direct family, every `j != i`, `C_i=1` | +| `partition-m` | `partition/` | the same family over adapter-encoded `m` carriers | +| `adjacent-m` | `adjacent/` | the same family over adapter-encoded `m` carriers | +| `arbitrary-n` | `arbitrary/` | `direct-n` after a sealed scalar-coordinate permutation; consecutive coordinate pairs form carriers, then predictions are inverse-permuted | +| `feedback-cut-n` | `feedback-cut/` | `direct-n` with `E_i` empty and `C_i=0` | +| `label-shuffle-n` | `label-shuffle/` | `direct-n` after a sealed permutation of whole two-coordinate carriers, inverted before scoring | +| `feed-forward-n` | `feed-forward/` | structural direct family with `E_i={j:j` | structural nested family with every declared leaf and outer edge and both product terms present | +| `wrong-tree-n` | `wrong-tree/` | `nested-n` on the left-rotated contiguous blocks already declared | +| `outer-cut-n` | `outer-cut/` | `nested-n` with every outer edge and outer product term absent | +| `label-shuffle-tree-n` | `label-shuffle/tree/` | `nested-n` after a sealed permutation of whole outer-carrier blocks, inverted before scoring | +| `feed-forward-tree-n` | `feed-forward/tree/` | nested family with only source indices lower than target indices at each level and both product terms absent | +| `arbitrary-tree-n` | `arbitrary/tree/` | `nested-n` after a sealed leaf permutation, repartitioned into blocks of the original ordered sizes, then inverse-permuted before scoring | +| `unnested-n` | `unnested/` | one structural direct family treating every observed leaf pair as a carrier, with no outer summary or tree | +| `balanced-m-tree` | `balanced//tree` | nested family preserving the observed leaf list but grouping leaf index `k` into outer carrier `floor(k*m/N_leaf)` | +| `capacity-only-D` | `capacity-only/` | the dense width-32 equation above on the ungrouped flattened state | All sealed permutations are ranked without replacement by the canonical `intervention_plan` stream under role `model_partition/` and are @@ -451,12 +480,13 @@ Every tensor scalar path is the UTF-8 encoding of this whitespace-free JSON array: ```text -["arity-recursion-synthetic-v2","parameter-mask",family_id,tensor_name,[i0,...,iq]] +["arity-recursion-synthetic-v3","parameter-mask",family_id,tensor_name,[i0,...,iq]] ``` -`family_id` and `tensor_name` obey `[a-z0-9_./-]+`. A concrete family id replaces -the table's metavariable with `/` plus its minimal integer, for example -`direct/7`, `partition/3`, `balanced/6/tree`, and `capacity-only/44`. Structural +`family_id` and `tensor_name` obey `[a-z0-9_./-]+`. Each concrete family id is +formed only by the canonical registry row above; for example, the admissible +values include `direct/7`, `partition/3`, `feed-forward/tree/7`, +`balanced/6/tree`, and `capacity-only/44`. Structural direct tensor names are exactly `l`, `w`, `v`, `h`, `b`, and `rho`; nested names are exactly `leaf/l`, `leaf/w`, `leaf/v`, `leaf/h`, `leaf/b`, `outer/w`, `outer/v`, `outer/h`, and `rho`; dense names are exactly `u`, `a`, `v`, `c`, and @@ -505,13 +535,16 @@ selection. ### Required comparisons -- `H_A(n)` requires `partition-m` for every `m in {2,3,5,6,7,8}` with `m=2`, `adjacent-(n+1)`, `arbitrary-n`, - `feedback-cut-n`, `label-shuffle-n`, `feed-forward-n`, and - `capacity-only-(2n)`. Duplicate `m` families are fitted once. -- `H_R(n)` requires `wrong-tree-n`, `outer-cut-n`, `feed-forward-tree-n`, - `arbitrary-tree-n`, `unnested-n`, the whole-outer-carrier label shuffle of - `nested-n`, and `capacity-only-(2*N_leaf)`. + `feedback-cut-n`, `feed-forward-n`, and `capacity-only-(2n)`. It also requires + `label-shuffle-n` solely as the exact invariance control below. Duplicate `m` + families are fitted once. +- `H_R(n)` requires as superiority controls `wrong-tree-n`, `outer-cut-n`, + `feed-forward-tree-n`, `arbitrary-tree-n`, `unnested-n`, and + `capacity-only-(2*N_leaf)`. It also requires `label-shuffle-tree-n` solely as + the exact invariance control below. - `H_7` uses the union of `H_R(7)` and exactly four named heptadic controls: `balanced-6-tree`, `balanced-8-tree`, `arbitrary-tree-7`, and `unnested-7`. Duplicates in the union are fitted and tested once. @@ -519,6 +552,9 @@ selection. Each balanced tree uses the table's floor grouping on the same `N_leaf` observations, so six- and eight-carrier controls neither drop nor invent a leaf. No control outside these sets affects `SURVIVED`, `FALSIFIED`, or `UNRESOLVED`. +The two label-shuffle families are required fitted negative controls but are not +members of the superiority-control set `c` used by bootstrap, permutation, or +effect-size calculations. All candidate and control likelihoods are evaluated on the generator's observed state, never on a private wrong-arity coordinate space. A direct control with @@ -537,14 +573,20 @@ arithmetic mean of assigned positive variances for `m>n`. The input encoding is the dual map: for `m < n`, control carrier `a` receives the arithmetic mean of all observed carriers with `q_{m,n}(i)=a`; for `m > n`, control carrier `a` receives observed carrier -`r_{m,n}(a)`. Carrier-targeted additive interventions are encoded by the same +`r_{m,n}(a)`. Define the model-carrier image of observed carrier `i` as +`A_{m,n}(i)={q_{m,n}(i)}` for `mn`. Carrier-targeted additive interventions are encoded by the same map before dynamics: merged controls receive the arithmetic mean of all interventions in their bucket, and split controls receive the same intervention on every split carrier assigned to the targeted observed carrier. Edge cuts with endpoints collapsed into one merged carrier become recorded self-edge no-ops; -all other cuts map to the corresponding encoded edge. Ablations use the same -merged/split carrier mapping. Modulations map their endpoints and named summand; -if that summand is absent in the family, the receipt records a no-op. OOD pairs +all other cuts map to every nonself model edge in +`A_{m,n}(source) x A_{m,n}(target)` and zero both those `W` summands and every +present target product term indexed by `A_{m,n}(target)`. Ablations use the same +merged/split carrier mapping. A class-`4` `W` modulation multiplies only those +mapped `W` summands; a class-`4` product modulation ignores the edge image and +multiplies only every present target product term indexed by +`A_{m,n}(target)`, exactly once. An absent selected term is a receipted no-op. OOD pairs compose these mapped operators in numeric class order. The predictive covariance is always the declared diagonal Gaussian over the generator's observed coordinates and is included in the same parameter-budget accounting. @@ -556,31 +598,49 @@ family let `O_f(g)` be the set of original leaf pairs assigned to outer group contiguous-block, unnested-singleton, or floor-grouping rule. Apply interventions as follows: +Mapping preserves the plan's named summand type. A class-`4` `W` selection +multiplies by `0.5` only the surviving mapped `W` summands and never a product; +a class-`4` product selection multiplies by `0.5` only the mapped target product +terms and never a `W` summand. A class-`2` cut applies both maps because the +frozen cut operator explicitly zeros its named `W` summand and the associated +target all-source product. Each listed target product is changed once even when +several source edges map to it. + - `label-shuffle-n` and `label-shuffle-tree-n` conjugate the complete operator - by the sealed permutation, including targets, sources, tensor terms, state - coordinates, and duration, then inverse-permute the prediction; + by the sealed permutation, including the `W`-versus-product summand tag, + targets, sources, tensor terms, state coordinates, and duration, then + inverse-permute the prediction; - `arbitrary-n` maps a scalar state target to its unique permuted coordinate. A generator edge from carrier coordinate set `J` to target set `I` maps to every model edge `a -> b` with `S_f(a) intersect J` and `S_f(b) intersect I` - nonempty; ablation clamps every mapped coordinate; modulation changes that - same edge set and each affected target product term exactly once; + nonempty; ablation clamps every mapped coordinate. Its `W`-summand image is + that edge set; its product-summand image is every product term at model target + `b` with `S_f(b) intersect I` nonempty, independent of the edge image; - `wrong-tree-n`, `arbitrary-tree-n`, and `balanced-m-tree` map an outer edge `J -> I` to every outer edge `g -> h` whose `O_f(g)` overlaps source leaves `J` and whose `O_f(h)` overlaps target leaves `I`. A child edge maps to the corresponding leaf edge when both leaves remain in one outer group, otherwise to the outer edge between their assigned groups. State targets and ablations - follow the unique leaf-scalar identity; + follow the unique leaf-scalar identity. An outer product selection at target + leaf set `I` maps to every present outer product at `h` with `O_f(h)` + overlapping `I`; a child product selection maps only to the present leaf + product at that target leaf in its assigned outer group; - `unnested-n` treats each leaf pair as one direct carrier. Both original outer and child edges map to every direct leaf edge whose source and target leaf - identities belong to the original source and target sets; + identities belong to the original source and target sets. An outer product + selection maps to the direct target product of every leaf in the original + target outer carrier; a child product selection maps only to the direct target + product of its target leaf; - `capacity-only-D` has no structural edge or product term, so cuts and modulations are receipted no-ops; scalar additions and ablation clamps still apply to their identical flattened coordinates. -For any mapped edge set, an architecture mask such as feed-forward or outer-cut -removes absent edges after mapping; only an empty resulting set is a no-op. The -class-`5` recovery cut uses this same map. Every `S_f`, `O_f`, mapped edge list, -and no-op is emitted before fitting in lexicographic order. +For any mapped branch, an architecture mask such as feed-forward or outer-cut +removes absent `W` or product terms after mapping; a class-`4` operator is a +no-op exactly when its selected branch is then empty. The class-`5` recovery cut +uses both the `W` and target-product maps. Every `S_f`, `O_f`, mapped edge list, +mapped product list, selected summand tag, and no-op is emitted before fitting +in lexicographic order. Adjacent-arity comparisons are `BLOCKED` if this adapter and likelihood cannot be emitted exactly. @@ -599,7 +659,8 @@ No decision threshold may be changed after any sealed output is opened. For each `H_A(n)`, `H_R(n)`, and `H_7`, first average each family outcome within each sealed seed equally over the three noise levels and the specified held-out -episodes. For every required control `c`, define candidate-favoring paired values +episodes. For every required superiority control `c` (which excludes the two +isomorphic label-shuffle controls), define candidate-favoring paired values ```text d_{s,c,NLL} = NLL_{s,c} - NLL_{s,candidate} @@ -608,12 +669,26 @@ d_{s,c,recovery} = Gamma_{s,candidate} - Gamma_{s,c} over the `32` sealed seeds. The point estimate is the arithmetic mean. The paired standardized effect is `mean(d)/sd(d)` with sample standard deviation denominator -`31`; `sd=0`, NaN, or infinity emits `hmmm_undefined` and forces `UNRESOLVED`. +`31`; for a superiority control, `sd=0`, NaN, or infinity emits +`hmmm_undefined` and forces `UNRESOLVED`. + +The label-shuffle check is noninferential. After inverse scoring, candidate and +label-shuffle predictive means and variances must be exactly equal in binary64 +at every `(seed,noise,episode,transition,coordinate)`; NLL and recovery values +must be exactly equal at every `(seed,noise,episode)`; and ECE episode CDFs must +be exactly equal at every `(seed,noise,episode,q)`. When all paired differences +are exactly zero, define the label-shuffle standardized +effect and interval by convention as `g=0` and `I_g=[0,0]`; this satisfies the +closed `[-0.2,0.2]` equivalence check without dividing by zero. Any nonzero or +nonfinite difference is an implementation discrepancy, marks the hypothesis +`BLOCKED`, and cannot be converted into `SURVIVED`, `FALSIFIED`, or a scientific +label effect. These shuffle cells never enter `Z_b`, `G_b`, `M_p`, or their +maxima. The simultaneous interval uses exactly `B=65536` nonparametric paired bootstrap draws. For bootstrap index `b`, draw `32` sealed-seed indices with replacement from the canonical `bootstrap` stream and use the same index vector for every -required control and both outcomes in that hypothesis. For each cell compute its +required superiority control and both outcomes in that hypothesis. For each cell compute its bootstrap mean and sample standard error `se_b`; define `Z_b=max_{c,outcome}|(mean_b(d)-mean(d))/se_b|`. A zero or nonfinite `se_b` emits `hmmm_undefined`. Let `q95` be sorted @@ -632,7 +707,7 @@ deviation emits `hmmm_undefined`; no raw-mean interval is rescaled or substitute The family-wise test uses exactly `P=65536` sampled paired sign permutations. For permutation `p`, obtain one sign per sealed seed from the canonical `permutation` stream (`u<0.5` gives `-1`, otherwise `+1`) and reuse that sign -vector for every required control and both outcomes in the hypothesis. Define +vector for every required superiority control and both outcomes in the hypothesis. Define `T_{c,o}=mean(d)/(sd(d)/sqrt(32))`; recompute both the mean and sample standard deviation after applying each sign vector, and set `M_p=max_{c,o}|T_{c,o}^{(p)}|`. The two-sided adjusted value for each comparison @@ -644,19 +719,20 @@ by the sign of `mean(d)`. `SURVIVED` requires all of the following: -1. the candidate beats every required control on both primary decision outcomes; +1. the candidate beats every required superiority control on both primary decision outcomes; 2. every simultaneous 95% interval excludes zero in the candidate-favoring direction; 3. every max-statistic adjusted paired permutation test has `p < 0.05`; -4. the smallest paired standardized effect across required comparisons is at least `0.5`; +4. the smallest paired standardized effect across required superiority comparisons is at least `0.5`; 5. every required candidate/control pair satisfies the frozen `0.02` ECE guardrail; 6. the result is reproduced by an independent implementation from the sealed run receipt. +7. every required label-shuffle family passes the exact invariance check. -`FALSIFIED` applies when any required equal-budget control has a negative +`FALSIFIED` applies when any required equal-budget superiority control has a negative candidate-favoring mean on either primary outcome, its simultaneous interval is strictly below zero, and its adjusted permutation value is `<0.05`. A -carrier-specific claim is also falsified when the candidate-minus-label-shuffle -`I_g` lies wholly inside the closed equivalence band `[-0.2,0.2]` on both -primary decision outcomes. Equality to either band endpoint counts as inside. +label-shuffle cell never triggers scientific falsification: exact zero is the +required coordinate-invariance result, and any other value is `BLOCKED` as +specified above. `UNRESOLVED` applies when neither rule is met, support/estimator assumptions fail, an implementation discrepancy remains, or a required comparison cannot be equalized. diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index 86c3497..58f690b 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -187,7 +187,7 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: flat = " ".join(text.split()) for phrase in ("run status: not-run", "human subjects: none", "animal subjects: none", "LLM calls: none", "seeds `32..63`: sealed decision set", "`SURVIVED` requires all of the following", "`FALSIFIED` applies", "`UNRESOLVED` applies", "No outcome classifies a human, animal, model, organization, or physical system as conscious"): self.assertIn(phrase, flat) - for phrase in ("configuration `arity-recursion-synthetic-v2` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam with learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): + for phrase in ("configuration `arity-recursion-synthetic-v3` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam with learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): self.assertIn(phrase, flat) for phrase in ("Synthetic generator", "SHA-256 input is the UTF-8 encoding", "process_noise", "intervention_plan", "model_initializers", "Discrete choices use `floor(u*K)`", "Matched candidate/control comparisons use the same", "Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL", "ordered child-arity vector", "left-rotated child-arity vector", "Embedded primary-outcome certificate", "observed scalar-coordinate identity", "input encoding is the dual map", "Adjacent-arity comparisons are `BLOCKED`"): self.assertIn(phrase, flat) @@ -205,8 +205,8 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: flat = " ".join(text.split()) for phrase in ( - "protocol version: 0.3.0", - '["arity-recursion-synthetic-v2",s,n,sigma_milli,domain,role,[k0,...,kp],block]', + "protocol version: 0.3.1", + '["arity-recursion-synthetic-v3",s,n,sigma_milli,domain,role,[k0,...,kp],block]', "concatenated placeholders or language-native float strings are forbidden", "stability/00` through `stability/15", "If no attempt is accepted, that system is `BLOCKED`", @@ -256,18 +256,25 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: self.assertIn(phrase, flat) for phrase in ( - "One scalar key consumes exactly one lane from `block=0`", - "implementations never take a second lane or advance to `block>0`", - '["arity-recursion-synthetic-v2","parameter-mask",family_id,tensor_name,[i0,...,iq]]', + "`block=floor(r/K)`", + "ordinal `K` starts the deterministic block-`1` reshuffle", + '`["schedule//",intervention_class,k]`', + '["arity-recursion-synthetic-v3","parameter-mask",family_id,tensor_name,[i0,...,iq]]', "The label-shuffle families are the sole exception to independent ranking", + "`feed-forward/tree/`", "let `S_f(a)` be the set of original observed scalar coordinates", - "The class-`5` recovery cut uses this same map", + "The class-`5` recovery cut uses both the `W` and target-product maps", "exactly `0.5*NLL_full + 0.5*NLL_cut`", + "`F_e(q)=0.5*mean_full(1[p<=q])+0.5*mean_cut(1[p<=q])`", + "Mapping preserves the plan's named summand type", "The simultaneous standardized-effect interval is `I_g=[g-q95_g,g+q95_g]`", + "define the label-shuffle standardized effect and interval by convention as `g=0` and `I_g=[0,0]`", + "These shuffle cells never enter `Z_b`, `G_b`, `M_p`, or their maxima", ): self.assertIn(phrase, flat) self.assertNotIn("arity-recursion-synthetic-v1", text) + self.assertNotIn("arity-recursion-synthetic-v2", text) def test_human_and_machine_entrypoints_agree(self) -> None: readme = (PROJECT / "README.md").read_text(encoding="utf-8") From 748ce02f0ec3fad3101511924f3aa8d3f131c3b1 Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Mon, 7 Sep 2026 22:57:20 -0700 Subject: [PATCH 12/20] docs(stack): freeze remaining replay keys --- .../PREREGISTRATION.md | 58 ++++++++++++++----- .../tests/test_contracts.py | 14 +++-- 2 files changed, 54 insertions(+), 18 deletions(-) diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index 6d443b4..b9f9fc2 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -1,7 +1,7 @@ # Preregistration: matched arity and recursion discrimination ```text -protocol version: 0.3.1 +protocol version: 0.3.2 run status: not-run human subjects: none animal subjects: none @@ -43,7 +43,7 @@ same local state dimension and update family. ## Frozen implementation configuration -Use configuration `arity-recursion-synthetic-v3` exactly. The version changes +Use configuration `arity-recursion-synthetic-v4` exactly. The version changes because the repairs below change result-bearing bytes; no earlier identifier is an alias. @@ -95,12 +95,12 @@ process noise. No intervention may be re-expressed as an undeclared additive input channel. Every result-bearing stochastic draw is deterministic under -`arity-recursion-synthetic-v3`, seed, arity, noise level, stream domain, role, +`arity-recursion-synthetic-v4`, seed, arity, noise level, stream domain, role, index tuple, and digest-block number. The SHA-256 input is the UTF-8 encoding of this whitespace-free JSON array: ```text -["arity-recursion-synthetic-v3",s,n,sigma_milli,domain,role,[k0,...,kp],block] +["arity-recursion-synthetic-v4",s,n,sigma_milli,domain,role,[k0,...,kp],block] ``` Integers use minimal unsigned base-10 notation (`0`, never `00`); `sigma_milli` @@ -137,15 +137,23 @@ random-number source, output lane, block rule, or key encoding is admissible. For an `intervention_plan` target schedule, candidate position `k` is the `draw_index` in tuple `["schedule//",intervention_class,k]`. The only -`choice_kind` tokens are `state_target`, `edge_target`, `carrier_target`, -`summand_target`, and `recovery_target` for classes `1` through `5`, -respectively; `split` is the allocation-table split, and `r` is that class and -split's zero-based episode ordinal. A model-partition permutation instead uses +target-schedule `choice_kind` tokens are `state_target`, `edge_target`, +`carrier_target`, `summand_target`, and `recovery_target` for classes `1` +through `5`, respectively; `split` is the allocation-table split, and `r` is +that class and split's zero-based episode ordinal. Start time is the separate +`choice_kind` token `start_time`: classes `1..4` use tuple +`[episode_id,intervention_class,"start_time"]`, `block=0`, and +`start=floor(u_0*128)` for class `1` or `start=floor(u_0*113)` for classes +`2..4`. Each class-`6` episode uses tuple `[episode_id,6,"start_time"]`, +`block=0`, and `start=floor(u_0*113)` for the common composed-operator start. +Class `5` has the fixed `t0=0` and consumes no start-time draw. A +model-partition permutation instead uses role `model_partition/`, tuple `["schedule/model_partition",0,k]`, `r` equal to the output position, and `block=0`. Candidate `k` is its position in the emitted lexicographic candidate -list. These fixed schedule tuples, not an actual episode id or a mutable draw -cursor, supply the three `intervention_plan` domain fields. +list. Target and partition schedules use the displayed `schedule/...` literal; +start-time draws use the displayed actual `episode_id`. No mutable draw cursor +or alternate tuple supplies the three `intervention_plan` domain fields. The stream domains are exactly: @@ -455,7 +463,7 @@ integer and admit no other spelling or separator: |---|---|---| | `direct-n` | `direct/` | structural direct family, every `j != i`, `C_i=1` | | `partition-m` | `partition/` | the same family over adapter-encoded `m` carriers | -| `adjacent-m` | `adjacent/` | the same family over adapter-encoded `m` carriers | +| `adjacent-m` | `adjacent/` unless aliased to `partition/` by the duplicate rule below | the same family over adapter-encoded `m` carriers | | `arbitrary-n` | `arbitrary/` | `direct-n` after a sealed scalar-coordinate permutation; consecutive coordinate pairs form carriers, then predictions are inverse-permuted | | `feedback-cut-n` | `feedback-cut/` | `direct-n` with `E_i` empty and `C_i=0` | | `label-shuffle-n` | `label-shuffle/` | `direct-n` after a sealed permutation of whole two-coordinate carriers, inverted before scoring | @@ -480,7 +488,7 @@ Every tensor scalar path is the UTF-8 encoding of this whitespace-free JSON array: ```text -["arity-recursion-synthetic-v3","parameter-mask",family_id,tensor_name,[i0,...,iq]] +["arity-recursion-synthetic-v4","parameter-mask",family_id,tensor_name,[i0,...,iq]] ``` `family_id` and `tensor_name` obey `[a-z0-9_./-]+`. Each concrete family id is @@ -517,6 +525,23 @@ SHA-256, and any candidate-to-shuffle path map. Thus every required family has the same number of output-bearing trainable scalars; unused capacity cannot hide in nuisance parameters or a label-specific mask lottery. +Every observed scalar, direct carrier, outer carrier, and leaf carries its +immutable pre-permutation identity. Candidate and label-shuffle programs use +that original identity, not current model position, to freeze every binary64 +reduction. A two-coordinate dot product is the serial left fold in coordinate +order `0,1`; each structural sum is the serial left fold from `+0.0` in +lexicographic original source-identity order; and each structural product is the +serial left fold from `1.0` in that same order. Loss terms within a minibatch are +left-folded by `draw_index`, then transition index, then lexicographic original +observed scalar identity. Recovery squared coordinates and every reported mean +use the corresponding lexicographic original-identity order and a serial left +fold before the single final division. Reverse-mode gradients are derivatives +of this ordered scalar program and accumulate contributions in the same order. +Reassociation, tree or parallel reductions, model-position ordering, and fused +multiply-add contraction are forbidden. These rules apply before fitting, +during every optimizer update, and during rollout and scoring, so a carrier +permutation changes addresses only and cannot change reduction order. + Each active matrix uses Glorot-uniform bounds `+/-sqrt(6/(fan_in+fan_out))` from `model_initializers`, with fan sizes taken from the declared full tensor before masking. Treat `v` as a `1 x 2` @@ -539,8 +564,13 @@ selection. `m in {2,3,5,6,7,8}` with `m=2`, `adjacent-(n+1)`, `arbitrary-n`, `feedback-cut-n`, `feed-forward-n`, and `capacity-only-(2n)`. It also requires - `label-shuffle-n` solely as the exact invariance control below. Duplicate `m` - families are fitted once. + `label-shuffle-n` solely as the exact invariance control below. Let + `M_partition={m in {2,3,5,6,7,8}:m`, and no `adjacent/` mask, + stream, fit, or test cell exists. If its carrier count is not in + `M_partition`, its sole id is `adjacent/`. Thus duplicate carrier counts + are fitted and tested exactly once under the unique id selected by this rule. - `H_R(n)` requires as superiority controls `wrong-tree-n`, `outer-cut-n`, `feed-forward-tree-n`, `arbitrary-tree-n`, `unnested-n`, and `capacity-only-(2*N_leaf)`. It also requires `label-shuffle-tree-n` solely as diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index 58f690b..8359621 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -187,7 +187,7 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: flat = " ".join(text.split()) for phrase in ("run status: not-run", "human subjects: none", "animal subjects: none", "LLM calls: none", "seeds `32..63`: sealed decision set", "`SURVIVED` requires all of the following", "`FALSIFIED` applies", "`UNRESOLVED` applies", "No outcome classifies a human, animal, model, organization, or physical system as conscious"): self.assertIn(phrase, flat) - for phrase in ("configuration `arity-recursion-synthetic-v3` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam with learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): + for phrase in ("configuration `arity-recursion-synthetic-v4` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam with learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): self.assertIn(phrase, flat) for phrase in ("Synthetic generator", "SHA-256 input is the UTF-8 encoding", "process_noise", "intervention_plan", "model_initializers", "Discrete choices use `floor(u*K)`", "Matched candidate/control comparisons use the same", "Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL", "ordered child-arity vector", "left-rotated child-arity vector", "Embedded primary-outcome certificate", "observed scalar-coordinate identity", "input encoding is the dual map", "Adjacent-arity comparisons are `BLOCKED`"): self.assertIn(phrase, flat) @@ -205,8 +205,8 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: flat = " ".join(text.split()) for phrase in ( - "protocol version: 0.3.1", - '["arity-recursion-synthetic-v3",s,n,sigma_milli,domain,role,[k0,...,kp],block]', + "protocol version: 0.3.2", + '["arity-recursion-synthetic-v4",s,n,sigma_milli,domain,role,[k0,...,kp],block]', "concatenated placeholders or language-native float strings are forbidden", "stability/00` through `stability/15", "If no attempt is accepted, that system is `BLOCKED`", @@ -259,9 +259,14 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: "`block=floor(r/K)`", "ordinal `K` starts the deterministic block-`1` reshuffle", '`["schedule//",intervention_class,k]`', - '["arity-recursion-synthetic-v3","parameter-mask",family_id,tensor_name,[i0,...,iq]]', + '`[episode_id,intervention_class,"start_time"]`', + '`[episode_id,6,"start_time"]`', + '["arity-recursion-synthetic-v4","parameter-mask",family_id,tensor_name,[i0,...,iq]]', "The label-shuffle families are the sole exception to independent ranking", "`feed-forward/tree/`", + "it is an exact alias of that one `partition-m` control", + "immutable pre-permutation identity", + "fused multiply-add contraction are forbidden", "let `S_f(a)` be the set of original observed scalar coordinates", "The class-`5` recovery cut uses both the `W` and target-product maps", "exactly `0.5*NLL_full + 0.5*NLL_cut`", @@ -275,6 +280,7 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: self.assertNotIn("arity-recursion-synthetic-v1", text) self.assertNotIn("arity-recursion-synthetic-v2", text) + self.assertNotIn("arity-recursion-synthetic-v3", text) def test_human_and_machine_entrypoints_agree(self) -> None: readme = (PROJECT / "README.md").read_text(encoding="utf-8") From 010459d28c1f7aa648b67860c32b4f256682bd19 Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Mon, 7 Sep 2026 23:06:44 -0700 Subject: [PATCH 13/20] docs(stack): freeze OOD component targets --- .../PREREGISTRATION.md | 31 +++++++++++++------ .../tests/test_contracts.py | 12 ++++--- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index b9f9fc2..b2e0680 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -1,7 +1,7 @@ # Preregistration: matched arity and recursion discrimination ```text -protocol version: 0.3.2 +protocol version: 0.3.3 run status: not-run human subjects: none animal subjects: none @@ -43,7 +43,7 @@ same local state dimension and update family. ## Frozen implementation configuration -Use configuration `arity-recursion-synthetic-v4` exactly. The version changes +Use configuration `arity-recursion-synthetic-v5` exactly. The version changes because the repairs below change result-bearing bytes; no earlier identifier is an alias. @@ -95,12 +95,12 @@ process noise. No intervention may be re-expressed as an undeclared additive input channel. Every result-bearing stochastic draw is deterministic under -`arity-recursion-synthetic-v4`, seed, arity, noise level, stream domain, role, +`arity-recursion-synthetic-v5`, seed, arity, noise level, stream domain, role, index tuple, and digest-block number. The SHA-256 input is the UTF-8 encoding of this whitespace-free JSON array: ```text -["arity-recursion-synthetic-v4",s,n,sigma_milli,domain,role,[k0,...,kp],block] +["arity-recursion-synthetic-v5",s,n,sigma_milli,domain,role,[k0,...,kp],block] ``` Integers use minimal unsigned base-10 notation (`0`, never `00`); `sigma_milli` @@ -140,7 +140,8 @@ For an `intervention_plan` target schedule, candidate position `k` is the target-schedule `choice_kind` tokens are `state_target`, `edge_target`, `carrier_target`, `summand_target`, and `recovery_target` for classes `1` through `5`, respectively; `split` is the allocation-table split, and `r` is -that class and split's zero-based episode ordinal. Start time is the separate +that dedicated class and split's zero-based episode ordinal, except for the +class-`6` component continuation ordinals frozen under **Interventions**. Start time is the separate `choice_kind` token `start_time`: classes `1..4` use tuple `[episode_id,intervention_class,"start_time"]`, `block=0`, and `start=floor(u_0*128)` for class `1` or `start=floor(u_0*113)` for classes @@ -289,9 +290,21 @@ These are additional to the `64/16/16` observational episodes. Episode ids are exactly `obs//` and `int///`, where `split` is `train`, `cal`, or `test`. Class `5` and `6` are never used for fitting or restart selection. -Class `6` contains the six unordered pairs from classes `1..4`, in lexicographic -order, exactly twice each. Both interventions in a class-`6` episode start at -the same scheduled transition. This allocation is crossed with all three noise +For class `6`, define the ordered pair list +`P=((1,2),(1,3),(1,4),(2,3),(2,4),(3,4))`. Zero-based class-`6` episode ordinal +`e in {0,...,11}` receives pair `P[floor(e/2)]`, so each pair occurs in two +consecutive episodes. For each component class `c` in that pair, let +`o_c(e)=count{e'",c,k]`, where `choice_kind_c` is +`state_target`, `edge_target`, `carrier_target`, or `summand_target` for +`c=1,2,3,4`. Thus the eight dedicated class-`c` test targets consume ordinals +`0..7`, and that class's six OOD component appearances consume `8..13` without +reuse; the general block rule determines any reshuffle. The receipt stores both +component classes, both `r` values, every ranking key, and both selected targets +for each `e`. Both interventions start at the class-`6` episode's one common +scheduled transition and compose in numeric class order. This allocation is crossed with all three noise levels; it is not multiplied or reweighted after sealed outputs are opened. All plans are generated before any model is fit and stored in @@ -488,7 +501,7 @@ Every tensor scalar path is the UTF-8 encoding of this whitespace-free JSON array: ```text -["arity-recursion-synthetic-v4","parameter-mask",family_id,tensor_name,[i0,...,iq]] +["arity-recursion-synthetic-v5","parameter-mask",family_id,tensor_name,[i0,...,iq]] ``` `family_id` and `tensor_name` obey `[a-z0-9_./-]+`. Each concrete family id is diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index 8359621..b0739eb 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -187,7 +187,7 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: flat = " ".join(text.split()) for phrase in ("run status: not-run", "human subjects: none", "animal subjects: none", "LLM calls: none", "seeds `32..63`: sealed decision set", "`SURVIVED` requires all of the following", "`FALSIFIED` applies", "`UNRESOLVED` applies", "No outcome classifies a human, animal, model, organization, or physical system as conscious"): self.assertIn(phrase, flat) - for phrase in ("configuration `arity-recursion-synthetic-v4` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam with learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): + for phrase in ("configuration `arity-recursion-synthetic-v5` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam with learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): self.assertIn(phrase, flat) for phrase in ("Synthetic generator", "SHA-256 input is the UTF-8 encoding", "process_noise", "intervention_plan", "model_initializers", "Discrete choices use `floor(u*K)`", "Matched candidate/control comparisons use the same", "Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL", "ordered child-arity vector", "left-rotated child-arity vector", "Embedded primary-outcome certificate", "observed scalar-coordinate identity", "input encoding is the dual map", "Adjacent-arity comparisons are `BLOCKED`"): self.assertIn(phrase, flat) @@ -205,8 +205,8 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: flat = " ".join(text.split()) for phrase in ( - "protocol version: 0.3.2", - '["arity-recursion-synthetic-v4",s,n,sigma_milli,domain,role,[k0,...,kp],block]', + "protocol version: 0.3.3", + '["arity-recursion-synthetic-v5",s,n,sigma_milli,domain,role,[k0,...,kp],block]', "concatenated placeholders or language-native float strings are forbidden", "stability/00` through `stability/15", "If no attempt is accepted, that system is `BLOCKED`", @@ -261,7 +261,10 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: '`["schedule//",intervention_class,k]`', '`[episode_id,intervention_class,"start_time"]`', '`[episode_id,6,"start_time"]`', - '["arity-recursion-synthetic-v4","parameter-mask",family_id,tensor_name,[i0,...,iq]]', + '`P=((1,2),(1,3),(1,4),(2,3),(2,4),(3,4))`', + '`r=8+o_c(e)`', + "both selected targets for each `e`", + '["arity-recursion-synthetic-v5","parameter-mask",family_id,tensor_name,[i0,...,iq]]', "The label-shuffle families are the sole exception to independent ranking", "`feed-forward/tree/`", "it is an exact alias of that one `partition-m` control", @@ -281,6 +284,7 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: self.assertNotIn("arity-recursion-synthetic-v1", text) self.assertNotIn("arity-recursion-synthetic-v2", text) self.assertNotIn("arity-recursion-synthetic-v3", text) + self.assertNotIn("arity-recursion-synthetic-v4", text) def test_human_and_machine_entrypoints_agree(self) -> None: readme = (PROJECT / "README.md").read_text(encoding="utf-8") From 97f90cd10450c1a77e70606bb8a035eef5d6cf12 Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Tue, 8 Sep 2026 04:55:45 -0700 Subject: [PATCH 14/20] fix(research): validate fragment byte lengths --- research/from-photons-to-macroverse/tools/assemble_paper.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/research/from-photons-to-macroverse/tools/assemble_paper.py b/research/from-photons-to-macroverse/tools/assemble_paper.py index 225b840..b84d8a0 100755 --- a/research/from-photons-to-macroverse/tools/assemble_paper.py +++ b/research/from-photons-to-macroverse/tools/assemble_paper.py @@ -26,6 +26,11 @@ def assemble() -> bytes: for item in manifest["fragments"]: path = PROJECT / item["path"] data = path.read_bytes() + observed_bytes = len(data) + if observed_bytes != item["bytes"]: + raise SystemExit( + f"fragment length drift: {item['path']}: expected {item['bytes']}, observed {observed_bytes}" + ) observed = sha256(data) if observed != item["sha256"]: raise SystemExit( From baa65c3733e5df64ede0bf5081b0f8df7f2ddf2c Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Wed, 9 Sep 2026 05:15:20 -0700 Subject: [PATCH 15/20] fix(research): validate assembled receipt byte count --- .../from-photons-to-macroverse/tools/assemble_paper.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/research/from-photons-to-macroverse/tools/assemble_paper.py b/research/from-photons-to-macroverse/tools/assemble_paper.py index b84d8a0..8bb1902 100755 --- a/research/from-photons-to-macroverse/tools/assemble_paper.py +++ b/research/from-photons-to-macroverse/tools/assemble_paper.py @@ -10,6 +10,7 @@ PROJECT = Path(__file__).resolve().parents[1] MANIFEST = PROJECT / "paper" / "manifest.json" +SOURCE_RECEIPT = PROJECT / "SOURCE_RECEIPT.json" def sha256(data: bytes) -> str: @@ -50,6 +51,13 @@ def assemble() -> bytes: expected = manifest["assembled_sha256"] if observed != expected: raise SystemExit(f"assembled paper drift: expected {expected}, observed {observed}") + receipt = json.loads(SOURCE_RECEIPT.read_text(encoding="utf-8")) + expected_bytes = receipt["revision"]["assembled_bytes"] + observed_bytes = len(paper) + if observed_bytes != expected_bytes: + raise SystemExit( + f"assembled paper length drift: expected {expected_bytes}, observed {observed_bytes}" + ) return paper From 278ce9a8ddf4c1418dddd3ff2c6d5f67148f5265 Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Wed, 9 Sep 2026 11:47:49 -0700 Subject: [PATCH 16/20] research: bind replay to executable reference --- .../PREREGISTRATION.md | 66 +- research/from-photons-to-macroverse/README.md | 8 +- .../replay_reference.json | 13 + .../replay_vectors.json | 147 ++++ .../tests/test_contracts.py | 55 +- .../tools/replay_reference.py | 748 ++++++++++++++++++ 6 files changed, 1013 insertions(+), 24 deletions(-) create mode 100644 research/from-photons-to-macroverse/replay_reference.json create mode 100644 research/from-photons-to-macroverse/replay_vectors.json create mode 100755 research/from-photons-to-macroverse/tools/replay_reference.py diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index b2e0680..487ff1f 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -1,7 +1,7 @@ # Preregistration: matched arity and recursion discrimination ```text -protocol version: 0.3.3 +protocol version: 0.4.0 run status: not-run human subjects: none animal subjects: none @@ -38,12 +38,12 @@ and interventions; it would not show that nature uses those structures. ## Systems -Construct synthetic systems at direct arities `n in {2,3,5,6,7,8}`. Each carrier has the -same local state dimension and update family. +Construct synthetic direct and depth-two nested systems at outer arities +`n in {2,3,5,6,7,8}`. Each carrier has the same local state dimension and update family. ## Frozen implementation configuration -Use configuration `arity-recursion-synthetic-v5` exactly. The version changes +Use configuration `arity-recursion-synthetic-v6` exactly. The version changes because the repairs below change result-bearing bytes; no earlier identifier is an alias. @@ -66,7 +66,22 @@ an alias. - initialization family: Glorot-uniform weights and zero biases from `(seed, model_id, restart)` for restarts `0..4`; - selection rule: select the restart with lowest calibration negative log - likelihood before opening sealed test outputs. + likelihood before opening sealed test outputs; an exact tie selects the lowest + restart index. + +### Executable replay authority + +[`tools/replay_reference.py`](tools/replay_reference.py) is the sole normative +authority for result-bearing byte serialization, identifiers, indices, schedules, +transcendentals, reductions, optimizer recurrence, and replay edge cases. Its exact +SHA-256 and generated vector digest are frozen in +[`replay_reference.json`](replay_reference.json); the committed byte-level examples +are [`replay_vectors.json`](replay_vectors.json). Run +`python tools/replay_reference.py verify` from this directory before implementing or +opening any sealed output. A port is admissible only if it reproduces every committed +vector. The prose below states scientific intent and the non-use boundary; it supplies +no alternate result-bearing choice. A conflict or missing executable primitive is +`BLOCKED`, not permission to extend the protocol. ### Synthetic generator @@ -95,12 +110,12 @@ process noise. No intervention may be re-expressed as an undeclared additive input channel. Every result-bearing stochastic draw is deterministic under -`arity-recursion-synthetic-v5`, seed, arity, noise level, stream domain, role, +`arity-recursion-synthetic-v6`, seed, arity, noise level, stream domain, role, index tuple, and digest-block number. The SHA-256 input is the UTF-8 encoding of this whitespace-free JSON array: ```text -["arity-recursion-synthetic-v5",s,n,sigma_milli,domain,role,[k0,...,kp],block] +["arity-recursion-synthetic-v6",s,n,sigma_milli,domain,role,[k0,...,kp],block] ``` Integers use minimal unsigned base-10 notation (`0`, never `00`); `sigma_milli` @@ -122,6 +137,11 @@ uniform or discrete scalar: u_0 standard-normal scalar: sqrt(-2 ln u_0) * cos(2*pi*u_1) ``` +The displayed formula is explanatory. Its only result-bearing evaluation is the +fixed-precision implementation and frozen output vectors in the pinned executable; +language-native `ln`, `cos`, `sqrt`, `pi`, `tanh`, `softplus`, and Gaussian CDF are +not replay authorities. + `u_2`, `u_3`, and the Box-Muller sine result are discarded. A requested scalar must have its own complete index tuple; implementations never take a second output from a digest. `block=0` for every draw except a declared @@ -161,15 +181,20 @@ The stream domains are exactly: ```text coefficients: role, tensor_name, carrier_i, carrier_j, row, column initial_state: episode_id, carrier_i, coordinate -process_noise: episode_id, time, carrier_i, coordinate +process_noise: episode_id, phase, phase_time, carrier_id, coordinate stability_probe: attempt, probe_episode, phase, time, carrier_i, coordinate intervention_plan: episode_id, intervention_class, draw_index -model_initializers: model_id, restart, tensor_name, row, column +model_initializers: model_id, restart, tensor_name, every parameter axis minibatch_order: model_id, restart, update_index, draw_index bootstrap: hypothesis_id, bootstrap_index, draw_index permutation: hypothesis_id, permutation_index, sealed_seed_index ``` +Here `model_id` is exactly the canonical `family_id`; generator roles, complete +parameter-axis ranks, `burn`/`scored` phase-local noise indices, hypothesis ids, +schedule-candidate bytes, and the 12,288-entry minibatch population order are the +registries emitted by the pinned executable. + All index tuples are emitted in lexicographic order and written to the run receipt. Discrete choices use `floor(u*K)` for a stream uniform `u` and a declared option count `K`. Without-replacement schedules use the ordinal/block @@ -207,6 +232,9 @@ and are recorded with their coefficient and probe hashes. If no attempt is accepted, that system is `BLOCKED`; coefficients are never silently dropped, redrawn from an unkeyed stream, or replaced by another seed. +The executable fixes base roles as `direct`, `nested_outer`, and +`nested_leaf/` before appending the attempt suffix. + If any frozen value cannot be implemented exactly, stop before fitting and report `BLOCKED`. @@ -386,15 +414,15 @@ than substituting another cut. For each fitted family, initialize a deterministic mean rollout at the shared true state. Recursively feed back that family's decoded predictive mean; do not -sample predictive noise. Let `x^{0,f}` be its unperturbed mean rollout and -`x^{M,f}` its matched perturbed rollout in mode `M in {full,cut}`. The identity +sample predictive noise. Let `x^{0,M,f}` be its mode-matched unperturbed mean +rollout and `x^{M,f}` its matched perturbed rollout in mode `M in {full,cut}`. The identity map is the observed scalar-coordinate identity for direct systems and the lexicographic leaf-scalar identity for nested systems. Every wrong-arity or wrong-tree family is scored only after the fixed decoder below returns that identity. The recovery horizon set is exactly `{1,2,4,8,16}`. ```text -R_{M,f} = - mean_{h in {1,2,4,8,16}} ||x^{M,f}_{t0+h} - x^{0,f}_{t0+h}||_2^2 +R_{M,f} = - mean_{h in {1,2,4,8,16}} ||x^{M,f}_{t0+h} - x^{0,M,f}_{t0+h}||_2^2 / (N_obs * 0.5^2) Gamma_{s,f} = mean_{sigma, episode}(R_{full,f} - R_{cut,f}) Gamma_{T,f} = mean_{sealed seed s}(Gamma_{s,f}) @@ -461,10 +489,11 @@ mu = tanh(V h + c) ``` with dense `U in R^(32 x D)` and `V in R^(D x 32)`. It has no carrier, -edge, closure-product, or tree parameters. For every family and decoded observed -scalar coordinate `c`, predictive variance is the state-independent diagonal -head `v_c = 1e-6 + softplus(rho_c)`. `rho` is trainable, participates in the -budget, and is decoded by the same copy/average map as the mean. There are no +edge, closure-product, or tree parameters. For every family and model-output +coordinate `c` before the fixed observation decoder, predictive variance is the +state-independent diagonal head `v_c = 1e-6 + softplus(rho_c)`. `rho` is +trainable, participates in the budget, and the resulting positive variance is +decoded by the same copy/average map as the mean. There are no other heads, skip paths, hidden layers, attention terms, or learned intervention embeddings. @@ -501,7 +530,7 @@ Every tensor scalar path is the UTF-8 encoding of this whitespace-free JSON array: ```text -["arity-recursion-synthetic-v5","parameter-mask",family_id,tensor_name,[i0,...,iq]] +["arity-recursion-synthetic-v6","parameter-mask",family_id,tensor_name,[i0,...,iq]] ``` `family_id` and `tensor_name` obey `[a-z0-9_./-]+`. Each concrete family id is @@ -700,7 +729,8 @@ No decision threshold may be changed after any sealed output is opened. ## Decision rule -For each `H_A(n)`, `H_R(n)`, and `H_7`, first average each family outcome within +For each `H_A(n)`, `H_R(n)`, and `H_7`, whose executable identifiers are exactly +`h_a/`, `h_r/`, and `h_7`, first average each family outcome within each sealed seed equally over the three noise levels and the specified held-out episodes. For every required superiority control `c` (which excludes the two isomorphic label-shuffle controls), define candidate-favoring paired values diff --git a/research/from-photons-to-macroverse/README.md b/research/from-photons-to-macroverse/README.md index bcb3075..95377f0 100644 --- a/research/from-photons-to-macroverse/README.md +++ b/research/from-photons-to-macroverse/README.md @@ -22,8 +22,9 @@ The original paper explicitly presents itself as a candidate theory with a metap 2. [`AUDIT.md`](AUDIT.md) - findings, repairs, and unresolved boundaries. 3. [`CLAIM_LEDGER.json`](CLAIM_LEDGER.json) - machine-readable standing per claim. 4. [`PREREGISTRATION.md`](PREREGISTRATION.md) - first permitted synthetic test. -5. [`WORK_GRAPH.json`](WORK_GRAPH.json) - exact source and authority identities. -6. [`source/README.md`](source/README.md) - exact external-source identities and parser-artifact boundary. +5. [`replay_reference.json`](replay_reference.json) - hash pin for the sole executable replay authority and vectors. +6. [`WORK_GRAPH.json`](WORK_GRAPH.json) - exact source and authority identities. +7. [`source/README.md`](source/README.md) - exact external-source identities and parser-artifact boundary. ## What changed @@ -54,6 +55,8 @@ create an owning release identity. Graduation remains a later, explicit event. - Cite exact source and revision hashes from `SOURCE_RECEIPT.json`; do not claim fresh-checkout reproduction of the external originals until their bytes or durable locators are supplied. +- Run `python tools/replay_reference.py verify` from this directory before implementing + the experiment; a port must reproduce `replay_vectors.json` byte-for-byte. - Use names from `SYMBOL_REGISTRY.md` in code and result files. - Emit only `SURVIVED`, `FALSIFIED`, `UNRESOLVED`, `BLOCKED`, or `DEPRECATED` against a frozen claim and control set. - Do not infer human carrier labels after observing a desired result. @@ -63,6 +66,7 @@ create an owning release identity. Graduation remains a later, explicit event. ```bash python -m unittest discover -s research/from-photons-to-macroverse/tests -q +python research/from-photons-to-macroverse/tools/replay_reference.py verify ``` The prior `0.2.0-audited` paper was rendered as a 58-page PDF and every rendered page was visually inspected before the paper text repairs. The current visual render is `hmmm` until rerendered. The repository keeps hash-bound Markdown fragments rather than a generated binary; the assembler validates per-fragment SHA-256 and Git blob identities. diff --git a/research/from-photons-to-macroverse/replay_reference.json b/research/from-photons-to-macroverse/replay_reference.json new file mode 100644 index 0000000..cb59cbb --- /dev/null +++ b/research/from-photons-to-macroverse/replay_reference.json @@ -0,0 +1,13 @@ +{ + "schema": "the-interdependency.arity-recursion-replay-pin", + "version": "1.0.0", + "protocol_id": "arity-recursion-synthetic-v6", + "protocol_version": "0.4.0", + "status": "not-run", + "reference_path": "tools/replay_reference.py", + "reference_sha256": "a4258d2318192477f6e1db6c8b6845104383f43658050e3b598134b67ba2ef70", + "contract_sha256": "3f9ca385203effd349a0c03c279cdaa06f357a928849f1c0afd86e61b18236d2", + "vectors_path": "replay_vectors.json", + "vectors_sha256": "ae286e5dca1740e0a3d12a9db22c49523aea877cfb88876b549766597e0740ea", + "verification_command": "python tools/replay_reference.py verify" +} diff --git a/research/from-photons-to-macroverse/replay_vectors.json b/research/from-photons-to-macroverse/replay_vectors.json new file mode 100644 index 0000000..33990d6 --- /dev/null +++ b/research/from-photons-to-macroverse/replay_vectors.json @@ -0,0 +1,147 @@ +{ + "decision_edges": { + "class5_cdf_f64": "3fe8000000000000", + "cut_baseline_ascii": "[\"unperturbed\",\"cut\",\"direct/7\"]", + "full_baseline_ascii": "[\"unperturbed\",\"full\",\"direct/7\"]", + "label_shuffle_zero": { + "g": 0, + "interval": [ + 0, + 0 + ], + "standing": "equivalent" + }, + "serial_reduction_f64": "0000000000000000" + }, + "identifiers": { + "generator_roles": [ + "direct/attempt/0", + "nested_outer/attempt/0", + "nested_leaf/3/attempt/0" + ], + "hypotheses": [ + "h_a/2", + "h_a/3", + "h_a/5", + "h_a/6", + "h_a/7", + "h_a/8", + "h_r/2", + "h_r/3", + "h_r/5", + "h_r/6", + "h_r/7", + "h_r/8", + "h_7" + ], + "model_id": "direct/7", + "nested_outer_arities": [ + 2, + 3, + 5, + 6, + 7, + 8 + ] + }, + "initializer": { + "complete_path_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"model_initializers\",\"parameter\",[\"direct/7\",0,\"w\",3,5,1,0],0]", + "complete_path_sha256": "a1361ff6b2df7b177d7d59642032cf93800f9d3529c7855ff8ad1af13e521ce0", + "different_carrier_sha256": "678465b036832878696515fa8396a5b437f0e7e5be122ff303f4979157a2e93e", + "distinct": true + }, + "minibatch": { + "draw_key_sha256": "8ef7dab016a249a135928d3b10acd46ed55c84113d9812ac7640defeeccc1884", + "first": [ + "obs/train/000", + 0 + ], + "intervention_start": [ + "int/1/train/000", + 0 + ], + "last": [ + "int/4/train/007", + 127 + ], + "observational_end": [ + "obs/train/063", + 127 + ], + "population_size": 12288, + "selected": [ + "obs/train/053", + 78 + ] + }, + "noise_phase": { + "burn_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"process_noise\",\"direct\",[\"obs/test/000\",\"burn\",0,\"3\",1],0]", + "distinct": true, + "scored_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"process_noise\",\"direct\",[\"obs/test/000\",\"scored\",0,\"3\",1],0]" + }, + "optimizer": { + "adam_step_1_f64": [ + "3fd010624dbcf42a", + "bf89999999999998", + "3ef0624dd2f1aa00", + "3feccccccccccccd", + "3feff7ced916872b" + ], + "tied_restart": 1 + }, + "protocol_id": "arity-recursion-synthetic-v6", + "schedule": { + "class6_episode_0": [ + [ + 1, + 8 + ], + [ + 2, + 8 + ] + ], + "class6_episode_11": [ + [ + 3, + 13 + ], + [ + 4, + 13 + ] + ], + "ordered_candidates_ascii": [ + "[\"summand\",\"product\",\"outer/2\",\"none\"]", + "[\"summand\",\"w\",\"outer/2\",\"outer/0\"]", + "[\"summand\",\"w\",\"outer/2\",\"outer/1\"]" + ] + }, + "schema": "the-interdependency.arity-recursion-replay-vectors", + "stream": { + "bytes_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"coefficients\",\"direct/attempt/0\",[\"w\",3,5,1,0],0]", + "normal_f64": "bfd2e86ee75a1753", + "sha256": "061bd70dc1ffc5f4bb9664eff24fac0c1ec4a53ddfafc5b39b14f3186a29449f", + "uniform_0_f64": "3f986f5c3707ff18", + "words_hex": [ + "061bd70dc1ffc5f4", + "bb9664eff24fac0c", + "1ec4a53ddfafc5b3", + "9b14f3186a29449f" + ] + }, + "transcendentals": { + "cdf_half_f64": "3fe62075e232ac77", + "exp_1_f64": "4005bf0a8b145769", + "log_2_f64": "3fe62e42fefa39ef", + "softplus_half_f64": "3fef2ba37edae032", + "sqrt_2_f64": "3ff6a09e667f3bcd", + "tanh_half_f64": "3fdd9353d7568af3" + }, + "variance": { + "direct_5_count": 10, + "first_path_ascii": "[\"arity-recursion-synthetic-v6\",\"parameter-mask\",\"adjacent/5\",\"rho\",[0]]", + "space": "model output before the fixed observation decoder" + }, + "version": "1.0.0" +} diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index b0739eb..b4f01c7 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -32,6 +32,16 @@ def load_assembler(): return module +def load_replay_reference(): + path = PROJECT / "tools" / "replay_reference.py" + spec = importlib.util.spec_from_file_location("from_photons_replay_reference", path) + if spec is None or spec.loader is None: + raise RuntimeError(f"cannot load replay reference at {path}") + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + class Contracts(unittest.TestCase): def test_original_markdown_is_immutable_and_receipted(self) -> None: receipt = load_json("SOURCE_RECEIPT.json") @@ -187,7 +197,7 @@ def test_preregistration_is_frozen_and_nonclassifying(self) -> None: flat = " ".join(text.split()) for phrase in ("run status: not-run", "human subjects: none", "animal subjects: none", "LLM calls: none", "seeds `32..63`: sealed decision set", "`SURVIVED` requires all of the following", "`FALSIFIED` applies", "`UNRESOLVED` applies", "No outcome classifies a human, animal, model, organization, or physical system as conscious"): self.assertIn(phrase, flat) - for phrase in ("configuration `arity-recursion-synthetic-v5` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam with learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): + for phrase in ("configuration `arity-recursion-synthetic-v6` exactly", "carrier state dimension: `2` real coordinates per carrier", "trainable parameter ceiling: `4096`", "episode length: `128` transitions after a `32`-transition burn-in", "optimizer: Adam with learning rate `0.001`", "Primary decision outcomes", "Guardrail and diagnostic outcomes", "both primary decision outcomes"): self.assertIn(phrase, flat) for phrase in ("Synthetic generator", "SHA-256 input is the UTF-8 encoding", "process_noise", "intervention_plan", "model_initializers", "Discrete choices use `floor(u*K)`", "Matched candidate/control comparisons use the same", "Held-out interventional negative log likelihood is the mean one-step predictive Gaussian NLL", "ordered child-arity vector", "left-rotated child-arity vector", "Embedded primary-outcome certificate", "observed scalar-coordinate identity", "input encoding is the dual map", "Adjacent-arity comparisons are `BLOCKED`"): self.assertIn(phrase, flat) @@ -205,8 +215,8 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: flat = " ".join(text.split()) for phrase in ( - "protocol version: 0.3.3", - '["arity-recursion-synthetic-v5",s,n,sigma_milli,domain,role,[k0,...,kp],block]', + "protocol version: 0.4.0", + '["arity-recursion-synthetic-v6",s,n,sigma_milli,domain,role,[k0,...,kp],block]', "concatenated placeholders or language-native float strings are forbidden", "stability/00` through `stability/15", "If no attempt is accepted, that system is `BLOCKED`", @@ -264,7 +274,7 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: '`P=((1,2),(1,3),(1,4),(2,3),(2,4),(3,4))`', '`r=8+o_c(e)`', "both selected targets for each `e`", - '["arity-recursion-synthetic-v5","parameter-mask",family_id,tensor_name,[i0,...,iq]]', + '["arity-recursion-synthetic-v6","parameter-mask",family_id,tensor_name,[i0,...,iq]]', "The label-shuffle families are the sole exception to independent ranking", "`feed-forward/tree/`", "it is an exact alias of that one `partition-m` control", @@ -285,6 +295,43 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: self.assertNotIn("arity-recursion-synthetic-v2", text) self.assertNotIn("arity-recursion-synthetic-v3", text) self.assertNotIn("arity-recursion-synthetic-v4", text) + self.assertNotIn("arity-recursion-synthetic-v5", text) + + def test_executable_replay_reference_is_hash_pinned(self) -> None: + replay = load_replay_reference() + pin = load_json("replay_reference.json") + observed = replay.verify(PROJECT / "replay_reference.json") + self.assertEqual(observed["protocol_id"], "arity-recursion-synthetic-v6") + self.assertEqual(observed["protocol_version"], "0.4.0") + self.assertEqual(observed["reference_sha256"], pin["reference_sha256"]) + self.assertEqual(observed["contract_sha256"], pin["contract_sha256"]) + self.assertEqual(observed["vectors_sha256"], pin["vectors_sha256"]) + + contract = replay.CONTRACT + self.assertEqual(contract["nested_outer_arities"], [2, 3, 5, 6, 7, 8]) + self.assertEqual(contract["model_id"], "canonical family_id bytes") + self.assertEqual( + contract["process_noise_phases"], {"burn": [0, 31], "scored": [0, 127]} + ) + self.assertEqual(contract["training_population_size"], 12288) + self.assertEqual( + contract["variance_head_space"], + "model output before the fixed observation decoder", + ) + self.assertEqual(contract["restart_tie_break"], "lowest restart index") + self.assertEqual( + contract["recovery_baseline"], + "mode-matched unperturbed rollout x^(0,M,f)", + ) + + vectors = load_json("replay_vectors.json") + self.assertTrue(vectors["initializer"]["distinct"]) + self.assertTrue(vectors["noise_phase"]["distinct"]) + self.assertEqual(vectors["optimizer"]["tied_restart"], 1) + self.assertEqual( + vectors["decision_edges"]["label_shuffle_zero"]["standing"], + "equivalent", + ) def test_human_and_machine_entrypoints_agree(self) -> None: readme = (PROJECT / "README.md").read_text(encoding="utf-8") diff --git a/research/from-photons-to-macroverse/tools/replay_reference.py b/research/from-photons-to-macroverse/tools/replay_reference.py new file mode 100755 index 0000000..d3e90c1 --- /dev/null +++ b/research/from-photons-to-macroverse/tools/replay_reference.py @@ -0,0 +1,748 @@ +#!/usr/bin/env python3 +# === MODULE_BUILD === +# id: arity_recursion_replay_reference +# module_name: replay_reference +# module_kind: experiment +# summary: supplies the sole executable authority for deterministic replay semantics before sealed runs +# owner: The-Interdependency/stack research package +# public_surface: contract, vectors, verify +# internal_surface: canonical streams, schedules, parameter addresses, deterministic math, optimizer recurrence +# auth_boundary: none +# storage_boundary: read +# network_boundary: none +# user_data_boundary: none +# admin_only: false +# tests: research/from-photons-to-macroverse/tests/test_contracts.py +# rollout: pin this file and its vectors in replay_reference.json before any sealed run +# rollback: remove the executable binding while run status remains not-run +# === END MODULE_BUILD === +"""Deterministic replay authority for ``arity-recursion-synthetic-v6``. + +This executable closes the byte-bearing choices that prose cannot safely make +normative. It does not run the scientific experiment and opens no sealed seed. + +Usage guidance:: + + python tools/replay_reference.py contract + python tools/replay_reference.py vectors + python tools/replay_reference.py verify + +``verify`` fails closed unless this file and its generated vectors match +``replay_reference.json``. Run it before implementing or starting a sealed run. +All replayers execute this pinned reference for result-bearing primitives; a +port is admissible only after it reproduces every vector byte-for-byte. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import math +import re +import struct +from decimal import Decimal, ROUND_HALF_EVEN, localcontext +from pathlib import Path +from typing import Iterable, Sequence + + +PROTOCOL_ID = "arity-recursion-synthetic-v6" +PROTOCOL_VERSION = "0.4.0" +DIRECT_ARITIES = (2, 3, 5, 6, 7, 8) +NESTED_ARITIES = DIRECT_ARITIES +NOISE_MILLI = (10, 50, 100) +TOKEN = re.compile(r"^[a-z0-9_./-]+$") +PI = Decimal( + "3.141592653589793238462643383279502884197169399375105820974944592307816406286" +) + +HYPOTHESIS_IDS = tuple( + [f"h_a/{arity}" for arity in DIRECT_ARITIES] + + [f"h_r/{arity}" for arity in NESTED_ARITIES] + + ["h_7"] +) + +GENERATOR_ROLES = { + "direct": "direct", + "nested_outer": "nested_outer", + "nested_leaf": "nested_leaf/{outer}", +} + +# Axis ranks make a scalar address complete. A missing carrier/source/target +# axis is rejected before a model-initializer stream key can be emitted. +PARAMETER_RANKS = { + "direct": {"l": 3, "w": 4, "v": 3, "h": 2, "b": 2, "rho": 1}, + "nested": { + "leaf/l": 4, + "leaf/w": 5, + "leaf/v": 4, + "leaf/h": 3, + "leaf/b": 3, + "outer/w": 4, + "outer/v": 3, + "outer/h": 2, + "rho": 1, + }, + "dense": {"u": 2, "a": 1, "v": 2, "c": 1, "rho": 1}, +} + +CONTRACT = { + "schema": "the-interdependency.arity-recursion-replay-reference", + "version": "1.0.0", + "protocol_id": PROTOCOL_ID, + "protocol_version": PROTOCOL_VERSION, + "status": "not-run", + "authority": "result-bearing deterministic replay semantics", + "prose_role": "scientific intent and non-use boundary; not an alternate byte-level implementation", + "direct_arities": list(DIRECT_ARITIES), + "nested_outer_arities": list(NESTED_ARITIES), + "generator_roles": GENERATOR_ROLES, + "model_id": "canonical family_id bytes", + "hypothesis_ids": list(HYPOTHESIS_IDS), + "process_noise_index": ["episode_id", "phase", "phase_time", "carrier_id", "coordinate"], + "process_noise_phases": {"burn": [0, 31], "scored": [0, 127]}, + "initializer_index": ["model_id", "restart", "tensor_name", "all_parameter_axes_in_row_major_order"], + "training_population_order": [ + "observational episode ordinal", + "intervention class 1..4", + "intervention episode ordinal", + "transition 0..127", + ], + "training_population_size": 12288, + "schedule_candidate_encoding": "canonical compact JSON array, sorted by UTF-8 bytes", + "variance_head_space": "model output before the fixed observation decoder", + "restart_tie_break": "lowest restart index", + "recovery_baseline": "mode-matched unperturbed rollout x^(0,M,f)", + "adam": { + "step_origin": 1, + "learning_rate": "0.001", + "beta_1": "0.9", + "beta_2": "0.999", + "epsilon": "1e-8", + "epsilon_placement": "outside sqrt(v_hat)", + "bias_correction": "after updating m, v, beta_1_power, beta_2_power", + "operation_order": "the adam_step function below, rounded to binary64 after every scalar operation", + }, + "transcendentals": { + "authority": "functions in this exact hash-pinned executable", + "decimal_precision": 96, + "decimal_rounding": "ROUND_HALF_EVEN", + "normal": "fixed-pi decimal Box-Muller cosine lane, then binary64", + "cdf_tail": "exact 0 below -8 and exact 1 above 8", + }, + "label_shuffle_zero_difference": { + "standing": "equivalent", + "g": 0, + "interval": [0, 0], + "superiority_member": False, + }, + "class_5_weights": {"full": "0.5", "cut": "0.5"}, + "class_6_pair_order": [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]], +} + + +def canonical_json(value: object) -> bytes: + """Return the one admitted JSON byte encoding.""" + + return json.dumps(value, ensure_ascii=True, sort_keys=True, separators=(",", ":")).encode("ascii") + + +def _token(value: str, field: str) -> str: + if not TOKEN.fullmatch(value): + raise ValueError(f"{field} is not a canonical token: {value!r}") + return value + + +def _uint(value: int, field: str) -> int: + if isinstance(value, bool) or not isinstance(value, int) or value < 0: + raise ValueError(f"{field} must be an unsigned integer") + return value + + +def stream_bytes( + *, + seed: int, + arity: int, + sigma_milli: int, + domain: str, + role: str, + indices: Sequence[str | int], + block: int = 0, +) -> bytes: + """Serialize one complete counter-stream key.""" + + _uint(seed, "seed") + _uint(arity, "arity") + if sigma_milli not in NOISE_MILLI: + raise ValueError("sigma_milli must be 10, 50, or 100") + _token(domain, "domain") + _token(role, "role") + normalized: list[str | int] = [] + for position, value in enumerate(indices): + if isinstance(value, str): + normalized.append(_token(value, f"indices[{position}]")) + else: + normalized.append(_uint(value, f"indices[{position}]")) + _uint(block, "block") + return canonical_json( + [PROTOCOL_ID, seed, arity, sigma_milli, domain, role, normalized, block] + ) + + +def digest_words(payload: bytes) -> tuple[int, int, int, int]: + digest = hashlib.sha256(payload).digest() + return struct.unpack(">QQQQ", digest) + + +def f64(value: float | Decimal | int) -> float: + return struct.unpack(">d", struct.pack(">d", float(value)))[0] + + +def f64_hex(value: float) -> str: + return struct.pack(">d", f64(value)).hex() + + +def fadd(left: float, right: float) -> float: + return f64(f64(left) + f64(right)) + + +def fsub(left: float, right: float) -> float: + return f64(f64(left) - f64(right)) + + +def fmul(left: float, right: float) -> float: + return f64(f64(left) * f64(right)) + + +def fdiv(left: float, right: float) -> float: + return f64(f64(left) / f64(right)) + + +def open_uniform(payload: bytes, lane: int = 0) -> float: + if lane not in range(4): + raise ValueError("lane must be 0..3") + word = digest_words(payload)[lane] + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + return f64((Decimal(word) + Decimal("0.5")) / (Decimal(2) ** 64)) + + +def _decimal(value: float | Decimal | int | str) -> Decimal: + if isinstance(value, Decimal): + return value + if isinstance(value, float): + return Decimal.from_float(f64(value)) + return Decimal(value) + + +def decimal_cos(value: Decimal) -> Decimal: + """Deterministic cosine with fixed reduction and series termination.""" + + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + two_pi = PI * 2 + x = value % two_pi + if x > PI: + x -= two_pi + term = Decimal(1) + total = Decimal(1) + n = 0 + threshold = Decimal(1).scaleb(-92) + while True: + n += 1 + term = -(term * x * x) / Decimal((2 * n - 1) * (2 * n)) + updated = total + term + if abs(term) < threshold or updated == total: + return +updated + total = updated + + +def deterministic_sqrt(value: float) -> float: + if value < 0: + raise ValueError("sqrt input must be nonnegative") + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + return f64(_decimal(value).sqrt()) + + +def standard_normal(payload: bytes) -> float: + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + u0 = _decimal(open_uniform(payload, 0)) + u1 = _decimal(open_uniform(payload, 1)) + radius = (-Decimal(2) * u0.ln()).sqrt() + return f64(radius * decimal_cos(Decimal(2) * PI * u1)) + + +def deterministic_exp(value: float) -> float: + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + return f64(_decimal(value).exp()) + + +def deterministic_log(value: float) -> float: + if value <= 0: + raise ValueError("log input must be positive") + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + return f64(_decimal(value).ln()) + + +def deterministic_tanh(value: float) -> float: + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + x = _decimal(value) + if x >= 24: + return 1.0 + if x <= -24: + return -1.0 + exp2x = (Decimal(2) * x).exp() + return f64((exp2x - 1) / (exp2x + 1)) + + +def deterministic_softplus(value: float) -> float: + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + x = _decimal(value) + if x > 40: + return f64(x) + return f64((Decimal(1) + x.exp()).ln()) + + +def gaussian_cdf(value: float) -> float: + """Deterministic standard-normal CDF; tails are frozen at +/-8.""" + + if value <= -8.0: + return 0.0 + if value >= 8.0: + return 1.0 + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + x = _decimal(value) / Decimal(2).sqrt() + term = x + total = x + n = 0 + threshold = Decimal(1).scaleb(-92) + while True: + n += 1 + term = -(term * x * x) / Decimal(n) + addend = term / Decimal(2 * n + 1) + updated = total + addend + if abs(addend) < threshold or updated == total: + erf = Decimal(2) * updated / PI.sqrt() + return f64((Decimal(1) + erf) / Decimal(2)) + total = updated + + +def family_kind(family_id: str) -> str: + _token(family_id, "family_id") + if family_id.startswith("capacity-only/"): + return "dense" + if "/tree" in family_id or family_id.startswith( + ("nested/", "wrong-tree/", "outer-cut/", "unnested/") + ): + return "nested" + return "direct" + + +def parameter_path(family_id: str, tensor_name: str, axes: Sequence[int]) -> bytes: + kind = family_kind(family_id) + ranks = PARAMETER_RANKS[kind] + if tensor_name not in ranks: + raise ValueError(f"tensor {tensor_name!r} is not valid for {kind}") + if len(axes) != ranks[tensor_name]: + raise ValueError( + f"{kind}/{tensor_name} requires {ranks[tensor_name]} axes; got {len(axes)}" + ) + normalized = [_uint(axis, "parameter axis") for axis in axes] + return canonical_json([PROTOCOL_ID, "parameter-mask", family_id, tensor_name, normalized]) + + +def initializer_key( + *, + seed: int, + arity: int, + sigma_milli: int, + family_id: str, + restart: int, + tensor_name: str, + axes: Sequence[int], +) -> bytes: + # The actual axes, rather than a local row/column suffix, enter the stream. + parameter_path(family_id, tensor_name, axes) + return stream_bytes( + seed=seed, + arity=arity, + sigma_milli=sigma_milli, + domain="model_initializers", + role="parameter", + indices=[family_id, _uint(restart, "restart"), tensor_name, *axes], + ) + + +def process_noise_key( + *, + seed: int, + arity: int, + sigma_milli: int, + role: str, + episode_id: str, + phase: str, + phase_time: int, + carrier_id: str, + coordinate: int, +) -> bytes: + bounds = {"burn": 31, "scored": 127} + if phase not in bounds or not 0 <= phase_time <= bounds[phase]: + raise ValueError("phase/time is outside the frozen process-noise range") + return stream_bytes( + seed=seed, + arity=arity, + sigma_milli=sigma_milli, + domain="process_noise", + role=role, + indices=[episode_id, phase, phase_time, carrier_id, coordinate], + ) + + +def coefficient_role(system_kind: str, attempt: int, outer: int | None = None) -> str: + _uint(attempt, "attempt") + if system_kind == "direct": + base = GENERATOR_ROLES["direct"] + elif system_kind == "nested_outer": + base = GENERATOR_ROLES["nested_outer"] + elif system_kind == "nested_leaf" and outer is not None: + base = GENERATOR_ROLES["nested_leaf"].format(outer=_uint(outer, "outer")) + else: + raise ValueError("unknown or incomplete generator role") + return f"{base}/attempt/{attempt}" + + +def hypothesis_id(kind: str, arity: int | None = None) -> str: + if kind == "h_7" and arity is None: + return "h_7" + if kind in {"h_a", "h_r"} and arity in DIRECT_ARITIES: + result = f"{kind}/{arity}" + if result in HYPOTHESIS_IDS: + return result + raise ValueError("hypothesis has no canonical identifier") + + +def training_population() -> list[tuple[str, int]]: + episodes = [f"obs/train/{ordinal:03d}" for ordinal in range(64)] + episodes.extend( + f"int/{intervention_class}/train/{ordinal:03d}" + for intervention_class in range(1, 5) + for ordinal in range(8) + ) + return [(episode, transition) for episode in episodes for transition in range(128)] + + +def minibatch_key( + *, seed: int, arity: int, sigma_milli: int, family_id: str, restart: int, + update_index: int, draw_index: int +) -> tuple[bytes, tuple[str, int]]: + population = training_population() + payload = stream_bytes( + seed=seed, + arity=arity, + sigma_milli=sigma_milli, + domain="minibatch_order", + role="transition", + indices=[family_id, restart, update_index, draw_index], + ) + selected = math.floor(open_uniform(payload) * len(population)) + return payload, population[selected] + + +def candidate_bytes(kind: str, *identity: str | int) -> bytes: + shapes = { + "state": 2, # observed identity, coordinate + "edge": 3, # level, target identity, source identity + "carrier": 1, # carrier identity + "summand": 3, # w|product, target identity, source identity|none + "recovery": 2, # observed identity, coordinate + } + if kind not in shapes or len(identity) != shapes[kind]: + raise ValueError("candidate identity does not match its frozen shape") + if kind == "summand" and identity[0] not in {"w", "product"}: + raise ValueError("summand kind must be w or product") + normalized: list[str | int] = [] + for position, value in enumerate(identity): + normalized.append( + _token(value, f"candidate[{position}]") + if isinstance(value, str) + else _uint(value, f"candidate[{position}]") + ) + return canonical_json([kind, *normalized]) + + +def ordered_candidates(candidates: Iterable[bytes]) -> tuple[bytes, ...]: + result = tuple(sorted(candidates)) + if len(result) != len(set(result)): + raise ValueError("schedule candidates must be unique") + return result + + +def class6_component_ordinals(episode_ordinal: int) -> tuple[tuple[int, int], tuple[int, int]]: + if not 0 <= episode_ordinal < 12: + raise ValueError("class-6 episode ordinal must be 0..11") + pairs = tuple(tuple(item) for item in CONTRACT["class_6_pair_order"]) + pair = pairs[episode_ordinal // 2] + assigned = [] + for component in pair: + prior = sum( + component in pairs[previous // 2] for previous in range(episode_ordinal) + ) + assigned.append((component, 8 + prior)) + return assigned[0], assigned[1] + + +def variance_head_paths(family_id: str, model_output_dimension: int) -> tuple[bytes, ...]: + _uint(model_output_dimension, "model_output_dimension") + if model_output_dimension == 0: + raise ValueError("variance head cannot be empty") + return tuple( + parameter_path(family_id, "rho", [coordinate]) + for coordinate in range(model_output_dimension) + ) + + +def select_restart(calibration_nll: Sequence[float]) -> int: + if len(calibration_nll) != 5 or any(not math.isfinite(value) for value in calibration_nll): + raise ValueError("restart selection requires five finite NLL values") + return min(range(5), key=lambda restart: (f64(calibration_nll[restart]), restart)) + + +def serial_sum(values: Iterable[float]) -> float: + total = 0.0 + for value in values: + total = fadd(total, value) + return total + + +def serial_mean(values: Sequence[float]) -> float: + if not values: + raise ValueError("mean cannot be empty") + return fdiv(serial_sum(values), len(values)) + + +def class5_cdf(full: Sequence[bool], cut: Sequence[bool]) -> float: + # Each mode receives half of one episode id's weight. + return fadd(fmul(0.5, serial_mean([float(x) for x in full])), + fmul(0.5, serial_mean([float(x) for x in cut]))) + + +def recovery_baseline_id(mode: str, family_id: str) -> bytes: + if mode not in {"full", "cut"}: + raise ValueError("recovery mode must be full or cut") + _token(family_id, "family_id") + return canonical_json(["unperturbed", mode, family_id]) + + +def label_shuffle_equivalence(differences: Sequence[float]) -> dict[str, object]: + if not differences or any(not math.isfinite(value) or value != 0.0 for value in differences): + return {"standing": "blocked", "g": "hmmm_undefined", "interval": "hmmm_undefined"} + return {"standing": "equivalent", "g": 0, "interval": [0, 0]} + + +def adam_step( + *, parameter: float, gradient: float, first_moment: float, second_moment: float, + beta1_power: float, beta2_power: float +) -> tuple[float, float, float, float, float]: + """One exact scalar Adam recurrence; powers enter at their pre-step values.""" + + beta1 = 0.9 + beta2 = 0.999 + one_minus_beta1 = fsub(1.0, beta1) + one_minus_beta2 = fsub(1.0, beta2) + next_first = fadd(fmul(beta1, first_moment), fmul(one_minus_beta1, gradient)) + gradient_squared = fmul(gradient, gradient) + next_second = fadd( + fmul(beta2, second_moment), fmul(one_minus_beta2, gradient_squared) + ) + next_beta1_power = fmul(beta1_power, beta1) + next_beta2_power = fmul(beta2_power, beta2) + first_hat = fdiv(next_first, fsub(1.0, next_beta1_power)) + second_hat = fdiv(next_second, fsub(1.0, next_beta2_power)) + denominator = fadd(deterministic_sqrt(second_hat), 1e-8) + scaled = fmul(0.001, fdiv(first_hat, denominator)) + next_parameter = fsub(parameter, scaled) + return next_parameter, next_first, next_second, next_beta1_power, next_beta2_power + + +def test_vectors() -> dict[str, object]: + payload = stream_bytes( + seed=32, + arity=7, + sigma_milli=50, + domain="coefficients", + role="direct/attempt/0", + indices=["w", 3, 5, 1, 0], + ) + initializer_a = initializer_key( + seed=32, arity=7, sigma_milli=50, family_id="direct/7", restart=0, + tensor_name="w", axes=[3, 5, 1, 0] + ) + initializer_b = initializer_key( + seed=32, arity=7, sigma_milli=50, family_id="direct/7", restart=0, + tensor_name="w", axes=[4, 5, 1, 0] + ) + burn = process_noise_key( + seed=32, arity=7, sigma_milli=50, role="direct", + episode_id="obs/test/000", phase="burn", phase_time=0, + carrier_id="3", coordinate=1 + ) + scored = process_noise_key( + seed=32, arity=7, sigma_milli=50, role="direct", + episode_id="obs/test/000", phase="scored", phase_time=0, + carrier_id="3", coordinate=1 + ) + candidates = ordered_candidates( + [ + candidate_bytes("summand", "product", "outer/2", "none"), + candidate_bytes("summand", "w", "outer/2", "outer/0"), + candidate_bytes("summand", "w", "outer/2", "outer/1"), + ] + ) + minibatch_payload, minibatch_selected = minibatch_key( + seed=32, arity=7, sigma_milli=50, family_id="direct/7", restart=0, + update_index=0, draw_index=0 + ) + adam = adam_step( + parameter=0.25, + gradient=-0.125, + first_moment=0.0, + second_moment=0.0, + beta1_power=1.0, + beta2_power=1.0, + ) + population = training_population() + return { + "schema": "the-interdependency.arity-recursion-replay-vectors", + "version": "1.0.0", + "protocol_id": PROTOCOL_ID, + "stream": { + "bytes_ascii": payload.decode("ascii"), + "sha256": hashlib.sha256(payload).hexdigest(), + "words_hex": [f"{word:016x}" for word in digest_words(payload)], + "uniform_0_f64": f64_hex(open_uniform(payload, 0)), + "normal_f64": f64_hex(standard_normal(payload)), + }, + "initializer": { + "complete_path_ascii": initializer_a.decode("ascii"), + "complete_path_sha256": hashlib.sha256(initializer_a).hexdigest(), + "different_carrier_sha256": hashlib.sha256(initializer_b).hexdigest(), + "distinct": initializer_a != initializer_b, + }, + "noise_phase": { + "burn_ascii": burn.decode("ascii"), + "scored_ascii": scored.decode("ascii"), + "distinct": burn != scored, + }, + "identifiers": { + "generator_roles": [ + coefficient_role("direct", 0), + coefficient_role("nested_outer", 0), + coefficient_role("nested_leaf", 0, outer=3), + ], + "model_id": "direct/7", + "hypotheses": list(HYPOTHESIS_IDS), + "nested_outer_arities": list(NESTED_ARITIES), + }, + "schedule": { + "ordered_candidates_ascii": [item.decode("ascii") for item in candidates], + "class6_episode_0": class6_component_ordinals(0), + "class6_episode_11": class6_component_ordinals(11), + }, + "minibatch": { + "population_size": len(population), + "first": population[0], + "observational_end": population[64 * 128 - 1], + "intervention_start": population[64 * 128], + "last": population[-1], + "draw_key_sha256": hashlib.sha256(minibatch_payload).hexdigest(), + "selected": minibatch_selected, + }, + "variance": { + "space": CONTRACT["variance_head_space"], + "direct_5_count": len(variance_head_paths("adjacent/5", 10)), + "first_path_ascii": variance_head_paths("adjacent/5", 10)[0].decode("ascii"), + }, + "optimizer": { + "adam_step_1_f64": [f64_hex(value) for value in adam], + "tied_restart": select_restart([1.0, 0.5, 0.5, 0.75, 2.0]), + }, + "transcendentals": { + "sqrt_2_f64": f64_hex(deterministic_sqrt(2.0)), + "exp_1_f64": f64_hex(deterministic_exp(1.0)), + "log_2_f64": f64_hex(deterministic_log(2.0)), + "tanh_half_f64": f64_hex(deterministic_tanh(0.5)), + "softplus_half_f64": f64_hex(deterministic_softplus(0.5)), + "cdf_half_f64": f64_hex(gaussian_cdf(0.5)), + }, + "decision_edges": { + "class5_cdf_f64": f64_hex(class5_cdf([True, False], [True, True])), + "label_shuffle_zero": label_shuffle_equivalence([0.0, -0.0]), + "full_baseline_ascii": recovery_baseline_id("full", "direct/7").decode("ascii"), + "cut_baseline_ascii": recovery_baseline_id("cut", "direct/7").decode("ascii"), + "serial_reduction_f64": f64_hex(serial_sum([1e16, 1.0, -1e16])), + }, + } + + +def file_sha256(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def verify(pin_path: Path) -> dict[str, object]: + pin = json.loads(pin_path.read_text(encoding="utf-8")) + here = Path(__file__).resolve() + vectors = test_vectors() + vectors_path = pin_path.parent / pin["vectors_path"] + stored_vectors = json.loads(vectors_path.read_text(encoding="utf-8")) + if canonical_json(stored_vectors) != canonical_json(vectors): + raise RuntimeError("stored replay vectors differ from executable output") + observed = { + "protocol_id": PROTOCOL_ID, + "protocol_version": PROTOCOL_VERSION, + "reference_sha256": file_sha256(here), + "contract_sha256": hashlib.sha256(canonical_json(CONTRACT)).hexdigest(), + "vectors_sha256": hashlib.sha256(canonical_json(vectors)).hexdigest(), + } + for key, value in observed.items(): + if pin.get(key) != value: + raise RuntimeError(f"replay reference pin mismatch for {key}: {pin.get(key)!r} != {value!r}") + return observed + + +def main(argv: Sequence[str] | None = None) -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("command", choices=("contract", "vectors", "verify")) + parser.add_argument( + "--pin", + type=Path, + default=Path(__file__).resolve().parents[1] / "replay_reference.json", + ) + args = parser.parse_args(argv) + if args.command == "contract": + output: object = CONTRACT + elif args.command == "vectors": + output = test_vectors() + else: + output = verify(args.pin) + print(json.dumps(output, indent=2, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 49a7729feaaaa9629804934fcedd7463c0828663 Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Wed, 9 Sep 2026 12:22:15 -0700 Subject: [PATCH 17/20] fix(research): close replay reference edge cases --- .../PREREGISTRATION.md | 15 +- .../replay_reference.json | 6 +- .../replay_vectors.json | 12 +- .../tests/test_contracts.py | 17 +++ .../tools/replay_reference.py | 141 +++++++++++++++++- 5 files changed, 176 insertions(+), 15 deletions(-) diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index 487ff1f..2835388 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -139,6 +139,8 @@ standard-normal scalar: sqrt(-2 ln u_0) * cos(2*pi*u_1) The displayed formula is explanatory. Its only result-bearing evaluation is the fixed-precision implementation and frozen output vectors in the pinned executable; +when binary64 conversion would round the exact rational to `1.0`, the executable +uses the greatest binary64 value below one, language-native `ln`, `cos`, `sqrt`, `pi`, `tanh`, `softplus`, and Gaussian CDF are not replay authorities. @@ -182,7 +184,7 @@ The stream domains are exactly: coefficients: role, tensor_name, carrier_i, carrier_j, row, column initial_state: episode_id, carrier_i, coordinate process_noise: episode_id, phase, phase_time, carrier_id, coordinate -stability_probe: attempt, probe_episode, phase, time, carrier_i, coordinate +stability_probe: attempt, probe_episode, phase, phase_time, carrier_i, coordinate intervention_plan: episode_id, intervention_class, draw_index model_initializers: model_id, restart, tensor_name, every parameter axis minibatch_order: model_id, restart, update_index, draw_index @@ -221,9 +223,10 @@ For each `(seed, arity, sigma, generator_role)`, coefficient attempt `a` is encoded by appending `/attempt/a` to the coefficient role. Test attempts `a=0,...,255` in order. Each attempt is simulated without intervention for the `32` burn-in transitions from exactly `16` probe initial states named -`stability/00` through `stability/15`; their initial-state keys use phase -`initial` and time `0`, while their noise keys use phase `noise` and the actual -transition index in the `stability_probe` tuple above. Initial probe normals are +`stability/00` through `stability/15`. Both use the `stability_probe` domain and +the executable's complete coefficient-attempt role: initial keys use phase +`initial` and phase time `0`, while noise keys use phase `noise` and the actual +transition index in the tuple above. Initial probe normals are scaled by `0.10` and noise probe normals by `sigma`, exactly as for dataset states and noise. Accept the first attempt for which every coordinate of every probe remains in `[-3,3]` @@ -590,7 +593,9 @@ from the declared full tensor before masking. Treat `v` as a `1 x 2` matrix and `h` as a `2 x 1` matrix for those bounds. Active biases start at zero. For a model fitted at noise level `sigma`, every active `rho` starts at `softplus_inverse(max(sigma^2-1e-6,1e-12))`; inactive entries remain exactly -zero and never receive an optimizer state. Adam arithmetic and all model, +zero and never receive an optimizer state. The pinned executable's +`glorot_initializer_value` and `rho_initializer_value` functions are the sole +value-producing authority for these initializers. Adam arithmetic and all model, adapter, loss, and rollout arithmetic use IEEE-754 binary64. All families minimize the mean training Gaussian NLL over observational and diff --git a/research/from-photons-to-macroverse/replay_reference.json b/research/from-photons-to-macroverse/replay_reference.json index cb59cbb..9194c46 100644 --- a/research/from-photons-to-macroverse/replay_reference.json +++ b/research/from-photons-to-macroverse/replay_reference.json @@ -5,9 +5,9 @@ "protocol_version": "0.4.0", "status": "not-run", "reference_path": "tools/replay_reference.py", - "reference_sha256": "a4258d2318192477f6e1db6c8b6845104383f43658050e3b598134b67ba2ef70", - "contract_sha256": "3f9ca385203effd349a0c03c279cdaa06f357a928849f1c0afd86e61b18236d2", + "reference_sha256": "476c3647025adec07d791347c630569679a72f90be20ac579c4d720bd733d9cf", + "contract_sha256": "fd8091d81785ec9fb90612a8faa8b31596030fd5ef74c2d547a77d0c1d011cc8", "vectors_path": "replay_vectors.json", - "vectors_sha256": "ae286e5dca1740e0a3d12a9db22c49523aea877cfb88876b549766597e0740ea", + "vectors_sha256": "2bc24cd1be2729f34aa709b7398ea28493adcf51bf344a53b20ee8b0c01861b9", "verification_command": "python tools/replay_reference.py verify" } diff --git a/research/from-photons-to-macroverse/replay_vectors.json b/research/from-photons-to-macroverse/replay_vectors.json index 33990d6..97479b5 100644 --- a/research/from-photons-to-macroverse/replay_vectors.json +++ b/research/from-photons-to-macroverse/replay_vectors.json @@ -48,7 +48,10 @@ "complete_path_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"model_initializers\",\"parameter\",[\"direct/7\",0,\"w\",3,5,1,0],0]", "complete_path_sha256": "a1361ff6b2df7b177d7d59642032cf93800f9d3529c7855ff8ad1af13e521ce0", "different_carrier_sha256": "678465b036832878696515fa8396a5b437f0e7e5be122ff303f4979157a2e93e", - "distinct": true + "distinct": true, + "glorot_f64": "3fd4567787472ab1", + "rho_sigma_050_f64": "c017f663be616d7b", + "unnested_kind": "direct" }, "minibatch": { "draw_key_sha256": "8ef7dab016a249a135928d3b10acd46ed55c84113d9812ac7640defeeccc1884", @@ -118,8 +121,15 @@ ] }, "schema": "the-interdependency.arity-recursion-replay-vectors", + "stability_probe": { + "distinct": true, + "initial_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"stability_probe\",\"direct/attempt/0\",[0,\"stability/00\",\"initial\",0,\"3\",1],0]", + "noise_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"stability_probe\",\"direct/attempt/0\",[0,\"stability/00\",\"noise\",0,\"3\",1],0]" + }, "stream": { "bytes_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"coefficients\",\"direct/attempt/0\",[\"w\",3,5,1,0],0]", + "maximum_open_uniform_f64": "3fefffffffffffff", + "minimum_open_uniform_f64": "3be0000000000000", "normal_f64": "bfd2e86ee75a1753", "sha256": "061bd70dc1ffc5f4bb9664eff24fac0c1ec4a53ddfafc5b39b14f3186a29449f", "uniform_0_f64": "3f986f5c3707ff18", diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index b4f01c7..1444549 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -314,6 +314,10 @@ def test_executable_replay_reference_is_hash_pinned(self) -> None: contract["process_noise_phases"], {"burn": [0, 31], "scored": [0, 127]} ) self.assertEqual(contract["training_population_size"], 12288) + self.assertEqual( + contract["stability_probe_index"], + ["attempt", "probe_episode", "phase", "phase_time", "carrier_id", "coordinate"], + ) self.assertEqual( contract["variance_head_space"], "model output before the fixed observation decoder", @@ -326,7 +330,20 @@ def test_executable_replay_reference_is_hash_pinned(self) -> None: vectors = load_json("replay_vectors.json") self.assertTrue(vectors["initializer"]["distinct"]) + self.assertEqual(vectors["initializer"]["unnested_kind"], "direct") + self.assertTrue(vectors["stability_probe"]["distinct"]) self.assertTrue(vectors["noise_phase"]["distinct"]) + self.assertGreater(replay.open_uniform_word(0), 0.0) + self.assertLess(replay.open_uniform_word(2**64 - 1), 1.0) + self.assertEqual( + replay.f64_hex(replay.rho_initializer_value(50)), + vectors["initializer"]["rho_sigma_050_f64"], + ) + self.assertEqual(pin["reference_path"], "tools/replay_reference.py") + self.assertEqual( + pin["verification_command"], + f"python {pin['reference_path']} verify", + ) self.assertEqual(vectors["optimizer"]["tied_restart"], 1) self.assertEqual( vectors["decision_edges"]["label_shuffle_zero"]["standing"], diff --git a/research/from-photons-to-macroverse/tools/replay_reference.py b/research/from-photons-to-macroverse/tools/replay_reference.py index d3e90c1..f503b0c 100755 --- a/research/from-photons-to-macroverse/tools/replay_reference.py +++ b/research/from-photons-to-macroverse/tools/replay_reference.py @@ -55,6 +55,7 @@ PI = Decimal( "3.141592653589793238462643383279502884197169399375105820974944592307816406286" ) +OPEN_UNIT_MAX = float.fromhex("0x1.fffffffffffffp-1") HYPOTHESIS_IDS = tuple( [f"h_a/{arity}" for arity in DIRECT_ARITIES] @@ -101,7 +102,10 @@ "hypothesis_ids": list(HYPOTHESIS_IDS), "process_noise_index": ["episode_id", "phase", "phase_time", "carrier_id", "coordinate"], "process_noise_phases": {"burn": [0, 31], "scored": [0, 127]}, + "stability_probe_index": ["attempt", "probe_episode", "phase", "phase_time", "carrier_id", "coordinate"], "initializer_index": ["model_id", "restart", "tensor_name", "all_parameter_axes_in_row_major_order"], + "initializer_values": "glorot_initializer_value and rho_initializer_value in this executable", + "open_uniform_binary64_top": "0x1.fffffffffffffp-1 when exact rational conversion rounds to 1.0", "training_population_order": [ "observational episode ordinal", "intervention class 1..4", @@ -218,14 +222,22 @@ def fdiv(left: float, right: float) -> float: return f64(f64(left) / f64(right)) -def open_uniform(payload: bytes, lane: int = 0) -> float: - if lane not in range(4): - raise ValueError("lane must be 0..3") - word = digest_words(payload)[lane] +def open_uniform_word(word: int) -> float: + """Map one uint64 word to the nearest admitted open binary64 value.""" + + if isinstance(word, bool) or not isinstance(word, int) or not 0 <= word < 2**64: + raise ValueError("word must be an unsigned 64-bit integer") with localcontext() as ctx: ctx.prec = 96 ctx.rounding = ROUND_HALF_EVEN - return f64((Decimal(word) + Decimal("0.5")) / (Decimal(2) ** 64)) + value = f64((Decimal(word) + Decimal("0.5")) / (Decimal(2) ** 64)) + return OPEN_UNIT_MAX if value >= 1.0 else value + + +def open_uniform(payload: bytes, lane: int = 0) -> float: + if lane not in range(4): + raise ValueError("lane must be 0..3") + return open_uniform_word(digest_words(payload)[lane]) def _decimal(value: float | Decimal | int | str) -> Decimal: @@ -317,6 +329,18 @@ def deterministic_softplus(value: float) -> float: return f64((Decimal(1) + x.exp()).ln()) +def deterministic_softplus_inverse(value: float) -> float: + """Inverse softplus under the reference Decimal-to-binary64 contract.""" + + if value <= 0: + raise ValueError("softplus inverse input must be positive") + with localcontext() as ctx: + ctx.prec = 96 + ctx.rounding = ROUND_HALF_EVEN + x = _decimal(value) + return f64((x.exp() - Decimal(1)).ln()) + + def gaussian_cdf(value: float) -> float: """Deterministic standard-normal CDF; tails are frozen at +/-8.""" @@ -348,7 +372,7 @@ def family_kind(family_id: str) -> str: if family_id.startswith("capacity-only/"): return "dense" if "/tree" in family_id or family_id.startswith( - ("nested/", "wrong-tree/", "outer-cut/", "unnested/") + ("nested/", "wrong-tree/", "outer-cut/") ): return "nested" return "direct" @@ -389,6 +413,46 @@ def initializer_key( ) +def glorot_initializer_value( + *, + seed: int, + arity: int, + sigma_milli: int, + family_id: str, + restart: int, + tensor_name: str, + axes: Sequence[int], + fan_in: int, + fan_out: int, +) -> float: + """Return one exact Glorot-uniform initialized matrix scalar.""" + + if _uint(fan_in, "fan_in") == 0 or _uint(fan_out, "fan_out") == 0: + raise ValueError("Glorot fan sizes must be positive") + payload = initializer_key( + seed=seed, + arity=arity, + sigma_milli=sigma_milli, + family_id=family_id, + restart=restart, + tensor_name=tensor_name, + axes=axes, + ) + bound = deterministic_sqrt(fdiv(6.0, fadd(fan_in, fan_out))) + centered = fsub(fmul(2.0, open_uniform(payload)), 1.0) + return fmul(centered, bound) + + +def rho_initializer_value(sigma_milli: int) -> float: + """Return the exact raw diagonal-variance initializer for one noise level.""" + + if sigma_milli not in NOISE_MILLI: + raise ValueError("sigma_milli must be 10, 50, or 100") + sigma = fdiv(sigma_milli, 1000) + target = max(fsub(fmul(sigma, sigma), 1e-6), 1e-12) + return deterministic_softplus_inverse(target) + + def process_noise_key( *, seed: int, @@ -427,6 +491,42 @@ def coefficient_role(system_kind: str, attempt: int, outer: int | None = None) - return f"{base}/attempt/{attempt}" +def stability_probe_key( + *, + seed: int, + arity: int, + sigma_milli: int, + system_kind: str, + attempt: int, + probe_ordinal: int, + phase: str, + phase_time: int, + carrier_id: str, + coordinate: int, + outer: int | None = None, +) -> bytes: + """Emit one complete stability initial-state or noise scalar key.""" + + if not 0 <= probe_ordinal < 16: + raise ValueError("probe_ordinal must be 0..15") + if phase == "initial": + if phase_time != 0: + raise ValueError("stability initial state exists only at time 0") + elif phase == "noise": + if not 0 <= phase_time <= 31: + raise ValueError("stability noise time must be 0..31") + else: + raise ValueError("stability phase must be initial or noise") + return stream_bytes( + seed=seed, + arity=arity, + sigma_milli=sigma_milli, + domain="stability_probe", + role=coefficient_role(system_kind, attempt, outer), + indices=[attempt, f"stability/{probe_ordinal:02d}", phase, phase_time, carrier_id, coordinate], + ) + + def hypothesis_id(kind: str, arity: int | None = None) -> str: if kind == "h_7" and arity is None: return "h_7" @@ -597,6 +697,18 @@ def test_vectors() -> dict[str, object]: seed=32, arity=7, sigma_milli=50, family_id="direct/7", restart=0, tensor_name="w", axes=[4, 5, 1, 0] ) + glorot_value = glorot_initializer_value( + seed=32, arity=7, sigma_milli=50, family_id="direct/7", restart=0, + tensor_name="w", axes=[3, 5, 1, 0], fan_in=2, fan_out=2 + ) + probe_initial = stability_probe_key( + seed=32, arity=7, sigma_milli=50, system_kind="direct", attempt=0, + probe_ordinal=0, phase="initial", phase_time=0, carrier_id="3", coordinate=1 + ) + probe_noise = stability_probe_key( + seed=32, arity=7, sigma_milli=50, system_kind="direct", attempt=0, + probe_ordinal=0, phase="noise", phase_time=0, carrier_id="3", coordinate=1 + ) burn = process_noise_key( seed=32, arity=7, sigma_milli=50, role="direct", episode_id="obs/test/000", phase="burn", phase_time=0, @@ -637,12 +749,22 @@ def test_vectors() -> dict[str, object]: "words_hex": [f"{word:016x}" for word in digest_words(payload)], "uniform_0_f64": f64_hex(open_uniform(payload, 0)), "normal_f64": f64_hex(standard_normal(payload)), + "minimum_open_uniform_f64": f64_hex(open_uniform_word(0)), + "maximum_open_uniform_f64": f64_hex(open_uniform_word(2**64 - 1)), }, "initializer": { "complete_path_ascii": initializer_a.decode("ascii"), "complete_path_sha256": hashlib.sha256(initializer_a).hexdigest(), "different_carrier_sha256": hashlib.sha256(initializer_b).hexdigest(), "distinct": initializer_a != initializer_b, + "glorot_f64": f64_hex(glorot_value), + "rho_sigma_050_f64": f64_hex(rho_initializer_value(50)), + "unnested_kind": family_kind("unnested/7"), + }, + "stability_probe": { + "initial_ascii": probe_initial.decode("ascii"), + "noise_ascii": probe_noise.decode("ascii"), + "distinct": probe_initial != probe_noise, }, "noise_phase": { "burn_ascii": burn.decode("ascii"), @@ -707,6 +829,13 @@ def file_sha256(path: Path) -> str: def verify(pin_path: Path) -> dict[str, object]: pin = json.loads(pin_path.read_text(encoding="utf-8")) here = Path(__file__).resolve() + declared_path = pin.get("reference_path") + if not isinstance(declared_path, str) or Path(declared_path).is_absolute(): + raise RuntimeError("reference_path must be one relative path") + if (pin_path.parent / declared_path).resolve() != here: + raise RuntimeError("reference_path does not resolve to this executable") + if pin.get("verification_command") != f"python {declared_path} verify": + raise RuntimeError("verification_command does not invoke the pinned executable") vectors = test_vectors() vectors_path = pin_path.parent / pin["vectors_path"] stored_vectors = json.loads(vectors_path.read_text(encoding="utf-8")) From 052ce74ce88d0bb0c8dc58027bd312c4de3c4932 Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Wed, 9 Sep 2026 13:02:06 -0700 Subject: [PATCH 18/20] fix(research): complete replay key authority --- .../PREREGISTRATION.md | 26 +- .../replay_reference.json | 6 +- .../replay_vectors.json | 21 +- .../tests/test_contracts.py | 15 ++ .../tools/replay_reference.py | 236 ++++++++++++++++-- 5 files changed, 272 insertions(+), 32 deletions(-) diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index 2835388..386df82 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -64,7 +64,8 @@ an alias. - optimizer: Adam with learning rate `0.001`, `beta_1=0.9`, `beta_2=0.999`, `epsilon=1e-8`, no weight decay, batch size `64`, and `2000` updates; - initialization family: Glorot-uniform weights and zero biases from - `(seed, model_id, restart)` for restarts `0..4`; + `(seed, model_id, restart)` for restarts `0..4`; the stream's outer + `sigma_milli` is the fixed namespace sentinel `10` at every fitted noise level; - selection rule: select the restart with lowest calibration negative log likelihood before opening sealed test outputs; an exact tie selects the lowest restart index. @@ -177,6 +178,10 @@ role `model_partition/`, tuple list. Target and partition schedules use the displayed `schedule/...` literal; start-time draws use the displayed actual `episode_id`. No mutable draw cursor or alternate tuple supplies the three `intervention_plan` domain fields. +Every target and start-time draw uses role `schedule`; model partitions alone +use the displayed `model_partition/` role. The executable's +`intervention_target_key`, `intervention_start_key`, and +`model_partition_key` functions emit these complete keys. The stream domains are exactly: @@ -196,6 +201,9 @@ Here `model_id` is exactly the canonical `family_id`; generator roles, complete parameter-axis ranks, `burn`/`scored` phase-local noise indices, hypothesis ids, schedule-candidate bytes, and the 12,288-entry minibatch population order are the registries emitted by the pinned executable. +For aggregate bootstrap and permutation keys, the outer fields are always +`seed=0`, hypothesis arity (`7` for `h_7`), `sigma_milli=10`, and role +`sealed_aggregate`; these are namespace sentinels, not another data cell. All index tuples are emitted in lexicographic order and written to the run receipt. Discrete choices use `floor(u*K)` for a stream uniform `u` and a @@ -365,6 +373,11 @@ episode ids, times, targets, and process-noise stream keys. Controls receive the plan through these fixed operators and the adapter below, never through a learned or undeclared `u_t` channel. +The executable's candidate registry is the complete representation: `state` +and `recovery` use a token observed identity plus an unsigned coordinate; +`carrier` uses one token; and `edge` and `summand` use three tokens. Numeric +strings never alias unsigned integers. + ## Outcomes ### Embedded primary-outcome certificate `primary-outcome-v1` @@ -795,6 +808,9 @@ finite-sample `+1` correction, and are never replaced by an exact-enumeration or different resampling method. `alpha=0.05`; direction is determined separately by the sign of `mean(d)`. +`bootstrap_key` and `permutation_key` in the pinned executable are the sole +constructors for those streams, including all outer fields and index bounds. + `SURVIVED` requires all of the following: 1. the candidate beats every required superiority control on both primary decision outcomes; @@ -812,8 +828,12 @@ label-shuffle cell never triggers scientific falsification: exact zero is the required coordinate-invariance result, and any other value is `BLOCKED` as specified above. -`UNRESOLVED` applies when neither rule is met, support/estimator assumptions fail, an -implementation discrepancy remains, or a required comparison cannot be equalized. +`BLOCKED` has precedence over every scientific terminal rule. Evaluate the stop +conditions and every earlier `BLOCKED` clause first; a blocked cell or hypothesis +cannot be relabeled `UNRESOLVED`, `SURVIVED`, or `FALSIFIED`. +`UNRESOLVED` applies only after no `BLOCKED` condition holds and neither +scientific decision rule is met, or when a specified support/estimator assumption +fails without violating a pre-fit generation or equalization requirement. The heptadic claim is not allowed to inherit `SURVIVED` from another arity. Each arity and recursion claim receives its own result. diff --git a/research/from-photons-to-macroverse/replay_reference.json b/research/from-photons-to-macroverse/replay_reference.json index 9194c46..04723a6 100644 --- a/research/from-photons-to-macroverse/replay_reference.json +++ b/research/from-photons-to-macroverse/replay_reference.json @@ -5,9 +5,9 @@ "protocol_version": "0.4.0", "status": "not-run", "reference_path": "tools/replay_reference.py", - "reference_sha256": "476c3647025adec07d791347c630569679a72f90be20ac579c4d720bd733d9cf", - "contract_sha256": "fd8091d81785ec9fb90612a8faa8b31596030fd5ef74c2d547a77d0c1d011cc8", + "reference_sha256": "67a17f0c33b28765e0189505ab6fc6f18a10530008211bf4e7abdcf9e2744fe9", + "contract_sha256": "12f1a245de8bda5efe1b04547f54ca4da961287f6f48fd3becbee91ce07c799e", "vectors_path": "replay_vectors.json", - "vectors_sha256": "2bc24cd1be2729f34aa709b7398ea28493adcf51bf344a53b20ee8b0c01861b9", + "vectors_sha256": "053dd257e90d324ce022444d3a9d1d2fcd468d411533704a711f6405e0db3c33", "verification_command": "python tools/replay_reference.py verify" } diff --git a/research/from-photons-to-macroverse/replay_vectors.json b/research/from-photons-to-macroverse/replay_vectors.json index 97479b5..61096d8 100644 --- a/research/from-photons-to-macroverse/replay_vectors.json +++ b/research/from-photons-to-macroverse/replay_vectors.json @@ -44,12 +44,15 @@ 8 ] }, + "initial_state": { + "episode_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"initial_state\",\"direct/attempt/0\",[\"obs/test/000\",\"3\",1],0]" + }, "initializer": { - "complete_path_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"model_initializers\",\"parameter\",[\"direct/7\",0,\"w\",3,5,1,0],0]", - "complete_path_sha256": "a1361ff6b2df7b177d7d59642032cf93800f9d3529c7855ff8ad1af13e521ce0", - "different_carrier_sha256": "678465b036832878696515fa8396a5b437f0e7e5be122ff303f4979157a2e93e", + "complete_path_ascii": "[\"arity-recursion-synthetic-v6\",32,7,10,\"model_initializers\",\"parameter\",[\"direct/7\",0,\"w\",3,5,1,0],0]", + "complete_path_sha256": "8a22c60ee757f8f1932fc97ac0392faa1b6ab9e9f0253914a3e2e47e2b1c9b3b", + "different_carrier_sha256": "a2351e5385cf64f84804fb15dafeba7ee9946ca77e9cc3f85d155a9fa203008a", "distinct": true, - "glorot_f64": "3fd4567787472ab1", + "glorot_f64": "3fb8d3df191ea54d", "rho_sigma_050_f64": "c017f663be616d7b", "unnested_kind": "direct" }, @@ -93,6 +96,10 @@ "tied_restart": 1 }, "protocol_id": "arity-recursion-synthetic-v6", + "resampling": { + "bootstrap_ascii": "[\"arity-recursion-synthetic-v6\",0,7,10,\"bootstrap\",\"sealed_aggregate\",[\"h_7\",0,0],0]", + "permutation_ascii": "[\"arity-recursion-synthetic-v6\",0,7,10,\"permutation\",\"sealed_aggregate\",[\"h_7\",0,0],0]" + }, "schedule": { "class6_episode_0": [ [ @@ -118,7 +125,11 @@ "[\"summand\",\"product\",\"outer/2\",\"none\"]", "[\"summand\",\"w\",\"outer/2\",\"outer/0\"]", "[\"summand\",\"w\",\"outer/2\",\"outer/1\"]" - ] + ], + "partition_key_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"model_partition/arbitrary/7\",[\"schedule/model_partition\",0,0],0]", + "start_key_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"schedule\",[\"int/1/test/000\",1,\"start_time\"],0]", + "state_candidate_ascii": "[\"state\",\"carrier/0\",0]", + "target_key_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"schedule\",[\"schedule/test/state_target\",1,0],0]" }, "schema": "the-interdependency.arity-recursion-replay-vectors", "stability_probe": { diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index 1444549..a208091 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -314,6 +314,17 @@ def test_executable_replay_reference_is_hash_pinned(self) -> None: contract["process_noise_phases"], {"burn": [0, 31], "scored": [0, 127]} ) self.assertEqual(contract["training_population_size"], 12288) + self.assertEqual(contract["initializer_sigma_namespace"], 10) + self.assertEqual(contract["intervention_plan_role"], "schedule") + self.assertEqual( + contract["resampling_outer_fields"], + { + "seed": 0, + "sigma_milli": 10, + "role": "sealed_aggregate", + "arity": "arity suffix in hypothesis_id; h_7 uses 7", + }, + ) self.assertEqual( contract["stability_probe_index"], ["attempt", "probe_episode", "phase", "phase_time", "carrier_id", "coordinate"], @@ -332,6 +343,10 @@ def test_executable_replay_reference_is_hash_pinned(self) -> None: self.assertTrue(vectors["initializer"]["distinct"]) self.assertEqual(vectors["initializer"]["unnested_kind"], "direct") self.assertTrue(vectors["stability_probe"]["distinct"]) + self.assertIn('"intervention_plan","schedule"', vectors["schedule"]["target_key_ascii"]) + self.assertIn('"bootstrap","sealed_aggregate"', vectors["resampling"]["bootstrap_ascii"]) + with self.assertRaises(ValueError): + replay.candidate_bytes("state", 0, 0) self.assertTrue(vectors["noise_phase"]["distinct"]) self.assertGreater(replay.open_uniform_word(0), 0.0) self.assertLess(replay.open_uniform_word(2**64 - 1), 1.0) diff --git a/research/from-photons-to-macroverse/tools/replay_reference.py b/research/from-photons-to-macroverse/tools/replay_reference.py index f503b0c..ee4f0eb 100755 --- a/research/from-photons-to-macroverse/tools/replay_reference.py +++ b/research/from-photons-to-macroverse/tools/replay_reference.py @@ -51,6 +51,7 @@ DIRECT_ARITIES = (2, 3, 5, 6, 7, 8) NESTED_ARITIES = DIRECT_ARITIES NOISE_MILLI = (10, 50, 100) +NAMESPACE_SIGMA_MILLI = 10 TOKEN = re.compile(r"^[a-z0-9_./-]+$") PI = Decimal( "3.141592653589793238462643383279502884197169399375105820974944592307816406286" @@ -87,6 +88,22 @@ "dense": {"u": 2, "a": 1, "v": 2, "c": 1, "rho": 1}, } +CANDIDATE_TYPES = { + "state": ("token", "uint"), + "edge": ("token", "token", "token"), + "carrier": ("token",), + "summand": ("token", "token", "token"), + "recovery": ("token", "uint"), +} + +INTERVENTION_TARGET_KINDS = { + 1: "state_target", + 2: "edge_target", + 3: "carrier_target", + 4: "summand_target", + 5: "recovery_target", +} + CONTRACT = { "schema": "the-interdependency.arity-recursion-replay-reference", "version": "1.0.0", @@ -105,7 +122,16 @@ "stability_probe_index": ["attempt", "probe_episode", "phase", "phase_time", "carrier_id", "coordinate"], "initializer_index": ["model_id", "restart", "tensor_name", "all_parameter_axes_in_row_major_order"], "initializer_values": "glorot_initializer_value and rho_initializer_value in this executable", + "initializer_sigma_namespace": NAMESPACE_SIGMA_MILLI, "open_uniform_binary64_top": "0x1.fffffffffffffp-1 when exact rational conversion rounds to 1.0", + "intervention_plan_role": "schedule", + "resampling_outer_fields": { + "seed": 0, + "sigma_milli": NAMESPACE_SIGMA_MILLI, + "role": "sealed_aggregate", + "arity": "arity suffix in hypothesis_id; h_7 uses 7", + }, + "candidate_types": CANDIDATE_TYPES, "training_population_order": [ "observational episode ordinal", "intervention class 1..4", @@ -395,7 +421,6 @@ def initializer_key( *, seed: int, arity: int, - sigma_milli: int, family_id: str, restart: int, tensor_name: str, @@ -406,7 +431,7 @@ def initializer_key( return stream_bytes( seed=seed, arity=arity, - sigma_milli=sigma_milli, + sigma_milli=NAMESPACE_SIGMA_MILLI, domain="model_initializers", role="parameter", indices=[family_id, _uint(restart, "restart"), tensor_name, *axes], @@ -417,7 +442,6 @@ def glorot_initializer_value( *, seed: int, arity: int, - sigma_milli: int, family_id: str, restart: int, tensor_name: str, @@ -432,7 +456,6 @@ def glorot_initializer_value( payload = initializer_key( seed=seed, arity=arity, - sigma_milli=sigma_milli, family_id=family_id, restart=restart, tensor_name=tensor_name, @@ -527,6 +550,30 @@ def stability_probe_key( ) +def initial_state_key( + *, + seed: int, + arity: int, + sigma_milli: int, + system_kind: str, + attempt: int, + episode_id: str, + carrier_id: str, + coordinate: int, + outer: int | None = None, +) -> bytes: + """Emit one complete accepted-generator episode initial-state key.""" + + return stream_bytes( + seed=seed, + arity=arity, + sigma_milli=sigma_milli, + domain="initial_state", + role=coefficient_role(system_kind, attempt, outer), + indices=[episode_id, carrier_id, coordinate], + ) + + def hypothesis_id(kind: str, arity: int | None = None) -> str: if kind == "h_7" and arity is None: return "h_7" @@ -537,6 +584,57 @@ def hypothesis_id(kind: str, arity: int | None = None) -> str: raise ValueError("hypothesis has no canonical identifier") +def _hypothesis_arity(canonical_hypothesis_id: str) -> int: + if canonical_hypothesis_id == "h_7": + return 7 + try: + kind, arity_text = canonical_hypothesis_id.split("/", 1) + arity = int(arity_text) + except (ValueError, TypeError): + raise ValueError("hypothesis has no canonical arity") from None + if hypothesis_id(kind, arity) != canonical_hypothesis_id: + raise ValueError("hypothesis has no canonical arity") + return arity + + +def bootstrap_key( + canonical_hypothesis_id: str, + bootstrap_index: int, + draw_index: int, +) -> bytes: + """Emit one sealed-aggregate bootstrap draw key.""" + + if not 0 <= bootstrap_index < 65536 or not 0 <= draw_index < 32: + raise ValueError("bootstrap indices are outside the frozen range") + return stream_bytes( + seed=0, + arity=_hypothesis_arity(canonical_hypothesis_id), + sigma_milli=NAMESPACE_SIGMA_MILLI, + domain="bootstrap", + role="sealed_aggregate", + indices=[canonical_hypothesis_id, bootstrap_index, draw_index], + ) + + +def permutation_key( + canonical_hypothesis_id: str, + permutation_index: int, + sealed_seed_index: int, +) -> bytes: + """Emit one sealed-aggregate sign-permutation key.""" + + if not 0 <= permutation_index < 65536 or not 0 <= sealed_seed_index < 32: + raise ValueError("permutation indices are outside the frozen range") + return stream_bytes( + seed=0, + arity=_hypothesis_arity(canonical_hypothesis_id), + sigma_milli=NAMESPACE_SIGMA_MILLI, + domain="permutation", + role="sealed_aggregate", + indices=[canonical_hypothesis_id, permutation_index, sealed_seed_index], + ) + + def training_population() -> list[tuple[str, int]]: episodes = [f"obs/train/{ordinal:03d}" for ordinal in range(64)] episodes.extend( @@ -565,24 +663,19 @@ def minibatch_key( def candidate_bytes(kind: str, *identity: str | int) -> bytes: - shapes = { - "state": 2, # observed identity, coordinate - "edge": 3, # level, target identity, source identity - "carrier": 1, # carrier identity - "summand": 3, # w|product, target identity, source identity|none - "recovery": 2, # observed identity, coordinate - } - if kind not in shapes or len(identity) != shapes[kind]: + field_types = CANDIDATE_TYPES.get(kind) + if field_types is None or len(identity) != len(field_types): raise ValueError("candidate identity does not match its frozen shape") if kind == "summand" and identity[0] not in {"w", "product"}: raise ValueError("summand kind must be w or product") normalized: list[str | int] = [] - for position, value in enumerate(identity): - normalized.append( - _token(value, f"candidate[{position}]") - if isinstance(value, str) - else _uint(value, f"candidate[{position}]") - ) + for position, (value, field_type) in enumerate(zip(identity, field_types)): + if field_type == "token" and isinstance(value, str): + normalized.append(_token(value, f"candidate[{position}]")) + elif field_type == "uint" and isinstance(value, int) and not isinstance(value, bool): + normalized.append(_uint(value, f"candidate[{position}]")) + else: + raise ValueError(f"candidate[{position}] must be a {field_type}") return canonical_json([kind, *normalized]) @@ -593,6 +686,79 @@ def ordered_candidates(candidates: Iterable[bytes]) -> tuple[bytes, ...]: return result +def intervention_target_key( + *, + seed: int, + arity: int, + sigma_milli: int, + split: str, + intervention_class: int, + candidate_index: int, + block: int = 0, +) -> bytes: + """Emit a target-ranking key with the one admitted schedule role.""" + + if split not in {"train", "cal", "test"}: + raise ValueError("intervention split must be train, cal, or test") + choice_kind = INTERVENTION_TARGET_KINDS.get(intervention_class) + if choice_kind is None: + raise ValueError("target intervention class must be 1..5") + return stream_bytes( + seed=seed, + arity=arity, + sigma_milli=sigma_milli, + domain="intervention_plan", + role="schedule", + indices=[f"schedule/{split}/{choice_kind}", intervention_class, candidate_index], + block=block, + ) + + +def intervention_start_key( + *, + seed: int, + arity: int, + sigma_milli: int, + episode_id: str, + intervention_class: int, +) -> bytes: + """Emit a start-time key for class 1..4 or composed class 6.""" + + if intervention_class not in {1, 2, 3, 4, 6}: + raise ValueError("start-time intervention class must be 1..4 or 6") + return stream_bytes( + seed=seed, + arity=arity, + sigma_milli=sigma_milli, + domain="intervention_plan", + role="schedule", + indices=[episode_id, intervention_class, "start_time"], + ) + + +def model_partition_key( + *, + seed: int, + arity: int, + sigma_milli: int, + family_id: str, + candidate_index: int, + block: int = 0, +) -> bytes: + """Emit one model-partition ranking key.""" + + _token(family_id, "family_id") + return stream_bytes( + seed=seed, + arity=arity, + sigma_milli=sigma_milli, + domain="intervention_plan", + role=f"model_partition/{family_id}", + indices=["schedule/model_partition", 0, candidate_index], + block=block, + ) + + def class6_component_ordinals(episode_ordinal: int) -> tuple[tuple[int, int], tuple[int, int]]: if not 0 <= episode_ordinal < 12: raise ValueError("class-6 episode ordinal must be 0..11") @@ -690,15 +856,15 @@ def test_vectors() -> dict[str, object]: indices=["w", 3, 5, 1, 0], ) initializer_a = initializer_key( - seed=32, arity=7, sigma_milli=50, family_id="direct/7", restart=0, + seed=32, arity=7, family_id="direct/7", restart=0, tensor_name="w", axes=[3, 5, 1, 0] ) initializer_b = initializer_key( - seed=32, arity=7, sigma_milli=50, family_id="direct/7", restart=0, + seed=32, arity=7, family_id="direct/7", restart=0, tensor_name="w", axes=[4, 5, 1, 0] ) glorot_value = glorot_initializer_value( - seed=32, arity=7, sigma_milli=50, family_id="direct/7", restart=0, + seed=32, arity=7, family_id="direct/7", restart=0, tensor_name="w", axes=[3, 5, 1, 0], fan_in=2, fan_out=2 ) probe_initial = stability_probe_key( @@ -709,6 +875,10 @@ def test_vectors() -> dict[str, object]: seed=32, arity=7, sigma_milli=50, system_kind="direct", attempt=0, probe_ordinal=0, phase="noise", phase_time=0, carrier_id="3", coordinate=1 ) + episode_initial = initial_state_key( + seed=32, arity=7, sigma_milli=50, system_kind="direct", attempt=0, + episode_id="obs/test/000", carrier_id="3", coordinate=1 + ) burn = process_noise_key( seed=32, arity=7, sigma_milli=50, role="direct", episode_id="obs/test/000", phase="burn", phase_time=0, @@ -726,6 +896,21 @@ def test_vectors() -> dict[str, object]: candidate_bytes("summand", "w", "outer/2", "outer/1"), ] ) + state_candidate = candidate_bytes("state", "carrier/0", 0) + target_key = intervention_target_key( + seed=32, arity=7, sigma_milli=50, split="test", + intervention_class=1, candidate_index=0 + ) + start_key = intervention_start_key( + seed=32, arity=7, sigma_milli=50, + episode_id="int/1/test/000", intervention_class=1 + ) + partition_key = model_partition_key( + seed=32, arity=7, sigma_milli=50, + family_id="arbitrary/7", candidate_index=0 + ) + bootstrap = bootstrap_key("h_7", 0, 0) + permutation = permutation_key("h_7", 0, 0) minibatch_payload, minibatch_selected = minibatch_key( seed=32, arity=7, sigma_milli=50, family_id="direct/7", restart=0, update_index=0, draw_index=0 @@ -766,6 +951,7 @@ def test_vectors() -> dict[str, object]: "noise_ascii": probe_noise.decode("ascii"), "distinct": probe_initial != probe_noise, }, + "initial_state": {"episode_ascii": episode_initial.decode("ascii")}, "noise_phase": { "burn_ascii": burn.decode("ascii"), "scored_ascii": scored.decode("ascii"), @@ -783,8 +969,16 @@ def test_vectors() -> dict[str, object]: }, "schedule": { "ordered_candidates_ascii": [item.decode("ascii") for item in candidates], + "state_candidate_ascii": state_candidate.decode("ascii"), "class6_episode_0": class6_component_ordinals(0), "class6_episode_11": class6_component_ordinals(11), + "target_key_ascii": target_key.decode("ascii"), + "start_key_ascii": start_key.decode("ascii"), + "partition_key_ascii": partition_key.decode("ascii"), + }, + "resampling": { + "bootstrap_ascii": bootstrap.decode("ascii"), + "permutation_ascii": permutation.decode("ascii"), }, "minibatch": { "population_size": len(population), From 8c8a73cd44e631b343c1a99bc8f9da5bbde9166a Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Wed, 9 Sep 2026 13:52:58 -0700 Subject: [PATCH 19/20] fix(research): seal training replay semantics --- .../PREREGISTRATION.md | 35 +- .../replay_reference.json | 8 +- .../replay_vectors.json | 81 ++++- .../tests/test_contracts.py | 17 +- .../tools/replay_reference.py | 313 +++++++++++++++++- 5 files changed, 417 insertions(+), 37 deletions(-) diff --git a/research/from-photons-to-macroverse/PREREGISTRATION.md b/research/from-photons-to-macroverse/PREREGISTRATION.md index 386df82..6214f4e 100644 --- a/research/from-photons-to-macroverse/PREREGISTRATION.md +++ b/research/from-photons-to-macroverse/PREREGISTRATION.md @@ -1,7 +1,7 @@ # Preregistration: matched arity and recursion discrimination ```text -protocol version: 0.4.0 +protocol version: 0.5.0 run status: not-run human subjects: none animal subjects: none @@ -127,7 +127,7 @@ the domain-field order below. The complete tuple, including `block`, is the counter-stream key; concatenated placeholders or language-native float strings are forbidden. Every listed field is present; use the literal token `"none"` for an inapplicable field. A nested carrier or tensor component is one token -such as `outer/3/leaf/2`, not an implementation-native tuple string. +such as `outer/2/leaf/2`, not an implementation-native tuple string. Each digest is split in order into four big-endian unsigned 64-bit words and each word `w_k` maps to the open-unit uniform `u_k=(w_k+0.5)/2^64`. One scalar @@ -364,7 +364,7 @@ whose indices are `start,...,start+15`: - a modulation multiplies the selected `W` summand or the selected all-source product term, named in the plan, by exactly `0.5` before `tanh`. -Nested plans name `outer/i` or `leaf/i/l` targets and apply the explicit nested +Nested plans name `outer/i` or `outer/i/leaf/l` targets and apply the explicit nested equation above. Class `5` uses the primary-outcome certificate below. Class `6` composes the two corresponding operators in numeric class order; masks and modulators act before `tanh`, then additive state, process noise, and ablation @@ -373,10 +373,13 @@ episode ids, times, targets, and process-noise stream keys. Controls receive the plan through these fixed operators and the adapter below, never through a learned or undeclared `u_t` channel. -The executable's candidate registry is the complete representation: `state` -and `recovery` use a token observed identity plus an unsigned coordinate; -`carrier` uses one token; and `edge` and `summand` use three tokens. Numeric -strings never alias unsigned integers. +The executable's `canonical_candidate_lists(system_kind,arity)` output is the +complete candidate vocabulary and list for every schedule. `state` and +`recovery` use a canonical observed identity plus an unsigned coordinate; +`carrier` uses a canonical direct carrier or outer-carrier identity; and `edge` +and `summand` use the exact term, target, and source identities emitted there. +Numeric strings never alias unsigned integers, and no other token spelling is +admissible. ## Outcomes @@ -593,8 +596,11 @@ serial left fold from `1.0` in that same order. Loss terms within a minibatch ar left-folded by `draw_index`, then transition index, then lexicographic original observed scalar identity. Recovery squared coordinates and every reported mean use the corresponding lexicographic original-identity order and a serial left -fold before the single final division. Reverse-mode gradients are derivatives -of this ordered scalar program and accumulate contributions in the same order. +fold before the single final division. Reverse-mode gradients use only the +pinned executable's binary multiply/divide, serial sum/product, `tanh`, +`softplus`, variance-head, and Gaussian-NLL adjoint functions and accumulate +contributions in the same order. `variance_head_value` and +`gaussian_nll_term` are the sole scalar variance and NLL forward recurrences. Reassociation, tree or parallel reductions, model-position ordering, and fused multiply-add contraction are forbidden. These rules apply before fitting, during every optimizer update, and during rollout and scoring, so a carrier @@ -665,10 +671,13 @@ carrier `a` receives the arithmetic mean of all observed carriers with `q_{m,n}(i)=a`; for `m > n`, control carrier `a` receives observed carrier `r_{m,n}(a)`. Define the model-carrier image of observed carrier `i` as `A_{m,n}(i)={q_{m,n}(i)}` for `mn`. Carrier-targeted additive interventions are encoded by the same -map before dynamics: merged controls receive the arithmetic mean of all -interventions in their bucket, and split controls receive the same intervention -on every split carrier assigned to the targeted observed carrier. Edge cuts with +`A_{m,n}(i)={a:r_{m,n}(a)=i}` for `m>n`. Carrier-targeted additive interventions +use the same map only to identify model output coordinates: merged controls +receive the arithmetic mean of all additions in their bucket, and split controls +receive the same addition on every split carrier assigned to the targeted +observed carrier. Every resulting addition is applied after that model carrier's +deterministic `tanh` transition and before process noise; it is never applied to +the input encoding or before dynamics. Edge cuts with endpoints collapsed into one merged carrier become recorded self-edge no-ops; all other cuts map to every nonself model edge in `A_{m,n}(source) x A_{m,n}(target)` and zero both those `W` summands and every diff --git a/research/from-photons-to-macroverse/replay_reference.json b/research/from-photons-to-macroverse/replay_reference.json index 04723a6..759d2e5 100644 --- a/research/from-photons-to-macroverse/replay_reference.json +++ b/research/from-photons-to-macroverse/replay_reference.json @@ -2,12 +2,12 @@ "schema": "the-interdependency.arity-recursion-replay-pin", "version": "1.0.0", "protocol_id": "arity-recursion-synthetic-v6", - "protocol_version": "0.4.0", + "protocol_version": "0.5.0", "status": "not-run", "reference_path": "tools/replay_reference.py", - "reference_sha256": "67a17f0c33b28765e0189505ab6fc6f18a10530008211bf4e7abdcf9e2744fe9", - "contract_sha256": "12f1a245de8bda5efe1b04547f54ca4da961287f6f48fd3becbee91ce07c799e", + "reference_sha256": "3b3c6babd2340eb5d08aadbbfa3b2c3b21af75683210957c3730e72a52a70460", + "contract_sha256": "8584dd017603e0b5f4b6be7c6756e348b3f3255bcbfbe42f0294ea2e993b6ffe", "vectors_path": "replay_vectors.json", - "vectors_sha256": "053dd257e90d324ce022444d3a9d1d2fcd468d411533704a711f6405e0db3c33", + "vectors_sha256": "87ac49b3baa50430760ab0702ae8f13a374d3e0baac7e1283122767f6386d4b4", "verification_command": "python tools/replay_reference.py verify" } diff --git a/research/from-photons-to-macroverse/replay_vectors.json b/research/from-photons-to-macroverse/replay_vectors.json index 61096d8..e85e1d1 100644 --- a/research/from-photons-to-macroverse/replay_vectors.json +++ b/research/from-photons-to-macroverse/replay_vectors.json @@ -1,4 +1,80 @@ { + "adjoints": { + "binary_divide_f64": [ + "c004000000000000", + "bff4000000000000" + ], + "binary_multiply_f64": [ + "bfe4000000000000", + "3fd4000000000000" + ], + "nll_adjoint_f64": [ + "3ff4000000000000", + "bff4000000000000", + "3fe4000000000000" + ], + "nll_term_f64": "3fea50d048e7a1bd", + "serial_product_f64": [ + "bfde000000000000", + "3fce000000000000", + "bfc4000000000000" + ], + "serial_sum_f64": [ + "3ff4000000000000", + "3ff4000000000000", + "3ff4000000000000" + ], + "softplus_f64": "3fde34086befd717", + "tanh_f64": "3fef75398b8c1479", + "variance_adjoint_f64": "3fde34086befd717", + "variance_value_f64": "3fde574b2f73a891" + }, + "candidate_registry": { + "direct": { + "carrier": { + "count": 7, + "sha256": "41db2dc9fa4b248d4968b6534dab975f2f31971093bb4a8b4b992767c715c02d" + }, + "edge": { + "count": 42, + "sha256": "97f5a7c6a45b3d0c33091378a2b1bb7ffe6357d9cce5b2a810e51e79350c9a66" + }, + "recovery": { + "count": 14, + "sha256": "b409688fa35f800e613a36ecb875012d15ffdf20709cc6405937d1088994b3f2" + }, + "state": { + "count": 14, + "sha256": "13c084ebbeef451cf9c1040b8ff03e356bf7b8d24c62264e2e48670cc3e62e49" + }, + "summand": { + "count": 49, + "sha256": "884b3477385b2a96634765a9f995a360a0f9a1d0007a61a17e9bdfb95e45d936" + } + }, + "nested": { + "carrier": { + "count": 7, + "sha256": "daa699960d578300e3c8cf88fad39b68226ba8bfd67445d3384efc0f1a77fd27" + }, + "edge": { + "count": 100, + "sha256": "4d581cee3e1b91c31eca8cab8d873a7c96d253902eec5395d0f26899a4c92c9d" + }, + "recovery": { + "count": 44, + "sha256": "e9a6c3e0b3386e02916a9718fa028a183495d8bb8e532478b958c6dcb201f7db" + }, + "state": { + "count": 44, + "sha256": "9b1c74e751fc629d74c3ef68b7395e9f786401a641d0781a8ac1c999c22c59c8" + }, + "summand": { + "count": 129, + "sha256": "634e63f58287caf2b4a24faff0a6cd05764549627a3caa735c4c1c3e4964046a" + } + } + }, "decision_edges": { "class5_cdf_f64": "3fe8000000000000", "cut_baseline_ascii": "[\"unperturbed\",\"cut\",\"direct/7\"]", @@ -121,11 +197,6 @@ 13 ] ], - "ordered_candidates_ascii": [ - "[\"summand\",\"product\",\"outer/2\",\"none\"]", - "[\"summand\",\"w\",\"outer/2\",\"outer/0\"]", - "[\"summand\",\"w\",\"outer/2\",\"outer/1\"]" - ], "partition_key_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"model_partition/arbitrary/7\",[\"schedule/model_partition\",0,0],0]", "start_key_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"schedule\",[\"int/1/test/000\",1,\"start_time\"],0]", "state_candidate_ascii": "[\"state\",\"carrier/0\",0]", diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index a208091..6d6eded 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -215,7 +215,7 @@ def test_preregistration_closes_exact_head_replay_blockers(self) -> None: flat = " ".join(text.split()) for phrase in ( - "protocol version: 0.4.0", + "protocol version: 0.5.0", '["arity-recursion-synthetic-v6",s,n,sigma_milli,domain,role,[k0,...,kp],block]', "concatenated placeholders or language-native float strings are forbidden", "stability/00` through `stability/15", @@ -302,7 +302,7 @@ def test_executable_replay_reference_is_hash_pinned(self) -> None: pin = load_json("replay_reference.json") observed = replay.verify(PROJECT / "replay_reference.json") self.assertEqual(observed["protocol_id"], "arity-recursion-synthetic-v6") - self.assertEqual(observed["protocol_version"], "0.4.0") + self.assertEqual(observed["protocol_version"], "0.5.0") self.assertEqual(observed["reference_sha256"], pin["reference_sha256"]) self.assertEqual(observed["contract_sha256"], pin["contract_sha256"]) self.assertEqual(observed["vectors_sha256"], pin["vectors_sha256"]) @@ -345,8 +345,19 @@ def test_executable_replay_reference_is_hash_pinned(self) -> None: self.assertTrue(vectors["stability_probe"]["distinct"]) self.assertIn('"intervention_plan","schedule"', vectors["schedule"]["target_key_ascii"]) self.assertIn('"bootstrap","sealed_aggregate"', vectors["resampling"]["bootstrap_ascii"]) + self.assertEqual( + vectors["candidate_registry"]["direct"]["state"]["count"], 14 + ) + self.assertEqual( + vectors["candidate_registry"]["nested"]["state"]["count"], 44 + ) + self.assertEqual( + vectors["candidate_registry"]["nested"]["edge"]["count"], 100 + ) + with self.assertRaises(ValueError): + replay.candidate_bytes("nested", 7, "state", "leaf/3/2", 0) with self.assertRaises(ValueError): - replay.candidate_bytes("state", 0, 0) + replay.candidate_bytes("nested", 7, "state", "outer/3/leaf/2", 0) self.assertTrue(vectors["noise_phase"]["distinct"]) self.assertGreater(replay.open_uniform_word(0), 0.0) self.assertLess(replay.open_uniform_word(2**64 - 1), 1.0) diff --git a/research/from-photons-to-macroverse/tools/replay_reference.py b/research/from-photons-to-macroverse/tools/replay_reference.py index ee4f0eb..1ceaaaa 100755 --- a/research/from-photons-to-macroverse/tools/replay_reference.py +++ b/research/from-photons-to-macroverse/tools/replay_reference.py @@ -47,7 +47,7 @@ PROTOCOL_ID = "arity-recursion-synthetic-v6" -PROTOCOL_VERSION = "0.4.0" +PROTOCOL_VERSION = "0.5.0" DIRECT_ARITIES = (2, 3, 5, 6, 7, 8) NESTED_ARITIES = DIRECT_ARITIES NOISE_MILLI = (10, 50, 100) @@ -132,6 +132,19 @@ "arity": "arity suffix in hypothesis_id; h_7 uses 7", }, "candidate_types": CANDIDATE_TYPES, + "candidate_registry": "canonical_candidate_lists in this executable", + "backward_primitives": [ + "binary_multiply_adjoint", + "binary_divide_adjoint", + "serial_sum_adjoint", + "serial_product_adjoint", + "tanh_adjoint", + "softplus_adjoint", + "variance_head_value", + "variance_head_adjoint", + "gaussian_nll_term", + "gaussian_nll_adjoint", + ], "training_population_order": [ "observational episode ordinal", "intervention class 1..4", @@ -662,7 +675,7 @@ def minibatch_key( return payload, population[selected] -def candidate_bytes(kind: str, *identity: str | int) -> bytes: +def _candidate_payload(kind: str, *identity: str | int) -> bytes: field_types = CANDIDATE_TYPES.get(kind) if field_types is None or len(identity) != len(field_types): raise ValueError("candidate identity does not match its frozen shape") @@ -686,12 +699,108 @@ def ordered_candidates(candidates: Iterable[bytes]) -> tuple[bytes, ...]: return result +def child_arities(arity: int) -> tuple[int, ...]: + """Return the sole admitted depth-two child-arity vector.""" + + if arity not in NESTED_ARITIES: + raise ValueError("nested arity is not admitted") + pattern = (2, 3, 5) + return tuple(pattern[index % len(pattern)] for index in range(arity)) + + +def canonical_candidate_lists( + system_kind: str, + arity: int, +) -> dict[str, tuple[bytes, ...]]: + """Enumerate every target identity admitted for one generator.""" + + if arity not in DIRECT_ARITIES: + raise ValueError("candidate arity is not admitted") + if system_kind == "direct": + observed = tuple(f"carrier/{index}" for index in range(arity)) + carriers = observed + edges = tuple( + ("w", target, source) + for target in carriers + for source in carriers + if source != target + ) + product_targets = carriers + elif system_kind == "nested": + carriers = tuple(f"outer/{index}" for index in range(arity)) + observed = tuple( + f"outer/{outer}/leaf/{leaf}" + for outer, child_arity in enumerate(child_arities(arity)) + for leaf in range(child_arity) + ) + leaf_edges = tuple( + ( + "w", + f"outer/{outer}/leaf/{target}", + f"outer/{outer}/leaf/{source}", + ) + for outer, child_arity in enumerate(child_arities(arity)) + for target in range(child_arity) + for source in range(child_arity) + if source != target + ) + outer_edges = tuple( + ("w", target, source) + for target in carriers + for source in carriers + if source != target + ) + edges = (*leaf_edges, *outer_edges) + product_targets = (*observed, *carriers) + else: + raise ValueError("system_kind must be direct or nested") + result = { + "state": tuple( + _candidate_payload("state", target, coordinate) + for target in observed + for coordinate in range(2) + ), + "edge": tuple(_candidate_payload("edge", *edge) for edge in edges), + "carrier": tuple( + _candidate_payload("carrier", carrier) for carrier in carriers + ), + "summand": ( + *tuple(_candidate_payload("summand", *edge) for edge in edges), + *tuple( + _candidate_payload("summand", "product", target, "none") + for target in product_targets + ), + ), + "recovery": tuple( + _candidate_payload("recovery", target, coordinate) + for target in observed + for coordinate in range(2) + ), + } + return {kind: ordered_candidates(items) for kind, items in result.items()} + + +def candidate_bytes( + system_kind: str, + arity: int, + kind: str, + *identity: str | int, +) -> bytes: + """Return one candidate only when it belongs to the complete registry.""" + + payload = _candidate_payload(kind, *identity) + if payload not in canonical_candidate_lists(system_kind, arity).get(kind, ()): + raise ValueError("candidate identity is outside the canonical registry") + return payload + + def intervention_target_key( *, seed: int, arity: int, sigma_milli: int, split: str, + system_kind: str, intervention_class: int, candidate_index: int, block: int = 0, @@ -703,6 +812,16 @@ def intervention_target_key( choice_kind = INTERVENTION_TARGET_KINDS.get(intervention_class) if choice_kind is None: raise ValueError("target intervention class must be 1..5") + candidate_kind = { + 1: "state", + 2: "edge", + 3: "carrier", + 4: "summand", + 5: "recovery", + }[intervention_class] + candidate_count = len(canonical_candidate_lists(system_kind, arity)[candidate_kind]) + if not 0 <= candidate_index < candidate_count: + raise ValueError("candidate_index is outside the canonical target list") return stream_bytes( seed=seed, arity=arity, @@ -748,6 +867,8 @@ def model_partition_key( """Emit one model-partition ranking key.""" _token(family_id, "family_id") + if not 0 <= candidate_index < arity: + raise ValueError("model partition candidate must be one carrier index") return stream_bytes( seed=seed, arity=arity, @@ -821,6 +942,137 @@ def label_shuffle_equivalence(differences: Sequence[float]) -> dict[str, object] return {"standing": "equivalent", "g": 0, "interval": [0, 0]} +def binary_multiply_adjoint( + left: float, + right: float, + upstream: float, +) -> tuple[float, float]: + """Reverse one ``fmul(left, right)`` in operand order.""" + + return fmul(upstream, right), fmul(upstream, left) + + +def binary_divide_adjoint( + numerator: float, + denominator: float, + upstream: float, +) -> tuple[float, float]: + """Reverse one ``fdiv(numerator, denominator)`` without reassociation.""" + + numerator_adjoint = fdiv(upstream, denominator) + denominator_squared = fmul(denominator, denominator) + negative_numerator = fsub(0.0, numerator) + denominator_adjoint = fmul( + upstream, + fdiv(negative_numerator, denominator_squared), + ) + return numerator_adjoint, denominator_adjoint + + +def serial_sum_adjoint(length: int, upstream: float) -> tuple[float, ...]: + """Reverse a serial sum; each ordered input receives the same adjoint.""" + + _uint(length, "length") + return tuple(f64(upstream) for _ in range(length)) + + +def serial_product_adjoint( + factors: Sequence[float], + upstream: float, +) -> tuple[float, ...]: + """Reverse the exact serial left-fold product recurrence.""" + + prefixes = [1.0] + for factor in factors: + prefixes.append(fmul(prefixes[-1], factor)) + running = f64(upstream) + gradients = [0.0] * len(factors) + for index in range(len(factors) - 1, -1, -1): + gradients[index] = fmul(running, prefixes[index]) + running = fmul(running, factors[index]) + return tuple(gradients) + + +def tanh_adjoint(value: float, upstream: float) -> float: + """Reverse the executable tanh using one frozen local recurrence.""" + + output = deterministic_tanh(value) + local = fsub(1.0, fmul(output, output)) + return fmul(upstream, local) + + +def softplus_adjoint(value: float, upstream: float) -> float: + """Reverse the executable softplus branch with stable sigmoid arithmetic.""" + + if value > 40.0: + local = 1.0 + elif value >= 0.0: + local = fdiv(1.0, fadd(1.0, deterministic_exp(fsub(0.0, value)))) + else: + exponential = deterministic_exp(value) + local = fdiv(exponential, fadd(1.0, exponential)) + return fmul(upstream, local) + + +def variance_head_value(raw_rho: float) -> float: + """Decode one variance head scalar in the sole admitted operation order.""" + + return fadd(deterministic_softplus(raw_rho), 1e-6) + + +def variance_head_adjoint(raw_rho: float, upstream: float) -> float: + """Reverse the variance-head softplus; the additive floor passes through.""" + + return softplus_adjoint(raw_rho, upstream) + + +def gaussian_nll_term(observed: float, mean: float, variance: float) -> float: + """Evaluate one diagonal-Gaussian NLL scalar in the sole operation order.""" + + if not math.isfinite(variance) or variance < 1e-6: + raise ValueError("variance must be finite and at least 1e-6") + residual = fsub(observed, mean) + squared = fmul(residual, residual) + scaled_error = fdiv(squared, variance) + two_pi = fmul(2.0, f64(PI)) + scaled_variance = fmul(two_pi, variance) + log_term = deterministic_log(scaled_variance) + return fmul(0.5, fadd(scaled_error, log_term)) + + +def gaussian_nll_adjoint( + observed: float, + mean: float, + variance: float, + upstream: float, +) -> tuple[float, float, float]: + """Reverse ``gaussian_nll_term`` without algebraic reassociation.""" + + gaussian_nll_term(observed, mean, variance) + residual = fsub(observed, mean) + squared = fmul(residual, residual) + two_pi = fmul(2.0, f64(PI)) + scaled_variance = fmul(two_pi, variance) + summed_adjoint = fmul(upstream, 0.5) + squared_adjoint = fdiv(summed_adjoint, variance) + negative_squared = fsub(0.0, squared) + variance_squared = fmul(variance, variance) + variance_from_error = fmul( + summed_adjoint, + fdiv(negative_squared, variance_squared), + ) + scaled_variance_adjoint = fdiv(summed_adjoint, scaled_variance) + variance_from_log = fmul(scaled_variance_adjoint, two_pi) + variance_adjoint = fadd(variance_from_error, variance_from_log) + residual_adjoint = fadd( + fmul(squared_adjoint, residual), + fmul(squared_adjoint, residual), + ) + observed_adjoint = residual_adjoint + mean_adjoint = fsub(0.0, residual_adjoint) + return observed_adjoint, mean_adjoint, variance_adjoint + + def adam_step( *, parameter: float, gradient: float, first_moment: float, second_moment: float, beta1_power: float, beta2_power: float @@ -889,16 +1141,11 @@ def test_vectors() -> dict[str, object]: episode_id="obs/test/000", phase="scored", phase_time=0, carrier_id="3", coordinate=1 ) - candidates = ordered_candidates( - [ - candidate_bytes("summand", "product", "outer/2", "none"), - candidate_bytes("summand", "w", "outer/2", "outer/0"), - candidate_bytes("summand", "w", "outer/2", "outer/1"), - ] - ) - state_candidate = candidate_bytes("state", "carrier/0", 0) + direct_candidates = canonical_candidate_lists("direct", 7) + nested_candidates = canonical_candidate_lists("nested", 7) + state_candidate = candidate_bytes("direct", 7, "state", "carrier/0", 0) target_key = intervention_target_key( - seed=32, arity=7, sigma_milli=50, split="test", + seed=32, arity=7, sigma_milli=50, split="test", system_kind="direct", intervention_class=1, candidate_index=0 ) start_key = intervention_start_key( @@ -968,7 +1215,6 @@ def test_vectors() -> dict[str, object]: "nested_outer_arities": list(NESTED_ARITIES), }, "schedule": { - "ordered_candidates_ascii": [item.decode("ascii") for item in candidates], "state_candidate_ascii": state_candidate.decode("ascii"), "class6_episode_0": class6_component_ordinals(0), "class6_episode_11": class6_component_ordinals(11), @@ -976,6 +1222,49 @@ def test_vectors() -> dict[str, object]: "start_key_ascii": start_key.decode("ascii"), "partition_key_ascii": partition_key.decode("ascii"), }, + "candidate_registry": { + system_kind: { + kind: { + "count": len(items), + "sha256": hashlib.sha256( + canonical_json([item.decode("ascii") for item in items]) + ).hexdigest(), + } + for kind, items in candidate_lists.items() + } + for system_kind, candidate_lists in ( + ("direct", direct_candidates), + ("nested", nested_candidates), + ) + }, + "adjoints": { + "binary_multiply_f64": [ + f64_hex(value) + for value in binary_multiply_adjoint(0.25, -0.5, 1.25) + ], + "binary_divide_f64": [ + f64_hex(value) + for value in binary_divide_adjoint(0.25, -0.5, 1.25) + ], + "serial_sum_f64": [ + f64_hex(value) for value in serial_sum_adjoint(3, 1.25) + ], + "serial_product_f64": [ + f64_hex(value) + for value in serial_product_adjoint([0.25, -0.5, 0.75], 1.25) + ], + "tanh_f64": f64_hex(tanh_adjoint(0.5, 1.25)), + "softplus_f64": f64_hex(softplus_adjoint(-0.5, 1.25)), + "variance_value_f64": f64_hex(variance_head_value(-0.5)), + "variance_adjoint_f64": f64_hex( + variance_head_adjoint(-0.5, 1.25) + ), + "nll_term_f64": f64_hex(gaussian_nll_term(0.75, 0.25, 0.5)), + "nll_adjoint_f64": [ + f64_hex(value) + for value in gaussian_nll_adjoint(0.75, 0.25, 0.5, 1.25) + ], + }, "resampling": { "bootstrap_ascii": bootstrap.decode("ascii"), "permutation_ascii": permutation.decode("ascii"), From 3b929acd43c5c25c29f848f094bd90544a1cae37 Mon Sep 17 00:00:00 2001 From: Erin Spencer Date: Wed, 9 Sep 2026 14:05:39 -0700 Subject: [PATCH 20/20] fix(replay): size partition permutations by family --- .../replay_reference.json | 6 +-- .../replay_vectors.json | 2 + .../tests/test_contracts.py | 32 ++++++++++++++++ .../tools/replay_reference.py | 37 ++++++++++++++++++- 4 files changed, 72 insertions(+), 5 deletions(-) diff --git a/research/from-photons-to-macroverse/replay_reference.json b/research/from-photons-to-macroverse/replay_reference.json index 759d2e5..00bdefb 100644 --- a/research/from-photons-to-macroverse/replay_reference.json +++ b/research/from-photons-to-macroverse/replay_reference.json @@ -5,9 +5,9 @@ "protocol_version": "0.5.0", "status": "not-run", "reference_path": "tools/replay_reference.py", - "reference_sha256": "3b3c6babd2340eb5d08aadbbfa3b2c3b21af75683210957c3730e72a52a70460", - "contract_sha256": "8584dd017603e0b5f4b6be7c6756e348b3f3255bcbfbe42f0294ea2e993b6ffe", + "reference_sha256": "231e9f36a7df371b88df0949e2510cface98b9ca4effeb187de0f4f7d6f6f496", + "contract_sha256": "1fcfc15a1281c441fc4db6155b390592815239d0952c0c77ed864196d5f431ee", "vectors_path": "replay_vectors.json", - "vectors_sha256": "87ac49b3baa50430760ab0702ae8f13a374d3e0baac7e1283122767f6386d4b4", + "vectors_sha256": "781bbd0d82ec819e3174cb1ca51f59126cfb87833ad75f468a565dd1a143100c", "verification_command": "python tools/replay_reference.py verify" } diff --git a/research/from-photons-to-macroverse/replay_vectors.json b/research/from-photons-to-macroverse/replay_vectors.json index e85e1d1..b2d7ac9 100644 --- a/research/from-photons-to-macroverse/replay_vectors.json +++ b/research/from-photons-to-macroverse/replay_vectors.json @@ -198,6 +198,8 @@ ] ], "partition_key_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"model_partition/arbitrary/7\",[\"schedule/model_partition\",0,0],0]", + "partition_last_leaf_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"model_partition/arbitrary/tree/7\",[\"schedule/model_partition\",0,21],0]", + "partition_last_scalar_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"model_partition/arbitrary/7\",[\"schedule/model_partition\",0,13],0]", "start_key_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"schedule\",[\"int/1/test/000\",1,\"start_time\"],0]", "state_candidate_ascii": "[\"state\",\"carrier/0\",0]", "target_key_ascii": "[\"arity-recursion-synthetic-v6\",32,7,50,\"intervention_plan\",\"schedule\",[\"schedule/test/state_target\",1,0],0]" diff --git a/research/from-photons-to-macroverse/tests/test_contracts.py b/research/from-photons-to-macroverse/tests/test_contracts.py index 6d6eded..2a2e86a 100644 --- a/research/from-photons-to-macroverse/tests/test_contracts.py +++ b/research/from-photons-to-macroverse/tests/test_contracts.py @@ -338,12 +338,44 @@ def test_executable_replay_reference_is_hash_pinned(self) -> None: contract["recovery_baseline"], "mode-matched unperturbed rollout x^(0,M,f)", ) + self.assertEqual( + contract["model_partition_populations"]["arbitrary/"], + "scalar-coordinate indices 0..2*n-1", + ) vectors = load_json("replay_vectors.json") self.assertTrue(vectors["initializer"]["distinct"]) self.assertEqual(vectors["initializer"]["unnested_kind"], "direct") self.assertTrue(vectors["stability_probe"]["distinct"]) self.assertIn('"intervention_plan","schedule"', vectors["schedule"]["target_key_ascii"]) + self.assertIn( + '["schedule/model_partition",0,13]', + vectors["schedule"]["partition_last_scalar_ascii"], + ) + self.assertIn( + '["schedule/model_partition",0,21]', + vectors["schedule"]["partition_last_leaf_ascii"], + ) + self.assertEqual(replay.model_partition_population_size("arbitrary/7", 7), 14) + self.assertEqual( + replay.model_partition_population_size("arbitrary/tree/7", 7), 22 + ) + with self.assertRaises(ValueError): + replay.model_partition_key( + seed=32, + arity=7, + sigma_milli=50, + family_id="arbitrary/7", + candidate_index=14, + ) + with self.assertRaises(ValueError): + replay.model_partition_key( + seed=32, + arity=7, + sigma_milli=50, + family_id="arbitrary/tree/7", + candidate_index=22, + ) self.assertIn('"bootstrap","sealed_aggregate"', vectors["resampling"]["bootstrap_ascii"]) self.assertEqual( vectors["candidate_registry"]["direct"]["state"]["count"], 14 diff --git a/research/from-photons-to-macroverse/tools/replay_reference.py b/research/from-photons-to-macroverse/tools/replay_reference.py index 1ceaaaa..ef77f32 100755 --- a/research/from-photons-to-macroverse/tools/replay_reference.py +++ b/research/from-photons-to-macroverse/tools/replay_reference.py @@ -133,6 +133,12 @@ }, "candidate_types": CANDIDATE_TYPES, "candidate_registry": "canonical_candidate_lists in this executable", + "model_partition_populations": { + "arbitrary/": "scalar-coordinate indices 0..2*n-1", + "label-shuffle/": "carrier indices 0..n-1", + "arbitrary/tree/": "leaf indices 0..sum(child_arities(n))-1", + "label-shuffle/tree/": "outer-carrier indices 0..n-1", + }, "backward_primitives": [ "binary_multiply_adjoint", "binary_divide_adjoint", @@ -867,8 +873,9 @@ def model_partition_key( """Emit one model-partition ranking key.""" _token(family_id, "family_id") - if not 0 <= candidate_index < arity: - raise ValueError("model partition candidate must be one carrier index") + population_size = model_partition_population_size(family_id, arity) + if not 0 <= candidate_index < population_size: + raise ValueError("model partition candidate is outside its frozen population") return stream_bytes( seed=seed, arity=arity, @@ -880,6 +887,22 @@ def model_partition_key( ) +def model_partition_population_size(family_id: str, arity: int) -> int: + """Return the exact permutation population for one admitted family.""" + + if arity not in DIRECT_ARITIES: + raise ValueError("model partition arity is not admitted") + if family_id == f"arbitrary/{arity}": + return 2 * arity + if family_id == f"label-shuffle/{arity}": + return arity + if family_id == f"arbitrary/tree/{arity}": + return sum(child_arities(arity)) + if family_id == f"label-shuffle/tree/{arity}": + return arity + raise ValueError("family has no sealed model-partition permutation") + + def class6_component_ordinals(episode_ordinal: int) -> tuple[tuple[int, int], tuple[int, int]]: if not 0 <= episode_ordinal < 12: raise ValueError("class-6 episode ordinal must be 0..11") @@ -1156,6 +1179,14 @@ def test_vectors() -> dict[str, object]: seed=32, arity=7, sigma_milli=50, family_id="arbitrary/7", candidate_index=0 ) + partition_last_scalar = model_partition_key( + seed=32, arity=7, sigma_milli=50, + family_id="arbitrary/7", candidate_index=13 + ) + partition_last_leaf = model_partition_key( + seed=32, arity=7, sigma_milli=50, + family_id="arbitrary/tree/7", candidate_index=21 + ) bootstrap = bootstrap_key("h_7", 0, 0) permutation = permutation_key("h_7", 0, 0) minibatch_payload, minibatch_selected = minibatch_key( @@ -1221,6 +1252,8 @@ def test_vectors() -> dict[str, object]: "target_key_ascii": target_key.decode("ascii"), "start_key_ascii": start_key.decode("ascii"), "partition_key_ascii": partition_key.decode("ascii"), + "partition_last_scalar_ascii": partition_last_scalar.decode("ascii"), + "partition_last_leaf_ascii": partition_last_leaf.decode("ascii"), }, "candidate_registry": { system_kind: {