Skip to content

Perf/gkr/solvable var #1471

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 70 commits into
base: master
Choose a base branch
from
Open

Perf/gkr/solvable var #1471

wants to merge 70 commits into from

Conversation

Tabaie
Copy link
Contributor

@Tabaie Tabaie commented Apr 7, 2025

A "solvable" variable in a polynomial is one that only occurs in monomials of total degree 1, and with a non-zero coefficient. Its value can be uniquely determined from the polynomial's and those of the other variables. For example, in $\ f(x,y,z) = 2x + yz $, $\ x $ is a solvable variable because we can get $\ x = \frac {f(x,y,z) - yz} 2 $.

In GKR, at the end of the sumcheck subprotocol for wire $\ w $, we end up with a claim of the form $\ w(r_1, r_2, \dots, r_n) = y $, where the symbol $\ w$ represents the current wire, as well as the multilinear extension of its value across all instances, represented on an n-dimensional hypercube . More explicitly,
$$g\big( w_1(r_1, r_2, \dots, r_n), w_2(r_1, r_2, \dots, r_n), \dots, w_m(r_1, r_2, \dots, r_n)\big) = y$$
where $\ w_1, \dots, w_m$ are the input wires to $\ w$'s gate, $\ g$.

The prover sends explicit claimed values $\ y_i = w_i(r_1, r_2, \dots, r_n) $. The verifier checks if the consistency of these claims with the original claim about $\ w $, i.e. whether indeed $\ g(y_1, y_2, \dots, y_m) = y$ and records the new claims to be verified later. In a non-interactive settings, $\ y_1, y_2, \dots, y_m$ are hashed, as new prover messages.

This optimization is based on the observation that if, say, the first variable of $\ g$ is solvable according to the above definition, the claim $\ y_1$ will not need to be hashed.

For a circuit consisting of 56K Poseidon2 permutations (equivalent to the Linea blob decompression circuit) this saves about 25K constraints, only about 0.5% of total constraints.

@Tabaie Tabaie changed the base branch from master to docs/gkr April 10, 2025 03:04
@Tabaie Tabaie marked this pull request as ready for review April 10, 2025 03:43
@Tabaie Tabaie requested a review from Copilot April 10, 2025 03:43
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Base automatically changed from docs/gkr to allgkr April 11, 2025 20:18
Base automatically changed from allgkr to master April 12, 2025 14:42
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.

1 participant