Fixed columns

powdr-pil requires the definition of fixed columns at the time of declaration.

For example:

col fixed ONES = [1]*; // this is valid
// col fixed ONES; // this is invalid

A number of mechanisms are supported to declare fixed columns. Let N be the total length of the column we're defining.

Values with repetitions

powdr-pil supports a basic language to define the value of constant columns using:

  • arrays, for example [1, 2, 3]
  • repetition, for example [1, 2]*
  • concatenation, for example [1, 2] + [3, 4]

These mechanisms can be combined, as long as a single repetition is used per column definition.

// valid, as for a given total length, only one column fits this definition for a given `N`
col fixed A = [1, 2] + [3, 4]* + [5];

// invalid, as many columns fit this definition
// col fixed A = [1, 2]* + [3, 4]*

Mappings

A column can be seen as a mapping from integers to field elements. In this context, different functions are supported:

col fixed B(i) { i + 1 };

col fixed C(i) {match i {
    0 => 1,
    _ => 0
}};