From b94e712966ec5b95ce85d53b49be341d8ae82ba1 Mon Sep 17 00:00:00 2001 From: Maddiaa0 <47148561+Maddiaa0@users.noreply.github.com> Date: Tue, 9 Apr 2024 11:06:47 +0000 Subject: [PATCH 1/2] feat: support public columns --- asm_to_pil/src/vm_to_constrained.rs | 8 +++++--- ast/src/parsed/display.rs | 7 ++++--- ast/src/parsed/mod.rs | 2 +- ast/src/parsed/visitor.rs | 8 ++++---- parser/src/powdr.lalrpop | 8 +++++--- pil_analyzer/src/statement_processor.rs | 13 +++++++++---- 6 files changed, 28 insertions(+), 18 deletions(-) diff --git a/asm_to_pil/src/vm_to_constrained.rs b/asm_to_pil/src/vm_to_constrained.rs index d944ce7d8f..9d85a785a4 100644 --- a/asm_to_pil/src/vm_to_constrained.rs +++ b/asm_to_pil/src/vm_to_constrained.rs @@ -313,7 +313,7 @@ impl ASMPILConverter { ty, }, ); - self.pil.push(witness_column(start, name, None)); + self.pil.push(witness_column(start, name, None, false)); } fn handle_instruction_def( @@ -846,7 +846,7 @@ impl ASMPILConverter { ), ) }); - witness_column(0, free_value, prover_query) + witness_column(0, free_value, prover_query, false) }) .collect::>(); self.pil.extend(free_value_pil); @@ -877,7 +877,7 @@ impl ASMPILConverter { /// Creates a pair of witness and fixed column and matches them in the lookup. fn create_witness_fixed_pair(&mut self, start: usize, name: &str) { let fixed_name = format!("p_{name}"); - self.pil.push(witness_column(start, name, None)); + self.pil.push(witness_column(start, name, None, false)); self.line_lookup .push((name.to_string(), fixed_name.clone())); self.rom_constant_names.push(fixed_name); @@ -1082,6 +1082,7 @@ fn witness_column, T>( start: usize, name: S, def: Option>, + is_public: bool ) -> PilStatement { PilStatement::PolynomialCommitDeclaration( start, @@ -1090,6 +1091,7 @@ fn witness_column, T>( array_size: None, }], def, + is_public, ) } diff --git a/ast/src/parsed/display.rs b/ast/src/parsed/display.rs index 8d4168b2f3..8aa8f803df 100644 --- a/ast/src/parsed/display.rs +++ b/ast/src/parsed/display.rs @@ -375,12 +375,13 @@ impl Display for PilStatement { PilStatement::PolynomialConstantDefinition(_, name, definition) => { write!(f, "pol constant {name}{definition};") } - PilStatement::PolynomialCommitDeclaration(_, names, value) => { + PilStatement::PolynomialCommitDeclaration(_, names, value, public) => { write!( f, - "pol commit {}{};", + "pol commit {}{}{};", + if *public { "public " } else { " " }, names.iter().format(", "), - value.as_ref().map(|v| format!("{v}")).unwrap_or_default() + value.as_ref().map(|v| format!("{v}")).unwrap_or_default(), ) } PilStatement::PolynomialIdentity(_, _attr, expression) => { diff --git a/ast/src/parsed/mod.rs b/ast/src/parsed/mod.rs index 1c6bfeafb5..83533a2b9a 100644 --- a/ast/src/parsed/mod.rs +++ b/ast/src/parsed/mod.rs @@ -33,7 +33,7 @@ pub enum PilStatement { ), PolynomialConstantDeclaration(usize, Vec>), PolynomialConstantDefinition(usize, String, FunctionDefinition), - PolynomialCommitDeclaration(usize, Vec>, Option>), + PolynomialCommitDeclaration(usize, Vec>, Option>, /*public=*/ bool), PolynomialIdentity(usize, Option, Expression), PlookupIdentity( usize, diff --git a/ast/src/parsed/visitor.rs b/ast/src/parsed/visitor.rs index 8050399a0f..52811b1626 100644 --- a/ast/src/parsed/visitor.rs +++ b/ast/src/parsed/visitor.rs @@ -218,10 +218,10 @@ impl ExpressionVisitable> for Pi .try_for_each(|e| e.visit_expressions_mut(f, o)), PilStatement::PolynomialConstantDefinition(_, _, fundef) - | PilStatement::PolynomialCommitDeclaration(_, _, Some(fundef)) => { + | PilStatement::PolynomialCommitDeclaration(_, _, Some(fundef), _) => { fundef.visit_expressions_mut(f, o) } - PilStatement::PolynomialCommitDeclaration(_, _, None) + PilStatement::PolynomialCommitDeclaration(_, _, None, _) | PilStatement::Include(_, _) | PilStatement::PolynomialConstantDeclaration(_, _) | PilStatement::LetStatement(_, _, None) => ControlFlow::Continue(()), @@ -260,10 +260,10 @@ impl ExpressionVisitable> for Pi .try_for_each(|e| e.visit_expressions(f, o)), PilStatement::PolynomialConstantDefinition(_, _, fundef) - | PilStatement::PolynomialCommitDeclaration(_, _, Some(fundef)) => { + | PilStatement::PolynomialCommitDeclaration(_, _, Some(fundef), _) => { fundef.visit_expressions(f, o) } - PilStatement::PolynomialCommitDeclaration(_, _, None) + PilStatement::PolynomialCommitDeclaration(_, _, None, _) | PilStatement::Include(_, _) | PilStatement::PolynomialConstantDeclaration(_, _) | PilStatement::LetStatement(_, _, None) => ControlFlow::Continue(()), diff --git a/parser/src/powdr.lalrpop b/parser/src/powdr.lalrpop index 763a5fd888..2b92ae376f 100644 --- a/parser/src/powdr.lalrpop +++ b/parser/src/powdr.lalrpop @@ -81,9 +81,10 @@ ConstantDefinition: PilStatement = { } PolynomialDefinition: PilStatement = { - <@L> PolCol "=" => PilStatement::PolynomialDefinition(<>) + PolCol "=" => PilStatement::PolynomialDefinition(<>) } + PublicDeclaration: PilStatement = { <@L> "public" "=" @@ -121,9 +122,10 @@ ArrayLiteralTerm: ArrayExpression = { } PolynomialCommitDeclaration: PilStatement = { - <@L> PolCol CommitWitness => PilStatement::PolynomialCommitDeclaration(<>, None), + <@L> PolCol CommitWitness => PilStatement::PolynomialCommitDeclaration(<>, None, false), + <@L> PolCol "public" => PilStatement::PolynomialCommitDeclaration(<>, None, true), PolCol CommitWitness "(" ")" "query" - => PilStatement::PolynomialCommitDeclaration(start, vec![name], Some(FunctionDefinition::Query(param, value))) + => PilStatement::PolynomialCommitDeclaration(start, vec![name], Some(FunctionDefinition::Query(param, value)), false) } PolynomialIdentity: PilStatement = { diff --git a/pil_analyzer/src/statement_processor.rs b/pil_analyzer/src/statement_processor.rs index 5bb02bbd15..ffad38831e 100644 --- a/pil_analyzer/src/statement_processor.rs +++ b/pil_analyzer/src/statement_processor.rs @@ -110,7 +110,7 @@ where self.handle_public_declaration(start, name, polynomial, array_index, index) } PilStatement::PolynomialConstantDeclaration(start, polynomials) => { - self.handle_polynomial_declarations(start, polynomials, PolynomialType::Constant) + self.handle_polynomial_declarations(start, polynomials, PolynomialType::Constant, false) } PilStatement::PolynomialConstantDefinition(start, name, definition) => self .handle_symbol_definition( @@ -120,10 +120,10 @@ where SymbolKind::Poly(PolynomialType::Constant), Some(definition), ), - PilStatement::PolynomialCommitDeclaration(start, polynomials, None) => { - self.handle_polynomial_declarations(start, polynomials, PolynomialType::Committed) + PilStatement::PolynomialCommitDeclaration(start, polynomials, None, is_public) => { + self.handle_polynomial_declarations(start, polynomials, PolynomialType::Committed, is_public) } - PilStatement::PolynomialCommitDeclaration(start, mut polynomials, Some(definition)) => { + PilStatement::PolynomialCommitDeclaration(start, mut polynomials, Some(definition), _) => { assert!(polynomials.len() == 1); let name = polynomials.pop().unwrap(); self.handle_symbol_definition( @@ -267,10 +267,15 @@ where start: usize, polynomials: Vec>, polynomial_type: PolynomialType, + is_public: bool, ) -> Vec> { polynomials .into_iter() .flat_map(|PolynomialName { name, array_size }| { + + // TODO: hack: add an is_public modifier to the end of a commited polynomial???? + let name = if is_public { format!("{name}__is_public")} else {name}; + self.handle_symbol_definition( start, name, From f32015f4ad54fa822ffb87d24ffb5fde3537b3db Mon Sep 17 00:00:00 2001 From: Maddiaa0 <47148561+Maddiaa0@users.noreply.github.com> Date: Mon, 13 May 2024 10:21:06 +0000 Subject: [PATCH 2/2] fix: unrequired powdr change, annotate hack with issue --- parser/src/powdr.lalrpop | 2 +- pil_analyzer/src/statement_processor.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parser/src/powdr.lalrpop b/parser/src/powdr.lalrpop index 2b92ae376f..a32d718186 100644 --- a/parser/src/powdr.lalrpop +++ b/parser/src/powdr.lalrpop @@ -81,7 +81,7 @@ ConstantDefinition: PilStatement = { } PolynomialDefinition: PilStatement = { - PolCol "=" => PilStatement::PolynomialDefinition(<>) + <@L> PolCol "=" => PilStatement::PolynomialDefinition(<>) } diff --git a/pil_analyzer/src/statement_processor.rs b/pil_analyzer/src/statement_processor.rs index ffad38831e..a4855a9c5a 100644 --- a/pil_analyzer/src/statement_processor.rs +++ b/pil_analyzer/src/statement_processor.rs @@ -273,7 +273,7 @@ where .into_iter() .flat_map(|PolynomialName { name, array_size }| { - // TODO: hack: add an is_public modifier to the end of a commited polynomial???? + // hack(https://github.com/AztecProtocol/aztec-packages/issues/6359): add an is_public modifier to the end of a committed polynomial let name = if is_public { format!("{name}__is_public")} else {name}; self.handle_symbol_definition(