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: