The report-identity core: what is proved, and what is not
This note is the technical companion to the programme. It states the formal
objects, the load-bearing results, the negative control, and the scope
conditions. It describes the report-identity core, which is a six-module subset
of this repository under report-core/. The full 56-file / 467-theorem corpus
is under lean/; the counts are separated in §5.
1. Objects
Let Ω be a state space. A closure operator on Ω is a map
\[ C:\mathcal P(\Omega)\to\mathcal P(\Omega) \]
that is extensive (S ⊆ C(S)), monotone (S ⊆ T ⇒ C(S) ⊆ C(T)), and idempotent
(C(C(S)) = C(S)). The closed sets are Fix(C) = {S : C(S) = S}.
A report family is a set R ⊆ P(Ω). It is the family of state-sets the
system is willing to report as closed, not a single runtime string. The runtime
report is one element of R.
From any report family define
\[ c_R(S)=\bigcap{T\subseteq\Omega : S\subseteq T,\ T\in R}. \]
A family is Moore when
\[ \mathrm{Moore}(R):=\forall F\subseteq R,\ \bigcap F\in R. \]
The empty intersection is Ω, so a Moore family always contains Ω. This is
the corrected v1.1 condition. The v1.0 condition UpClosed (∅ ∈ R, closed
under supersets) is degenerate in Lean: it forces R = Set.univ, so the v1.0
mutual-determination theorem is a tautology. The audit is retained under
audit/ and is not imported.
2. The results
2.1 c_R is always a closure operator
theorem isClosure_repClosed (R : Report Ω) : IsClosure (repClosed R)
No precondition on R. The proof uses only the definition of c_R as an
intersection. This is the construction side: every report family generates a
closure.
2.2 Moore families determine their closure
theorem rep_eq_iff_closureOperator_eq {R R' : Report Ω}
(hR : Moore R) (hR' : Moore R') :
repClosed R = repClosed R' ↔ R = R'
On Moore families, the report family and the closure operator are two presentations of one object. This is the weak form: co-generation. Neither can be varied independently while the other is held fixed.
2.3 Report family = closed-set family
theorem report_eq_fix_iff {I : Set (Ω → Ω)} {R : Report Ω} (hR : Moore R) :
R = {T : Set Ω | Inv I T} ↔ repClosed R = clos I
For a closure generated by an intervention family I, the report family is
exactly the family of I-invariant sets if and only if the report closure equals
the intervention closure. This is the strong form: a joint fixed point, not
merely a mutual function.
2.4 The representation theorem
theorem moore_iff_exists_closure (R : Report Ω) :
Moore R ↔ ∃ c : Set Ω → Set Ω, IsClosure c ∧ R = Fix c
Every Moore family is the fixed-point family of some closure operator, and every closure operator has a Moore fixed-point family. The theorem is a representation result. It does not identify the closure with a pre-existing operator such as the sharpness closure; that is a separate alignment problem (see §4).
2.5 The negative control
theorem nonMoore_not_canonical :
∃ R : Report (Fin 2), ¬ Moore R ∧ R ≠ Fix (repClosed R)
The witness is R = P(Fin 2) \ {∅}: all subsets of a two-element set except the
empty set. It is not Moore, and it is not the fixed-point family of its own
closure. This is the precise sense in which the Moore condition cannot be
deleted. The counterexample does not say anything about the attribution
presheaf or the potential; it is a report-family counterexample.
3. The gate
The formal results are conditional. The engineering question is whether the condition can be made a legal transition constraint rather than an after-the-fact check.
A candidate bundle carries:
C closure operator
R report family
report runtime report (an element of R)
evidence state/trace/certificate supporting the decision
version monotone version
parent hash of the previous committed bundle
The consistency gate checks R1–R7:
| Code | Check | Failure |
|---|---|---|
| R1 | C is a closure operator |
REJECT |
| R2 | R is a Moore family |
REVIEW |
| R3 | c_R = C pointwise |
REJECT |
| R4 | report ∈ R |
REJECT |
| R5 | version / evidence / certificate agree | REVIEW |
| R6 | exactly one candidate | REVIEW |
| R7 | parent equals the current head |
REJECT |
R2 is REVIEW rather than REJECT because a non-Moore family does not make the
system "broken"; it means the system cannot claim the boundary–report identity
until the family is repaired or the claim is withdrawn. R6 is a property of the
candidate generator, not of a single candidate; the reference implementation
wraps it in gate_candidates.
Atomic commit means there is no legal state in which C is committed without
the matching R, report, evidence, and version. The action gate accepts only a
committed bundle and denies actions that require a different version or leave the
committed closure.
This is a reference implementation over finite state spaces. It is not a deployed agent and not a proof that a production system cannot bypass the gate. The tests are a protocol check, not an empirical validation.
4. What is not proved
The report-identity core is deliberately narrow. Four open items matter for reading it correctly.
4.1 The attribution-to-closure bridge
The programme's first layer uses an attribution presheaf
A : Caus^op → Δ²; the core starts from a closure operator C. The current Lean
development does not construct C from A. The attribution module and the
closure module are separate. A route assessment (stable fibers, Moore families,
point-vs-set closure levels) concludes that the missing step is not a single
lemma: it requires an actual attribution section, a value predicate, and a
path-compatibility condition. This is the next theoretical target, not a result
of this repository.
Do not cite the Moore core as having derived the boundary from attribution.
4.2 The level parameter
The sharpness closure c(κ, μ, w) depends on w/κ. The potential V(κ) fixes
κ* but does not fix w. The current gate must therefore take w as an input
or adopt a separate selection principle. The claim "the level is uniquely
determined" is not part of this core.
4.3 A7 and the potential
The form V(κ) = c₀κ + αC_F/κ is a model-class theorem under A7 (maintenance
cost is a continuous additive functional). It is not a consequence of the free
category's universal property. The A-module's 33 declarations are a separate
scope; they are not this core's count.
4.4 Production behaviour
The gate's acceptance/rejection rates on a realistic task are unknown. A gate that always accepts is decoration; one that always rejects is unusable. The finite-state tests do not settle this.
5. Evidence and reproduction
| Scope | Files | Theorems/lemmas | Definitions |
|---|---|---|---|
Full verified corpus (lean/) |
56 | 467 | 90 |
Report-identity core (report-core/) |
6 | 45 | 13 |
A-module (lean/BoundaryTheory.lean) |
1 | 33 | 7 |
The report-identity core has no sorry, no admit, and no custom axioms. The
full corpus was verified separately (71 modules, 9/9 checks); its log is in this
repository. Do not mix counts across scopes.
Build:
lake update
lake exe cache get
lake build
Offline:
MATHLIB_PACKAGES=/path/to/.lake/packages ./scripts/verify_offline.sh
Gate:
python3 architecture/gate_reference.py
The site is static; python3 site/build_site.py regenerates it from docs/.
6. Reading order
README.md— the claim and its refusals.docs/PROGRAMME_EN.md— why the claim matters.- This note — what is actually machine-checked.
lean/ReportIdentityCore.lean— the main definitions and results.lean/ReportCountermodelsCore.lean— the negative control.architecture/PROTOCOL.md— how the condition becomes a gate.docs/EVIDENCE.md— hashes, counts, and open items.