41 lines
1.5 KiB
Haskell
Raw Normal View History

module NTT.Class where
--------------------------------------------------------------------------------
import Data.Kind
import Class.Field
import Class.Poly
import NTT.Subgroup
--------------------------------------------------------------------------------
{-
class NTT ntt where
type Field ntt :: Type
type Poly ntt :: Type
forwardNTT :: Subgroup F -> Poly F -> FlatArray F
inverseNTT :: Subgroup F -> FlatArray F -> Poly F
shiftedForwardNTT :: Subgroup F -> F -> Poly F -> FlatArray F
shiftedInverseNTT :: Subgroup F -> F -> FlatArray F -> Poly F
asymmForwardNTT :: Subgroup F -> Poly F -> Subgroup F -> FlatArray F
-}
{-
-- | Polynomials which over an FFT-friend field support NTT operations
class (Univariate p, FFTField (Coeff p)) => UnivariateFFT p where
-- | Number-theoretical transform (evaluate on a subgroup)
ntt :: FFTSubgroup (Coeff p) -> p -> FlatArray (Coeff p)
-- | Inverse number-theoretical transform (interpolate on a subgroup)
intt :: FFTSubgroup (Coeff p) -> FlatArray (Coeff p) -> p
-- | Shifts @f@ by @eta@, evaluating @f(eta*omega^k)@
shiftedNTT :: FFTSubgroup (Coeff p) -> Coeff p -> p -> FlatArray (Coeff p)
-- | Shifts @f@ by @eta^-1@, interpolating @f@ so that @f(eta^-1 * omega^k) = y_k@
shiftedINTT :: FFTSubgroup (Coeff p) -> Coeff p -> FlatArray (Coeff p) -> p
-- | Evaluate on a larger subgroup than the polynomial is defined on
asymmNTT :: FFTSubgroup (Coeff p) -> p -> FFTSubgroup (Coeff p) -> FlatArray (Coeff p)
-}