mul.rs: Explain ordering of mul::incomplete advice columns.

This commit is contained in:
therealyingtong 2021-07-14 18:30:43 +08:00
parent 0ade539441
commit b696163e31
2 changed files with 18 additions and 9 deletions

View File

@ -70,6 +70,10 @@ impl Config {
.collect() .collect()
} }
pub(crate) fn output_columns(&self) -> HashSet<Column<Advice>> {
core::array::IntoIter::new([self.x_qr, self.y_qr]).collect()
}
pub(crate) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) { pub(crate) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
meta.create_gate("complete addition gates", |meta| { meta.create_gate("complete addition gates", |meta| {
let q_add = meta.query_selector(self.q_add); let q_add = meta.query_selector(self.q_add);

View File

@ -80,15 +80,20 @@ impl From<&EccConfig> for Config {
"y_p is shared across hi and lo halves." "y_p is shared across hi and lo halves."
); );
let add_config_advices = config.add_config.advice_columns(); // For both hi_config and lo_config:
assert!( // z and lambda1 are assigned on the same row as the add_config output.
!add_config_advices.contains(&config.hi_config.z), // Therefore, z and lambda1 must not overlap with add_config.x_qr, add_config.y_qr.
"hi_config z cannot overlap with complete addition columns." let add_config_outputs = config.add_config.output_columns();
); for config in [&(*config.hi_config), &(*config.lo_config)].iter() {
assert!( assert!(
!add_config_advices.contains(&config.complete_config.z_complete), !add_config_outputs.contains(&config.z),
"complete_config z cannot overlap with complete addition columns." "incomplete config z cannot overlap with complete addition columns."
); );
assert!(
!add_config_outputs.contains(&config.lambda1),
"incomplete config lambda1 cannot overlap with complete addition columns."
);
}
config config
} }