Node R1: Represents — packed EVM world to Model.State relation - #21
Draft
Th0rgal wants to merge 1 commit into
Draft
Node R1: Represents — packed EVM world to Model.State relation#21Th0rgal wants to merge 1 commit into
Th0rgal wants to merge 1 commit into
Conversation
Adds Eip8282.Audit.Represents, the state relation the correspondence DAG
needs before any Xi transport can be stated. `Represents kind s m` says the
world `s` holds, at the pinned predeploy address for `kind`, an account
running the pinned runtime whose packed storage is WellFormed and abstracts
under `WellFormed.toModel` to exactly `m`, balance included.
Until now the three registered parents quantified over a free `{sigma :
Storage}`, so nothing could name *which* world an abstract Model.State stood
for. `Represents.callHyp` closes that naming gap: a Represents witness
supplies the `CallHyp kind sigma` the parents already require, at the
predeploy's own storage.
Scope, stated in the module docstring and not weakened here: R1 relates
states, not steps. There is no claim that Xi preserves Represents, so
A-ABSTRACT-TX is untouched and no new parent ID is registered. Supplying a
hypothesis is not transporting a conclusion.
The relation is proved functional (`Represents.unique`) and inhabited on
every storage image the campaign already runs against, so it is not
vacuously satisfiable. `default_storage_not_initialExit` is kept as an
honesty marker: an all-zero image is *not* a witness that the exits
predeploy starts in Model.initialExit.
No Xi execution, hence no native_decide: every new theorem reports only
propext / Classical.choice / Quot.sound, and Trust.lean now checks that.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
Node R1 of the correspondence DAG: the state relation, and nothing else.
Eip8282.Audit.Represents.Represents : Kind → EvmYul.EVM.State → Model.State → PropRepresents kind s mholds when the worldscarries, at the pinned predeploy address forkind, an account thatCorrespondence.runtimeCode kind),WellFormed(control slots 0–3 plus a dense[QUEUE_HEAD, QUEUE_TAIL)item window), andWellFormed.toModelto exactlym, balance included.toModelwas already the abstraction function the three registered parents use on a bareStorage. R1 lifts it to a wholeEvmYul.EVM.State.Why it strengthens the three registered parents
P-SUBMIT-1,P-DRAIN-1andP-CONTROL-1each quantify over{σ : Storage} (_ : CallHyp kind σ). Nothing in-tree could say which world state a givenσwas the storage of.Represents.callHypcloses that gap: aRepresentswitness supplies theCallHyp kind σthe parents already require, at the predeploy's own storage, soσcan now be named as a real world's predeploy storage instead of a free variable.No new parent IDs. No changes to
audit/guarantees.yamloraudit/assumptions.yaml.What this is explicitly NOT
R1 relates states, not steps. Nothing here says that if
Represents kind s mandΞcarriesstos', thenRepresents kind s' (Model.step m k). That ∀-transport is a later node.Consequently
A-ABSTRACT-TXis not closed and not reduced by this PR. The relation now exists and is proved functional and inhabited, but theΞ↔Model.userCall/systemCallstep correspondence it would have to be preserved by is still absent. Supplying a hypothesis is not transporting a conclusion.Non-vacuity
A relation that nothing satisfies would prove anything downstream, so the module carries inhabitation witnesses rather than just the definition:
represents_packed_deposit/represents_packed_exit— a∀over everyWellFormedpacked image at any predeploy balance, not a single ground world.represents_liveStorage,represents_altStorage,represents_inhibitedStorage,represents_depositQueue65,represents_default_storage— the concrete images the registered parents already run against, soRepresentsis inhabited exactly where the guarantees live.Represents.unique— a world abstracts to at most oneModel.State. Without this the relation would be useless as a specification.Honesty marker
default_storage_not_initialExitis proved and kept deliberately: the exits predeploy is specified to start inhibited (Model.initialExit.storedExcess = inhibitor), but an all-zero storage image abstracts tostoredExcess = 0. Sorepresents_default_storageat.exitis not a witness that the deployed world starts inModel.initialExit— that needs the constructor image, which isP-CONTROL-1's ctor fragment, not R1.Receipts
The relation never runs
Ξ, so it carries nonative_decidereceipt. Every new theorem reports only the three foundational axioms, andTrust.leannow checks this:No
sorry, no project axiom, nonative_decideaxiom.python3 scripts/audit_metadata.py→audit-check ok.make provereceipt is being appended as a follow-up comment; the new module itself builds clean (lake build Eip8282.Audit.Represents→Built Eip8282.Audit.Represents).Notes for review
72047231af294022298c86d1c0d7e0f9aff8aaa6; EVMYulLean pin untouched.