mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-02-05 22:43:21 +00:00
Fix CTL verification
This commit is contained in:
parent
7cbce7bf6d
commit
29f750ed51
@ -561,26 +561,29 @@ pub(crate) fn verify_cross_table_lookups<
|
|||||||
},
|
},
|
||||||
) in cross_table_lookups.into_iter().enumerate()
|
) in cross_table_lookups.into_iter().enumerate()
|
||||||
{
|
{
|
||||||
let looking_degrees_sum = looking_tables
|
for _ in 0..config.num_challenges {
|
||||||
.iter()
|
let looking_degrees_sum = looking_tables
|
||||||
.map(|table| 1 << degrees_bits[table.table as usize])
|
.iter()
|
||||||
.sum::<u64>();
|
.map(|table| 1 << degrees_bits[table.table as usize])
|
||||||
let looked_degree = 1 << degrees_bits[looked_table.table as usize];
|
.sum::<u64>();
|
||||||
let looking_zs_prod = looking_tables
|
let looked_degree = 1 << degrees_bits[looked_table.table as usize];
|
||||||
.into_iter()
|
let looking_zs_prod = looking_tables
|
||||||
.map(|table| *ctl_zs_openings[table.table as usize].next().unwrap())
|
.iter()
|
||||||
.product::<F>();
|
.map(|table| *ctl_zs_openings[table.table as usize].next().unwrap())
|
||||||
let looked_z = *ctl_zs_openings[looked_table.table as usize].next().unwrap();
|
.product::<F>();
|
||||||
let challenge = challenges.challenges[i % config.num_challenges];
|
let looked_z = *ctl_zs_openings[looked_table.table as usize].next().unwrap();
|
||||||
let combined_default = default
|
let challenge = challenges.challenges[i % config.num_challenges];
|
||||||
.map(|default| challenge.combine(default.iter()))
|
let combined_default = default
|
||||||
.unwrap_or(F::ONE);
|
.as_ref()
|
||||||
|
.map(|default| challenge.combine(default.iter()))
|
||||||
|
.unwrap_or(F::ONE);
|
||||||
|
|
||||||
ensure!(
|
ensure!(
|
||||||
looking_zs_prod
|
looking_zs_prod
|
||||||
== looked_z * combined_default.exp_u64(looking_degrees_sum - looked_degree),
|
== looked_z * combined_default.exp_u64(looking_degrees_sum - looked_degree),
|
||||||
"Cross-table lookup verification failed."
|
"Cross-table lookup verification failed."
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -615,30 +618,32 @@ pub(crate) fn verify_cross_table_lookups_circuit<
|
|||||||
},
|
},
|
||||||
) in cross_table_lookups.into_iter().enumerate()
|
) in cross_table_lookups.into_iter().enumerate()
|
||||||
{
|
{
|
||||||
let looking_degrees_sum = looking_tables
|
for _ in 0..inner_config.num_challenges {
|
||||||
.iter()
|
let looking_degrees_sum = looking_tables
|
||||||
.map(|table| 1 << degrees_bits[table.table as usize])
|
.iter()
|
||||||
.sum::<u64>();
|
.map(|table| 1 << degrees_bits[table.table as usize])
|
||||||
let looked_degree = 1 << degrees_bits[looked_table.table as usize];
|
.sum::<u64>();
|
||||||
let looking_zs_prod = builder.mul_many(
|
let looked_degree = 1 << degrees_bits[looked_table.table as usize];
|
||||||
looking_tables
|
let looking_zs_prod = builder.mul_many(
|
||||||
.into_iter()
|
looking_tables
|
||||||
.map(|table| *ctl_zs_openings[table.table as usize].next().unwrap()),
|
.iter()
|
||||||
);
|
.map(|table| *ctl_zs_openings[table.table as usize].next().unwrap()),
|
||||||
let looked_z = *ctl_zs_openings[looked_table.table as usize].next().unwrap();
|
);
|
||||||
let challenge = challenges.challenges[i % inner_config.num_challenges];
|
let looked_z = *ctl_zs_openings[looked_table.table as usize].next().unwrap();
|
||||||
if let Some(default) = default {
|
let challenge = challenges.challenges[i % inner_config.num_challenges];
|
||||||
let default = default
|
if let Some(default) = default.as_ref() {
|
||||||
.into_iter()
|
let default = default
|
||||||
.map(|x| builder.constant(x))
|
.iter()
|
||||||
.collect::<Vec<_>>();
|
.map(|&x| builder.constant(x))
|
||||||
let combined_default = challenge.combine_base_circuit(builder, &default);
|
.collect::<Vec<_>>();
|
||||||
|
let combined_default = challenge.combine_base_circuit(builder, &default);
|
||||||
|
|
||||||
let pad = builder.exp_u64(combined_default, looking_degrees_sum - looked_degree);
|
let pad = builder.exp_u64(combined_default, looking_degrees_sum - looked_degree);
|
||||||
let padded_looked_z = builder.mul(looked_z, pad);
|
let padded_looked_z = builder.mul(looked_z, pad);
|
||||||
builder.connect(looking_zs_prod, padded_looked_z);
|
builder.connect(looking_zs_prod, padded_looked_z);
|
||||||
} else {
|
} else {
|
||||||
builder.connect(looking_zs_prod, looked_z);
|
builder.connect(looking_zs_prod, looked_z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user