Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
George Pirlea
Iris
Commits
ff75592a
Commit
ff75592a
authored
Jan 26, 2016
by
Ralf Jung
Browse files
(almost) instantiate lifting lemma for allocation
parent
a6f31142
Changes
6
Show whitespace changes
Inline
Side-by-side
.gitignore
View file @
ff75592a
...
...
@@ -5,5 +5,6 @@
*.aux
\#*\#
*~
*.bak
.coq-native/
Makefile
_CoqProject
View file @
ff75592a
-Q . ""
./prelude/option.v
./prelude/fin_map_dom.v
./prelude/bsets.v
./prelude/fin_maps.v
./prelude/vector.v
./prelude/pmap.v
./prelude/stringmap.v
./prelude/fin_collections.v
./prelude/mapset.v
./prelude/proof_irrel.v
./prelude/hashset.v
./prelude/pretty.v
./prelude/countable.v
./prelude/orders.v
./prelude/natmap.v
./prelude/strings.v
./prelude/relations.v
./prelude/collections.v
./prelude/listset.v
./prelude/streams.v
./prelude/gmap.v
./prelude/base.v
./prelude/tactics.v
./prelude/prelude.v
./prelude/listset_nodup.v
./prelude/finite.v
./prelude/numbers.v
./prelude/nmap.v
./prelude/zmap.v
./prelude/co_pset.v
./prelude/lexico.v
./prelude/sets.v
./prelude/decidable.v
./prelude/list.v
./prelude/error.v
./modures/option.v
./modures/cmra.v
./modures/sts.v
./modures/auth.v
./modures/fin_maps.v
./modures/logic.v
./modures/cofe.v
./modures/base.v
./modures/dra.v
./modures/cofe_solver.v
./modures/agree.v
./modures/ra.v
./modures/excl.v
./iris/model.v
./iris/adequacy.v
./iris/hoare_lifting.v
./iris/lifting.v
./iris/namespace.v
./iris/viewshifts.v
./iris/wsat.v
./iris/ownership.v
./iris/weakestpre.v
./iris/language.v
./iris/pviewshifts.v
./iris/resources.v
./iris/hoare.v
./iris/parameter.v
./barrier/heap_lang.v
prelude/option.v
prelude/fin_map_dom.v
prelude/bsets.v
prelude/fin_maps.v
prelude/vector.v
prelude/pmap.v
prelude/stringmap.v
prelude/fin_collections.v
prelude/mapset.v
prelude/proof_irrel.v
prelude/hashset.v
prelude/pretty.v
prelude/countable.v
prelude/orders.v
prelude/natmap.v
prelude/strings.v
prelude/relations.v
prelude/collections.v
prelude/listset.v
prelude/streams.v
prelude/gmap.v
prelude/base.v
prelude/tactics.v
prelude/prelude.v
prelude/listset_nodup.v
prelude/finite.v
prelude/numbers.v
prelude/nmap.v
prelude/zmap.v
prelude/co_pset.v
prelude/lexico.v
prelude/sets.v
prelude/decidable.v
prelude/list.v
prelude/error.v
modures/option.v
modures/cmra.v
modures/sts.v
modures/auth.v
modures/fin_maps.v
modures/logic.v
modures/cofe.v
modures/base.v
modures/dra.v
modures/cofe_solver.v
modures/agree.v
modures/ra.v
modures/excl.v
iris/model.v
iris/adequacy.v
iris/hoare_lifting.v
iris/lifting.v
iris/namespace.v
iris/viewshifts.v
iris/wsat.v
iris/ownership.v
iris/weakestpre.v
iris/language.v
iris/pviewshifts.v
iris/resources.v
iris/hoare.v
iris/parameter.v
barrier/heap_lang.v
barrier/parameter.v
barrier/heap_lang.v
View file @
ff75592a
Require
Import
Autosubst
.
Autosubst
.
Require
Import
prelude
.
option
prelude
.
gmap
iris
.
parameter
.
Require
Import
prelude
.
option
prelude
.
gmap
iris
.
language
.
(** Some tactics useful when dealing with equality of sigma-like types: existT T0 t0 = existT T1 t1.
They all assume such an equality is the first thing on the "stack" (goal). *)
...
...
@@ -55,6 +55,9 @@ Instance Subst_expr : Subst expr. derive. Defined.
Instance
SubstLemmas_expr
:
SubstLemmas
expr
.
derive
.
Qed
.
Definition
Lam
(
e
:
{
bind
expr
})
:
=
Rec
(
e
.[
up
ids
]).
Definition
Let'
(
e1
:
expr
)
(
e2
:
{
bind
expr
})
:
=
App
(
Lam
e2
)
e1
.
Definition
Seq
(
e1
e2
:
expr
)
:
=
Let'
e1
(
e2
.[
up
ids
]).
Definition
LitUnit
:
=
Lit
tt
.
Definition
LitTrue
:
=
Lit
true
.
Definition
LitFalse
:
=
Lit
false
.
...
...
@@ -233,6 +236,14 @@ Proof.
intros
Hnval
Hval
.
erewrite
fill_not_value
in
Hval
by
assumption
.
discriminate
.
Qed
.
Lemma
comp_empty
K
K'
:
EmptyCtx
=
comp_ctx
K
K'
→
K
=
EmptyCtx
∧
K'
=
EmptyCtx
.
Proof
.
destruct
K
;
try
discriminate
.
destruct
K'
;
try
discriminate
.
done
.
Qed
.
(** The stepping relation *)
Inductive
prim_step
:
expr
->
state
->
expr
->
state
->
option
expr
->
Prop
:
=
...
...
@@ -252,7 +263,7 @@ Inductive prim_step : expr -> state -> expr -> state -> option expr -> Prop :=
prim_step
(
Case
(
InjR
e0
)
e1
e2
)
σ
(
e2
.[
e0
/])
σ
None
|
ForkS
e
σ
:
prim_step
(
Fork
e
)
σ
LitUnit
σ
(
Some
e
)
|
Ref
S
e
v
σ
l
(
Hv
:
e2v
e
=
Some
v
)
(
Hfresh
:
σ
!!
l
=
None
)
:
|
Alloc
S
e
v
σ
l
(
Hv
:
e2v
e
=
Some
v
)
(
Hfresh
:
σ
!!
l
=
None
)
:
prim_step
(
Alloc
e
)
σ
(
Loc
l
)
(<[
l
:
=
v
]>
σ
)
None
|
LoadS
l
v
σ
(
Hlookup
:
σ
!!
l
=
Some
v
)
:
prim_step
(
Load
(
Loc
l
))
σ
(
v2e
v
)
σ
None
...
...
@@ -426,7 +437,7 @@ Section Language.
exists
K
e1'
e2'
,
e1
=
fill
K
e1'
/\
e2
=
fill
K
e2'
/\
prim_step
e1'
σ
1 e2
'
σ
2
ef
.
Program
Instance
heap_lang
:
Language
expr
value
state
:
=
{|
Global
Program
Instance
heap_lang
:
Language
expr
value
state
:
=
{|
of_val
:
=
v2e
;
to_val
:
=
e2v
;
language
.
atomic
:
=
atomic
;
...
...
@@ -464,10 +475,17 @@ Section Language.
do
3
eexists
.
split
;
last
split
;
eassumption
||
reflexivity
.
Qed
.
End
Language
.
Lemma
prim_ectx_step
e1
σ
1 e2
σ
2
ef
:
reducible
e1
→
ectx_step
e1
σ
1 e2
σ
2
ef
→
prim_step
e1
σ
1 e2
σ
2
ef
.
Proof
.
intros
Hred
(
K'
&
e1'
&
e2'
&
Heq1
&
Heq2
&
Hstep
).
destruct
(@
step_by_value
K'
EmptyCtx
e1'
e1
)
as
[
K''
[
HK'
HK''
]%
comp_empty
].
-
by
rewrite
fill_empty
.
-
done
.
-
apply
reducible_not_value
.
do
4
eexists
;
eassumption
.
-
subst
K'
K''
e1
e2
.
by
rewrite
!
fill_empty
.
Qed
.
(* This is just to demonstrate that we can instantiate IParam. *)
Module
IParam
.
Definition
Σ
:
=
IParamConst
heap_lang
unitRA
.
Print
Assumptions
Σ
.
End
IParam
.
End
Language
.
barrier/lifting.v
0 → 100644
View file @
ff75592a
Require
Export
barrier
.
parameter
.
Require
Import
prelude
.
gmap
iris
.
lifting
.
Import
uPred
.
(** Base axioms for core primitives of the language. *)
(* TODO RJ: Figure out some better way to make the
postcondition a predicate over a *location* *)
(* TODO RJ: Figure out a way to to always use our Σ. *)
Lemma
wp_alloc
E
σ
v
:
ownP
(
Σ
:
=
Σ
)
σ
⊑
wp
(
Σ
:
=
Σ
)
E
(
Alloc
(
v2e
v
))
(
λ
v'
,
∃
l
,
■
(
v'
=
LocV
l
∧
σ
!!
l
=
None
)
∧
ownP
(
Σ
:
=
Σ
)
(<[
l
:
=
v
]>
σ
)).
Proof
.
(* RJ FIXME: rewrite would be nicer... *)
etransitivity
;
last
eapply
wp_lift_step
with
(
σ
1
:
=
σ
)
(
φ
:
=
λ
e'
σ
'
ef
,
∃
l
,
e'
=
Loc
l
∧
σ
'
=
<[
l
:
=
v
]>
σ
∧
σ
!!
l
=
None
∧
ef
=
None
)
;
last
first
.
-
intros
e2
σ
2
ef
Hstep
%
prim_ectx_step
;
last
first
.
{
exists
∅
.
do
3
eexists
.
eapply
AllocS
with
(
l
:
=
0
)
;
by
rewrite
?v2v
.
}
inversion_clear
Hstep
.
rewrite
v2v
in
Hv
.
inversion_clear
Hv
.
eexists
;
split_ands
;
done
.
-
(* RJ FIXME: Need to find a fresh location. *)
admit
.
-
reflexivity
.
-
reflexivity
.
-
(* RJ FIXME I am sure there is a better way to invoke right_id, but I could not find it. *)
rewrite
-
pvs_intro
.
rewrite
-{
1
}[
ownP
σ
](@
right_id
_
_
_
_
uPred
.
sep_True
).
apply
sep_mono
;
first
done
.
rewrite
-
later_intro
.
apply
forall_intro
=>
e2
.
apply
forall_intro
=>
σ
2
.
apply
forall_intro
=>
ef
.
apply
wand_intro_l
.
rewrite
right_id
.
rewrite
-
pvs_intro
.
apply
const_elim_l
.
intros
[
l
[->
[->
[
Hl
->]]]].
rewrite
right_id
.
rewrite
-
wp_value'
;
last
reflexivity
.
erewrite
<-
exist_intro
with
(
a
:
=
l
).
apply
and_intro
.
+
by
apply
const_intro
.
+
done
.
Abort
.
barrier/parameter.v
0 → 100644
View file @
ff75592a
Require
Export
barrier
.
heap_lang
.
Require
Import
iris
.
parameter
.
Definition
Σ
:
=
IParamConst
heap_lang
unitRA
.
Print
Assumptions
Σ
.
iris/weakestpre.v
View file @
ff75592a
...
...
@@ -177,10 +177,18 @@ Proof.
Qed
.
(* Derived rules *)
Opaque
uPred_holds
.
Import
uPred
.
Global
Instance
wp_mono'
E
e
:
Proper
(
pointwise_relation
_
(
⊑
)
==>
(
⊑
))
(
wp
E
e
).
Proof
.
by
intros
Q
Q'
?
;
apply
wp_mono
.
Qed
.
Lemma
wp_value'
E
Q
e
v
:
to_val
e
=
Some
v
→
Q
v
⊑
wp
E
e
Q
.
Proof
.
intros
Hv
.
apply
of_to_val
in
Hv
.
rewrite
-
Hv
.
by
apply
wp_value
.
Qed
.
Lemma
wp_frame_l
E
e
Q
R
:
(
R
★
wp
E
e
Q
)
⊑
wp
E
e
(
λ
v
,
R
★
Q
v
).
Proof
.
setoid_rewrite
(
commutative
_
R
)
;
apply
wp_frame_r
.
Qed
.
Lemma
wp_frame_later_l
E
e
Q
R
:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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