Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Iris
Fairis
Commits
f7643c59
Commit
f7643c59
authored
Feb 20, 2016
by
Ralf Jung
Browse files
generalize the löbpart of the wp_rec tactic
parent
c9e43f41
Changes
2
Hide whitespace changes
Inline
Sidebyside
Showing
2 changed files
with
30 additions
and
23 deletions
+30
23
heap_lang/tests.v
heap_lang/tests.v
+3
3
heap_lang/wp_tactics.v
heap_lang/wp_tactics.v
+27
20
No files found.
heap_lang/tests.v
View file @
f7643c59
...
...
@@ 63,10 +63,10 @@ Section LiftingTests.
Proof
.
wp_lam
>
;
apply
later_mono
;
wp_op
=>
?
;
wp_if
.

wp_op
.
wp_op
.
ewp
apply
FindPred_spec
.
apply
and_intro
;
first
auto
with
I
omega
.
(
*
TODO
:
Can
we
use
the
wp
tactic
again
here
?
*
)
wp_focus
(
FindPred
_
_
).
rewrite

FindPred_spec
;
last
by
omega
.
wp_op
.
by
replace
(
n

1
)
with
(

(

n
+
2

1
))
by
omega
.

ew
p
apply
FindPred_spec
.
auto
with
I
omega
.

r
ew
rite

FindPred_spec
;
e
auto
with
omega
.
Qed
.
Lemma
Pred_user
E
:
...
...
heap_lang/wp_tactics.v
View file @
f7643c59
...
...
@@ 36,6 +36,31 @@ Ltac uRevert_all :=
apply
wand_elim_l
'
end
.
(
**
This
starts
on
a
goal
of
the
form
∀
...,
?
0.
..
→
?
1
⊑
?
2.
It
applies
l
ö
b
where
all
the
Coq
assumptions
have
been
turned
into
logical
assumptions
,
then
moves
all
the
Coq
assumptions
back
out
to
the
context
,
applies
[
tac
]
on
the
goal
(
now
of
the
form
_
⊑
_
),
and
then
reverts
the
Coq
assumption
so
that
we
end
up
with
the
same
shape
as
where
we
started
.
*
)
Ltac
uL
ö
b
tac
:=
uLock_goal
;
uRevert_all
;
(
*
We
now
have
a
goal
for
the
form
True
⊑
P
,
with
the
"original"
conclusion
being
locked
.
*
)
apply
l
ö
b_strong
;
etransitivity
;
first
(
apply
equiv_spec
;
symmetry
;
apply
(
left_id
_
_
_
);
reflexivity
);
(
*
Now
introduce
again
all
the
things
that
we
reverted
,
and
at
the
bottom
,
do
the
work
*
)
let
rec
go
:=
lazymatch
goal
with


_
⊑
(
∀
_
,
_
)
=>
apply
forall_intro
;
let
H
:=
fresh
in
intro
H
;
go
;
revert
H


_
⊑
(
■
_
→
_
)
=>
apply
impl_intro_l
,
const_elim_l
;
let
H
:=
fresh
in
intro
H
;
go
;
revert
H


▷
?
R
⊑
(
?
L

★
locked
_
)
=>
apply
wand_intro_l
;
(
*
TODO
:
Do
sth
.
more
robust
than
rewriting
.
*
)
trans
(
▷
(
L
★
R
))
%
I
;
first
(
rewrite
later_sep

(
later_intro
L
);
reflexivity
);
unlock
;
tac
end
in
go
.
Ltac
wp_bind
K
:=
lazymatch
eval
hnf
in
K
with

[]
=>
idtac
...
...
@@ 55,23 +80,7 @@ Ltac wp_finish :=
end
in
simpl
;
revert_intros
go
.
Tactic
Notation
"wp_rec"
:=
uLock_goal
;
uRevert_all
;
(
*
We
now
have
a
goal
for
the
form
True
⊑
P
,
with
the
"original"
conclusion
being
locked
.
*
)
apply
l
ö
b_strong
;
etransitivity
;
first
(
apply
equiv_spec
;
symmetry
;
apply
(
left_id
_
_
_
));
[];
(
*
Now
introduce
again
all
the
things
that
we
reverted
,
and
at
the
bottom
,
do
the
work
*
)
let
rec
go
:=
lazymatch
goal
with


_
⊑
(
∀
_
,
_
)
=>
apply
forall_intro
;
let
H
:=
fresh
in
intro
H
;
go
;
revert
H


_
⊑
(
■
_
→
_
)
=>
apply
impl_intro_l
,
const_elim_l
;
let
H
:=
fresh
in
intro
H
;
go
;
revert
H


▷
?
R
⊑
(
?
L

★
locked
_
)
=>
apply
wand_intro_l
;
(
*
TODO
:
Do
sth
.
more
robust
than
rewriting
.
*
)
trans
(
▷
(
L
★
R
))
%
I
;
first
(
rewrite
later_sep

(
later_intro
L
);
reflexivity
);
unlock
;
(
*
Find
the
redex
and
apply
wp_rec
*
)
uL
ö
b
ltac
:
((
*
Find
the
redex
and
apply
wp_rec
*
)
match
goal
with


_
⊑
wp
?
E
?
e
?
Q
=>
reshape_expr
e
ltac
:
(
fun
K
e
'
=>
match
eval
cbv
in
e
'
with
...
...
@@ 79,9 +88,7 @@ Tactic Notation "wp_rec" :=
wp_bind
K
;
etrans
;
[

eapply
wp_rec
;
reflexivity
];
wp_finish
end
)
end
;
apply
later_mono
end
in
go
.
apply
later_mono
).
Tactic
Notation
"wp_lam"
">"
:=
match
goal
with
...
...
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