CirclePoint
is computed as:
Circle Domain
In a STARK protocol, the computation trace is interpolated as a low-degree polynomial over a domain using FFT. For Circle STARKs, this domain consists of points on the circle curve and is referred to as the circle domain. The circle domain is constructed as the union of two disjoint cosets: Here, is a subgroup of size , and is the coset offset. This union is also called the twin-coset. The second coset in the union can be viewed as the negation (or conjugation) of the first: Therefore, it suffices to store only the half coset , and generate the full domain via its conjugates. The circle domain is defined in S-two as:Canonic Coset
For a specific choice of offset , the twin-coset becomes a coset of a larger subgroup. In particular, if is a generator of a subgroup of order , then: This result is proven in Proposition 1 of the Circle STARKs paper. Such domains are called standard position coset, or are referred to as canonic cosets. They are implemented as follows:CanonicCoset
represents the full coset , while CircleDomain
is represented with its half coset .
Thus to compute the CircleDomain
from the CanonicCoset
, first calculate the half coset , which will be used to initialize the CircleDomain
as shown below:
CircleDomain
is canonic by checking the step size of the half coset against the initial coset offset.
In the CircleDomain
implementation, only the half coset is explicitly stored.
If CircleDomain
is canonic, must be a generator of the subgroup , which has order i.e. .
Recall that the generator of the subgroup is .
Thus, the step size between consecutive elements in the half coset is , and the initial point is .
Therefore, the ratio between the step size and the initial coset offset is:
This means that in a canonic coset, the step size is exactly four times the initial coset offset.
This condition is used to check whether a CircleDomain
is canonic, as shown below: