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
Rice Wine
Iris
Commits
67325634
Commit
67325634
authored
Apr 19, 2018
by
Ralf Jung
Browse files
more mask-related fancy update lemmas
parent
d3412460
Changes
1
Hide whitespace changes
Inline
Side-by-side
theories/bi/updates.v
View file @
67325634
...
...
@@ -224,23 +224,38 @@ Section fupd_derived.
Qed
.
(** How to apply an arbitrary mask-changing view shift when having
an arbitrary mask. *)
Lemma
fupd_mask_frame
E
E1
E2
P
:
E1
⊆
E
→
(|={
E1
,
E2
}=>
P
)
-
∗
(|={
E
,
E2
∪
(
E
∖
E1
)}=>
P
).
Lemma
fupd_mask_frame
E
E'
E1
E2
P
:
E1
⊆
E
→
E'
=
E2
∪
(
E
∖
E1
)
→
(|={
E1
,
E2
}=>
P
)
-
∗
(|={
E
,
E'
}=>
P
).
Proof
.
intros
?.
rewrite
(
fupd_mask_frame_r
_
_
(
E
∖
E1
))
;
last
set_solver
.
intros
?
->
.
rewrite
(
fupd_mask_frame_r
_
_
(
E
∖
E1
))
;
last
set_solver
.
assert
(
E
=
E1
∪
E
∖
E1
)
as
<-
;
last
done
.
apply
union_difference_L
.
done
.
Qed
.
Lemma
fupd_mask_frame_diff
E
E1
E2
P
:
Lemma
fupd_mask_frame_diff
_open
E
E1
E2
P
:
(* E2 ⊆ E1 is needed bcause otherwise the [E ∖ E2] could remove
more invariants from E than it did from E1. *)
E
2
⊆
E
1
→
E
1
⊆
E
→
(|={
E1
,
E1
∖
E2
}=>
P
)
-
∗
(|={
E
,
E
∖
E2
}=>
P
).
E
1
⊆
E
→
E
2
⊆
E
1
→
(|={
E1
,
E1
∖
E2
}=>
P
)
-
∗
(|={
E
,
E
∖
E2
}=>
P
).
Proof
.
intros
?
HE
.
rewrite
(
fupd_mask_frame
E
)
;
last
done
.
intros
HE
?
.
rewrite
(
fupd_mask_frame
E
)
;
[|
done
.
.].
assert
(
E1
∖
E2
∪
E
∖
E1
=
E
∖
E2
)
as
<-
;
last
done
.
apply
(
anti_symm
(
⊆
))
;
first
set_solver
.
rewrite
{
1
}(
union_difference_L
_
_
HE
).
set_solver
.
Qed
.
Lemma
fupd_mask_frame_diff_close
E
E1
E2
P
:
(* E2 ⊆ E1 is needed bcause otherwise the [E ∖ E2] could remove
more invariants from E than it did from E1. *)
E1
⊆
E
→
E2
⊆
E1
→
(|={
E1
∖
E2
,
E1
}=>
P
)
-
∗
(|={
E
∖
E2
,
E
}=>
P
).
Proof
.
intros
HE
?.
rewrite
(
fupd_mask_frame
(
E
∖
E2
))
;
[|
set_solver
..].
assert
(
E
=
E1
∪
E
∖
E2
∖
(
E1
∖
E2
))
as
<-
;
last
done
.
apply
(
anti_symm
(
⊆
))
;
last
set_solver
.
rewrite
{
1
}(
union_difference_L
_
_
HE
).
set_solver
.
Qed
.
Lemma
fupd_mask_same
E
E1
P
:
E
=
E1
→
(|={
E
}=>
P
)
-
∗
(|={
E
,
E1
}=>
P
).
Proof
.
intros
<-.
done
.
Qed
.
Lemma
fupd_sep
E
P
Q
:
(|={
E
}=>
P
)
∗
(|={
E
}=>
Q
)
={
E
}=
∗
P
∗
Q
.
Proof
.
by
rewrite
fupd_frame_r
fupd_frame_l
fupd_trans
.
Qed
.
...
...
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