Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Arithmetic circuits

Introduction

Through our sum-check protocol and multilinear extensions notebooks, we have started to replicate Thaler’s elegant presentation 1 of the GKR interactive proof for circuit evaluation, as introduced by Goldwasser, Kalai, and Rothblum 23. We are nearly ready to present the GKR protocol in full, but before we do, there’s one final topic to address: arithmetic circuits.

Modeling computations

An arithmetic circuit is defined as a special kind of directed graph, which is assumed to be familiar to the reader.

Topological ordering

An arithmetic circuit cannot have cycles because it represents a well-defined, finite computation. They are designed to compute polynomials in a finite number of steps. If a cycle existed, it would be unclear where to start, and the computation would never terminate. For example, the cycle below results in the expression 2+(3×(2+(3×)))2 + (3 \times (2 + ( 3 \times \cdots ))) (or 3×(2+(3×(2+)))3 \times (2 + (3 \times ( 2 + \cdots )))), which is ambiguous and infinite, making it meaningless. Arithmetic circuits are acyclic to ensure that each operation is performed in a clear, finite sequence.

from graphviz import Digraph

# Non-DAG example
dot = Digraph()
dot.node('2', '2', shape='circle')
dot.node('+', '+', shape='circle')
dot.node('3', '3', shape='circle')
dot.node('×', '×', shape='circle') 
dot.edge('2', '+')
dot.edge('+', '3')
dot.edge('3', '×') 
dot.edge('×', '2')
dot.attr(rankdir='LR')
display(dot)
Loading...

A topological ordering (or topological sort) of a directed graph is a linear ordering of its vertices such that, for every directed edge from vertex uu to vertex vv, vertex uu appears before vertex vv in the ordering. In other words, the ordering respects the direction of the edges.

More formally:

Since an arithmetic circuit is acyclic, a topological order of its nodes allows us to evaluate the circuit in a sequence where each node (operation) depends only on previously evaluated nodes. This ensures that each computation is performed in a clear, finite order, starting from the input nodes and progressing through intermediate gates to the output nodes. Without a valid topological order, cycles would create circular dependencies, preventing the circuit from being evaluated at all. Therefore, topological ordering guarantees that the computation proceeds in a finite, unambiguous manner.

Gate-value functions

A gate-value function is a function that records the values computed by all gates in a given layer of an arithmetic circuit, where gates are indexed by their binary identifiers. We formalize this notion below.

Wiring predicates

For the purposes of the next definition, we order bitstrings of a given length lexicographically with the most significant bit first (equivalently, by the numeric value of their binary representation). That is, if a=(a0,,am1){0,1}m\mathbf{a} = (a_0,\ldots,a_{m - 1}) \in \{0,1\}^m and b=(b0,,bm1){0,1}m\mathbf{b} = (b_0,\ldots,b_{m - 1}) \in \{0,1\}^m, we write

ab2m1a0+2m2a1++20am12m1b0+2m2b1++20bm1.\mathbf{a} \, \le \, \mathbf{b} \quad \Leftrightarrow \quad 2^{m - 1}a_{0} + 2^{m - 2}a_{1} + \cdots + 2^0a_{m - 1} \, \le \, 2^{m - 1}b_{0} + 2^{m - 2}b_1 + \cdots + 2^0b_{m - 1}.

This ordering is fixed once and for all and serves only as a convenient convention.

Thaler’s identity

The structure of an arithmetic circuit is fully described by the wiring predicates addi\mathrm{add}_i and multi\mathrm{mult}_i, which encode its topology but not the values assigned to the gates by the gate-value functions WiW_i. The circuit’s computation can be expressed in terms of the gate-value functions and wiring predicates, as shown in part (a) of the following proposition. Part (b) enables us to apply the sum-check protocol to verify the output of a circuit, as we will explore in the next notebook. We refer to this as Thaler’s identity, a simplification by Thaler 1 of an identity of Cormode, Mitzenmacher, and Thaler 4.

ac_01.print_verification_propagation_equation()

VERIFICATION OF LAYER-WISE GATE-VALUE PROPAGATION EQUATION
LAYER 1

