arithmetic-circuits-0.2.0: Arithmetic circuits for zkSNARKs

Safe HaskellNone
LanguageHaskell2010

Circuit.Affine

Description

Definition of arithmetic circuits that only contain addition, scalar multiplications and constant gates, along with its direct evaluation and translation into affine maps.

Synopsis

Documentation

data AffineCircuit i f Source #

Arithmetic circuits without multiplication, i.e. circuits describe affine transformations.

Constructors

Add (AffineCircuit i f) (AffineCircuit i f) 
ScalarMul f (AffineCircuit i f) 
ConstGate f 
Var i 
Instances
(Eq f, Eq i) => Eq (AffineCircuit i f) Source # 
Instance details

Defined in Circuit.Affine

Methods

(==) :: AffineCircuit i f -> AffineCircuit i f -> Bool #

(/=) :: AffineCircuit i f -> AffineCircuit i f -> Bool #

(Read f, Read i) => Read (AffineCircuit i f) Source # 
Instance details

Defined in Circuit.Affine

(Show f, Show i) => Show (AffineCircuit i f) Source # 
Instance details

Defined in Circuit.Affine

Generic (AffineCircuit i f) Source # 
Instance details

Defined in Circuit.Affine

Associated Types

type Rep (AffineCircuit i f) :: Type -> Type #

Methods

from :: AffineCircuit i f -> Rep (AffineCircuit i f) x #

to :: Rep (AffineCircuit i f) x -> AffineCircuit i f #

(ToJSON i, ToJSON f) => ToJSON (AffineCircuit i f) Source # 
Instance details

Defined in Circuit.Affine

(FromJSON f, FromJSON i) => FromJSON (AffineCircuit i f) Source # 
Instance details

Defined in Circuit.Affine

(NFData f, NFData i) => NFData (AffineCircuit i f) Source # 
Instance details

Defined in Circuit.Affine

Methods

rnf :: AffineCircuit i f -> () #

(Pretty i, Show f) => Pretty (AffineCircuit i f) Source # 
Instance details

Defined in Circuit.Affine

Methods

pretty :: AffineCircuit i f -> Doc #

prettyList :: [AffineCircuit i f] -> Doc #

type Rep (AffineCircuit i f) Source # 
Instance details

Defined in Circuit.Affine

mapVarsAffine :: (i -> j) -> AffineCircuit i f -> AffineCircuit j f Source #

Apply mapping to variable names, i.e. rename variables. (Ideally the mapping is injective.)

evalAffineCircuit Source #

Arguments

:: Num f 
=> (i -> vars -> Maybe f)

lookup function for variable mapping

-> vars

variables

-> AffineCircuit i f

circuit to evaluate

-> f 

Evaluate the arithmetic circuit without mul-gates on the given input. Variable map is assumed to have all the variables referred to in the circuit. Failed lookups are currently treated as 0.

affineCircuitToAffineMap Source #

Arguments

:: (Num f, Ord i) 
=> AffineCircuit i f

circuit to translate

-> (f, Map i f)

constant part and non-constant part

Convert non-mul circuit to a vector representing the evaluation function. We use a Map to represent the potentially sparse vector.

evalAffineMap Source #

Arguments

:: (Num f, Ord i) 
=> (f, Map i f)

program split into constant and non-constant part

-> Map i f

input variables

-> f 

Evaluating the affine map representing the arithmetic circuit without mul-gates against inputs. If the input map does not have a variable that is referred to in the affine map, then it is treated as a 0.

dotProduct :: (Num f, Ord i) => Map i f -> Map i f -> f Source #