Skip to content

feat(interaction): add oracle execution and continuation - #570

Draft
codygunton wants to merge 143 commits into
Verified-zkEVM:mainfrom
codygunton:cg/quang/core-rebuild-2-upstream
Draft

feat(interaction): add oracle execution and continuation#570
codygunton wants to merge 143 commits into
Verified-zkEVM:mainfrom
codygunton:cg/quang/core-rebuild-2-upstream

Conversation

@codygunton

@codygunton codygunton commented Jun 10, 2026

Copy link
Copy Markdown
Collaborator

⚠️ Depends on #532. Once that PR is in main and main has merged into this, the PR should show only the execution/continuation layer over the core oracle protocol surface.

Summary

  • Add the oracle execution, composition, chain, continuation, bridge, and state-chain modules.
  • Wire the execution layer into the interaction reduction surface.
  • Keep the branch on the Lean/mathlib v4.30 dependency set.

Validation

  • ./scripts/validate.sh
  • lake test reports error: Arklib: no test driver configured

quangvdao and others added 30 commits March 28, 2026 08:10
Advance the CompPoly dependency from v4.28.0 (d7b9f98, 58 commits behind)
to the latest upstream master tip. The bump is fully backward-compatible
with no ArkLib code changes needed.

Made-with: Cursor
Replace ~30 duplicated bivariate polynomial declarations (coeff,
degrees, weighted degrees, eval, shift, root multiplicity, discriminant)
with imports from CompPoly's ToMathlib bridge files. Fix downstream
consumers for monomial name disambiguation and the now-unconditional
weightedDegree_eq_natWeightedDegree.

Net: 597 lines deleted, 47 lines changed across 4 files, zero new sorries.
Made-with: Cursor
Bump VCVio from d37e586 to ebea2fa (12 commits). Remove the
unused Q_ne_0 field from GuruswamiSudan.Conditions since
dvd_property does not require it.

Made-with: Cursor
…sors

- Restore `Q_ne_0` field in `GuruswamiSudan.Conditions`: non-zeroness
  is integral to the decoder specification (Q=0 trivially satisfies the
  algebraic conditions). `dvd_property` still doesn't require it.
- Fix `Conditions` docstring to accurately describe the structure.
- Fix `ne_zero_iff_coeffs_ne_zero` docstring ("all its coefficients" →
  "its coefficient function").
- Add `[NoZeroDivisors F]` to `totalDegree_mul` statement — the theorem
  is false over semirings with zero divisors.

Made-with: Cursor
Resolve isolated dot, long line, and unnecessary simpa warnings.

Made-with: Cursor
New standalone interaction infrastructure built on W-type specs with
role decorations, eliminating the old TwoParty/Multiparty inductives
and ProtocolSpec/Direction wrappers.

- Basic.lean: universe-polymorphic Spec, Transcript, Strategy, Decoration
  with map, BundledMonad, MonadDecoration, append/comp combinators
- TwoParty.lean: Role, RoleDecoration (= Decoration on Spec),
  Strategy.withRoles, Counterpart, runWithRoles, per-node monad variants
- Multiparty.lean: PartyDecoration + toRoles via Decoration.map,
  three-party knowledge-soundness examples with rfl proofs
- Reduction.lean: Prover, Verifier, Reduction, execute parameterized
  by (pSpec : Spec) (roles : RoleDecoration pSpec)
- PORTING.md: tracks core rebuild progress and next steps
- Delete old ArkLib/Refactor/ folder (superseded)

Made-with: Cursor
- Verifier: add StmtOut, rename decide→verify, m Bool→OptionT m StmtOut
- OracleCounterpart: round-by-round challenger with accSpec growing at sender nodes
- InteractiveOracleVerifier: unified challenger+verify (= OracleCounterpart at internal nodes, verify fn at .done)
- OracleVerifier: batch structure with iov + transcript-dependent simulate + reify
- OracleProver, OracleReduction: oracle-aware prover/reduction structures
- Decoration.Refine: displayed decoration combinator (cf. displayed algebras, ornaments)
- SenderDecoration: Refine specialized to RoleDecoration with role-dependent fiber
- Universe polymorphism throughout TwoParty.lean
- N-ary composition: replicate, chain, iterate for Spec/Decoration/Strategy/Transcript

Made-with: Cursor
…tions

Replace SenderDecoration (Decoration.Refine + PUnit junk at receiver nodes)
with Role.Refine — a direct recursion on spec + roles that skips receiver
nodes cleanly. Prove equivalence with Decoration.Refine for compatibility.

Made-with: Cursor
- Add ArkLib/Interaction/Basic/{Spec,Decoration,Strategy,Append,Replicate,Chain,MonadDecoration,BundledMonad}
- Add ArkLib/Interaction/TwoParty/{Role,Decoration,Strategy,Swap,Compose,Refine,Examples}
- Remove monolithic Basic.lean and TwoParty.lean; update Multiparty, Reduction, Oracle imports
- Note Interaction/Basic/ in PORTING.md; add Interaction line to docs/wiki/repo-map.md

Made-with: Cursor
- Define Spec.Decoration.swap so roles.swap elaborates on Decoration (fun _ => Role)
- Abbrev RoleDecoration.swap to Spec.Decoration.swap; use roles.swap in Swap/Compose theorems

Made-with: Cursor
Add "Authors: Quang Dao" to all Interaction files missing it.
Rewrite Spec, Transcript, and ofList docstrings for clarity.

Made-with: Cursor
Simplify Prover/Verifier/Reduction types: WitnessIn is plain, VerOutput
deleted (verifier returns StatementOut), WitnessOut independent of
StatementOut. Add Security.lean with completeness, soundness, knowledge
soundness, ClaimTree, KnowledgeClaimTree, and round-by-round definitions.
Update Oracle.lean, TwoParty Strategy/Compose, and Multiparty accordingly.

