diff --git a/src/gadgets/arithmetic_extension.rs b/src/gadgets/arithmetic_extension.rs index b53f03a6..394975cb 100644 --- a/src/gadgets/arithmetic_extension.rs +++ b/src/gadgets/arithmetic_extension.rs @@ -7,7 +7,7 @@ use crate::field::field_types::Field; use crate::gates::arithmetic::{ArithmeticExtensionGate, NUM_ARITHMETIC_OPS}; use crate::iop::generator::{GeneratedValues, SimpleGenerator}; use crate::iop::target::Target; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::util::bits_u64; diff --git a/src/gadgets/range_check.rs b/src/gadgets/range_check.rs index 4be8f80e..c878e799 100644 --- a/src/gadgets/range_check.rs +++ b/src/gadgets/range_check.rs @@ -3,7 +3,7 @@ use crate::field::field_types::Field; use crate::gates::base_sum::BaseSumGate; use crate::iop::generator::{GeneratedValues, SimpleGenerator}; use crate::iop::target::{BoolTarget, Target}; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; impl, const D: usize> CircuitBuilder { diff --git a/src/gadgets/split_base.rs b/src/gadgets/split_base.rs index 716472f5..20bd50a2 100644 --- a/src/gadgets/split_base.rs +++ b/src/gadgets/split_base.rs @@ -5,7 +5,7 @@ use crate::field::field_types::Field; use crate::gates::base_sum::BaseSumGate; use crate::iop::generator::{GeneratedValues, SimpleGenerator}; use crate::iop::target::{BoolTarget, Target}; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; impl, const D: usize> CircuitBuilder { diff --git a/src/gadgets/split_join.rs b/src/gadgets/split_join.rs index 45c87de9..fe3d724a 100644 --- a/src/gadgets/split_join.rs +++ b/src/gadgets/split_join.rs @@ -3,7 +3,7 @@ use crate::field::field_types::Field; use crate::gates::base_sum::BaseSumGate; use crate::iop::generator::{GeneratedValues, SimpleGenerator}; use crate::iop::target::{BoolTarget, Target}; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::util::ceil_div_usize; diff --git a/src/gates/arithmetic.rs b/src/gates/arithmetic.rs index 12be0bc2..8bbacf3a 100644 --- a/src/gates/arithmetic.rs +++ b/src/gates/arithmetic.rs @@ -6,7 +6,7 @@ use crate::field::extension_field::FieldExtension; use crate::gates::gate::Gate; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGenerator}; use crate::iop::target::Target; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; diff --git a/src/gates/base_sum.rs b/src/gates/base_sum.rs index e53b72f6..641a8150 100644 --- a/src/gates/base_sum.rs +++ b/src/gates/base_sum.rs @@ -6,7 +6,7 @@ use crate::field::field_types::Field; use crate::gates::gate::Gate; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGenerator}; use crate::iop::target::Target; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::plonk_common::{reduce_with_powers, reduce_with_powers_ext_recursive}; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; diff --git a/src/gates/constant.rs b/src/gates/constant.rs index eb4b5b12..894016d6 100644 --- a/src/gates/constant.rs +++ b/src/gates/constant.rs @@ -5,7 +5,7 @@ use crate::gates::gate::Gate; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGenerator}; use crate::iop::target::Target; use crate::iop::wire::Wire; -use crate::iop::witness::{PartialWitness, PartitionWitness}; +use crate::iop::witness::PartitionWitness; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; diff --git a/src/gates/exponentiation.rs b/src/gates/exponentiation.rs index e85c361e..d57c9001 100644 --- a/src/gates/exponentiation.rs +++ b/src/gates/exponentiation.rs @@ -7,7 +7,7 @@ use crate::gates::gate::Gate; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGenerator}; use crate::iop::target::Target; use crate::iop::wire::Wire; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::circuit_data::CircuitConfig; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; diff --git a/src/gates/gmimc.rs b/src/gates/gmimc.rs index 6bf868c0..837b64c2 100644 --- a/src/gates/gmimc.rs +++ b/src/gates/gmimc.rs @@ -8,7 +8,7 @@ use crate::hash::gmimc::gmimc_automatic_constants; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGenerator}; use crate::iop::target::Target; use crate::iop::wire::Wire; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; diff --git a/src/gates/insertion.rs b/src/gates/insertion.rs index 91d71d2e..4c1e6fdf 100644 --- a/src/gates/insertion.rs +++ b/src/gates/insertion.rs @@ -9,7 +9,7 @@ use crate::gates::gate::Gate; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGenerator}; use crate::iop::target::Target; use crate::iop::wire::Wire; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; diff --git a/src/gates/interpolation.rs b/src/gates/interpolation.rs index 4eabbe31..56924742 100644 --- a/src/gates/interpolation.rs +++ b/src/gates/interpolation.rs @@ -11,7 +11,7 @@ use crate::gates::gate::Gate; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGenerator}; use crate::iop::target::Target; use crate::iop::wire::Wire; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; use crate::polynomial::polynomial::PolynomialCoeffs; diff --git a/src/gates/random_access.rs b/src/gates/random_access.rs index 85da3eaf..4b8c913a 100644 --- a/src/gates/random_access.rs +++ b/src/gates/random_access.rs @@ -8,7 +8,7 @@ use crate::gates::gate::Gate; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGenerator}; use crate::iop::target::Target; use crate::iop::wire::Wire; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; diff --git a/src/gates/reducing.rs b/src/gates/reducing.rs index 01c05306..ee3232b2 100644 --- a/src/gates/reducing.rs +++ b/src/gates/reducing.rs @@ -6,7 +6,7 @@ use crate::field::extension_field::FieldExtension; use crate::gates::gate::Gate; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGenerator}; use crate::iop::target::Target; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; diff --git a/src/iop/generator.rs b/src/iop/generator.rs index 8cbc35ca..f71a1826 100644 --- a/src/iop/generator.rs +++ b/src/iop/generator.rs @@ -1,16 +1,12 @@ -use std::collections::HashMap; -use std::convert::{identity, TryInto}; use std::fmt::Debug; use crate::field::extension_field::target::ExtensionTarget; use crate::field::extension_field::{Extendable, FieldExtension}; use crate::field::field_types::Field; -use crate::hash::hash_types::{HashOut, HashOutTarget, MerkleCapTarget}; -use crate::hash::merkle_tree::MerkleCap; -use crate::iop::target::{BoolTarget, Target}; +use crate::hash::hash_types::{HashOut, HashOutTarget}; +use crate::iop::target::Target; use crate::iop::wire::Wire; -use crate::iop::witness::{MatrixWitness, PartialWitness, PartitionWitness, Witness}; -use crate::plonk::permutation_argument::ForestNode; +use crate::iop::witness::{PartitionWitness, Witness}; use crate::timed; use crate::util::timing::TimingTree; diff --git a/src/iop/witness.rs b/src/iop/witness.rs index 8241c7d5..daab0df6 100644 --- a/src/iop/witness.rs +++ b/src/iop/witness.rs @@ -1,17 +1,13 @@ use std::convert::TryInto; -use anyhow::{ensure, Result}; - use crate::field::extension_field::target::ExtensionTarget; use crate::field::extension_field::{Extendable, FieldExtension}; use crate::field::field_types::Field; -use crate::gates::gate::GateInstance; use crate::hash::hash_types::HashOutTarget; use crate::hash::hash_types::{HashOut, MerkleCapTarget}; use crate::hash::merkle_tree::MerkleCap; use crate::iop::target::{BoolTarget, Target}; use crate::iop::wire::Wire; -use crate::plonk::copy_constraint::CopyConstraint; use crate::plonk::permutation_argument::ForestNode; pub trait Witness { diff --git a/src/plonk/circuit_builder.rs b/src/plonk/circuit_builder.rs index b9a6ec6e..171ba9c4 100644 --- a/src/plonk/circuit_builder.rs +++ b/src/plonk/circuit_builder.rs @@ -19,13 +19,12 @@ use crate::hash::hashing::hash_n_to_hash; use crate::iop::generator::{CopyGenerator, RandomValueGenerator, WitnessGenerator}; use crate::iop::target::{BoolTarget, Target}; use crate::iop::wire::Wire; -use crate::iop::witness::{PartialWitness, PartitionWitness}; +use crate::iop::witness::PartitionWitness; use crate::plonk::circuit_data::{ CircuitConfig, CircuitData, CommonCircuitData, ProverCircuitData, ProverOnlyCircuitData, VerifierCircuitData, VerifierOnlyCircuitData, }; use crate::plonk::copy_constraint::CopyConstraint; -use crate::plonk::permutation_argument::ForestNode; use crate::plonk::plonk_common::PlonkPolynomials; use crate::polynomial::polynomial::PolynomialValues; use crate::util::context_tree::ContextTree; @@ -645,12 +644,10 @@ impl, const D: usize> CircuitBuilder { constants_sigmas_commitment, sigmas: transpose_poly_values(sigma_vecs), subgroup, - copy_constraints: self.copy_constraints, gate_instances: self.gate_instances, public_inputs: self.public_inputs, marked_targets: self.marked_targets, - num_virtual_targets: self.virtual_target_index, - partition, + partition_witness: partition, }; // The HashSet of gates will have a non-deterministic order. When converting to a Vec, we diff --git a/src/plonk/circuit_data.rs b/src/plonk/circuit_data.rs index 379e0d61..869b91b5 100644 --- a/src/plonk/circuit_data.rs +++ b/src/plonk/circuit_data.rs @@ -13,7 +13,6 @@ use crate::iop::generator::WitnessGenerator; use crate::iop::target::Target; use crate::iop::witness::{PartialWitness, PartitionWitness}; use crate::plonk::copy_constraint::CopyConstraint; -use crate::plonk::permutation_argument::ForestNode; use crate::plonk::proof::ProofWithPublicInputs; use crate::plonk::prover::prove; use crate::plonk::verifier::verify; @@ -146,18 +145,14 @@ pub(crate) struct ProverOnlyCircuitData, const D: usize> { pub sigmas: Vec>, /// Subgroup of order `degree`. pub subgroup: Vec, - /// The circuit's copy constraints. - pub copy_constraints: Vec, /// The concrete placement of each gate in the circuit. pub gate_instances: Vec>, /// Targets to be made public. pub public_inputs: Vec, /// A vector of marked targets. The values assigned to these targets will be displayed by the prover. pub marked_targets: Vec>, - /// Number of virtual targets used in the circuit. - pub num_virtual_targets: usize, - - pub partition: PartitionWitness, + /// Partial witness holding the copy constraints information. + pub partition_witness: PartitionWitness, } /// Circuit data required by the verifier, but not the prover. diff --git a/src/plonk/permutation_argument.rs b/src/plonk/permutation_argument.rs index ec8f3629..9dca05c6 100644 --- a/src/plonk/permutation_argument.rs +++ b/src/plonk/permutation_argument.rs @@ -1,6 +1,5 @@ use std::collections::HashMap; use std::fmt::Debug; -use std::hash::Hash; use rayon::prelude::*; diff --git a/src/plonk/prover.rs b/src/plonk/prover.rs index 1a68953c..c292295c 100644 --- a/src/plonk/prover.rs +++ b/src/plonk/prover.rs @@ -8,11 +8,8 @@ use crate::hash::hash_types::HashOut; use crate::hash::hashing::hash_n_to_hash; use crate::iop::challenger::Challenger; use crate::iop::generator::generate_partial_witness; -use crate::iop::target::Target; -use crate::iop::wire::Wire; -use crate::iop::witness::{MatrixWitness, PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{MatrixWitness, PartialWitness, Witness}; use crate::plonk::circuit_data::{CommonCircuitData, ProverOnlyCircuitData}; -use crate::plonk::permutation_argument::ForestNode; use crate::plonk::plonk_common::PlonkPolynomials; use crate::plonk::plonk_common::ZeroPolyOnCoset; use crate::plonk::proof::{Proof, ProofWithPublicInputs}; @@ -31,12 +28,11 @@ pub(crate) fn prove, const D: usize>( ) -> Result> { let mut timing = TimingTree::new("prove", Level::Debug); let config = &common_data.config; - let num_wires = config.num_wires; let num_challenges = config.num_challenges; let quotient_degree = common_data.quotient_degree(); let degree = common_data.degree(); - let mut partition_witness = prover_data.partition.clone(); + let mut partition_witness = prover_data.partition_witness.clone(); timed!( timing, "fill partition", @@ -258,14 +254,12 @@ fn wires_permutation_partial_products, const D: usize>( .enumerate() .map(|(i, &x)| { let s_sigmas = &prover_data.sigmas[i]; - let numerators = (0..common_data.config.num_routed_wires) - .map(|j| { - let wire_value = witness.get_wire(i, j); - let k_i = k_is[j]; - let s_id = k_i * x; - wire_value + beta * s_id + gamma - }) - .collect::>(); + let numerators = (0..common_data.config.num_routed_wires).map(|j| { + let wire_value = witness.get_wire(i, j); + let k_i = k_is[j]; + let s_id = k_i * x; + wire_value + beta * s_id + gamma + }); let denominators = (0..common_data.config.num_routed_wires) .map(|j| { let wire_value = witness.get_wire(i, j); @@ -275,7 +269,6 @@ fn wires_permutation_partial_products, const D: usize>( .collect::>(); let denominator_invs = F::batch_multiplicative_inverse(&denominators); let quotient_values = numerators - .into_iter() .zip(denominator_invs) .map(|(num, den_inv)| num * den_inv) .collect::>(); diff --git a/src/util/marking.rs b/src/util/marking.rs index 5019511a..acbf8543 100644 --- a/src/util/marking.rs +++ b/src/util/marking.rs @@ -2,7 +2,7 @@ use crate::field::extension_field::target::ExtensionTarget; use crate::field::extension_field::Extendable; use crate::hash::hash_types::HashOutTarget; use crate::iop::target::Target; -use crate::iop::witness::{PartialWitness, PartitionWitness, Witness}; +use crate::iop::witness::{PartitionWitness, Witness}; /// Enum representing all types of targets, so that they can be marked. #[derive(Clone)]