Skip to content

Commit 73d9933

Browse files
nikswamygebner
authored andcommitted
expose some utils
1 parent ce54f24 commit 73d9933

File tree

2 files changed

+52
-34
lines changed

2 files changed

+52
-34
lines changed

lib/pulse/lib/Pulse.Lib.Send.fst

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,30 @@ ghost fn on_pure_elim l p
174174
placeless_on_elim (pure p) l;
175175
}
176176

177+
ghost fn on_star_elim #l (p q: slprop)
178+
requires on l (p ** q)
179+
ensures on l p
180+
ensures on l q
181+
{
182+
ghost_impersonate l (on l (p ** q)) (on l p ** on l q) fn _ {
183+
on_elim (p ** q);
184+
on_intro p;
185+
on_intro q;
186+
}
187+
}
188+
189+
ghost fn on_star_intro #l (p q: slprop)
190+
requires on l p
191+
requires on l q
192+
ensures on l (p ** q)
193+
{
194+
ghost_impersonate l (on l p ** on l q) (on l (p ** q)) fn _ {
195+
on_elim p;
196+
on_elim q;
197+
on_intro (p ** q);
198+
}
199+
}
200+
177201
ghost fn placeless_later_credit amt : placeless (later_credit amt) = l1 l2 {
178202
on_later_credit_eq l1 amt;
179203
on_later_credit_eq l2 amt;
@@ -203,6 +227,16 @@ ghost fn placeless_exists' u#a (#a: Type u#a) (p: a -> slprop) {| ((x:a) -> plac
203227
}
204228
let placeless_exists = placeless_exists'
205229

230+
ghost fn on_exists_elim u#a #l (#a: Type u#a) (p: a -> slprop)
231+
requires on l (exists* x. p x)
232+
ensures exists* x. on l (p x)
233+
{
234+
ghost_impersonate l (on l (exists* x. p x)) (exists* x. on l (p x)) fn _ {
235+
on_elim (exists* x. p x);
236+
on_intro (p _);
237+
}
238+
}
239+
206240
let timeless_in_same_process p =
207241
assert_norm (in_same_process p == (exists* l. loc l ** pure (process_of l == process_of p)))
208242

@@ -216,40 +250,6 @@ ghost fn dup_in_same_process p () : duplicable_f (in_same_process p) = {
216250
instance duplicable_in_same_process p : duplicable (in_same_process p) =
217251
{ dup_f = dup_in_same_process p }
218252

219-
ghost fn on_star_elim #l (p q: slprop)
220-
requires on l (p ** q)
221-
ensures on l p
222-
ensures on l q
223-
{
224-
ghost_impersonate l (on l (p ** q)) (on l p ** on l q) fn _ {
225-
on_elim (p ** q);
226-
on_intro p;
227-
on_intro q;
228-
}
229-
}
230-
231-
ghost fn on_star_intro #l (p q: slprop)
232-
requires on l p
233-
requires on l q
234-
ensures on l (p ** q)
235-
{
236-
ghost_impersonate l (on l p ** on l q) (on l (p ** q)) fn _ {
237-
on_elim p;
238-
on_elim q;
239-
on_intro (p ** q);
240-
}
241-
}
242-
243-
ghost fn on_exists_elim u#a #l (#a: Type u#a) (p: a -> slprop)
244-
requires on l (exists* x. p x)
245-
ensures exists* x. on l (p x)
246-
{
247-
ghost_impersonate l (on l (exists* x. p x)) (exists* x. on l (p x)) fn _ {
248-
on_elim (exists* x. p x);
249-
on_intro (p _);
250-
}
251-
}
252-
253253
ghost fn is_send_across_elim #b (g: loc_id -> b) p {| inst: is_send_across g p |} #l l'
254254
requires on l p
255255
requires pure (g l == g l')

lib/pulse/lib/Pulse.Lib.Send.fsti

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,20 @@ ghost fn placeless_on_elim (p: slprop) {| placeless p |} l
8989
requires on l p
9090
ensures p
9191

92+
ghost fn on_pure_elim l p
93+
requires on l (pure p)
94+
ensures pure p
95+
96+
ghost fn on_star_elim #l (p q: slprop)
97+
requires on l (p ** q)
98+
ensures on l p
99+
ensures on l q
100+
101+
ghost fn on_star_intro #l (p q: slprop)
102+
requires on l p
103+
requires on l q
104+
ensures on l (p ** q)
105+
92106
instance val placeless_on (l: loc_id) (p: slprop) : placeless (on l p)
93107
instance val placeless_emp : placeless emp
94108
instance val placeless_star (a b: slprop) {| placeless a, placeless b |} : placeless (a ** b)
@@ -99,6 +113,10 @@ instance val placeless_slprop_ref_pts_to x y : placeless (slprop_ref_pts_to x y)
99113
instance val placeless_exists #a (p: a -> slprop) {| ((x:a) -> placeless (p x)) |} :
100114
placeless (exists* x. p x)
101115

116+
ghost fn on_exists_elim u#a #l (#a: Type u#a) (p: a -> slprop)
117+
requires on l (exists* x. p x)
118+
ensures exists* x. on l (p x)
119+
102120
let in_same_process p = exists* l. loc l ** pure (process_of l == process_of p)
103121
val timeless_in_same_process p : Lemma (timeless (in_same_process p)) [SMTPat (timeless (in_same_process p))]
104122
instance val duplicable_in_same_process p : duplicable (in_same_process p)

0 commit comments

Comments
 (0)