Skip to content

Splice bit-op virtuals in ideal check#194

Open
latifkasuli wants to merge 1 commit into
NethermindEth:mainfrom
latifkasuli:feat/bit-op-ideal-check
Open

Splice bit-op virtuals in ideal check#194
latifkasuli wants to merge 1 commit into
NethermindEth:mainfrom
latifkasuli:feat/bit-op-ideal-check

Conversation

@latifkasuli
Copy link
Copy Markdown
Contributor

@latifkasuli latifkasuli commented May 18, 2026

Summary

  • store the declared binary-poly cell width on UairSignature so runtime materialization sites can apply bit ops with the right width
  • add runtime-width DynamicPolynomialF bit-op helpers and use them from ideal-check
  • splice bit-op virtuals into the ideal-check down row as [shifted_binary, bit_op_binary, shifted_arbitrary, shifted_int]
  • add a mixed-splice test UAIR and exercise it through both ideal-check prover paths

Part of #185. This intentionally stops before CPR/mp-eval/protocol proof-wire plumbing.

Notes

  • The ideal-check test helpers now allow mixed-type signatures. The projection layer already supports binary_poly, arbitrary_poly, and int columns; the mixed-splice fixture needs that to catch binary/bit-op/arbitrary down-row ordering regressions.

Validation

  • .githooks/pre-push
  • cargo test -p zinc-piop ideal_check::tests::test_successful_verification
  • cargo test -p zinc-test-uair test_constraint_degrees
  • cargo test -p zinc-uair bit_op_specs
  • cargo test -p zinc-piop projections::tests

@latifkasuli latifkasuli force-pushed the feat/bit-op-ideal-check branch from c752ff5 to 5924e37 Compare May 18, 2026 10:41
@albert-garreta
Copy link
Copy Markdown
Member

Hi! Thanks Latif for this work. For the purposes of reviewing it, could you maybe share a short explanation of what are your overall plans towards getting the virtual column functionality fully implemented? Like what steps are you planning to take and how do you expect the final PR to look like?

@latifkasuli
Copy link
Copy Markdown
Contributor Author

Hi! Thanks Latif for this work. For the purposes of reviewing it, could you maybe share a short explanation of what are your overall plans towards getting the virtual column functionality fully implemented? Like what steps are you planning to take and how do you expect the final PR to look like?

Thanks Albert. The overall goal here is to unblock #91: writing the SHA-256 and ECDSA UAIRs from the paper. #185 is the protocol/UAIR infrastructure needed before those UAIRs can be implemented cleanly, especially for SHA-style bit operations without committing every derived column as an independent witness.

I’m trying to keep the work as a small stacked sequence:

Planned next steps:

  1. Add the prover/verifier protocol plumbing for bit-op virtual columns:

    • prover materializes bit-op virtual MLEs from committed source columns,
    • CPR carries their claimed evaluations separately from ordinary shifted down_evals,
    • multipoint evaluation batches those claims,
    • verifier derives the final bit-op openings from the source lifted openings via Lemma 2.3, so virtual columns are not trusted as independent witnesses.
  2. Add focused e2e/tamper coverage:

    • a small UAIR with ShR and Rot virtuals pinned to committed expected columns,
    • tamper tests for bit-op evals and source lifted openings.
  3. Once bit-op virtuals are merged, use that machinery toward Writing SHA-256 and ECDSA UAIRs (or porting from main-beta) #91:

    • first SHA-256 UAIR pieces that need ROTR / SHR,
    • then the remaining SHA-256/ECDSA UAIR work.
      If affine/linear-combination virtual columns are still needed for the paper’s intended SHA/ECDSA shape, I’ll keep that as a separate follow-up rather than mixing it into the bit-op PRs.

The final shape I’m aiming for is: UAIRs declare virtual columns in the signature; the prover derives them from existing columns; and the verifier binds them back to the committed/public source openings. That should give #91 the virtual-column support it needs without inflating the SHA/ECDSA UAIR PRs with protocol plumbing.

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