Made-with: Cursor
autoImplicit = false is already set globally in lakefile.toml.
Remove the duplicate set_option from all Interaction files and
document this in AGENTS.md.

Made-with: Cursor
…tors, overhaul docstrings

Rename `Transcript.appendFamily` -> `liftAppend`, `Transcript.join` -> `append`
(freeing `join` for n-ary flattening), and propagate across all files. Reorder
Append.lean so `liftAppend` precedes `append`/`split` and `comp` precedes `compFlat`.

Add new n-ary chain combinators in Chain.lean: `Transcript.chain` (telescope type),
`Transcript.join`/`unjoin` (flatten/unflatten isomorphism with round-trip simp lemmas),
`Transcript.liftJoin` (lift telescope-indexed families to chain transcripts).
Rename `Spec.chainFamily` -> `Transcript.chainFamily`.

Rewrite all docstrings in Append.lean, Chain.lean, and Compose.lean to be intrinsic
and intuitive. Add docstring quality rule to CONTRIBUTING.md and AGENTS.md.

Made-with: Cursor
…hain

Move the continuation-style intrinsic chain (formerly `Spec.Unfolding`
in `ChainIntrinsic.lean`) into `Basic/Chain.lean` as the canonical
`Spec.Chain` API. Extract the old stage-indexed `Spec.chain` into a
new `Basic/StateChain.lean` under the explicit `stateChain` prefix.

Chain.lean now provides:
- `Spec.Chain` (depth-indexed telescope: round spec + continuation)
- `Chain.toSpec` (convert to concrete `Spec` via `Spec.append`)
- `Chain.replicate`, `Chain.ofStateMachine` (derived constructors)
- `Chain.splitTranscript` / `Chain.appendTranscript` (telescope ops)
- `Chain.strategyComp` / `Chain.strategyCompUniform` (composition)

StateChain.lean preserves the full legacy API under `stateChain*` names.

Made-with: Cursor
…eChain

Merge the intrinsic reduction layer (formerly `ReductionIntrinsic.lean`)
into `Reduction.lean` as the default `Reduction.ofChain` surface.
Rename all stage-threaded chain identifiers to `stateChain*` across
TwoParty, Reduction, and Oracle modules.

Reduction.lean gains:
- `Decoration.ofChain` / `Chain.roles` (role decoration from Chain)
- `Strategy.ofChain` / `Counterpart.ofChain` (recursive composition)
- `Reduction.ofChain` (stateless chain-based reduction composition)

Renames in TwoParty:
- `RoleDecoration.chain` → `RoleDecoration.stateChain`
- `Counterpart.chainComp*` → `Counterpart.stateChainComp*`
- `Strategy.chainCompWithRoles*` → `Strategy.stateChainCompWithRoles*`

Renames in Oracle:
- `OracleReduction.chainComp` → `OracleReduction.stateChainComp`
- `toMonadDecoration_chain` → `toMonadDecoration_stateChain`

Made-with: Cursor
Express the sumcheck protocol using the Interaction.Spec framework:

- CompPoly.lean: CDegreeLE / CMvDegreeLE types, computable partial
  evaluation, domain summation, roundPoly, OracleInterface instances
- Defs.lean: shared algebraic core (RoundClaim, summation domain,
  round spec with role decoration)
- SingleRound.lean: one-round spec, honest prover step, verifier step
- General.lean: n-round stateChain composition, full spec/roles,
  reduction via stateChainCompUniform
- Oracle.lean: oracle decoration, verifier step stub (sorry)

Made-with: Cursor
Regenerate the umbrella import file to include new StateChain and
Sumcheck/Interaction modules. Update PORTING.md architecture section
and phase descriptions to reflect the Chain/StateChain naming, the
merged intrinsic reduction layer, and initial Sumcheck progress.

Made-with: Cursor
… and theorems

Replace every `show ... from by simpa using` cast pattern with named
recursive transport functions `Transcript.packAppend` / `unpackAppend`.
Rewrite `Reduction.comp` to use non-flat `Strategy.compWithRoles` +
`Counterpart.append`, add bridge lemma
`Counterpart.append_eq_appendFlat_mapOutput`, and reprove
`completeness_comp` / `soundness_comp` against the new structure.
Update PORTING.md with Phase 4d progress.

Made-with: Cursor
Return the next statement alongside the next witness so composed reductions can enforce prover/verifier statement agreement in completeness and reuse the same transport across the oracle and sumcheck interaction layers.

Made-with: Cursor
AI-authored by Codex (GPT-5) on behalf of Quang Dao.
quangvdao and others added 23 commits April 7, 2026 12:19
Made-with: Cursor

