
Figure 1: Preprocessed trace as a selector
isFirst column, where the value is 1 for the first row and 0 for all other rows.
Boilerplate code is omitted for brevity. Please refer to the full example code for the full implementation.
IsFirstColumn struct that will be used as a preprocessed trace.
We will use the gen_column() function to generate a CircleEvaluation struct that is 1 for the first row and 0 for all other rows.
The id() function is needed to identify this column when evaluating the constraints.
is_first_id field to retrieve the row value of the IsFirstColumn struct.
Then, we compose two constraints using the IsFirstColumn row value as a selector and adding them together.
If you’re unfamiliar with how max_constraint_log_degree_bound(&self) should be implemented, please refer to this note.