This module contains an EvaluationDomain
abstraction for performing
various kinds of polynomial arithmetic on top of the scalar field.
In pairing-based SNARKs like Groth16, we need to calculate a quotient
polynomial over a target polynomial with roots at distinct points associated
with each constraint of the constraint system. In order to be efficient, we
choose these roots to be the powers of a 2n root of unity in the
field. This allows us to perform polynomial operations in O(n) by performing
an O(n log n) FFT over such a domain.