@@ -21,10 +21,6 @@ module U32 = FStar.UInt32
2121module OR = Pulse.Lib.OnRange
2222module SLT = Pulse.Lib.SLPropTable
2323module Box = Pulse.Lib.Box
24-
25- instance assume_box_is_atomic ( r : Box. box U32. t ) p i :
26- is_send ( pts_to r # p i ) =
27- admit ()
2824
2925noeq
3026type cvar_t_core = {
@@ -97,6 +93,8 @@ let cvar_inv (b: cvar_t_core) (p:slprop)
9793 pure ( Seq. length preds == n ) **
9894 maybe_holds v p preds
9995
96+ instance is_send_cvar_inv b p : is_send ( cvar_inv b p ) = admit ()
97+
10098let cvar ( b : cvar_t ) ( p : slprop )
10199: slprop
102100= exists * l' . in_same_process l' **
@@ -171,7 +169,6 @@ ensures
171169 ensures later ( on l <| cvar_inv b . core p )
172170 {
173171 later_elim _ ;
174- admit ();
175172 is_send_elim_on ( cvar_inv b . core p ) # _ ;
176173 unfold cvar_inv ;
177174 Box. gather b . core . r ;
@@ -185,7 +182,9 @@ ensures
185182 rewrite ( istar preds ) as ( maybe_holds 1ul p preds );
186183 Box. share b . core . r ;
187184 fold ( cvar_inv b . core p );
188- later_intro ( cvar_inv b . core p );
185+ is_send_intro_on ( cvar_inv b . core p ) l ;
186+ later_intro ( on l <| cvar_inv b . core p );
187+ drop_ ( in_same_process l );
189188 drop_ ( Box. pts_to b . core . r # 0 . 5R _ )
190189 };
191190 drop_ ( inv _ _ )
@@ -267,13 +266,14 @@ ensures
267266 ( if res then p else SLT. pts_to b . core . tab i # 0 . 5R p )
268267 {
269268 later_elim _ ;
270- admit () ;
269+ is_send_elim_on ( cvar_inv b . core q ) # _ ;
271270 unfold cvar_inv ;
272271 let vv = read_atomic_box b . core . r ;
273272 if ( vv = 0ul )
274273 {
275274 fold ( cvar_inv b . core q );
276- later_intro ( cvar_inv b . core q );
275+ is_send_intro_on ( cvar_inv b . core q ) l ;
276+ later_intro ( on l <| cvar_inv b . core q );
277277 drop_ ( later_credit 1 );
278278 false ;
279279 }
@@ -306,7 +306,8 @@ ensures
306306 rewrite ( istar preds' ) as ( maybe_holds v q preds' );
307307 // fold (maybe_holds v q preds');
308308 fold ( cvar_inv b . core q );
309- later_intro ( cvar_inv b . core q );
309+ is_send_intro_on ( cvar_inv b . core q ) l ;
310+ later_intro ( on l <| cvar_inv b . core q );
310311 drop_ ( SLT. pts_to b . core . tab i # 0 . 5R _ );
311312 true
312313 }
@@ -448,7 +449,7 @@ opens
448449 SLT. pts_to b . core . tab k # 0 . 5R p2 )
449450 {
450451 later_elim _ ;
451- admit () ;
452+ is_send_elim_on ( cvar_inv b . core q ) # _ ;
452453 unfold cvar_inv ;
453454 with v preds . assert ( maybe_holds v q preds );
454455 get_predicate_at_i b . core . tab i ( p1 ** p2 ) preds ;
@@ -482,7 +483,8 @@ opens
482483 // step ();
483484 rewrite equiv ( istar preds' ) q as maybe_holds v q preds' ;
484485 fold ( cvar_inv b . core q );
485- later_intro ( cvar_inv b . core q );
486+ is_send_intro_on ( cvar_inv b . core q ) l ;
487+ later_intro ( on l <| cvar_inv b . core q );
486488 drop_ ( SLT. pts_to b . core . tab i # 0 . 5R emp );
487489 }
488490 else
@@ -491,7 +493,8 @@ opens
491493 rewrite_istar preds preds' i p1 p2 q ;
492494 rewrite istar preds' as maybe_holds v q preds' ;
493495 fold ( cvar_inv b . core q );
494- later_intro ( cvar_inv b . core q );
496+ is_send_intro_on ( cvar_inv b . core q ) l ;
497+ later_intro ( on l <| cvar_inv b . core q );
495498 drop_ ( SLT. pts_to b . core . tab i # 0 . 5R emp );
496499 }
497500 };
0 commit comments