Skip to content

Commit b128e65

Browse files
authored
Merge pull request #523 from mtzguido/tahina_array_updates
Some updates to Pulse.Lib.Array
2 parents 085e970 + a4fc743 commit b128e65

File tree

4 files changed

+25
-10
lines changed

4 files changed

+25
-10
lines changed

lib/pulse/lib/Pulse.Lib.Array.Core.fst

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -379,20 +379,29 @@ ghost fn pcm_gather u#a (#t: Type u#a) #l
379379
}
380380
381381
ghost
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]
397406
ghost 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

lib/pulse/lib/Pulse.Lib.Array.Core.fsti

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
127133
ghost
128134
fn 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

lib/pulse/lib/Pulse.Lib.Array.fst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff 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

9191
fn memcpy
92-
(#t:eqtype)
92+
(#t:Type0)
9393
(l:SZ.t)
9494
(src dst:larray t (SZ.v l))
9595
(#p:perm)

lib/pulse/lib/Pulse.Lib.Array.fsti

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ fn compare
4141
pure (res <==> Seq.equal s1 s2)
4242

4343
fn 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

5656
fn memcpy
57-
(#t:eqtype)
57+
(#t:Type0)
5858
(l:SZ.t)
5959
(src dst:larray t (SZ.v l))
6060
(#p:perm)

0 commit comments

Comments
 (0)