package tezos-plonk
Install
dune-project
Dependency
Authors
Maintainers
Sources
md5=03d6ca5fb1c6865b6628e0dd49575895
sha512=20494d1d00ded43f3625e06e037d3bad04f0a7320914b542b882d3d0293c9b02845b7ca9ee4ff0eb8ea495eff5633016861c39370cca92c12aacae0e84483ca4
doc/tezos-plonk.distribution/Distribution/Main_protocol/Make/argument-1-PP/PC/BasePC/Polynomial/Polynomial/index.html
Module Polynomial.Polynomial
This library implements polynomials of Bls12_381.Fr as arrays of contiguous memory in C, allowing much better performances for algorithms that scan the polynomials.
An array a of size n represents the polynomial $\sum_i^(n-1) ai X^i$ The length of a is always greater or equal than the degree+1 of its corresponding polynomial, if greater it padded with zeros. As a consequence a polynomial has many representations, namely all arrays with trailing zeros.
type scalar = scalarval allocate : int -> tallocate len creates a zero polynomial of size len
val erase : t -> uniterase p overwrites a polynomial p with a zero polynomial of the same size as the polynomial p
val generate_biased_random_polynomial : int -> tgenerate_biased_random_polynomial n generates a random polynomial of degree strictly lower than n, the distribution is NOT uniform, it is biased towards sparse polynomials and particularly towards the zero polynomial
val random : int -> trandom n generates a uniformly sampled polynomial among the set of all polynomials of degree strictly lower than n
val degree : t -> intdegree p returns the degree of a polynomial p. Returns -1 for the zero polynomial
get p i returns the i-th element of a given array p, a coefficient of X^i in p
val to_string : t -> stringto_string p returns the string representation of a polynomial p
to_dense_coefficients p returns the dense representation of a polynomial p, i.e., it converts a C array to an OCaml array
of_dense p creates a value of type t from the dense representation of a polynomial p, i.e., it converts an OCaml array to a C array
of_coefficients p creates a value of type t from the sparse representation of a polynomial p, i.e., it converts an OCaml array to a C array
val is_zero : t -> boolis_zero p checks whether a polynomial p is the zero polynomial
val zero : tzero is the zero polynomial, the neutral element for polynomial addition
val one : tone is the constant polynomial one, the neutral element for polynomial multiplication
add_inplace res a b computes polynomial addition of a and b and writes the result in res
Note: res can be equal to either a or b
sub_inplace res a b computes polynomial subtraction of a and b and writes the result in res
Note: res can be equal to either a or b
mul computes polynomial multiplication
Note: naive quadratic algorithm, result's size is the sum of arguments' size
mul_by_scalar computes multiplication of a polynomial by a blst_fr element
mul_by_scalar_inplace res s p computes multiplication of a polynomial p by a blst_fr element s and stores it in res
linear_with_powers p s computes ∑ᵢ sⁱ·p.(i). This function is more efficient than linear + powers
val opposite_inplace : t -> unitopposite_inplace p computes polynomial negation
Note: The argument p is overwritten
division_xn p n c returns the quotient and remainder of the division of p by (X^n + c)
blind ~nb_blinds n p adds to polynomial p a random multiple of polynomial (X^n - 1), chosen by uniformly sampling a polynomial b of degree strictly lower than nb_blinds and multiplying it by (X^n - 1), b is returned as the second argument