Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
iris-coq
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Marianna Rapoport
iris-coq
Commits
2f754628
Commit
2f754628
authored
Nov 24, 2017
by
Ralf Jung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
do not make use of wp_bind_inv unnecessarily
parent
eba7e9e4
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
7 deletions
+21
-7
theories/heap_lang/proofmode.v
theories/heap_lang/proofmode.v
+8
-7
theories/program_logic/language.v
theories/program_logic/language.v
+13
-0
No files found.
theories/heap_lang/proofmode.v
View file @
2f754628
...
...
@@ -5,15 +5,15 @@ From iris.heap_lang Require Export tactics lifting.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
Lemma
tac_wp_pure
`
{
heapG
Σ
}
K
Δ
Δ
'
E
e1
e2
φ
Φ
:
Lemma
tac_wp_pure
`
{
heapG
Σ
}
Δ
Δ
'
E
e1
e2
φ
Φ
:
PureExec
φ
e1
e2
→
φ
→
IntoLaterNEnvs
1
Δ
Δ
'
→
envs_entails
Δ
'
(
WP
fill
K
e2
@
E
{{
Φ
}})
→
envs_entails
Δ
(
WP
fill
K
e1
@
E
{{
Φ
}}).
envs_entails
Δ
'
(
WP
e2
@
E
{{
Φ
}})
→
envs_entails
Δ
(
WP
e1
@
E
{{
Φ
}}).
Proof
.
rewrite
/
envs_entails
=>
???
H
Δ
'
.
rewrite
into_laterN_env_sound
/=.
rewrite
-
wp_bind
H
Δ
'
-
wp_pure_step_later
//.
by
rewrite
-
wp_bind_inv
.
rewrite
H
Δ
'
-
wp_pure_step_later
//
.
Qed
.
Lemma
tac_wp_value
`
{
heapG
Σ
}
Δ
E
Φ
e
v
:
...
...
@@ -28,11 +28,12 @@ Tactic Notation "wp_pure" open_constr(efoc) :=
lazymatch
goal
with
|
|-
envs_entails
_
(
wp
?E
?e
?Q
)
=>
reshape_expr
e
ltac
:
(
fun
K
e'
=>
unify
e'
efoc
;
eapply
(
tac_wp_pure
K
)
;
[
simpl
;
apply
_
(* PureExec *)
eapply
tac_wp_pure
;
[
simpl
;
change
e
with
(
fill
K
e'
)
;
apply
_
(* PureExec *)
|
try
fast_done
(* The pure condition for PureExec *)
|
apply
_
(* IntoLaters *)
|
simpl_subst
;
try
wp_value_head
(* new goal *)
])
|
simpl_subst
;
try
wp_value_head
(* new goal *)
])
||
fail
"wp_pure: cannot find"
efoc
"in"
e
"or"
efoc
"is not a reduct"
|
_
=>
fail
"wp_pure: not a 'wp'"
end
.
...
...
theories/program_logic/language.v
View file @
2f754628
...
...
@@ -140,6 +140,19 @@ Section language.
PureExec
P
e1
e2
.
Proof
.
intros
HPE
.
split
;
intros
;
eapply
HPE
;
eauto
.
Qed
.
Global
Instance
pure_exec_ctx
K
`
{
LanguageCtx
Λ
K
}
e1
e2
φ
:
PureExec
φ
e1
e2
→
PureExec
φ
(
K
e1
)
(
K
e2
).
Proof
.
intros
[
Hred
Hstep
].
split
.
-
intros
σ
?.
destruct
(
Hred
σ
)
as
(?
&
?
&
?
&
?)
;
first
done
.
do
3
eexists
.
eapply
fill_step
.
done
.
-
intros
σ
????
Hpstep
.
edestruct
fill_step_inv
as
(?
&
?
&
?)
;
[|
exact
Hpstep
|].
+
destruct
(
Hred
σ
)
as
(?
&
?
&
?
&
?)
;
first
done
.
eapply
val_stuck
.
done
.
+
edestruct
Hstep
as
(?
&
?
&
?)
;
[
done
..|].
by
subst
.
Qed
.
(* This is a family of frequent assumptions for PureExec *)
Class
IntoVal
(
e
:
expr
Λ
)
(
v
:
val
Λ
)
:
=
into_val
:
to_val
e
=
Some
v
.
...
...
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