@@ -180,6 +180,7 @@ fn cbor_det_parse_valid
180180 let res = Parse. cbor_parse input len ;
181181 with v1' . assert ( Raw. cbor_match 1 . 0R res v1' );
182182 Classical. forall_intro_2 ( cbor_det_parse_aux v ( SZ. v len ) v1' );
183+ rewrite Raw. cbor_match 1 . 0R res v1' as Raw. cbor_match 1 . 0R res ( SpecRaw. mk_det_raw_cbor ( SpecRaw. mk_cbor v1' ));
183184 fold ( cbor_det_match 1 . 0R res ( SpecRaw. mk_cbor v1' ));
184185 rewrite each
185186 Raw. cbor_match 1 . 0R res v1'
@@ -430,6 +431,10 @@ fn cbor_det_mk_simple_value (_: unit) : mk_simple_t u#0 #_ cbor_det_match
430431{
431432 let res = Raw. cbor_match_simple_intro v ;
432433 SpecRaw. mk_cbor_eq ( SpecRaw. mk_det_raw_cbor ( Spec. pack ( Spec. CSimple v )));
434+ rewrite Raw. cbor_match 1 . 0R res ( SpecRaw. Simple v ) as Raw. cbor_match 1 . 0R
435+ res
436+ ( SpecRaw. mk_det_raw_cbor ( CBOR.Spec.API.Type. pack ( CBOR.Spec.API.Type. CSimple
437+ v )));
433438 fold ( cbor_det_match 1 . 0R res ( Spec. pack ( Spec. CSimple v )));
434439 res
435440}
@@ -443,6 +448,10 @@ fn cbor_det_mk_int64 (_: unit) : mk_int64_t u#0 #_ cbor_det_match
443448{
444449 let res = Raw. cbor_match_int_intro ty ( SpecRaw. mk_raw_uint64 v );
445450 SpecRaw. mk_cbor_eq ( SpecRaw. mk_det_raw_cbor ( Spec. pack ( Spec. CInt64 ty v )));
451+ rewrite Raw. cbor_match 1 . 0R res ( SpecRaw. Int64 ty ( SpecRaw. mk_raw_uint64 v )) as Raw. cbor_match 1 . 0R
452+ res
453+ ( SpecRaw. mk_det_raw_cbor ( CBOR.Spec.API.Type. pack ( CBOR.Spec.API.Type. CInt64
454+ ty v )));
446455 fold ( cbor_det_match 1 . 0R res ( Spec. pack ( Spec. CInt64 ty v )));
447456 res
448457}
@@ -469,11 +478,16 @@ fn cbor_det_mk_string (_: unit) : mk_string_t u#0 #_ cbor_det_match
469478 ( SpecRaw. mk_det_raw_cbor ( Spec. pack ( Spec. CString ty v )))
470479 ( SpecRaw. String ty len64 v );
471480 assert ( pure ( SpecRaw. mk_det_raw_cbor ( Spec. pack ( Spec. CString ty v )) == SpecRaw. String ty len64 v ));
481+ rewrite Raw. cbor_match 1 . 0R res r as Raw. cbor_match 1 . 0R
482+ res
483+ ( SpecRaw. mk_det_raw_cbor ( CBOR.Spec.API.Type. pack ( CBOR.Spec.API.Type. CString
484+ ty v )));
472485 fold ( cbor_det_match 1 . 0R res ( Spec. pack ( Spec. CString ty v )));
473486 rewrite each
474487 Raw. cbor_match 1 . 0R res r
475488 as
476489 cbor_det_match 1 . 0R res ( SpecRaw. mk_cbor r );
490+ rewrite each ( SpecRaw. mk_cbor r ) as ( CBOR.Spec.API.Type. pack ( CBOR.Spec.API.Type. CString ty v ));
477491 res
478492}
479493
@@ -505,11 +519,18 @@ fn cbor_det_mk_tagged (_: unit) : mk_tagged_t #_ cbor_det_match
505519 ( SpecRaw. mk_det_raw_cbor ( Spec. pack ( Spec. CTagged tag v' )))
506520 ( SpecRaw. Tagged tag64 w' );
507521 assert ( pure ( SpecRaw. mk_det_raw_cbor ( Spec. pack ( Spec. CTagged tag v' )) == SpecRaw. Tagged tag64 w' ));
522+ rewrite Raw. cbor_match 1 . 0R res ( SpecRaw. Tagged tag64 w' ) as
523+ Raw. cbor_match 1 . 0R
524+ res
525+ ( SpecRaw. mk_det_raw_cbor ( CBOR.Spec.API.Type. pack ( CBOR.Spec.API.Type. CTagged
526+ tag v' )));
508527 fold ( cbor_det_match 1 . 0R res ( Spec. pack ( Spec. CTagged tag v' )));
509528 rewrite each
510529 Raw. cbor_match 1 . 0R res r
511530 as
512531 cbor_det_match 1 . 0R res ( SpecRaw. mk_cbor r );
532+ rewrite each ( SpecRaw. mk_cbor ( SpecRaw. Tagged tag64 w' )) as
533+ ( CBOR.Spec.API.Type. pack ( CBOR.Spec.API.Type. CTagged tag v' ));
513534 res
514535}
515536
@@ -553,6 +574,9 @@ decreases v
553574 SM. seq_list_match_cons_intro_trade ( Seq. head c ) ( mk_det_raw_cbor ( List.Tot. hd v )) ( Seq. tail c ) ( List.Tot. map mk_det_raw_cbor ( List.Tot. tl v )) ( Raw. cbor_match p );
554575 Trade. trans _ _ ( SM. seq_list_match c v ( cbor_det_match p ));
555576 rewrite each Seq. cons ( Seq. head c ) ( Seq. tail c ) as c ;
577+ rewrite each ( mk_det_raw_cbor ( List.Tot.Base. hd v ) ::
578+ List.Tot.Base. map mk_det_raw_cbor ( List.Tot.Base. tl v ))
579+ as List.Tot.Base. map mk_det_raw_cbor v ;
556580 ();
557581 }
558582}
@@ -594,12 +618,19 @@ fn cbor_det_mk_array (_: unit) : mk_array_t #_ cbor_det_match
594618 with r . assert Raw. cbor_match 1 . 0R res r ;
595619 Trade. trans_concl_r _ _ _ _ ;
596620 Spec. unpack_pack ( Spec. CArray vv );
621+ rewrite Raw. cbor_match 1 . 0R res r
622+ as
623+ Raw. cbor_match 1 . 0R
624+ res
625+ ( SpecRaw. mk_det_raw_cbor ( CBOR.Spec.API.Type. pack ( CBOR.Spec.API.Type. CArray
626+ vv )));
597627 fold ( cbor_det_match 1 . 0R res ( Spec. pack ( Spec. CArray vv )));
598628 rewrite
599629 each
600630 Raw. cbor_match 1 . 0R res r
601631 as
602632 cbor_det_match 1 . 0R res v' ;
633+ rewrite each Ghost . reveal v' as ( Spec. pack ( Spec. CArray vv ));
603634 res
604635}
605636
@@ -698,6 +729,11 @@ decreases v
698729 SM. seq_list_match_cons_intro_trade ( Seq. head c ) ( SpecRaw. mk_det_raw_cbor_map_entry ( List.Tot. hd v )) ( Seq. tail c ) ( List.Tot. map SpecRaw. mk_det_raw_cbor_map_entry ( List.Tot. tl v )) ( Raw. cbor_match_map_entry p );
699730 Trade. trans _ _ ( SM. seq_list_match c v ( cbor_det_map_entry_match p ));
700731 rewrite each Seq. cons ( Seq. head c ) ( Seq. tail c ) as c ;
732+ rewrite each ( SpecRaw. mk_det_raw_cbor_map_entry ( List.Tot.Base. hd v ) ::
733+ List.Tot.Base. map SpecRaw. mk_det_raw_cbor_map_entry
734+ ( List.Tot.Base. tl v )) as (
735+ List.Tot.Base. map SpecRaw. mk_det_raw_cbor_map_entry
736+ ( v ));
701737 ();
702738 }
703739}
@@ -723,7 +759,8 @@ fn cbor_det_mk_map_entry
723759 Trade. rewrite_with_trade
724760 ( Raw. cbor_match_map_entry 1 . 0R res ( SpecRaw. mk_det_raw_cbor vk , SpecRaw. mk_det_raw_cbor vv ))
725761 ( cbor_det_map_entry_match 1 . 0R res ( Ghost . reveal vk , Ghost . reveal vv ));
726- Trade. trans ( cbor_det_map_entry_match 1 . 0R res ( Ghost . reveal vk , Ghost . reveal vv )) _ _ ;
762+ CBOR.Pulse.Raw.Iterator. trade_trans_nounify ( cbor_det_map_entry_match 1 . 0R res ( Ghost . reveal vk , Ghost . reveal vv )) _ ( Raw. cbor_match_map_entry 1 . 0R
763+ res _ ) _ ;
727764 Trade. trans_concl_l ( cbor_det_map_entry_match 1 . 0R res ( Ghost . reveal vk , Ghost . reveal vv )) _ _ _ ;
728765 Trade. trans_concl_r ( cbor_det_map_entry_match 1 . 0R res ( Ghost . reveal vk , Ghost . reveal vv )) _ _ _ ;
729766 res
@@ -853,6 +890,9 @@ decreases v
853890 SM. seq_list_match_cons_intro_trade ( Seq. head c ) ( mk_cbor_map_entry ( List.Tot. hd v )) ( Seq. tail c ) ( List.Tot. map mk_cbor_map_entry ( List.Tot. tl v )) ( cbor_det_map_entry_match p );
854891 Trade. trans _ _ ( SM. seq_list_match c v ( Raw. cbor_match_map_entry p ));
855892 rewrite each Seq. cons ( Seq. head c ) ( Seq. tail c ) as c ;
893+ rewrite each ( mk_cbor_map_entry ( List.Tot.Base. hd v ) ::
894+ List.Tot.Base. map mk_cbor_map_entry ( List.Tot.Base. tl v )) as (
895+ List.Tot.Base. map mk_cbor_map_entry ( v ));
856896 ();
857897 }
858898}
@@ -1788,13 +1828,17 @@ ensures
17881828 Trade. elim _ _ ;
17891829 fold ( map_get_post_none cbor_det_match x px vx vk );
17901830 fold ( map_get_post cbor_det_match x px vx vk None );
1831+ rewrite ( map_get_post cbor_det_match x px vx vk None )
1832+ as ( map_get_post cbor_det_match x px vx vk res );
17911833 ();
17921834 }
17931835 Some x' -> {
17941836 unfold ( cbor_det_map_get_invariant false px x vx vk m p' i ( Some x' ));
17951837 unfold ( cbor_det_map_get_invariant_some px x vx vk m x' );
17961838 fold ( map_get_post_some cbor_det_match x px vx vk x' );
17971839 fold ( map_get_post cbor_det_match x px vx vk ( Some x' ));
1840+ rewrite ( map_get_post cbor_det_match x px vx vk ( Some x' ))
1841+ as ( map_get_post cbor_det_match x px vx vk res );
17981842 }
17991843 }
18001844}
@@ -1833,6 +1877,8 @@ fn cbor_det_map_get (_: unit)
18331877 pure ( cont == cont' )
18341878 {
18351879 with gb gi gres . assert ( cbor_det_map_get_invariant gb px x vx vk m p' gi gres );
1880+ rewrite ( cbor_det_map_get_invariant gb px x vx vk m p' gi gres )
1881+ as ( cbor_det_map_get_invariant gb px x vx vk m p' gi None );
18361882 unfold ( cbor_det_map_get_invariant gb px x vx vk m p' gi None );
18371883 unfold ( cbor_det_map_get_invariant_none gb px x vx vk m p' gi );
18381884 let entry = cbor_det_map_iterator_next () pi ;
@@ -1859,6 +1905,7 @@ fn cbor_det_map_get (_: unit)
18591905 List.Tot. assoc_mem ( Ghost . reveal vk ) l' ;
18601906 pcont := false ;
18611907 fold ( cbor_det_map_get_invariant_none false px x vx vk m p' gi' );
1908+ assert ( pts_to pres None );
18621909 fold ( cbor_det_map_get_invariant false px x vx vk m p' gi' None );
18631910 } else {
18641911 Trade. elim_hyp_l _ _ ( cbor_det_match px x vx );
@@ -1870,6 +1917,7 @@ fn cbor_det_map_get (_: unit)
18701917 let cont = not is_empty ;
18711918 pcont := cont ;
18721919 fold ( cbor_det_map_get_invariant_none cont px x vx vk m p' i' );
1920+ assert ( pts_to pres None );
18731921 fold ( cbor_det_map_get_invariant cont px x vx vk m p' i' None );
18741922 }
18751923 };
0 commit comments