From 5a80fba6183c1f3ccb47f0708e672ea1400e8b0b Mon Sep 17 00:00:00 2001 From: Evan Laufer Date: Fri, 19 Sep 2025 13:22:21 -0700 Subject: [PATCH] Add cases to desugar function for container update ops (#425) * Add cases to desugar function for container update ops * Make point hashable --- src/backends/plonky2/primitives/ec/curve.rs | 2 +- src/frontend/custom.rs | 29 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/backends/plonky2/primitives/ec/curve.rs b/src/backends/plonky2/primitives/ec/curve.rs index 22911b2..caf3727 100644 --- a/src/backends/plonky2/primitives/ec/curve.rs +++ b/src/backends/plonky2/primitives/ec/curve.rs @@ -97,7 +97,7 @@ fn ec_field_from_bytes(b: &[u8]) -> Result { Ok(QuinticExtension(array::from_fn(|i| fields[i]))) } -#[derive(Clone, Copy, Debug, PartialEq, Eq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub struct Point { pub x: ECField, pub u: ECField, diff --git a/src/frontend/custom.rs b/src/frontend/custom.rs index 0e3b33e..8f259e1 100644 --- a/src/frontend/custom.rs +++ b/src/frontend/custom.rs @@ -98,6 +98,35 @@ impl StatementTmplBuilder { args: new_args, } } + Predicate::Native(NativePredicate::DictInsert) => StatementTmplBuilder { + predicate: Predicate::Native(NativePredicate::ContainerInsert), + args: self.args, + }, + Predicate::Native(NativePredicate::SetInsert) => { + let mut new_args = self.args.clone(); + new_args.push(self.args[2].clone()); + StatementTmplBuilder { + predicate: Predicate::Native(NativePredicate::ContainerInsert), + args: new_args, + } + } + Predicate::Native(NativePredicate::DictUpdate) + | Predicate::Native(NativePredicate::ArrayUpdate) => StatementTmplBuilder { + predicate: Predicate::Native(NativePredicate::ContainerUpdate), + args: self.args, + }, + Predicate::Native(NativePredicate::DictDelete) => StatementTmplBuilder { + predicate: Predicate::Native(NativePredicate::ContainerDelete), + args: self.args, + }, + Predicate::Native(NativePredicate::SetDelete) => { + let mut new_args = self.args.clone(); + new_args.push(self.args[2].clone()); + StatementTmplBuilder { + predicate: Predicate::Native(NativePredicate::ContainerDelete), + args: new_args, + } + } _ => self, } }