@@ -292,6 +292,7 @@ ghost fn pcm_rw u#a (#t: Type u#a)
292292 fold pts_to_mask a2 # p2 s2 m2 ;
293293}
294294
295+ # push - options " --z3rlimit 20 --fuel 1 --ifuel 1 --z3version 4.15.3"
295296ghost fn pcm_share u# a (# t : Type u# a ) # l
296297 ( a : array t ) p s m
297298 ( a1 : array t ) p1 s1 m1
@@ -330,7 +331,9 @@ ghost fn pcm_share u#a (#t: Type u#a) #l
330331 Some ? ( Map. sel ( mk_carrier' a p s m ( a . vis l )) ( i2 + a2 . offset )));
331332 fold pts_to_mask a2 # p2 s2 m2 ;
332333}
334+ # pop - options
333335
336+ # push - options " --z3rlimit 20 --fuel 1 --ifuel 1 --z3version 4.15.3"
334337ghost fn pcm_gather u# a (# t : Type u# a ) # l
335338 ( a : array t ) p s m
336339 ( a1 : array t ) p1 s1 m1
@@ -371,7 +374,9 @@ ghost fn pcm_gather u#a (#t: Type u#a) #l
371374 Map. sel ( mk_carrier' a p s m ( a . vis l )) ( i + a . offset ) == Some (( Seq. index s i , a . vis l ), p ));
372375 fold pts_to_mask a # p s m ;
373376}
377+ # pop - options
374378
379+ # push - options " --z3rlimit 40 --fuel 0 --ifuel 0 --z3version 4.15.3"
375380ghost
376381fn mask_share_gen u# a (# a : Type u# a ) ( arr : array a ) # s # p ( p1 : perm ) ( p2 : perm ) # mask
377382 requires pts_to_mask arr # p s mask
@@ -386,6 +391,7 @@ fn mask_share_gen u#a (#a: Type u#a) (arr:array a) #s #p (p1: perm) (p2: perm) #
386391 arr p1 s mask
387392 arr p2 s mask ;
388393}
394+ # pop - options
389395
390396ghost
391397fn mask_share u# a (# a : Type u# a ) ( arr : array a ) # s # p # mask
@@ -418,6 +424,7 @@ ghost fn mask_gather u#a (#t: Type u#a) (arr: array t) #p1 #p2 #s1 #s2 #mask1 #m
418424 Some (( Seq. index s1 i , process_of l ), p1 ));
419425}
420426
427+ # push - options " --z3rlimit 40 --z3refresh --fuel 1 --ifuel 1 --z3version 4.15.3"
421428ghost fn split_mask u# a (# t : Type u# a ) ( arr : array t ) # f # v # mask ( pred : nat -> prop )
422429 requires pts_to_mask arr # f v mask
423430 ensures pts_to_mask arr # f v ( mask_isect mask pred )
@@ -430,6 +437,7 @@ ghost fn split_mask u#a (#t: Type u#a) (arr: array t) #f #v #mask (pred: nat ->
430437 arr f v ( mask_isect mask pred )
431438 arr f v ( mask_diff mask pred );
432439}
440+ # pop - options
433441
434442let mix # t ( v1 : Seq. seq t ) ( v2 : Seq. seq t { Seq. length v1 == Seq. length v2 }) ( mask : nat -> prop ) :
435443 GTot ( res : Seq. seq t { Seq. length res == Seq. length v1 /\
@@ -439,6 +447,7 @@ let mix #t (v1: Seq.seq t) (v2: Seq.seq t { Seq.length v1 == Seq.length v2 }) (m
439447 Seq. init_ghost ( Seq. length v1 ) fun i ->
440448 if IndefiniteDescription. strong_excluded_middle ( mask i ) then Seq. index v1 i else Seq. index v2 i
441449
450+ # push - options " --z3rlimit 40 --fuel 0 --ifuel 0 --z3version 4.15.3"
442451[ @@allow_ambiguous ]
443452ghost fn join_mask u# a (# t : Type u# a ) ( arr : array t ) # f # v1 # v2 # mask1 # mask2
444453 requires pts_to_mask arr # f v1 mask1
@@ -461,6 +470,7 @@ ghost fn join_mask u#a (#t: Type u#a) (arr: array t) #f #v1 #v2 #mask1 #mask2
461470 arr f v1 mask1
462471 arr f v2 mask2 ;
463472}
473+ # pop - options
464474
465475[ @@allow_ambiguous ]
466476ghost fn join_mask' u# a (# t : Type u# a ) ( arr : array t ) # f # v # mask1 # mask2
0 commit comments