Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Jonas Kastberg
iris
Commits
678b75da
Commit
678b75da
authored
Oct 31, 2018
by
Robbert Krebbers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Turn global fork postcondition into a predicate over return values.
parent
d0f42b2a
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
32 additions
and
32 deletions
+32
-32
theories/heap_lang/lifting.v
theories/heap_lang/lifting.v
+1
-1
theories/heap_lang/total_adequacy.v
theories/heap_lang/total_adequacy.v
+1
-1
theories/program_logic/adequacy.v
theories/program_logic/adequacy.v
+12
-12
theories/program_logic/ectx_lifting.v
theories/program_logic/ectx_lifting.v
+4
-4
theories/program_logic/lifting.v
theories/program_logic/lifting.v
+4
-4
theories/program_logic/ownp.v
theories/program_logic/ownp.v
+2
-2
theories/program_logic/total_adequacy.v
theories/program_logic/total_adequacy.v
+1
-1
theories/program_logic/total_ectx_lifting.v
theories/program_logic/total_ectx_lifting.v
+2
-2
theories/program_logic/total_lifting.v
theories/program_logic/total_lifting.v
+2
-2
theories/program_logic/total_weakestpre.v
theories/program_logic/total_weakestpre.v
+1
-1
theories/program_logic/weakestpre.v
theories/program_logic/weakestpre.v
+2
-2
No files found.
theories/heap_lang/lifting.v
View file @
678b75da
...
...
@@ -18,7 +18,7 @@ Instance heapG_irisG `{heapG Σ} : irisG heap_lang Σ := {
iris_invG
:
=
heapG_invG
;
state_interp
σ
κ
s
_
:
=
(
gen_heap_ctx
σ
.(
heap
)
∗
proph_map_ctx
κ
s
σ
.(
used_proph_id
))%
I
;
fork_post
:
=
True
%
I
;
fork_post
_
:
=
True
%
I
;
}.
(** Override the notations so that scopes and coercions work out *)
...
...
theories/heap_lang/total_adequacy.v
View file @
678b75da
...
...
@@ -14,6 +14,6 @@ Proof.
iModIntro
.
iExists
(
λ
σ
κ
s
_
,
(
gen_heap_ctx
σ
.(
heap
)
∗
proph_map_ctx
κ
s
σ
.(
used_proph_id
))%
I
),
True
%
I
;
iFrame
.
(
λ
_
,
True
%
I
)
;
iFrame
.
iApply
(
Hwp
(
HeapG
_
_
_
_
)).
Qed
.
theories/program_logic/adequacy.v
View file @
678b75da
...
...
@@ -39,7 +39,7 @@ Implicit Types P Q : iProp Σ.
Implicit
Types
Φ
:
val
Λ
→
iProp
Σ
.
Implicit
Types
Φ
s
:
list
(
val
Λ
→
iProp
Σ
).
Notation
wptp
s
t
:
=
([
∗
list
]
ef
∈
t
,
WP
ef
@
s
;
⊤
{{
_
,
fork_post
}})%
I
.
Notation
wptp
s
t
:
=
([
∗
list
]
ef
∈
t
,
WP
ef
@
s
;
⊤
{{
fork_post
}})%
I
.
Lemma
wp_step
s
e1
σ
1
κ
κ
s
e2
σ
2
efs
m
Φ
:
prim_step
e1
σ
1
κ
e2
σ
2
efs
→
...
...
@@ -112,8 +112,8 @@ Lemma wptp_all_result φ κs' s n e1 t1 κs v2 vs2 σ1 σ2 :
nsteps
n
(
e1
::
t1
,
σ
1
)
κ
s
(
of_val
<$>
v2
::
vs2
,
σ
2
)
→
state_interp
σ
1
(
κ
s
++
κ
s'
)
(
length
t1
)
-
∗
WP
e1
@
s
;
⊤
{{
v
,
let
m'
:
=
length
vs2
in
state_interp
σ
2
κ
s'
m'
-
∗
[
∗
]
replicate
m'
fork_post
={
⊤
,
∅
}=
∗
⌜φ
v
⌝
}}
-
∗
state_interp
σ
2
κ
s'
(
length
vs2
)
-
∗
([
∗
list
]
v
∈
vs2
,
fork_post
v
)
={
⊤
,
∅
}=
∗
⌜φ
v
⌝
}}
-
∗
wptp
s
t1
={
⊤
,
∅
}
▷
=
∗
^(
S
n
)
⌜φ
v2
⌝
.
Proof
.
...
...
@@ -122,7 +122,7 @@ Proof.
iApply
(
step_fupdN_wand
with
"H"
).
iDestruct
1
as
(
e2
t2'
?)
"(Hσ & H & Hvs)"
;
simplify_eq
/=.
rewrite
fmap_length
.
iMod
(
wp_value_inv'
with
"H"
)
as
"H"
.
iAssert
([
∗
]
replicate
(
length
vs2
)
fork_post
)%
I
with
"[> Hvs]"
as
"Hm"
.
iAssert
([
∗
list
]
v
∈
vs2
,
fork_post
v
)%
I
with
"[> Hvs]"
as
"Hm"
.
{
clear
Hstep
.
iInduction
vs2
as
[|
v
vs
]
"IH"
;
csimpl
;
first
by
iFrame
.
iDestruct
"Hvs"
as
"[Hv Hvs]"
.
iMod
(
wp_value_inv'
with
"Hv"
)
as
"$"
.
by
iApply
"IH"
.
}
...
...
@@ -178,7 +178,7 @@ Theorem wp_strong_adequacy Σ Λ `{invPreG Σ} s e σ φ :
(
∀
`
{
Hinv
:
invG
Σ
}
κ
s
,
(|={
⊤
}=>
∃
(
stateI
:
state
Λ
→
list
(
observation
Λ
)
→
nat
→
iProp
Σ
)
(
fork_post
:
iProp
Σ
),
(
fork_post
:
val
Λ
→
iProp
Σ
),
let
_
:
irisG
Λ
Σ
:
=
IrisG
_
_
Hinv
stateI
fork_post
in
(* This could be strengthened so that φ also talks about the number
of forked-off threads *)
...
...
@@ -202,12 +202,12 @@ Qed.
Theorem
wp_adequacy
Σ
Λ
`
{
invPreG
Σ
}
s
e
σ
φ
:
(
∀
`
{
Hinv
:
invG
Σ
}
κ
s
,
(|={
⊤
}=>
∃
stateI
:
state
Λ
→
list
(
observation
Λ
)
→
iProp
Σ
,
let
_
:
irisG
Λ
Σ
:
=
IrisG
_
_
Hinv
(
λ
σ
κ
s
_
,
stateI
σ
κ
s
)
True
%
I
in
let
_
:
irisG
Λ
Σ
:
=
IrisG
_
_
Hinv
(
λ
σ
κ
s
_
,
stateI
σ
κ
s
)
(
λ
_
,
True
%
I
)
in
stateI
σ
κ
s
∗
WP
e
@
s
;
⊤
{{
v
,
⌜φ
v
⌝
}})%
I
)
→
adequate
s
e
σ
(
λ
v
_
,
φ
v
).
Proof
.
intros
Hwp
.
apply
(
wp_strong_adequacy
Σ
_
)=>
Hinv
κ
s
.
iMod
Hwp
as
(
stateI
)
"[Hσ H]"
.
iExists
(
λ
σ
κ
s
_
,
stateI
σ
κ
s
),
True
%
I
.
iMod
Hwp
as
(
stateI
)
"[Hσ H]"
.
iExists
(
λ
σ
κ
s
_
,
stateI
σ
κ
s
),
(
λ
_
,
True
%
I
)
.
iIntros
"{$Hσ} !>"
.
iApply
(
wp_wand
with
"H"
).
iIntros
(
v
?
σ
'
)
"_"
.
iIntros
"_"
.
by
iApply
fupd_mask_weaken
.
...
...
@@ -217,11 +217,11 @@ Theorem wp_strong_all_adequacy Σ Λ `{invPreG Σ} s e σ1 v vs σ2 φ :
(
∀
`
{
Hinv
:
invG
Σ
}
κ
s
,
(|={
⊤
}=>
∃
(
stateI
:
state
Λ
→
list
(
observation
Λ
)
→
nat
→
iProp
Σ
)
(
fork_post
:
iProp
Σ
),
(
fork_post
:
val
Λ
→
iProp
Σ
),
let
_
:
irisG
Λ
Σ
:
=
IrisG
_
_
Hinv
stateI
fork_post
in
stateI
σ
1
κ
s
0
∗
WP
e
@
s
;
⊤
{{
v
,
let
m
:
=
length
vs
in
stateI
σ
2
[]
m
-
∗
[
∗
]
replicate
m
fork_post
={
⊤
,
∅
}=
∗
⌜
φ
v
⌝
}})%
I
)
→
stateI
σ
2
[]
(
length
vs
)
-
∗
([
∗
list
]
v
∈
vs
,
fork_post
v
)
={
⊤
,
∅
}=
∗
⌜
φ
v
⌝
}})%
I
)
→
rtc
erased_step
([
e
],
σ
1
)
(
of_val
<$>
v
::
vs
,
σ
2
)
→
φ
v
.
Proof
.
...
...
@@ -237,7 +237,7 @@ Theorem wp_invariance Σ Λ `{invPreG Σ} s e σ1 t2 σ2 φ :
(
∀
`
{
Hinv
:
invG
Σ
}
κ
s
κ
s'
,
(|={
⊤
}=>
∃
(
stateI
:
state
Λ
→
list
(
observation
Λ
)
→
nat
→
iProp
Σ
)
(
fork_post
:
iProp
Σ
),
(
fork_post
:
val
Λ
→
iProp
Σ
),
let
_
:
irisG
Λ
Σ
:
=
IrisG
_
_
Hinv
stateI
fork_post
in
stateI
σ
1
(
κ
s
++
κ
s'
)
0
∗
WP
e
@
s
;
⊤
{{
_
,
True
}}
∗
(
stateI
σ
2
κ
s'
(
pred
(
length
t2
))
={
⊤
,
∅
}=
∗
⌜φ⌝
))%
I
)
→
...
...
@@ -258,7 +258,7 @@ Corollary wp_invariance' Σ Λ `{invPreG Σ} s e σ1 t2 σ2 φ :
(
∀
`
{
Hinv
:
invG
Σ
}
κ
s
κ
s'
,
(|={
⊤
}=>
∃
(
stateI
:
state
Λ
→
list
(
observation
Λ
)
→
nat
→
iProp
Σ
)
(
fork_post
:
iProp
Σ
),
(
fork_post
:
val
Λ
→
iProp
Σ
),
let
_
:
irisG
Λ
Σ
:
=
IrisG
_
_
Hinv
stateI
fork_post
in
stateI
σ
1
κ
s
0
∗
WP
e
@
s
;
⊤
{{
_
,
True
}}
∗
(
stateI
σ
2
κ
s'
(
pred
(
length
t2
))
-
∗
∃
E
,
|={
⊤
,
E
}=>
⌜φ⌝
))%
I
)
→
...
...
theories/program_logic/ectx_lifting.v
View file @
678b75da
...
...
@@ -21,7 +21,7 @@ Lemma wp_lift_head_step_fupd {s E Φ} e1 :
∀
e2
σ
2
efs
,
⌜
head_step
e1
σ
1
κ
e2
σ
2
efs
⌝
={
∅
,
∅
,
E
}
▷
=
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
WP
e2
@
s
;
E
{{
Φ
}}
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
_
,
fork_post
}})
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
fork_post
}})
⊢
WP
e1
@
s
;
E
{{
Φ
}}.
Proof
.
iIntros
(?)
"H"
.
iApply
wp_lift_step_fupd
=>//.
iIntros
(
σ
1
κ
κ
s
Qs
)
"Hσ"
.
...
...
@@ -37,7 +37,7 @@ Lemma wp_lift_head_step {s E Φ} e1 :
▷
∀
e2
σ
2
efs
,
⌜
head_step
e1
σ
1
κ
e2
σ
2
efs
⌝
={
∅
,
E
}=
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
WP
e2
@
s
;
E
{{
Φ
}}
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
_
,
fork_post
}})
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
fork_post
}})
⊢
WP
e1
@
s
;
E
{{
Φ
}}.
Proof
.
iIntros
(?)
"H"
.
iApply
wp_lift_head_step_fupd
;
[
done
|].
iIntros
(????)
"?"
.
...
...
@@ -72,7 +72,7 @@ Lemma wp_lift_atomic_head_step_fupd {s E1 E2 Φ} e1 :
∀
e2
σ
2
efs
,
⌜
head_step
e1
σ
1
κ
e2
σ
2
efs
⌝
={
E1
,
E2
}
▷
=
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
from_option
Φ
False
(
to_val
e2
)
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
_
,
fork_post
}})
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
fork_post
}})
⊢
WP
e1
@
s
;
E1
{{
Φ
}}.
Proof
.
iIntros
(?)
"H"
.
iApply
wp_lift_atomic_step_fupd
;
[
done
|].
...
...
@@ -88,7 +88,7 @@ Lemma wp_lift_atomic_head_step {s E Φ} e1 :
▷
∀
e2
σ
2
efs
,
⌜
head_step
e1
σ
1
κ
e2
σ
2
efs
⌝
={
E
}=
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
from_option
Φ
False
(
to_val
e2
)
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
_
,
fork_post
}})
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
fork_post
}})
⊢
WP
e1
@
s
;
E
{{
Φ
}}.
Proof
.
iIntros
(?)
"H"
.
iApply
wp_lift_atomic_step
;
eauto
.
...
...
theories/program_logic/lifting.v
View file @
678b75da
...
...
@@ -20,7 +20,7 @@ Lemma wp_lift_step_fupd s E Φ e1 :
∀
e2
σ
2
efs
,
⌜
prim_step
e1
σ
1
κ
e2
σ
2
efs
⌝
={
∅
,
∅
,
E
}
▷
=
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
WP
e2
@
s
;
E
{{
Φ
}}
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
_
,
fork_post
}})
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
fork_post
}})
⊢
WP
e1
@
s
;
E
{{
Φ
}}.
Proof
.
rewrite
wp_unfold
/
wp_pre
=>->.
iIntros
"H"
(
σ
1
κ
κ
s
n
)
"Hσ"
.
...
...
@@ -46,7 +46,7 @@ Lemma wp_lift_step s E Φ e1 :
▷
∀
e2
σ
2
efs
,
⌜
prim_step
e1
σ
1
κ
e2
σ
2
efs
⌝
={
∅
,
E
}=
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
WP
e2
@
s
;
E
{{
Φ
}}
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
_
,
fork_post
}})
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
fork_post
}})
⊢
WP
e1
@
s
;
E
{{
Φ
}}.
Proof
.
iIntros
(?)
"H"
.
iApply
wp_lift_step_fupd
;
[
done
|].
iIntros
(????)
"Hσ"
.
...
...
@@ -89,7 +89,7 @@ Lemma wp_lift_atomic_step_fupd {s E1 E2 Φ} e1 :
∀
e2
σ
2
efs
,
⌜
prim_step
e1
σ
1
κ
e2
σ
2
efs
⌝
={
E1
,
E2
}
▷
=
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
from_option
Φ
False
(
to_val
e2
)
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
_
,
fork_post
}})
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
fork_post
}})
⊢
WP
e1
@
s
;
E1
{{
Φ
}}.
Proof
.
iIntros
(?)
"H"
.
...
...
@@ -111,7 +111,7 @@ Lemma wp_lift_atomic_step {s E Φ} e1 :
▷
∀
e2
σ
2
efs
,
⌜
prim_step
e1
σ
1
κ
e2
σ
2
efs
⌝
={
E
}=
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
from_option
Φ
False
(
to_val
e2
)
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
_
,
fork_post
}})
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
{{
fork_post
}})
⊢
WP
e1
@
s
;
E
{{
Φ
}}.
Proof
.
iIntros
(?)
"H"
.
iApply
wp_lift_atomic_step_fupd
;
[
done
|].
...
...
theories/program_logic/ownp.v
View file @
678b75da
...
...
@@ -14,7 +14,7 @@ Class ownPG (Λ : language) (Σ : gFunctors) := OwnPG {
Instance
ownPG_irisG
`
{
ownPG
Λ
Σ
}
:
irisG
Λ
Σ
:
=
{
iris_invG
:
=
ownP_invG
;
state_interp
σ
κ
s
_
:
=
own
ownP_name
(
●
(
Excl'
σ
))%
I
;
fork_post
:
=
True
%
I
;
fork_post
_
:
=
True
%
I
;
}.
Global
Opaque
iris_invG
.
...
...
@@ -60,7 +60,7 @@ Proof.
intros
Hwp
Hsteps
.
eapply
(
wp_invariance
Σ
Λ
s
e
σ
1
t2
σ
2
_
)=>
//.
iIntros
(?
κ
s
κ
s'
).
iMod
(
own_alloc
(
●
(
Excl'
σ
1
)
⋅
◯
(
Excl'
σ
1
)))
as
(
γσ
)
"[Hσ Hσf]"
;
first
done
.
iExists
(
λ
σ
κ
s'
_
,
own
γσ
(
●
(
Excl'
σ
)))%
I
,
True
%
I
.
iExists
(
λ
σ
κ
s'
_
,
own
γσ
(
●
(
Excl'
σ
)))%
I
,
(
λ
_
,
True
%
I
)
.
iFrame
"Hσ"
.
iMod
(
Hwp
(
OwnPG
_
_
_
_
γσ
)
with
"[Hσf]"
)
as
"[$ H]"
;
first
by
rewrite
/
ownP
;
iFrame
.
...
...
theories/program_logic/total_adequacy.v
View file @
678b75da
...
...
@@ -118,7 +118,7 @@ Theorem twp_total Σ Λ `{invPreG Σ} s e σ Φ :
(
∀
`
{
Hinv
:
invG
Σ
},
(|={
⊤
}=>
∃
(
stateI
:
state
Λ
→
list
(
observation
Λ
)
→
nat
→
iProp
Σ
)
(
fork_post
:
iProp
Σ
),
(
fork_post
:
val
Λ
→
iProp
Σ
),
let
_
:
irisG
Λ
Σ
:
=
IrisG
_
_
Hinv
stateI
fork_post
in
stateI
σ
[]
0
∗
WP
e
@
s
;
⊤
[{
Φ
}])%
I
)
→
sn
erased_step
([
e
],
σ
).
(* i.e. ([e], σ) is strongly normalizing *)
...
...
theories/program_logic/total_ectx_lifting.v
View file @
678b75da
...
...
@@ -21,7 +21,7 @@ Lemma twp_lift_head_step {s E Φ} e1 :
⌜κ
=
[]
⌝
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
WP
e2
@
s
;
E
[{
Φ
}]
∗
[
∗
list
]
i
↦
ef
∈
efs
,
WP
ef
@
s
;
⊤
[{
_
,
fork_post
}])
[
∗
list
]
i
↦
ef
∈
efs
,
WP
ef
@
s
;
⊤
[{
fork_post
}])
⊢
WP
e1
@
s
;
E
[{
Φ
}].
Proof
.
iIntros
(?)
"H"
.
...
...
@@ -49,7 +49,7 @@ Lemma twp_lift_atomic_head_step {s E Φ} e1 :
⌜κ
=
[]
⌝
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
from_option
Φ
False
(
to_val
e2
)
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
[{
_
,
fork_post
}])
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
[{
fork_post
}])
⊢
WP
e1
@
s
;
E
[{
Φ
}].
Proof
.
iIntros
(?)
"H"
.
iApply
twp_lift_atomic_step
;
eauto
.
...
...
theories/program_logic/total_lifting.v
View file @
678b75da
...
...
@@ -21,7 +21,7 @@ Lemma twp_lift_step s E Φ e1 :
⌜κ
=
[]
⌝
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
WP
e2
@
s
;
E
[{
Φ
}]
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
[{
_
,
fork_post
}])
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
[{
fork_post
}])
⊢
WP
e1
@
s
;
E
[{
Φ
}].
Proof
.
by
rewrite
twp_unfold
/
twp_pre
=>
->.
Qed
.
...
...
@@ -52,7 +52,7 @@ Lemma twp_lift_atomic_step {s E Φ} e1 :
⌜κ
=
[]
⌝
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
from_option
Φ
False
(
to_val
e2
)
∗
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
[{
_
,
fork_post
}])
[
∗
list
]
ef
∈
efs
,
WP
ef
@
s
;
⊤
[{
fork_post
}])
⊢
WP
e1
@
s
;
E
[{
Φ
}].
Proof
.
iIntros
(?)
"H"
.
...
...
theories/program_logic/total_weakestpre.v
View file @
678b75da
...
...
@@ -16,7 +16,7 @@ Definition twp_pre `{irisG Λ Σ} (s : stuckness)
⌜κ
=
[]
⌝
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
wp
E
e2
Φ
∗
[
∗
list
]
ef
∈
efs
,
wp
⊤
ef
(
λ
_
,
fork_post
)
[
∗
list
]
ef
∈
efs
,
wp
⊤
ef
fork_post
end
%
I
.
Lemma
twp_pre_mono
`
{
irisG
Λ
Σ
}
s
...
...
theories/program_logic/weakestpre.v
View file @
678b75da
...
...
@@ -18,7 +18,7 @@ Class irisG (Λ : language) (Σ : gFunctors) := IrisG {
(** A fixed postcondition for any forked-off thread. For most languages, e.g.
heap_lang, this will simply be [True]. However, it is useful if one wants to
keep track of resources precisely, as in e.g. Iron. *)
fork_post
:
iProp
Σ
;
fork_post
:
val
Λ
→
iProp
Σ
;
}.
Global
Opaque
iris_invG
.
...
...
@@ -33,7 +33,7 @@ Definition wp_pre `{irisG Λ Σ} (s : stuckness)
∀
e2
σ
2
efs
,
⌜
prim_step
e1
σ
1
κ
e2
σ
2
efs
⌝
={
∅
,
∅
,
E
}
▷
=
∗
state_interp
σ
2
κ
s
(
length
efs
+
n
)
∗
wp
E
e2
Φ
∗
[
∗
list
]
i
↦
ef
∈
efs
,
wp
⊤
ef
(
λ
_
,
fork_post
)
[
∗
list
]
i
↦
ef
∈
efs
,
wp
⊤
ef
fork_post
end
%
I
.
Local
Instance
wp_pre_contractive
`
{
irisG
Λ
Σ
}
s
:
Contractive
(
wp_pre
s
).
...
...
Write
Preview
Markdown
is supported
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