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()
}
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>) {
meta.create_gate("complete addition gates", |meta| {
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."
);
let add_config_advices = config.add_config.advice_columns();
assert!(
!add_config_advices.contains(&config.hi_config.z),
"hi_config z cannot overlap with complete addition columns."
);
assert!(
!add_config_advices.contains(&config.complete_config.z_complete),
"complete_config z cannot overlap with complete addition columns."
);
// For both hi_config and lo_config:
// z and lambda1 are assigned on the same row as the add_config output.
// Therefore, z and lambda1 must not overlap with add_config.x_qr, add_config.y_qr.
let add_config_outputs = config.add_config.output_columns();
for config in [&(*config.hi_config), &(*config.lo_config)].iter() {
assert!(
!add_config_outputs.contains(&config.z),
"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
}