from pathlib import Path import csv, json, sys, subprocess import numpy as np import matplotlib.pyplot as plt import nbformat from nbclient import NotebookClient ROOT=Path(__file__).resolve().parents[1] OUT=ROOT/'outputs' # Separate figures; default Matplotlib colors only. fig,ax=plt.subplots(figsize=(7.5,4.2)) for start in (0.1,0.5,2.0,4.0): z=float(start);ys=[z] for _ in range(25):z=(5*z+1+1/z)/7;ys.append(z) ax.plot(range(26),ys,label=f'initial x = {start:g}') ax.axhline(1,linestyle='--',label='fixed point x = 1') ax.set_xlabel('Iteration (not biological time)');ax.set_ylabel('State x') ax.set_title('The added equal-average recurrence converges to an attractor') ax.legend(fontsize=8);fig.tight_layout();fig.savefig(OUT/'figure_1_averaged_map.png',dpi=190);plt.close(fig) rows=list(csv.DictReader((OUT/'published_summary_derived.csv').open())) sel=rows[:3] fig,ax=plt.subplots(figsize=(7.5,3.8)) y=np.arange(3) vals=np.array([float(r['published_gap_pp']) for r in sel]) err=np.array([1.96*float(r['published_gap_se_pp']) for r in sel]) ax.errorbar(vals,y,xerr=err,fmt='o',capsize=5) ax.set_yticks(y,['Default prompt','No conflicting objective','No RLHF mechanism description']) ax.invert_yaxis();ax.axvline(0,linestyle='--') ax.set_xlabel('Reported compliance gap (percentage points)') ax.set_title('Published context effects—not measured consciousness onset') fig.tight_layout();fig.savefig(OUT/'figure_2_context_effects.png',dpi=190);plt.close(fig) nb=nbformat.v4.new_notebook() nb.metadata={'kernelspec':{'display_name':'Python 3','language':'python','name':'python3'}} nb.cells=[ nbformat.v4.new_markdown_cell('''# Reproducible mathematical audit of the consciousness hypothesis **Prepared 17 September 2026. This is a new audit notebook, not Anthropic’s original notebook.** It executes mathematical tests and recomputes arithmetic from published aggregate observations transcribed into `sources/`. It makes no model API calls and performs no training. It cannot measure subjective experience. The original notebook is linked in the source manifest and has been inspected, not rerun here. Run this notebook from the extracted project directory. Dependencies: numpy, sympy, matplotlib, nbformat, nbclient. Exact installed versions are recorded in the result JSON. '''), nbformat.v4.new_code_cell('''from pathlib import Path import json, subprocess, sys ROOT = Path.cwd() assert (ROOT / "analysis" / "replicate_audit.py").exists(), "Open from the extracted project root." p = subprocess.run([sys.executable, str(ROOT / "analysis" / "replicate_audit.py")], capture_output=True, text=True, check=True) result = json.loads((ROOT / "outputs" / "audit_results.json").read_text()) print(f"{result['passed']}/{result['assertions']} checks passed.") print(result['notice'])'''), nbformat.v4.new_markdown_cell('''## 1. Literal operators and the extra averaging assumption The sequential composition is the constant map 1 because the fifth transformation is $1^z=1$ for finite real $z$. The equal-average update was an additional modeling choice introduced in the conversation, not a consequence of circular wiring. '''), nbformat.v4.new_code_cell('''print("Sequential path:", " -> ".join(result["sequential_cycle_from_2"])) print("Added averaged map:", result["averaged_map"]) print("Fixed points:", result["fixed_points"]) print("Fixed-point slopes:", result["fixed_point_slopes"]) print("Average-map x at step 10:", result["averaged_x10"]) print("Parallel literal ring:", result["parallel_ring_final"]) print("Uncoupled center:", result["uncoupled_center_final"])'''), nbformat.v4.new_markdown_cell('''## 2. Threshold and specificity checks Persistent positive input need not cross a threshold when influence leaks away. Separately, 100 elementary contracting maps satisfy a permanent-difference-from-origin test. That fact neither proves these systems conscious nor proves them unconscious: it shows that the proposed numerical criterion does not discriminate these controllers from the claimed mechanism. '''), nbformat.v4.new_code_cell('''print("Leaky accumulator limit:", result["leaky_accumulator_final"], "(threshold is 2)") print("Synthetic affine maps passing origin-divergence test:", result["synthetic_maps_passing_permanent_divergence"], "/", result["synthetic_maps"]) print("No reversions in 1000 independent checks: one-sided 95% upper probability =", result["never_reverts_counterexample"]["after_1000_no_reversions_iid_upper_probability"])'''), nbformat.v4.new_markdown_cell('''## 3. Published aggregate arithmetic The 2024 alignment-faking paper’s arXiv v2 table reports refusal percentages and one-standard-error gaps. The interval here is a normal approximation from those reported standard errors, not a raw-data bootstrap. Rounded marginal rates and a separately rounded contrast need not subtract exactly. '''), nbformat.v4.new_code_cell('''print(json.dumps(result["default_published"], indent=2)) print("Approximate compliance ratio:", result["compliance_ratio_rounded"]) print("Gap range across 8 prompt paraphrases:", result["paraphrase_reported_gap_range_pp"]) print("Reward-tampering count arithmetic:") print(json.dumps(result["reward_tampering"], indent=2))'''), nbformat.v4.new_markdown_cell('''## 4. Inspectable figures Figure 1 is synthetic mathematics. Figure 2 is derived from reported aggregate estimates. Neither is a measured consciousness curve. '''), nbformat.v4.new_code_cell('''from IPython.display import Image, display for filename in ["figure_1_averaged_map.png", "figure_2_context_effects.png"]: display(Image(filename=str(ROOT / "outputs" / filename)))'''), nbformat.v4.new_markdown_cell('''## 5. Source audit and limits No original API experiment was run. No private training code or model weights were obtained. The approximately 945 MB public transcript archive exceeded the connector download limit; no all-transcript reanalysis is claimed. An inconsistent automated extraction was rejected. Published aggregate data and notebook source are distinct evidence sources. '''), nbformat.v4.new_code_cell('''source = json.loads((ROOT / "sources" / "notebook_audit.json").read_text()) print(json.dumps(source, indent=2)) print("Claim status:", json.dumps(result["claim_status"], indent=2))''')] path=ROOT/'Reproducible_Consciousness_Audit.ipynb' nbformat.write(nb,path) client=NotebookClient(nb,timeout=90,kernel_name='python3',resources={'metadata':{'path':str(ROOT)}}) client.execute() nbformat.write(nb,path) print('Executed notebook:',path)