Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Jonas Kastberg
iris
Commits
5f96abdc
Commit
5f96abdc
authored
Feb 16, 2016
by
Ralf Jung
Browse files
progress on signal_spec
parent
55eee5a6
Changes
1
Hide whitespace changes
Inline
Side-by-side
barrier/barrier.v
View file @
5f96abdc
...
...
@@ -100,10 +100,10 @@ Section proof.
Context
(
HeapI
:
gid
)
`
{!
HeapInG
Σ
HeapI
}
(
HeapG
:
gname
)
(
HeapN
:
namespace
).
Context
(
StsI
:
gid
)
`
{!
STSInG
heap_lang
Σ
StsI
sts
}.
Context
(
SpI
:
gid
)
`
{!
SavedPropInG
heap_lang
Σ
SpI
}.
(* TODO: What is the best way to assert that HeapN and N are "disjoi
nt
"
,
as
in, neither is a prefix of th
e
o
the
r? This should be usable by automatic
proofs, e.g., tha
t HeapN
⊆ coPset_all ∖ N. *)
(* TODO We could alternatively construct the namespaces to be disjoint.
But that would take a lot of flexibility from the clie
nt,
who probably
wants to also us
e the
heap_ctx elsewhere. *)
Contex
t
(
HeapN
_disj
:
ndisj
HeapN
N
).
Notation
iProp
:
=
(
iPropG
heap_lang
Σ
).
...
...
@@ -148,7 +148,23 @@ Section proof.
apply
forall_intro
=>-[
p
I
].
apply
wand_intro_l
.
rewrite
-!
assoc
.
apply
const_elim_sep_l
=>
Hs
.
destruct
p
;
last
done
.
rewrite
{
1
}/
barrier_inv
=>/={
Hs
}.
rewrite
later_sep
.
eapply
wp_store
.
eapply
wp_store
;
eauto
with
I
.
{
(* FIXME can we make this more automatic? *)
apply
ndisj_disjoint
in
HeapN_disj
.
solve_elem_of
.
}
rewrite
-!
assoc
.
apply
sep_mono_r
.
etransitivity
;
last
eapply
later_mono
.
{
(* Is this really the best way to strip the later? *)
erewrite
later_sep
.
apply
sep_mono_r
.
apply
later_intro
.
}
apply
wand_intro_l
.
rewrite
-(
exist_intro
(
State
High
I
)).
rewrite
-(
exist_intro
∅
).
rewrite
const_equiv
/=
;
last
first
.
{
constructor
;
first
constructor
;
rewrite
/=
/
tok
/=
;
solve_elem_of
+.
}
rewrite
left_id
-
later_intro
{
2
}/
barrier_inv
-!
assoc
.
apply
sep_mono_r
.
rewrite
!
assoc
[(
_
★
P
)%
I
]
comm
!
assoc
-
2
!
assoc
.
apply
sep_mono
;
last
first
.
{
apply
wand_intro_l
.
eauto
with
I
.
}
(* Now we come to the core piece of the proof: Updating from waiting to ress. *)
rewrite
/
waiting
/
ress
sep_exist_l
.
apply
exist_elim
=>{
Q
}
Q
.
rewrite
later_wand
{
1
}(
later_intro
P
)
!
assoc
wand_elim_r
.
(* TODO: Now we need stuff about Π★{set I} *)
Abort
.
Lemma
wait_spec
l
P
(
Q
:
val
→
iProp
)
:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment