File tree Expand file tree Collapse file tree 4 files changed +25
-10
lines changed
Expand file tree Collapse file tree 4 files changed +25
-10
lines changed Original file line number Diff line number Diff line change @@ -379,20 +379,29 @@ ghost fn pcm_gather u#a (#t: Type u#a) #l
379379}
380380
381381ghost
382- fn mask_share u#a (#a: Type u#a) (arr:array a) (#s: Seq.seq a) #p #mask
383- requires pts_to_mask arr #p s mask
384- ensures pts_to_mask arr #(p /. 2.0R) s mask
385- ensures pts_to_mask arr #(p /. 2.0R) s mask
382+ fn mask_share_gen u#a (#a: Type u#a) (arr:array a) (#s: Seq.seq a) #p (p1: perm) (p2: perm) #mask
383+ requires pts_to_mask arr #p s mask ** pure ((p <: real) == p1 +. p2)
384+ ensures pts_to_mask arr #p1 s mask
385+ ensures pts_to_mask arr #p2 s mask
386386{
387387 loc_get ();
388388 pts_to_mask_props arr;
389389 pcm_share
390390 arr p s mask
391- arr (p /. 2.0R) s mask
392- arr (p /. 2.0R) s mask;
391+ arr p1 s mask
392+ arr p2 s mask;
393393 drop_ (loc _);
394394}
395395
396+ ghost
397+ fn mask_share u#a (#a: Type u#a) (arr:array a) (#s: Seq.seq a) #p #mask
398+ requires pts_to_mask arr #p s mask
399+ ensures pts_to_mask arr #(p /. 2.0R) s mask
400+ ensures pts_to_mask arr #(p /. 2.0R) s mask
401+ {
402+ mask_share_gen arr #s #p (p /. 2.0R) (p /. 2.0R) #mask
403+ }
404+
396405[@@allow_ambiguous]
397406ghost fn mask_gather u#a (#t: Type u#a) (arr: array t) #p1 #p2 #s1 #s2 #mask1 #mask2
398407 requires pts_to_mask arr #p1 s1 mask1
Original file line number Diff line number Diff line change @@ -124,6 +124,12 @@ fn mask_free u#a (#elt: Type u#a) (a: array elt) (#s: Ghost.erased (Seq.seq elt)
124124 requires pure ( forall i . mask i )
125125 requires pure ( is_full_array a )
126126
127+ ghost
128+ fn mask_share_gen u# a (# a : Type u# a ) ( arr : array a ) (# s : Seq. seq a ) # p ( p1 : perm ) ( p2 : perm ) # mask
129+ requires pts_to_mask arr # p s mask ** pure (( p <: real ) == p1 +. p2 )
130+ ensures pts_to_mask arr # p1 s mask
131+ ensures pts_to_mask arr # p2 s mask
132+
127133ghost
128134fn mask_share u# a (# a : Type u# a ) ( arr : array a ) (# s : Seq. seq a ) # p # mask
129135 requires pts_to_mask arr # p s mask
Original file line number Diff line number Diff line change @@ -53,7 +53,7 @@ fn compare (#t:eqtype) (l:US.t) (a1 a2:larray t (US.v l)) (#p1 #p2:perm)
5353 ( !i = l )
5454}
5555
56- fn memcpy_l (# t :eqtype ) ( l : US. t ) ( src dst :( a : array t { US. v l <= A. length a }))
56+ fn memcpy_l (# t :Type0 ) ( l : US. t ) ( src dst :( a : array t { US. v l <= A. length a }))
5757 (# p : perm ) (# src0 # dst0 : Ghost . erased ( Seq. seq t ))
5858 requires pts_to src # p src0 **
5959 pts_to dst dst0
@@ -89,7 +89,7 @@ fn memcpy_l (#t:eqtype) (l:US.t) (src dst:(a:array t { US.v l <= A.length a }))
8989
9090
9191fn memcpy
92- (# t :eqtype )
92+ (# t :Type0 )
9393 ( l : SZ. t )
9494 ( src dst : larray t ( SZ. v l ))
9595 (# p : perm )
Original file line number Diff line number Diff line change @@ -41,7 +41,7 @@ fn compare
4141 pure ( res <==> Seq. equal s1 s2 )
4242
4343fn memcpy_l
44- (# t :eqtype )
44+ (# t :Type0 )
4545 ( l : SZ. t )
4646 ( src dst :( a : array t { SZ. v l <= length a }))
4747 (# p : perm )
@@ -54,7 +54,7 @@ fn memcpy_l
5454 ( Seq. slice dst0 ( SZ. v l ) ( length dst )))
5555
5656fn memcpy
57- (# t :eqtype )
57+ (# t :Type0 )
5858 ( l : SZ. t )
5959 ( src dst : larray t ( SZ. v l ))
6060 (# p : perm )
You can’t perform that action at this time.
0 commit comments