Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Multilinear Ext. of Branching Programs

The techniques in this section were first explored by Holmgren and Rothblum [HR18].

Introduction

For a general function, , we can evaluate its multilinear extension as:

This requires time, linear in the domain of the function, because we enumerate every possible input. For a black-box function this is the best we can do: the smallest possible description of the function may be its evaluation table. However, it turns out that for certain classes of functions, we can do better, much better. One such class is the class of read-once branching programs, which we will now explore.

Read-Once Branching Programs

Let be the Alphabet, with the (bit) size of a single symbol. Let be the length of the branching program. A Read-Once Branch Program is a function:

Implemented by "walking" through a directed graph: starting at a vertex designated the "source", until you reach the "sink" vertexes, each of which are labeled with a field element.

A picture is worth a thousand words.

Let b = 1, n = 4, in other words:

The program looks like this:

Read-once branching program generated from DOT, showing the same structure programmatically

The program has length 4 and width 2.

  • What is is the output of the program on 0 0 1 1?
  • What is is the output of the program on 1 0 1 0?
  • What does this program do?

Let b = 3, n = 2. In other words:

The program looks like this:

Read-once branching program with alphabet size b=3, showing multi-labeled edges between states over 2 steps

This simply means that there are e.g. 4 edges from the (teal) source node with the labels 000, 101, 011, 110 going to the top green node. We omit these to avoid cluttering the diagram with a lot of edges. The program has length 2: because it takes two symbols from the alphabet .

  • What is the width of this Read-Once Branching Program?
  • What is the output of the braching program on 000 010?
  • What is the output of the braching program on 011 110?
  • What does this program do?

Matrix Branching Programs

To "arithmetize" the read-once braching programs, instead express them as Matrix Branching Programs.

For simplcity, we let , i.e. . The technique extends trivially to larger .

A matrix branching program consists of pairs of matrixes :

And sink vector .

To evaluate the Matrix Branching Program on compute:

The output of the MBP is , the first entry of . Observe that even though matrix multiplication is linear, Matrix Branching Programs (MBPs) are not linear in : the picking of each matrix from the pairs gives them some "discrete" structure.

Adjacency Matrixes: ROBP MBP

Walks in directed graphs can be expressed by application of an adjacency matrix , which has iff. there is an edge from node to and otherwise. Hence it should be no surprise that we can eeasily convert Read-Once Branching Programs to Matrix Branching Programs: the trick is to define pairs of matrixes:

Such that describes the transitions from the current stage to the next when input and describes the transitions from the current stage to the next when . Letting , meaning the "active" node is the first node in the stage, by computing:

Where has

An example and an image:

Recall this guy:

Read-once branching program generated from DOT, showing the same structure programmatically

If we look just at the 0-labelled edges:

Graph showing only the 0-labeled edge transitions in the branching program

We can describe the transition using this sequence of matrixes:

The way to read these: the row indicates the current node, the column is the next node. There is a iff. the current node, goes to the next node on input .

Similarly, we can look at the “1 edges”:

Graph showing only the 1-labeled edge transitions in the branching program

As a santity check, let’s check the output on 1010:

Step-by-step:

  1. The program is in the bottom state:
  2. Leaves the program in the bottom state:
  3. Changes the program state to the top:
  4. Leaves the program state in the top state:

By convention the Matrix Branching Program produces as output: as that is the first entry of the vector produced by the product we just computed.

  1. What if the label of the second sink was not 0? What if the label of the first sink was not 1? What if they were switched?
  2. What if my branching program had multiple sinks with the same label?
  3. What if some of the sink labels were not 0/1?
    e.g. how do I make the ROBP output instead of ?

Hint: Use “single row” matrixes, i.e.

Symbolic Evaluation

A note about Symbolic Evaluation of MBPs:

  1. By computing: And taking the first row, equivalently: Where .

  2. We can compute the output for any sink as

This means that for an input we can "precompute" a vector of length which allows us to evaluate the branching program for any sink vector: e.g. we can explore which node we would end up in if we "started" in another node than

Multilinear Basis Polynomials

All the "non-linearlity" of a Matrix Branching Program is "contained" in the selection of the correct matrix. To implement this section, we use multilinear Lagrange polynomials:

Such that for and we have:

And otherwise .

Low-Degree Extensions of Matrix Branching Programs

Let's start small, with an MBP of length 1. I claim that:

Is the low-degree extension of the MBP

  • Pause and think: that does this expression “do”?
  • Convince yourself: when and it is correct.
  • Why is the unique “multi“linear extension?

This trick extends to MBPs of length greater than :

  1. We compute the "mixed" matrixies:
  2. We compute their product:
  3. Compute and take the first component.

Another, completely equivalent method:

  1. Define: Where which has the effect of "taking" the first row.
  2. Iteratively compute:
  3. Output

Which allows you to compute the low-degree extension in a streaming way, if needed for your application.

Let’s compute the multilinear extension for the simple MBP from the earlier example:

Read-once branching program generated from DOT, showing the same structure programmatically

Recall the matrices are: for , and:

Let’s compute the multilinear extension and evaluate it at .

First, compute the mixed matrices :

For with :

For with :

Now compute using the streaming method with :

  1. Start:

Finally:

This makes sense! The multilinear extension at gives us the “average” of and .

Why is this the unique multilinear extension of ?

Hint, we need to check:

  • is multilinear
  • agrees with on