mirror of https://github.com/zcash/halo2.git
sha256: Simplify single-constraint gates
`Option<T>` implements `IntoIterator<Item = T>`, so we don't need to wrap it in an explicit iterator.
This commit is contained in:
parent
f2d1f1d56a
commit
7d15fa3db5
|
@ -166,7 +166,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
spread_c_mid: Expression<F>,
|
||||
spread_c_hi: Expression<F>,
|
||||
spread_d: Expression<F>,
|
||||
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
|
||||
) -> Option<(&'static str, Expression<F>)> {
|
||||
let spread_witness = spread_r0_even
|
||||
+ spread_r0_odd * F::from(2)
|
||||
+ (spread_r1_even + spread_r1_odd * F::from(2)) * F::from(1 << 32);
|
||||
|
@ -191,7 +191,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
let xor = xor_0 + xor_1 + xor_2;
|
||||
let check = spread_witness + (xor * -F::one());
|
||||
|
||||
std::iter::empty().chain(Some(("s_upper_sigma_0", s_upper_sigma_0 * check)))
|
||||
Some(("s_upper_sigma_0", s_upper_sigma_0 * check))
|
||||
}
|
||||
|
||||
// s_upper_sigma_1 on efgh words
|
||||
|
@ -209,7 +209,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
spread_b_hi: Expression<F>,
|
||||
spread_c: Expression<F>,
|
||||
spread_d: Expression<F>,
|
||||
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
|
||||
) -> Option<(&'static str, Expression<F>)> {
|
||||
let spread_witness = spread_r0_even
|
||||
+ spread_r0_odd * F::from(2)
|
||||
+ (spread_r1_even + spread_r1_odd * F::from(2)) * F::from(1 << 32);
|
||||
|
@ -235,7 +235,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
let xor = xor_0 + xor_1 + xor_2;
|
||||
let check = spread_witness + (xor * -F::one());
|
||||
|
||||
std::iter::empty().chain(Some(("s_upper_sigma_1", s_upper_sigma_1 * check)))
|
||||
Some(("s_upper_sigma_1", s_upper_sigma_1 * check))
|
||||
}
|
||||
|
||||
// First part of choice gate on (E, F, G), E ∧ F
|
||||
|
@ -250,7 +250,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
spread_e_hi: Expression<F>,
|
||||
spread_f_lo: Expression<F>,
|
||||
spread_f_hi: Expression<F>,
|
||||
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
|
||||
) -> Option<(&'static str, Expression<F>)> {
|
||||
let lhs_lo = spread_e_lo + spread_f_lo;
|
||||
let lhs_hi = spread_e_hi + spread_f_hi;
|
||||
let lhs = lhs_lo + lhs_hi * F::from(1 << 32);
|
||||
|
@ -261,7 +261,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
|
||||
let check = lhs + rhs * -F::one();
|
||||
|
||||
std::iter::empty().chain(Some(("s_ch", s_ch * check)))
|
||||
Some(("s_ch", s_ch * check))
|
||||
}
|
||||
|
||||
// Second part of Choice gate on (E, F, G), ¬E ∧ G
|
||||
|
@ -320,7 +320,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
spread_b_hi: Expression<F>,
|
||||
spread_c_lo: Expression<F>,
|
||||
spread_c_hi: Expression<F>,
|
||||
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
|
||||
) -> Option<(&'static str, Expression<F>)> {
|
||||
let maj_even = spread_m_0_even + spread_m_1_even * F::from(1 << 32);
|
||||
let maj_odd = spread_m_0_odd + spread_m_1_odd * F::from(1 << 32);
|
||||
let maj = maj_even + maj_odd * F::from(2);
|
||||
|
@ -330,7 +330,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
let c = spread_c_lo + spread_c_hi * F::from(1 << 32);
|
||||
let sum = a + b + c;
|
||||
|
||||
std::iter::empty().chain(Some(("maj", s_maj * (sum - maj))))
|
||||
Some(("maj", s_maj * (sum - maj)))
|
||||
}
|
||||
|
||||
// s_h_prime to get H' = H + Ch(E, F, G) + s_upper_sigma_1(E) + K + W
|
||||
|
@ -352,7 +352,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
k_hi: Expression<F>,
|
||||
w_lo: Expression<F>,
|
||||
w_hi: Expression<F>,
|
||||
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
|
||||
) -> Option<(&'static str, Expression<F>)> {
|
||||
let lo = h_lo + ch_lo + ch_neg_lo + sigma_e_lo + k_lo + w_lo;
|
||||
let hi = h_hi + ch_hi + ch_neg_hi + sigma_e_hi + k_hi + w_hi;
|
||||
|
||||
|
@ -361,7 +361,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
|
||||
let check = sum - (h_prime_carry * F::from(1 << 32)) - h_prime;
|
||||
|
||||
std::iter::empty().chain(Some(("s_h_prime", s_h_prime * check)))
|
||||
Some(("s_h_prime", s_h_prime * check))
|
||||
}
|
||||
|
||||
// s_a_new to get A_new = H' + Maj(A, B, C) + s_upper_sigma_0(A)
|
||||
|
@ -377,7 +377,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
maj_abc_hi: Expression<F>,
|
||||
h_prime_lo: Expression<F>,
|
||||
h_prime_hi: Expression<F>,
|
||||
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
|
||||
) -> Option<(&'static str, Expression<F>)> {
|
||||
let lo = sigma_a_lo + maj_abc_lo + h_prime_lo;
|
||||
let hi = sigma_a_hi + maj_abc_hi + h_prime_hi;
|
||||
let sum = lo + hi * F::from(1 << 16);
|
||||
|
@ -385,7 +385,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
|
||||
let check = sum - (a_new_carry * F::from(1 << 32)) - a_new;
|
||||
|
||||
std::iter::empty().chain(Some(("s_a_new", s_a_new * check)))
|
||||
Some(("s_a_new", s_a_new * check))
|
||||
}
|
||||
|
||||
// s_e_new to get E_new = H' + D
|
||||
|
@ -399,7 +399,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
d_hi: Expression<F>,
|
||||
h_prime_lo: Expression<F>,
|
||||
h_prime_hi: Expression<F>,
|
||||
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
|
||||
) -> Option<(&'static str, Expression<F>)> {
|
||||
let lo = h_prime_lo + d_lo;
|
||||
let hi = h_prime_hi + d_hi;
|
||||
let sum = lo + hi * F::from(1 << 16);
|
||||
|
@ -407,7 +407,7 @@ impl<F: FieldExt> CompressionGate<F> {
|
|||
|
||||
let check = sum - (e_new_carry * F::from(1 << 32)) - e_new;
|
||||
|
||||
std::iter::empty().chain(Some(("s_e_new", s_e_new * check)))
|
||||
Some(("s_e_new", s_e_new * check))
|
||||
}
|
||||
|
||||
// s_digest on final round
|
||||
|
|
|
@ -40,9 +40,9 @@ impl<F: FieldExt> ScheduleGate<F> {
|
|||
lo: Expression<F>,
|
||||
hi: Expression<F>,
|
||||
word: Expression<F>,
|
||||
) -> impl Iterator<Item = (&'static str, Expression<F>)> {
|
||||
) -> Option<(&'static str, Expression<F>)> {
|
||||
let check = lo + hi * F::from(1 << 16) - word;
|
||||
std::iter::empty().chain(Some(("s_decompose_0", s_decompose_0 * check)))
|
||||
Some(("s_decompose_0", s_decompose_0 * check))
|
||||
}
|
||||
|
||||
/// s_decompose_1 for W_1 to W_13
|
||||
|
|
Loading…
Reference in New Issue