(api ecgo.API, column_combine_option ColumnCombineOptions)
| 213 | } |
| 214 | |
| 215 | func (c *LogUpCircuit) Check(api ecgo.API, column_combine_option ColumnCombineOptions) error { |
| 216 | |
| 217 | // The challenge used to complete polynomial identity check |
| 218 | alpha := api.GetRandomValue() |
| 219 | // The randomness used to combine the columns |
| 220 | column_combine_randomness := GetColumnRandomness(api, uint(len(c.TableKeys[0])+len(c.TableValues[0])), column_combine_option) |
| 221 | |
| 222 | // Table Polynomial |
| 223 | table_combined := CombineVecAt2d(c.TableKeys, c.TableValues) |
| 224 | table_single_column := CombineColumn(api, table_combined, column_combine_randomness) |
| 225 | table_poly_at_alpha := LogUpPolyValsAtAlpha(api, table_single_column, c.QueryCount, alpha) |
| 226 | |
| 227 | // Query Polynomial |
| 228 | query_combined := CombineVecAt2d(c.QueryKeys, c.QueryResult) |
| 229 | query_single_column := CombineColumn(api, query_combined, column_combine_randomness) |
| 230 | dummy_count := make([]frontend.Variable, len(query_single_column)) |
| 231 | for i := 0; i < len(dummy_count); i++ { |
| 232 | dummy_count[i] = 1 |
| 233 | } |
| 234 | query_poly_at_alpha := LogUpPolyValsAtAlpha(api, query_single_column, dummy_count, alpha) |
| 235 | |
| 236 | api.AssertIsEqual( |
| 237 | api.Mul(table_poly_at_alpha.Numerator, query_poly_at_alpha.Denominator), |
| 238 | api.Mul(query_poly_at_alpha.Numerator, table_poly_at_alpha.Denominator), |
| 239 | ) |
| 240 | return nil |
| 241 | } |
| 242 | |
| 243 | const ColumnCombineOption ColumnCombineOptions = FullRandom |
| 244 |
no test coverage detected