# Conflicts:
#	ArkLib/ProofSystem/Fri/RoundConsistency.lean
Move 50 files (Basic/*, TwoParty/*, Concurrent/*, Multiparty/*) from
ArkLib/Interaction/ to VCVio/Interaction/. These are pure interaction
theory modules with no reduction/oracle-specific dependencies.

Kept files (Reduction, Security, Oracle/*, Boundary/*, FiatShamir/*)
now import from VCVio.Interaction instead of ArkLib.Interaction.
VCVio dependency updated to quang/interaction-migration branch.

Made-with: Cursor
Implement the duplex sponge instantiation of the Fiat-Shamir transform
for the interaction-native formalization. The basic FS transform is
parametric in the ReplayOracle; this constructs a specific ReplayOracle
from a duplex sponge with a concrete permutation.

New definitions:
- SpongeAnnotation: per-node serialization metadata (serialize at sender
  nodes, squeeze length + deserialize at receiver nodes)
- buildSpongeReplayOracle: thread a CanonicalDuplexSponge through the
  Spec tree to produce a ReplayOracle
- spongeReplayOracle / toFSStatement: statement initialization wrappers
- Prover/PublicCoinVerifier/PublicCoinReduction.duplexSpongeFiatShamir:
  the full transform, composing with the existing basic FS machinery

Made-with: Cursor
Commitment scheme cutover to new Interaction.Opening interface,
streamline oracle decoration and security theorem infrastructure,
and update boundary modules for compatibility.

Made-with: Cursor
Introduce HybridSpec (branching + pass-through nodes), partial BCS
via CommitDeco, HybridDecoration for mixed plain/oracle senders,
PublicQueryVerifier decomposition, and Phase 1/2 infrastructure.
Delete the old OracleReduction/BCS/Basic.lean skeleton.

Made-with: Cursor
Add blueprint formulation for BCS transformation on hybrid oracle
reductions, CDHZ reference, and update wiki with new BCS modules.

Made-with: Cursor
Introduce Oracle.Spec, a new inductive type (.done, .public, .oracle)
that structurally distinguishes public and oracle messages, giving
definitional independence of downstream types from oracle message values.

New files:
- Spec.lean: core inductive, RoleDeco, OracleDeco, PublicTranscript,
  QueryHandle, toOracleSpec, restrictLeft/restrictRight
- Composition.lean: Reduction.id, comp, freezeSharedToPUnit, pullbackShared
- Bridge.lean: conversion from old Interaction.Spec + OracleDecoration
- BCS.lean: BCS transform directly on Oracle.Spec (CommitDeco,
  SharedTranscript, bcsSpec, wrapWithCommitments, PublicQueryVerifier)

Modified files:
- Core.lean: Oracle.Prover, Oracle.Verifier, Oracle.Reduction structures
- Execution.lean: Spec.runWithOracleCounterpart, Reduction.executeConcrete
- ArkLib.lean: imports for new modules

Made-with: Cursor
- Remove accSpec parameter from Oracle.Verifier.toFun, hardcode to []ₒ
- Add liftCounterpartAcc helper to lift counterpart accumulated oracle
  specs in composition (no sorry)
- Rewrite completeness with OutputRealizes conjunct
- Rewrite knowledgeSoundness: adversarial prover outputs oStmtOut,
  extractor sees concrete oracle data
- Add oStmtOut parameter to Extractor.Straightline
- Remove duplicate Verifier.InputRelation/OutputRelation/Accepts
- Inline Accepts into soundness definition
- Update blueprint security section to match new definitions

Made-with: Cursor
…s hypothesis

- Add answerCommittedQueries: compute committed oracle responses from
  a full transcript (deterministic, pure)
- Add bcsPhase2: evaluate PublicQueryVerifier.decide with pre-computed
  query data
- Strengthen hLangOut in knowledgeSoundness_implies_soundness to include
  OutputRealizes conjunct (required for the proof to go through)
- Add detailed proof strategy comment for KS→soundness

Made-with: Cursor
- Add OpeningDeco structure to Oracle/BCS.lean: generic opening proof
  data for committed oracle nodes, parameterized by OpeningProof type
- Update PORTING.md with comprehensive Oracle.Spec layer status:
  file inventory, design decisions, updated TODO list
- Update KS→soundness open question to reflect new formulation

Made-with: Cursor
- Add N-ary chain composition (Oracle/Chain.lean) with Spec.Chain,
  Chain.Prover.comp, Chain.Verifier.comp, and Reduction.ofChain
- Prove Spec.runWithOracleCounterpart_mapOutputWithRoles in Execution.lean
- Prove knowledgeSoundness_implies_soundness in Security.lean (no sorry)
- Rename for maximal namespacing: Prover.compAux, Verifier.compAux,
  Verifier.retargetMonads, Counterpart.liftAcc

Made-with: Cursor
The acceptOStmt/acceptWitness approach is circular: it asks the caller
to supply concrete oracle realizations, which is the "knowledge" that
KS should extract. Revert to sorry with honest existential statement
and document the difficulty. Delete the legacy version in
OracleSecurity.lean which had the same flaw.

Made-with: Cursor
Introduce Counterpart.mapOracles as the structural combinator for
oracle-counterpart monad rewriting with a per-receiver reroute.

Refactor liftAcc and Verifier.retargetMonads as thin wrappers; adjust
Security proofs and statements to match.

Made-with: Cursor
Restore local proofs and explicit query routing after the main merge,
while keeping the remaining documented proof gaps isolated.

Made-with: Cursor
Removes every file introduced by the core-rebuild branch outside this
slice, so the branch's diff against main is exactly this cumulative
slice while preserving the full core-rebuild commit history.
Removes every file introduced by the core-rebuild branch outside this
slice, so the branch's diff against main is exactly this cumulative
slice while preserving the full core-rebuild commit history.
@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

🤖 PR Summary

Mathematical Formalization - Degree-bounded subtypes for univariate and multivariate polynomials. - OracleInterface instances for polynomial types, enabling oracle-based evaluation queries and monomial degree predicates. ### Oracle Interaction Framework - Oracle.Spec inductive type for distinguishing public messages and oracle-accessible queries. - OracleDecoration, OracleVerifier, and OracleReduction for path-dependent oracle access and round-by-round challenger logic. - Bridging layer for structural conversion of legacy W-type interaction specifications into Oracle.Spec. ### Protocol Execution and Composition - executeConcrete execution engine to thread oracle interfaces through prover-verifier interactions. - Composition mechanisms including binary sequential composition, state-indexed chains, and depth-indexed telescopes. - Infrastructure for shared input reindexing and transcript simulation. ### Proof Status - All definitions and theorems are fully proved; no sorry or admit placeholders are present in the summarized modules.


Statistics

Metric Count
📝 Files Changed 12
Lines Added 7841
Lines Removed 1

Lean Declarations

✏️ **Added:** 219 declaration(s)
  • def Strategy.ofChain {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • theorem simulate_comp {ι : Type} {oSpec : OracleSpec ι} in ArkLib/Interaction/Oracle/Continuation.lean
  • def QueryHandle.routeLeft : in ArkLib/Interaction/Oracle/Spec.lean
  • theorem runWithOracleCounterpart_mapOutputWithRoles in ArkLib/Interaction/Oracle/Execution.lean
  • abbrev Counterpart (m : Type u → Type u) in ArkLib/Interaction/Reduction.lean
  • theorem PublicTranscript.split_append : in ArkLib/Interaction/Oracle/Spec.lean
  • def liftAppendLeftQuery : in ArkLib/Interaction/Oracle/Core.lean
  • def splitLiftAppendOracleQuery in ArkLib/Interaction/Oracle/Execution.lean
  • abbrev wit {StatementOut : Type u} {WitnessOut : Type v} in ArkLib/Interaction/Reduction.lean
  • theorem packAppend_unpackAppend (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • theorem splitPublicTranscript_appendPublicTranscript (n : Nat) (c : Chain (n + 1)) in ArkLib/Interaction/Oracle/Chain.lean
  • private theorem simulateQ_liftAppendRightContext_withImpl_eq in ArkLib/Interaction/Oracle/Continuation.lean
  • def toMonadDecoration {ι : Type} (oSpec : OracleSpec.{0, 0} ι) in ArkLib/Interaction/Oracle/Spec.lean
  • def retargetMonads in ArkLib/Interaction/Oracle/Composition.lean
  • def OracleDecoration.QueryHandle : in ArkLib/Interaction/Oracle/Core.lean
  • private def stateChainCompConcrete {ι : Type} {oSpec : OracleSpec ι} in ArkLib/Interaction/Oracle/StateChain.lean
  • abbrev unliftAppend (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • theorem Reduction.execute_comp in ArkLib/Interaction/Reduction.lean
  • instance instOracleInterfaceCMvDegreeLE : in ArkLib/Data/CompPoly/Basic.lean
  • abbrev liftAppendOracleFamily in ArkLib/Interaction/Oracle/Execution.lean
  • abbrev Proof (m : Type u → Type u) in ArkLib/Interaction/Reduction.lean
  • theorem mapOutput_done in ArkLib/Interaction/Reduction.lean
  • theorem splitLiftAppendOracleRange_eq in ArkLib/Interaction/Oracle/Execution.lean
  • def Reduction.comp {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def outputFamily in ArkLib/Interaction/Oracle/Continuation.lean
  • abbrev unpackAppend (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • def toOracleDeco : (n : Nat) → (c : Chain n) → OracleDeco (toSpec n c) in ArkLib/Interaction/Oracle/Chain.lean
  • private def stateChainVerifier in ArkLib/Interaction/Oracle/StateChain.lean
  • theorem split_append (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • abbrev PublicCoinCounterpart (m : Type u → Type u) in ArkLib/Interaction/Reduction.lean
  • theorem runWithOracleCounterpart_mapCounterpartOutput in ArkLib/Interaction/Oracle/Execution.lean
  • abbrev stateChainFamily in ArkLib/Interaction/Reduction.lean
  • def promoteStatementToShared in ArkLib/Interaction/Oracle/Continuation.lean
  • private def compFlat {ι : Type} {oSpec : OracleSpec ι} in ArkLib/Interaction/Oracle/Continuation.lean
  • def Reduction.execute {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • abbrev OracleProver {ι : Type} (oSpec : OracleSpec.{0, 0} ι) in ArkLib/Interaction/Oracle/Core.lean
  • def Decoration.ofChain {S : Type u → Type v} in ArkLib/Interaction/Reduction.lean
  • abbrev stmt {StatementOut : Type u} {WitnessOut : Type v} in ArkLib/Interaction/Reduction.lean
  • theorem answerSplitLiftAppendQueryAppend_eq in ArkLib/Interaction/Oracle/Execution.lean
  • def answerSplitLiftAppendQuery in ArkLib/Interaction/Oracle/Execution.lean
  • theorem unpackAppend_packAppend (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • def compWithRoles {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • abbrev stateChainComp {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def Reduction.freezeSharedToPUnit in ArkLib/Interaction/Oracle/Composition.lean
  • def forgetExecuteWitness in ArkLib/Interaction/Oracle/Execution.lean
  • theorem toSpec_succ {n : Nat} (spec : Oracle.Spec) in ArkLib/Interaction/Oracle/Chain.lean
  • def comp {ι : Type} {oSpec : OracleSpec ι} in ArkLib/Interaction/Oracle/Continuation.lean
  • def liftAppendRightQuery : in ArkLib/Interaction/Oracle/Core.lean
  • def Spec.runWithOracleCounterpart in ArkLib/Interaction/Oracle/Execution.lean
  • def appendPublicTranscript (n : Nat) (c : Chain (n + 1)) in ArkLib/Interaction/Oracle/Chain.lean
  • theorem PublicTranscript.liftAppend_split : in ArkLib/Interaction/Oracle/Spec.lean
  • def QueryHandle.routeRight : in ArkLib/Interaction/Oracle/Spec.lean
  • def appendRight : in ArkLib/Interaction/Oracle/Core.lean
  • theorem simulateQ_ext in ArkLib/Interaction/Oracle/Core.lean
  • theorem PublicTranscript.append_split : in ArkLib/Interaction/Oracle/Spec.lean
  • def toSpec : (n : Nat) → Chain n → Oracle.Spec in ArkLib/Interaction/Oracle/Chain.lean
  • theorem Spec.runWithOracleCounterpart_mapOutputWithRoles in ArkLib/Interaction/Oracle/Execution.lean
  • def freezeSharedToPUnit in ArkLib/Interaction/Oracle/Continuation.lean
  • def PublicTranscript.append : in ArkLib/Interaction/Oracle/Spec.lean
  • abbrev LawfulCommMonad (m : Type u → Type u) [Monad m] in ArkLib/Interaction/Reduction.lean
  • def id in ArkLib/Interaction/Oracle/Continuation.lean
  • theorem simulateQ_cast_dep in ArkLib/Interaction/Oracle/Core.lean
  • theorem OracleReduction.mapExecuteWitness_eq_execute_mappedOutput in ArkLib/Interaction/Oracle/Execution.lean
  • def Chain : Nat → Type 1 in ArkLib/Interaction/Oracle/Chain.lean
  • private def chainStrategy in ArkLib/Interaction/Oracle/Continuation.lean
  • def OracleDecoration.answerQuery : in ArkLib/Interaction/Oracle/Core.lean
  • @[simp] theorem toSpec_zero (c : Chain 0) : toSpec 0 c = .done in ArkLib/Interaction/Oracle/Chain.lean
  • theorem toInteractionSpec_append : in ArkLib/Interaction/Oracle/Spec.lean
  • def restrictLeft {r : Type → Type} [Monad r] : in ArkLib/Interaction/Oracle/Spec.lean
  • private def liftSimulatedMidOracleContextContinuation in ArkLib/Interaction/Oracle/Continuation.lean
  • def restrictRight {r : Type → Type} [Monad r] : in ArkLib/Interaction/Oracle/Spec.lean
  • theorem append_split (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • def mapOutputWithRoles {m : Type u → Type u} [Functor m] : in ArkLib/Interaction/Reduction.lean
  • theorem appendLeft_range : in ArkLib/Interaction/Oracle/Core.lean
  • def Reduction.pullbackShared in ArkLib/Interaction/Oracle/Composition.lean
  • private def compSimulate in ArkLib/Interaction/Oracle/Continuation.lean
  • abbrev mapReceiver {m : Type u → Type u} [Functor m] in ArkLib/Interaction/Reduction.lean
  • abbrev withRoles (m : Type u → Type u) in ArkLib/Interaction/Reduction.lean
  • def QueryHandle.splitAppend : in ArkLib/Interaction/Oracle/Spec.lean
  • def liftOutput in ArkLib/Interaction/Oracle/Core.lean
  • def Reduction.stateChainComp {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def verifierQueryCMvPolynomial (points : Fin n → R) : in ArkLib/Data/CompPoly/Basic.lean
  • abbrev PublicCoinVerifier (m : Type u → Type u) in ArkLib/Interaction/Reduction.lean
  • instance instOracleInterfaceCDegreeLE [Semiring R] : in ArkLib/Data/CompPoly/Basic.lean
  • def QueryHandle.appendLeft : in ArkLib/Interaction/Oracle/Spec.lean
  • def QueryHandle : in ArkLib/Interaction/Oracle/Spec.lean
  • def toVerifier {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def OracleDeco.append : in ArkLib/Interaction/Oracle/Spec.lean
  • def outputFamily in ArkLib/Interaction/Oracle/Chain.lean
  • abbrev liftAppend (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • def Counterpart.ofChain {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def run in ArkLib/Interaction/Oracle/Continuation.lean
  • def QueryHandle.appendRight : in ArkLib/Interaction/Oracle/Spec.lean
  • theorem liftM_cast_query_add_right in ArkLib/Interaction/Oracle/Core.lean
  • abbrev packAppend (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • private def chainVerifier in ArkLib/Interaction/Oracle/Continuation.lean
  • def OracleCounterpart.mapOutput {ι : Type} {oSpec : OracleSpec.{0, 0} ι} in ArkLib/Interaction/Oracle/Core.lean
  • def collapseAppendOracleComp in ArkLib/Interaction/Oracle/Execution.lean
  • def Reduction.executeConcrete in ArkLib/Interaction/Oracle/Execution.lean
  • def transcriptAppend : in ArkLib/Interaction/Oracle/Spec.lean
  • noncomputable def ofOracleDecoration in ArkLib/Interaction/Oracle/Bridge.lean
  • theorem mapOutputWithRoles_eq_focal_mapOutput {m : Type u → Type u} [Functor m] : in ArkLib/Interaction/Reduction.lean
  • def run in ArkLib/Interaction/Oracle/Execution.lean
  • def replay {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def appendFlat {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def compWithRolesFlat {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • abbrev liftAppendOracleIdx in ArkLib/Interaction/Oracle/Execution.lean
  • def append : in ArkLib/Interaction/Reduction.lean
  • def compAux in ArkLib/Interaction/Oracle/Composition.lean
  • theorem toOracleSpec_appendRight : in ArkLib/Interaction/Oracle/Spec.lean
  • def Reduction.ofChain in ArkLib/Interaction/Oracle/Chain.lean
  • theorem toOracleSpec_appendLeft : in ArkLib/Interaction/Oracle/Spec.lean
  • abbrev roles in ArkLib/Interaction/Reduction.lean
  • def OracleDecoration.toOracleSpec : in ArkLib/Interaction/Oracle/Core.lean
  • def appendLeft : in ArkLib/Interaction/Oracle/Core.lean
  • private def liftSimulatedMidOracleContext in ArkLib/Interaction/Oracle/Continuation.lean
  • abbrev InteractiveOracleVerifier {ι : Type} (oSpec : OracleSpec.{0, 0} ι) in ArkLib/Interaction/Oracle/Core.lean
  • def answerQuery : in ArkLib/Interaction/Oracle/Spec.lean
  • def toReduction {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def toMonadDecoration {ι : Type} (oSpec : OracleSpec.{0, 0} ι) in ArkLib/Interaction/Oracle/Core.lean
  • def outputAtEnd in ArkLib/Interaction/Oracle/Continuation.lean
  • abbrev OracleCounterpart {ι : Type} (oSpec : OracleSpec.{0, 0} ι) in ArkLib/Interaction/Oracle/Core.lean
  • def OracleDecoration.oracleContextImpl in ArkLib/Interaction/Oracle/Core.lean
  • def liftAppendLeftContext : in ArkLib/Interaction/Oracle/Core.lean
  • def verifierOutput in ArkLib/Interaction/Oracle/Core.lean
  • def mapOutput in ArkLib/Interaction/Reduction.lean
  • theorem liftAppendOracleFamily_append_eq in ArkLib/Interaction/Oracle/Execution.lean
  • def execute in ArkLib/Interaction/Oracle/Continuation.lean
  • theorem toMonadDecoration_append in ArkLib/Interaction/Oracle/Execution.lean
  • abbrev liftAppendProd (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • instance instOracleInterfaceCPolynomial [Nontrivial R] : in ArkLib/Data/CompPoly/Basic.lean
  • def mapExecuteWitness in ArkLib/Interaction/Oracle/Execution.lean
  • def runWithRoles {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def toOracleSpec : in ArkLib/Interaction/Oracle/Spec.lean
  • theorem simulateQ_cast_spec in ArkLib/Interaction/Oracle/Core.lean
  • def toVerifier in ArkLib/Interaction/Oracle/Core.lean
  • def RoleDeco : Oracle.Spec → Type in ArkLib/Interaction/Oracle/Spec.lean
  • theorem PublicTranscript.liftAppend_append : in ArkLib/Interaction/Oracle/Spec.lean
  • def accImplAfter : in ArkLib/Interaction/Oracle/Execution.lean
  • theorem projectPublic_transcriptAppend : in ArkLib/Interaction/Oracle/Spec.lean
  • def PublicTranscript.liftAppend : in ArkLib/Interaction/Oracle/Spec.lean
  • def comp in ArkLib/Interaction/Oracle/Chain.lean
  • theorem answerSplitLiftAppendQueryAppend_simOracle0 in ArkLib/Interaction/Oracle/Execution.lean
  • def od : {n : Nat} → (c : Chain n) → OracleDecoration (toSpec c) (roles c) in ArkLib/Interaction/Oracle/Continuation.lean
  • def RoleDeco.append : in ArkLib/Interaction/Oracle/Spec.lean
  • theorem runWithRoles_mapOutputWithRoles_mapOutput in ArkLib/Interaction/Reduction.lean
  • def toRoles : (n : Nat) → (c : Chain n) → RoleDeco (toSpec n c) in ArkLib/Interaction/Oracle/Chain.lean
  • def liftAppendRightContext : in ArkLib/Interaction/Oracle/Core.lean
  • def toSpecRoles : (s : Oracle.Spec) → RoleDeco s → RoleDecoration s.toInteractionSpec in ArkLib/Interaction/Oracle/Spec.lean
  • abbrev stateChainCompWithRoles {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • theorem simulateQ_liftAppendRightContext_eq in ArkLib/Interaction/Oracle/Core.lean
  • def mapOracles in ArkLib/Interaction/Oracle/Composition.lean
  • theorem verifierQueryCMvPolynomial_run (poly : CMvPolynomial n R) (points : Fin n → R) : in ArkLib/Data/CompPoly/Basic.lean
  • private def retargetContinuationVerifier in ArkLib/Interaction/Oracle/Continuation.lean
  • private theorem simulateQ_liftSimulatedMidOracleContext_eq in ArkLib/Interaction/Oracle/Continuation.lean
  • def HonestPubliclyEquivalent in ArkLib/Interaction/Oracle/Execution.lean
  • abbrev split (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • theorem answerQuery_appendLeft : in ArkLib/Interaction/Oracle/Core.lean
  • theorem simulateQ_cast_query_id in ArkLib/Interaction/Oracle/Core.lean
  • def toCounterpart {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • def splitPublicTranscript (n : Nat) (c : Chain (n + 1)) : in ArkLib/Interaction/Oracle/Chain.lean
  • private def liftPrefixOracleContext in ArkLib/Interaction/Oracle/Continuation.lean
  • def PublicTranscript.split : in ArkLib/Interaction/Oracle/Spec.lean
  • theorem answerQuery_appendRight : in ArkLib/Interaction/Oracle/Core.lean
  • def toInteractionSpec : Oracle.Spec → Interaction.Spec in ArkLib/Interaction/Oracle/Spec.lean
  • abbrev OracleDecoration (spec : Spec) (roles : RoleDecoration spec) in ArkLib/Interaction/Oracle/Core.lean
  • theorem rel_unliftAppend_append (s₁ : Spec) (s₂ : Transcript s₁ → Spec) in ArkLib/Interaction/Reduction.lean
  • theorem OracleReduction.executePublic_eq_map_execute in ArkLib/Interaction/Oracle/Execution.lean
  • def projectPublic : in ArkLib/Interaction/Oracle/Spec.lean
  • def liftAcc in ArkLib/Interaction/Oracle/Composition.lean
  • abbrev VerifierOutput in ArkLib/Interaction/Oracle/Core.lean
  • def OracleDeco : Oracle.Spec → Type 1 in ArkLib/Interaction/Oracle/Spec.lean
  • noncomputable def ofInteractionSpec in ArkLib/Interaction/Oracle/Bridge.lean
  • def append : (s₁ : Oracle.Spec) → (PublicTranscript s₁ → Oracle.Spec) → Oracle.Spec in ArkLib/Interaction/Oracle/Spec.lean
  • def answerSplitLiftAppendQueryAppend in ArkLib/Interaction/Oracle/Execution.lean
  • private theorem simulateQ_liftSimulatedMidOracleContextContinuation_eq in ArkLib/Interaction/Oracle/Continuation.lean
  • theorem simulateQ_cast in ArkLib/Interaction/Oracle/Core.lean
  • def accSpecAfter : in ArkLib/Interaction/Oracle/Execution.lean
  • def Verifier.run {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • theorem simulateQ_liftAppendRightContext_eq_of_impl in ArkLib/Interaction/Oracle/Core.lean
  • def executeConcrete in ArkLib/Interaction/Oracle/Execution.lean
  • abbrev Verifier (m : Type u → Type u) in ArkLib/Interaction/Reduction.lean
  • def CDegreeLE (R : Type) [BEq R] [Semiring R] [LawfulBEq R] (d : ℕ) in ArkLib/Data/CompPoly/Basic.lean
  • abbrev verifierMD in ArkLib/Interaction/Oracle/Core.lean
  • instance instOracleInterfaceCMvPolynomial : in ArkLib/Data/CompPoly/Basic.lean
  • theorem appendRight_range : in ArkLib/Interaction/Oracle/Core.lean
  • def runWithOracleCounterpart in ArkLib/Interaction/Oracle/Execution.lean
  • def runConcrete in ArkLib/Interaction/Oracle/Execution.lean
  • theorem simulate_compFlat {ι : Type} {oSpec : OracleSpec ι} in ArkLib/Interaction/Oracle/Continuation.lean
  • def Reduction.toVerifier in ArkLib/Interaction/Oracle/Core.lean
  • theorem mapOutput_id {m : Type u → Type u} [Functor m] [LawfulFunctor m] in ArkLib/Interaction/Reduction.lean
  • def Reduction.ofChain {m : Type u → Type u} [Monad m] in ArkLib/Interaction/Reduction.lean
  • abbrev OracleStatement {ιₛ : Type v} (OStmt : ιₛ → Type w) in ArkLib/Interaction/Oracle/Core.lean
  • abbrev Prover (m : Type u → Type u) in ArkLib/Interaction/Reduction.lean
  • def IndividualDegreeLE (deg : ℕ) (p : CMvPolynomial n R) : Prop in ArkLib/Data/CompPoly/Basic.lean
  • def PublicTranscript : Oracle.Spec → Type in ArkLib/Interaction/Oracle/Spec.lean
  • theorem runWithRoles_compWithRoles_append in ArkLib/Interaction/Reduction.lean
  • def Reduction.id in ArkLib/Interaction/Oracle/Composition.lean
  • def toSpec : {n : Nat} → Chain n → Spec in ArkLib/Interaction/Oracle/Continuation.lean
  • def HonestExecutionEquivalent in ArkLib/Interaction/Oracle/Execution.lean
  • theorem simulateQ_liftAppendLeftContext_eq in ArkLib/Interaction/Oracle/Core.lean
  • theorem simulateQ_collapseAppendOracleComp in ArkLib/Interaction/Oracle/Execution.lean
  • def roles : {n : Nat} → (c : Chain n) → RoleDecoration (toSpec c) in ArkLib/Interaction/Oracle/Continuation.lean
  • noncomputable def ofRoleDecoration in ArkLib/Interaction/Oracle/Bridge.lean
  • def PublicTranscript.unliftAppend : in ArkLib/Interaction/Oracle/Spec.lean
  • def chainComp in ArkLib/Interaction/Oracle/Continuation.lean
  • def executePublicConcrete in ArkLib/Interaction/Oracle/Execution.lean
  • def Reduction.comp in ArkLib/Interaction/Oracle/Composition.lean
  • abbrev Prover {ι : Type} (oSpec : OracleSpec.{0, 0} ι) in ArkLib/Interaction/Oracle/Core.lean
  • theorem simulateQ_map in ArkLib/Interaction/Oracle/Execution.lean
  • theorem OracleReduction.HonestExecutionEquivalent.toPublic in ArkLib/Interaction/Oracle/Execution.lean
  • def OracleReduction.stateChainComp {ι : Type} {oSpec : OracleSpec ι} in ArkLib/Interaction/Oracle/StateChain.lean
  • abbrev HonestProverOutput (StatementOut : Type u) (WitnessOut : Type v) in ArkLib/Interaction/Reduction.lean
  • def PublicTranscript.packAppend : in ArkLib/Interaction/Oracle/Spec.lean
  • def CMvDegreeLE in ArkLib/Data/CompPoly/Basic.lean
  • def Verifier.run in ArkLib/Interaction/Oracle/Execution.lean
  • theorem simulateQ_cast_query in ArkLib/Interaction/Oracle/Core.lean
  • abbrev withMonads (spec : Spec) (roles : RoleDecoration spec) in ArkLib/Interaction/Reduction.lean
  • def pullbackShared in ArkLib/Interaction/Oracle/Continuation.lean

sorry Tracking

  • No sorrys were added, removed, or affected.

📋 **Additional Analysis**

Style and Naming Guidelines

Naming Conventions

  • Acronyms as Words: The definitions IndividualDegreeLE, CDegreeLE, and CMvDegreeLE in ArkLib/Data/CompPoly/Basic.lean violate the naming convention to treat acronyms as words. They should be renamed to IndividualDegreeLe, CDegreeLe, and CMvDegreeLe (or follow snake_case if intended as theorem-like predicates).
  • Predicate Naming: IndividualDegreeLE is a def returning Prop. According to the guidelines, predicates should generally use the Is prefix if they are adjectives (e.g., IsIndividualDegreeLe). Furthermore, as a term/function, it should use lowerCamelCase (e.g., individualDegreeLe) unless it is a class.
  • Symbol Dictionary: The naming dictionary specifies le for the symbol. The current implementation uses the all-caps LE variant in several type names.

Syntax and Formatting

  • Function Binders: The guide states a preference for fun x ↦ ... over λ x, .... The provided diff uses the fun x => ... syntax throughout (e.g., in ArkLib/Interaction/Oracle/Bridge.lean and ArkLib/Interaction/Oracle/Spec.lean). For consistency with Mathlib style, should be used.
  • Empty Lines: Guidelines prohibit empty lines inside definitions or proofs. Violations occur in:
    • ArkLib/Interaction/Oracle/Core.lean (e.g., inside toMonadDecoration, liftOutput, and mapOutput).
    • ArkLib/Interaction/Oracle/Spec.lean (e.g., inside toOracleSpec).
  • Line Length: Several lines exceed the 100-character limit, particularly in ArkLib/Interaction/Oracle/Execution.lean within the definitions of answerSplitLiftAppendQueryAppend and simulateQ_liftAppendRightContext_eq_of_impl.

Documentation Standards

  • Missing Docstrings: Several definitions lack the required docstrings:
    • CDegreeLE and CMvDegreeLE in ArkLib/Data/CompPoly/Basic.lean.
    • simulateQ_map, liftAppendOracleIdx, liftAppendOracleFamily, splitLiftAppendOracleQuery, and answerSplitLiftAppendQuery in ArkLib/Interaction/Oracle/Execution.lean.
    • PublicTranscript.unliftAppend and PublicTranscript.packAppend in ArkLib/Interaction/Oracle/Spec.lean.

Variable Conventions

  • Carrier Types: In ArkLib/Data/CompPoly/Basic.lean, variable {R : Type} is used. The guidelines recommend variable {R : Type*} [Semiring R] for algebraic carrier types to allow for universe polymorphism.

Framework Assessment

  • Interaction Refactor: The PR successfully implements the transition of the oracle protocol model from a flat representation to one natively built on the W-type interaction tree (Interaction.Oracle.Spec).
  • Unification: The code achieves the project goal of unifying OracleCounterpart with the generic Counterpart.withMonads framework by using toMonadDecoration.

📄 **Per-File Summaries**
  • ArkLib.lean: This update expands the ArkLib library's reach by adding imports for composite polynomials and a new framework for oracle-based interaction and reductions. No sorry or admit placeholders were introduced.
  • ArkLib/Data/CompPoly/Basic.lean: This file introduces degree-bounded subtypes for computable univariate and multivariate polynomials, along with their corresponding OracleInterface instances for evaluation. It also defines a predicate for individual monomial degrees in multivariate polynomials and provides a correctness theorem for oracle-based polynomial queries.
  • ArkLib/Interaction/Oracle/Bridge.lean: This file introduces new definitions to structurally convert W-type-based interaction specifications and their decorations into the newer Oracle.Spec inductive format. It provides functions to map specifications, roles, and oracle interfaces, utilizing a default-element function to handle sender node continuations.
  • ArkLib/Interaction/Oracle/Chain.lean: This file introduces Oracle.Spec.Chain, a depth-indexed telescope for defining n-round oracle protocols without explicit external state. It provides utilities to flatten these chains into single Oracle.Spec definitions and includes composition mechanisms for building full prover strategies, verifier counterparts, and Oracle.Reduction instances from per-round steps.
  • ArkLib/Interaction/Oracle/Composition.lean: This file introduces infrastructure for composing Oracle.Reduction objects, including an identity reduction, shared-input reindexing utilities, and sequential binary composition. The implementation utilizes structural recursion on Oracle.Spec to ensure that interaction specifications and role decorations reduce definitionally, and the file contains no sorry or admit placeholders.
  • ArkLib/Interaction/Oracle/Continuation.lean: This file introduces infrastructure for sequentially composing and chaining oracle reductions within multi-party interactive protocols. It defines a Chain inductive type for multi-round continuations and provides robust combinators for executing, simulating, and reindexing these composed structures. No sorry or admit placeholders are introduced in the definitions or proofs.
  • ArkLib/Interaction/Oracle/Core.lean: This file establishes the core infrastructure for oracle-based interactions, bridging interaction specifications with VCVio's oracle computation model. It introduces key definitions such as OracleDecoration, OracleVerifier, and OracleReduction to enable path-dependent oracle access and round-by-round challengers. The module also includes supporting theorems for query routing and transcript simulation without any sorry or admit placeholders.
  • ArkLib/Interaction/Oracle/Execution.lean: This file implements the concrete execution engine for oracle-decorated reductions and verifiers, providing infrastructure to run prover-verifier interactions while threading ambient, input, and accumulated oracle interfaces. It introduces core execution definitions such as executeConcrete and runWithOracleCounterpart, establishes notions of honest execution equivalence, and provides theorems for distributing monad decorations over appended specifications. The implementation consists of new definitions and theorems with complete proofs and no sorry placeholders.
  • ArkLib/Interaction/Oracle/Spec.lean: This file introduces Oracle.Spec, an inductive type for formalizing oracle reduction protocols by distinguishing between public messages and oracle-accessible messages. It provides comprehensive infrastructure for managing public transcripts, query handling, and verifier monad decorations, along with utilities for the sequential composition of these specifications.
  • ArkLib/Interaction/Oracle/StateChain.lean: This file introduces machinery for N-ary state chain composition of oracle reductions, defining stateChainVerifier and OracleReduction.stateChainComp to manage prover and verifier state transitions across multi-stage interactive protocols. These definitions facilitate threading accumulated oracle specifications stage-by-stage and composing complex protocols from simpler steps without any sorry placeholders.
  • ArkLib/Interaction/Reduction.lean: This file introduces a framework for interactive protocol participants—including provers, verifiers, and reductions—based on W-type interaction trees rather than flat lists. It provides definitions and theorems for executing and composing these protocols sequentially and through state-indexed chains.

Last updated: 2026-06-11 20:21 UTC.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants