22
33extern crate derive_more;
44
5+ use alloc:: vec:: Vec ;
56use core:: fmt:: Debug ;
67
78use derive_more:: From ;
89use derive_more:: TryInto ;
910use ergotree_ir:: sigma_protocol:: sigma_boolean:: SigmaBoolean ;
10- use ergotree_ir:: sigma_protocol:: sigma_boolean:: SigmaConjectureItems ;
1111
1212use crate :: sigma_protocol:: unproven_tree:: CandUnproven ;
1313use crate :: sigma_protocol:: unproven_tree:: UnprovenConjecture ;
@@ -136,7 +136,7 @@ pub(crate) enum ConjectureType {
136136
137137pub ( crate ) trait ProofTreeConjecture {
138138 fn conjecture_type ( & self ) -> ConjectureType ;
139- fn children ( & self ) -> SigmaConjectureItems < ProofTree > ;
139+ fn children ( & self ) -> Vec < ProofTree > ;
140140}
141141
142142pub ( crate ) enum ProofTreeKind < ' a > {
@@ -150,16 +150,20 @@ pub(crate) fn rewrite_bu<F>(tree: ProofTree, f: &F) -> Result<ProofTree, ProverE
150150where
151151 F : Fn ( & ProofTree ) -> Result < Option < ProofTree > , ProverError > ,
152152{
153- let cast_to_ust = |children : SigmaConjectureItems < ProofTree > | {
154- children. try_mapped ( |c| {
155- if let ProofTree :: UncheckedTree ( ust) = c {
156- Ok ( ust)
157- } else {
158- Err ( ProverError :: Unexpected (
159- "rewrite: expected UncheckedSigmaTree got UnprovenTree" ,
160- ) )
161- }
162- } )
153+ let cast_to_ust = |children : & [ ProofTree ] | {
154+ children
155+ . iter ( )
156+ . cloned ( )
157+ . map ( |c| {
158+ if let ProofTree :: UncheckedTree ( ust) = c {
159+ Ok ( ust)
160+ } else {
161+ Err ( ProverError :: Unexpected (
162+ "rewrite: expected UncheckedSigmaTree got UnprovenTree" ,
163+ ) )
164+ }
165+ } )
166+ . collect :: < Result < Vec < _ > , _ > > ( )
163167 } ;
164168
165169 let tree_with_updated_children = match & tree {
@@ -206,9 +210,12 @@ where
206210 challenge,
207211 children,
208212 } => {
209- let rewritten_children =
210- children. clone ( ) . try_mapped ( |c| rewrite_bu ( c. into ( ) , f) ) ?;
211- let casted_children = cast_to_ust ( rewritten_children) ?;
213+ let rewritten_children = children
214+ . iter ( )
215+ . cloned ( )
216+ . map ( |c| rewrite_bu ( c. into ( ) , f) )
217+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
218+ let casted_children = cast_to_ust ( & rewritten_children) ?;
212219 UncheckedConjecture :: CandUnchecked {
213220 children : casted_children,
214221 challenge : challenge. clone ( ) ,
@@ -219,9 +226,12 @@ where
219226 challenge,
220227 children,
221228 } => {
222- let rewritten_children =
223- children. clone ( ) . try_mapped ( |c| rewrite_bu ( c. into ( ) , f) ) ?;
224- let casted_children = cast_to_ust ( rewritten_children) ?;
229+ let rewritten_children = children
230+ . iter ( )
231+ . cloned ( )
232+ . map ( |c| rewrite_bu ( c. into ( ) , f) )
233+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
234+ let casted_children = cast_to_ust ( & rewritten_children) ?;
225235 UncheckedConjecture :: CorUnchecked {
226236 children : casted_children,
227237 challenge : challenge. clone ( ) ,
@@ -234,11 +244,14 @@ where
234244 k,
235245 polynomial : polynomial_opt,
236246 } => {
237- let rewritten_children =
238- children. clone ( ) . try_mapped ( |c| rewrite_bu ( c. into ( ) , f) ) ?;
239- let casted_children = cast_to_ust ( rewritten_children) ?;
247+ let rewritten_children = children
248+ . iter ( )
249+ . cloned ( )
250+ . map ( |c| rewrite_bu ( c. into ( ) , f) )
251+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
252+ let casted_children = cast_to_ust ( & rewritten_children) ?;
240253 UncheckedConjecture :: CthresholdUnchecked {
241- children : casted_children,
254+ children : casted_children. try_into ( ) ? ,
242255 challenge : challenge. clone ( ) ,
243256 k : * k,
244257 polynomial : polynomial_opt. clone ( ) ,
@@ -257,16 +270,20 @@ pub(crate) fn rewrite_td<F>(tree: ProofTree, f: &F) -> Result<ProofTree, ProverE
257270where
258271 F : Fn ( & ProofTree ) -> Result < Option < ProofTree > , ProverError > ,
259272{
260- let cast_to_ust = |children : SigmaConjectureItems < ProofTree > | {
261- children. try_mapped ( |c| {
262- if let ProofTree :: UncheckedTree ( ust) = c {
263- Ok ( ust)
264- } else {
265- Err ( ProverError :: Unexpected (
266- "rewrite: expected UncheckedSigmaTree got UnprovenTree" ,
267- ) )
268- }
269- } )
273+ let cast_to_ust = |children : & [ ProofTree ] | {
274+ children
275+ . iter ( )
276+ . cloned ( )
277+ . map ( |c| {
278+ if let ProofTree :: UncheckedTree ( ust) = c {
279+ Ok ( ust)
280+ } else {
281+ Err ( ProverError :: Unexpected (
282+ "rewrite: expected UncheckedSigmaTree got UnprovenTree" ,
283+ ) )
284+ }
285+ } )
286+ . collect :: < Result < Vec < _ > , _ > > ( )
270287 } ;
271288
272289 let rewritten_tree = f ( & tree) ?. unwrap_or ( tree) ;
@@ -314,9 +331,12 @@ where
314331 challenge,
315332 children,
316333 } => {
317- let rewritten_children =
318- children. clone ( ) . try_mapped ( |c| rewrite_td ( c. into ( ) , f) ) ?;
319- let casted_children = cast_to_ust ( rewritten_children) ?;
334+ let rewritten_children = children
335+ . iter ( )
336+ . cloned ( )
337+ . map ( |c| rewrite_td ( c. into ( ) , f) )
338+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
339+ let casted_children = cast_to_ust ( & rewritten_children) ?;
320340 UncheckedConjecture :: CandUnchecked {
321341 children : casted_children,
322342 challenge : challenge. clone ( ) ,
@@ -327,9 +347,12 @@ where
327347 challenge,
328348 children,
329349 } => {
330- let rewritten_children =
331- children. clone ( ) . try_mapped ( |c| rewrite_td ( c. into ( ) , f) ) ?;
332- let casted_children = cast_to_ust ( rewritten_children) ?;
350+ let rewritten_children = children
351+ . iter ( )
352+ . cloned ( )
353+ . map ( |c| rewrite_td ( c. into ( ) , f) )
354+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
355+ let casted_children = cast_to_ust ( & rewritten_children) ?;
333356 UncheckedConjecture :: CorUnchecked {
334357 children : casted_children,
335358 challenge : challenge. clone ( ) ,
@@ -343,10 +366,11 @@ where
343366 polynomial : polynomial_opt,
344367 } => {
345368 let rewritten_children =
346- children. clone ( ) . try_mapped ( |c| rewrite_td ( c. into ( ) , f) ) ?;
347- let casted_children = cast_to_ust ( rewritten_children) ?;
369+ children. try_mapped_ref ( |c| rewrite_td ( c. clone ( ) . into ( ) , f) ) ?;
370+ let casted_children = cast_to_ust ( rewritten_children. as_slice ( ) ) ?;
348371 UncheckedConjecture :: CthresholdUnchecked {
349- children : casted_children,
372+ #[ allow( clippy:: unwrap_used) ] // casted_children.len() == children.len(), so conversion can't to BoundedVec can't fail
373+ children : casted_children. try_into ( ) . unwrap ( ) ,
350374 challenge : challenge. clone ( ) ,
351375 k : * k,
352376 polynomial : polynomial_opt. clone ( ) ,
0 commit comments