W_1(0,0) = 4, sum { add_1((0,0),x,y) [ W_2(x) + W_2(y) ] + mult_1((0,0),x,y) [ W_2(x) W_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W_1(0,1) = 9, sum { add_1((0,1),x,y) [ W_2(x) + W_2(y) ] + mult_1((0,1),x,y) [ W_2(x) W_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W_1(1,0) = 1, sum { add_1((1,0),x,y) [ W_2(x) + W_2(y) ] + mult_1((1,0),x,y) [ W_2(x) W_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W_1(1,1) = 10, sum { add_1((1,1),x,y) [ W_2(x) + W_2(y) ] + mult_1((1,1),x,y) [ W_2(x) W_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓

LAYER 0

W_0(0) = 3, sum { add_0((0),x,y) [ W_1(x) + W_1(y) ] + mult_0((0),x,y) [ W_1(x) W_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W_0(1) = 0, sum { add_0((1),x,y) [ W_1(x) + W_1(y) ] + mult_0((1),x,y) [ W_1(x) W_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓

ac_01.print_verification_propagation_equation(mle=True)

VERIFICATION OF THALER'S IDENTITY
LAYER 1

W̃_1(0,0) = 4, sum { add̃_1((0,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W̃_1(0,1) = 9, sum { add̃_1((0,1),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,1),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W̃_1(0,2) = 3, sum { add̃_1((0,2),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,2),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W̃_1(0,3) = 8, sum { add̃_1((0,3),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,3),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 8 ✓
W̃_1(0,4) = 2, sum { add̃_1((0,4),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,4),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 2 ✓
W̃_1(0,5) = 7, sum { add̃_1((0,5),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,5),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 7 ✓
W̃_1(0,6) = 1, sum { add̃_1((0,6),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,6),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W̃_1(0,7) = 6, sum { add̃_1((0,7),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,7),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 6 ✓
W̃_1(0,8) = 0, sum { add̃_1((0,8),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,8),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓
W̃_1(0,9) = 5, sum { add̃_1((0,9),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,9),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(0,10) = 10, sum { add̃_1((0,10),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((0,10),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓
W̃_1(1,0) = 1, sum { add̃_1((1,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W̃_1(1,1) = 10, sum { add̃_1((1,1),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,1),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓
W̃_1(1,2) = 8, sum { add̃_1((1,2),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,2),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 8 ✓
W̃_1(1,3) = 6, sum { add̃_1((1,3),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,3),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 6 ✓
W̃_1(1,4) = 4, sum { add̃_1((1,4),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,4),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W̃_1(1,5) = 2, sum { add̃_1((1,5),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,5),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 2 ✓
W̃_1(1,6) = 0, sum { add̃_1((1,6),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,6),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓
W̃_1(1,7) = 9, sum { add̃_1((1,7),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,7),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W̃_1(1,8) = 7, sum { add̃_1((1,8),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,8),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 7 ✓
W̃_1(1,9) = 5, sum { add̃_1((1,9),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,9),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(1,10) = 3, sum { add̃_1((1,10),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((1,10),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W̃_1(2,0) = 9, sum { add̃_1((2,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W̃_1(2,1) = 0, sum { add̃_1((2,1),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,1),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓
W̃_1(2,2) = 2, sum { add̃_1((2,2),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,2),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 2 ✓
W̃_1(2,3) = 4, sum { add̃_1((2,3),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,3),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W̃_1(2,4) = 6, sum { add̃_1((2,4),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,4),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 6 ✓
W̃_1(2,5) = 8, sum { add̃_1((2,5),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,5),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 8 ✓
W̃_1(2,6) = 10, sum { add̃_1((2,6),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,6),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓
W̃_1(2,7) = 1, sum { add̃_1((2,7),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,7),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W̃_1(2,8) = 3, sum { add̃_1((2,8),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,8),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W̃_1(2,9) = 5, sum { add̃_1((2,9),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,9),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(2,10) = 7, sum { add̃_1((2,10),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((2,10),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 7 ✓
W̃_1(3,0) = 6, sum { add̃_1((3,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 6 ✓
W̃_1(3,1) = 1, sum { add̃_1((3,1),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,1),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W̃_1(3,2) = 7, sum { add̃_1((3,2),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,2),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 7 ✓
W̃_1(3,3) = 2, sum { add̃_1((3,3),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,3),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 2 ✓
W̃_1(3,4) = 8, sum { add̃_1((3,4),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,4),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 8 ✓
W̃_1(3,5) = 3, sum { add̃_1((3,5),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,5),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W̃_1(3,6) = 9, sum { add̃_1((3,6),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,6),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W̃_1(3,7) = 4, sum { add̃_1((3,7),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,7),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W̃_1(3,8) = 10, sum { add̃_1((3,8),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,8),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓
W̃_1(3,9) = 5, sum { add̃_1((3,9),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,9),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(3,10) = 0, sum { add̃_1((3,10),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((3,10),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓
W̃_1(4,0) = 3, sum { add̃_1((4,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W̃_1(4,1) = 2, sum { add̃_1((4,1),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,1),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 2 ✓
W̃_1(4,2) = 1, sum { add̃_1((4,2),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,2),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W̃_1(4,3) = 0, sum { add̃_1((4,3),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,3),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓
W̃_1(4,4) = 10, sum { add̃_1((4,4),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,4),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓
W̃_1(4,5) = 9, sum { add̃_1((4,5),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,5),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W̃_1(4,6) = 8, sum { add̃_1((4,6),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,6),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 8 ✓
W̃_1(4,7) = 7, sum { add̃_1((4,7),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,7),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 7 ✓
W̃_1(4,8) = 6, sum { add̃_1((4,8),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,8),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 6 ✓
W̃_1(4,9) = 5, sum { add̃_1((4,9),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,9),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(4,10) = 4, sum { add̃_1((4,10),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((4,10),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W̃_1(5,0) = 0, sum { add̃_1((5,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓
W̃_1(5,1) = 3, sum { add̃_1((5,1),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,1),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W̃_1(5,2) = 6, sum { add̃_1((5,2),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,2),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 6 ✓
W̃_1(5,3) = 9, sum { add̃_1((5,3),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,3),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W̃_1(5,4) = 1, sum { add̃_1((5,4),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,4),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W̃_1(5,5) = 4, sum { add̃_1((5,5),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,5),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W̃_1(5,6) = 7, sum { add̃_1((5,6),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,6),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 7 ✓
W̃_1(5,7) = 10, sum { add̃_1((5,7),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,7),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓
W̃_1(5,8) = 2, sum { add̃_1((5,8),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,8),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 2 ✓
W̃_1(5,9) = 5, sum { add̃_1((5,9),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,9),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(5,10) = 8, sum { add̃_1((5,10),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((5,10),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 8 ✓
W̃_1(6,0) = 8, sum { add̃_1((6,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 8 ✓
W̃_1(6,1) = 4, sum { add̃_1((6,1),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,1),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W̃_1(6,2) = 0, sum { add̃_1((6,2),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,2),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓
W̃_1(6,3) = 7, sum { add̃_1((6,3),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,3),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 7 ✓
W̃_1(6,4) = 3, sum { add̃_1((6,4),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,4),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W̃_1(6,5) = 10, sum { add̃_1((6,5),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,5),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓
W̃_1(6,6) = 6, sum { add̃_1((6,6),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,6),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 6 ✓
W̃_1(6,7) = 2, sum { add̃_1((6,7),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,7),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 2 ✓
W̃_1(6,8) = 9, sum { add̃_1((6,8),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,8),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W̃_1(6,9) = 5, sum { add̃_1((6,9),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,9),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(6,10) = 1, sum { add̃_1((6,10),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((6,10),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W̃_1(7,0) = 5, sum { add̃_1((7,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,1) = 5, sum { add̃_1((7,1),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,1),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,2) = 5, sum { add̃_1((7,2),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,2),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,3) = 5, sum { add̃_1((7,3),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,3),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,4) = 5, sum { add̃_1((7,4),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,4),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,5) = 5, sum { add̃_1((7,5),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,5),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,6) = 5, sum { add̃_1((7,6),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,6),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,7) = 5, sum { add̃_1((7,7),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,7),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,8) = 5, sum { add̃_1((7,8),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,8),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,9) = 5, sum { add̃_1((7,9),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,9),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(7,10) = 5, sum { add̃_1((7,10),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((7,10),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(8,0) = 2, sum { add̃_1((8,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 2 ✓
W̃_1(8,1) = 6, sum { add̃_1((8,1),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,1),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 6 ✓
W̃_1(8,2) = 10, sum { add̃_1((8,2),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,2),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓
W̃_1(8,3) = 3, sum { add̃_1((8,3),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,3),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W̃_1(8,4) = 7, sum { add̃_1((8,4),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,4),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 7 ✓
W̃_1(8,5) = 0, sum { add̃_1((8,5),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,5),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓
W̃_1(8,6) = 4, sum { add̃_1((8,6),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,6),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W̃_1(8,7) = 8, sum { add̃_1((8,7),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,7),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 8 ✓
W̃_1(8,8) = 1, sum { add̃_1((8,8),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,8),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W̃_1(8,9) = 5, sum { add̃_1((8,9),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,9),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_1(8,10) = 9, sum { add̃_1((8,10),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((8,10),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W̃_1(9,0) = 10, sum { add̃_1((9,0),x,y) [ W̃_2(x) + W̃_2(y) ] + mult̃_1((9,0),x,y) [ W̃_2(x) W̃_2(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓

(Displayed 100 of 121 checked equations.)

LAYER 0

W̃_0(0) = 3, sum { add̃_0((0),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((0),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 3 ✓
W̃_0(1) = 0, sum { add̃_0((1),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((1),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 0 ✓
W̃_0(2) = 8, sum { add̃_0((2),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((2),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 8 ✓
W̃_0(3) = 5, sum { add̃_0((3),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((3),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 5 ✓
W̃_0(4) = 2, sum { add̃_0((4),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((4),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 2 ✓
W̃_0(5) = 10, sum { add̃_0((5),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((5),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 10 ✓
W̃_0(6) = 7, sum { add̃_0((6),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((6),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 7 ✓
W̃_0(7) = 4, sum { add̃_0((7),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((7),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 4 ✓
W̃_0(8) = 1, sum { add̃_0((8),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((8),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 1 ✓
W̃_0(9) = 9, sum { add̃_0((9),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((9),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 9 ✓
W̃_0(10) = 6, sum { add̃_0((10),x,y) [ W̃_1(x) + W̃_1(y) ] + mult̃_0((10),x,y) [ W̃_1(x) W̃_1(y)] } over (x,y) in {0,1}^2 × {0,1}^2 = 6 ✓

Conclusion

Fix zFsi\mathbf{z} \in \mathbb{F}^{s_i}. We may view the summand on the right-hand side of Thaler’s identity (2) as a function of x\mathbf{x} and y\mathbf{y}, rather than of z\mathbf{z}. Specifically, for fixed z\mathbf{z} it defines a polynomial function

Fz:Fsi+1×Fsi+1F,F_{\mathbf{z}} : \mathbb{F}^{s_{i + 1}} \times \mathbb{F}^{s_{i + 1}} \to \mathbb{F},

which we may identify with a polynomial function on F2si+1\mathbb{F}^{2s_{i+1}}.

Moreover, this polynomial function may be represented by a polynomial that is multilinear (and hence of low total degree) in the variables (x,y)(\mathbf{x},\mathbf{y}). Thaler’s identity asserts that W~i(z)\widetilde{W}_i(\mathbf{z}) is equal to the sum of FzF_{\mathbf{z}} over the Boolean hypercube {0,1}2si+1\{0,1\}^{2s_{i + 1}}. Consequently, for any fixed z\mathbf{z}, verification of (2) is amenable to the sum-check protocol.

Appendix A: further examples

References
  1. Thaler, J. (2015). A note on the GKR protocol. https://api.semanticscholar.org/CorpusID:16402332
  2. Goldwasser, S., Kalai, Y. T., & Rothblum, G. N. (2008). Delegating computation: Interactive proofs for muggles. Proceedings of the 40th Annual ACM Symposium on Theory of Computing (STOC), 113–122. 10.1145/1374376.1374396
  3. Goldwasser, S., Kalai, Y. T., & Rothblum, G. N. (2015). Delegating computation: Interactive proofs for muggles. Journal of the ACM, 62(4), 1–64. 10.1145/2699436
  4. Cormode, G., Mitzenmacher, M., & Thaler, J. (2012). Practical verified computation with streaming interactive proofs. Proceedings of the 3rd Innovations in Theoretical Computer Science Conference (ITCS), 90–112. 10.1145/2090236.2090245