Documentation

ArkLib.Data.Domain.CosetFftDomain.Block

This module provides a definition of a block of a coset FFT domain (definition 4.16 from [ACFY24b]).

Main definitions #

Main results #

References #

def Domain.CosetFftDomainClass.block {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] (ω : D) (k : ) (x : F) :

The kth roots of x from the domain ω.

This is the definition 4.16 from [ACFY24b]. Note, we do not require x to be from a subdomain.

Instances For
    @[simp]
    theorem Domain.CosetFftDomainClass.mem_block {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {k : } {x y : F} :
    y block ω k x y ω y ^ 2 ^ k = x

    An equivalent definition of the membership to a block.

    @[simp]
    theorem Domain.CosetFftDomainClass.block_x_0 {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {k : } :
    block ω k 0 =

    There are no roots of 0 in any domain.

    @[simp]
    theorem Domain.CosetFftDomainClass.block_k_1 {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {x : F} :
    block ω 0 x = if x ω then {x} else
    theorem Domain.CosetFftDomainClass.block_eq_nthRootsFinset {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {k : } {x : F} :

    An alternative definition of block in terms of Polynomial.nthRootsFinset.

    @[simp]
    theorem Domain.CosetFftDomainClass.card_block_le {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {k : } {x : F} :
    (block ω k x).card 2 ^ k

    The cardinality of a block does not exceed its degree.

    def Domain.CosetFftDomainClass.blockIdx {ι : Type} [Fintype ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] (ω : D) (k : ) (x : F) :

    The set of indices of a block of ω at x of the degree k.

    Instances For
      theorem Domain.CosetFftDomainClass.mem_blockIdx {ι : Type} [Fintype ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] {ω : D} {k : } {x : F} {i : ι} :
      i blockIdx ω k x ω i ^ 2 ^ k = x

      The definition of membership to a blockIdx.

      @[simp]
      theorem Domain.CosetFftDomainClass.mem_blockIdx_self {ι : Type} [Fintype ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] {ω : D} {k : } {i : ι} :
      i blockIdx ω k (ω i ^ 2 ^ k)
      theorem Domain.CosetFftDomainClass.mem_blockIdx_iff_mem_block {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {k : } {x : F} {i : ι} :
      i blockIdx ω k x ω i block ω k x
      @[simp]
      theorem Domain.CosetFftDomainClass.blockIdx_x_0 {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {k : } :
      blockIdx ω k 0 =

      There are no roots of 0 in any domain.

      theorem Domain.CosetFftDomainClass.blockIdx_k_1_of_eq {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {x : F} {i : ι} (hi : ω i = x) :
      blockIdx ω 0 x = {i}
      theorem Domain.CosetFftDomainClass.blockIdx_k_1_of_ne_mem {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {x : F} (hx : xω) :
      blockIdx ω 0 x =
      theorem Domain.CosetFftDomainClass.blockIdx_eq_preimage_block {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {k : } {x : F} :
      blockIdx ω k x = (block ω k x).preimage ω

      blockIdx is the preimage of block.

      @[simp]
      theorem Domain.CosetFftDomainClass.card_blockIdx {ι : Type} [Fintype ι] [AddCommGroup ι] {F : Type} [Field F] [DecidableEq F] {D : Type} [FunLike D ι F] [CosetFftDomainClass D ι F] {ω : D} {k : } {x : F} :
      (blockIdx ω k x).card = (block ω k x).card

      The cardinality of blockIdx is that of block.