Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Iris
Iris
Commits
ae4262a1
Commit
ae4262a1
authored
Feb 26, 2016
by
Robbert Krebbers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Clean up names in excl.
parent
24314cda
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
28 additions
and
30 deletions
+28
-30
algebra/excl.v
algebra/excl.v
+27
-29
program_logic/wsat.v
program_logic/wsat.v
+1
-1
No files found.
algebra/excl.v
View file @
ae4262a1
...
...
@@ -15,15 +15,17 @@ Instance maybe_Excl {A} : Maybe (@Excl A) := λ x,
Section
excl
.
Context
{
A
:
cofeT
}.
Implicit
Types
a
b
:
A
.
Implicit
Types
x
y
:
excl
A
.
(* Cofe *)
Inductive
excl_equiv
:
Equiv
(
excl
A
)
:
=
|
Excl_equiv
(
x
y
:
A
)
:
x
≡
y
→
Excl
x
≡
Excl
y
|
Excl_equiv
a
b
:
a
≡
b
→
Excl
a
≡
Excl
b
|
ExclUnit_equiv
:
ExclUnit
≡
ExclUnit
|
ExclBot_equiv
:
ExclBot
≡
ExclBot
.
Existing
Instance
excl_equiv
.
Inductive
excl_dist
:
Dist
(
excl
A
)
:
=
|
Excl_dist
(
x
y
:
A
)
n
:
x
≡
{
n
}
≡
y
→
Excl
x
≡
{
n
}
≡
Excl
y
|
Excl_dist
a
b
n
:
a
≡
{
n
}
≡
b
→
Excl
a
≡
{
n
}
≡
Excl
b
|
ExclUnit_dist
n
:
ExclUnit
≡
{
n
}
≡
ExclUnit
|
ExclBot_dist
n
:
ExclBot
≡
{
n
}
≡
ExclBot
.
Existing
Instance
excl_dist
.
...
...
@@ -38,35 +40,35 @@ Global Instance Excl_dist_inj n : Inj (dist n) (dist n) (@Excl A).
Proof
.
by
inversion_clear
1
.
Qed
.
Program
Definition
excl_chain
(
c
:
chain
(
excl
A
))
(
x
:
A
)
(
H
:
maybe
Excl
(
c
1
)
=
Some
x
)
:
chain
A
:
=
{|
chain_car
n
:
=
match
c
n
return
_
with
Excl
y
=>
y
|
_
=>
x
end
|}.
(
c
:
chain
(
excl
A
))
(
a
:
A
)
(
H
:
maybe
Excl
(
c
1
)
=
Some
a
)
:
chain
A
:
=
{|
chain_car
n
:
=
match
c
n
return
_
with
Excl
y
=>
y
|
_
=>
a
end
|}.
Next
Obligation
.
intros
c
x
?
n
[|
i
]
?
;
[
omega
|]
;
simpl
.
intros
c
a
?
n
[|
i
]
?
;
[
omega
|]
;
simpl
.
destruct
(
c
1
)
eqn
:
?
;
simplify_eq
/=.
by
feed
inversion
(
chain_cauchy
c
n
(
S
i
)).
Qed
.
Instance
excl_compl
:
Compl
(
excl
A
)
:
=
λ
c
,
match
Some_dec
(
maybe
Excl
(
c
1
))
with
|
inleft
(
exist
x
H
)
=>
Excl
(
compl
(
excl_chain
c
x
H
))
|
inright
_
=>
c
1
|
inleft
(
exist
a
H
)
=>
Excl
(
compl
(
excl_chain
c
a
H
))
|
inright
_
=>
c
1
end
.
Definition
excl_cofe_mixin
:
CofeMixin
(
excl
A
).
Proof
.
split
.
-
intros
m
x
m
y
;
split
;
[
by
destruct
1
;
constructor
;
apply
equiv_dist
|].
-
intros
x
y
;
split
;
[
by
destruct
1
;
constructor
;
apply
equiv_dist
|].
intros
Hxy
;
feed
inversion
(
Hxy
1
)
;
subst
;
constructor
;
apply
equiv_dist
.
by
intros
n
;
feed
inversion
(
Hxy
n
).
-
intros
n
;
split
.
+
by
intros
[
x
|
|
]
;
constructor
.
+
by
intros
[]
;
constructor
.
+
by
destruct
1
;
constructor
.
+
destruct
1
;
inversion_clear
1
;
constructor
;
etrans
;
eauto
.
-
by
inversion_clear
1
;
constructor
;
apply
dist_S
.
-
intros
n
c
;
unfold
compl
,
excl_compl
.
destruct
(
Some_dec
(
maybe
Excl
(
c
1
)))
as
[[
x
H
x
]|].
{
assert
(
c
1
=
Excl
x
)
by
(
by
destruct
(
c
1
)
;
simplify_eq
/=).
assert
(
∃
y
,
c
(
S
n
)
=
Excl
y
)
as
[
y
H
y
].
destruct
(
Some_dec
(
maybe
Excl
(
c
1
)))
as
[[
a
H
a
]|].
{
assert
(
c
1
=
Excl
a
)
by
(
by
destruct
(
c
1
)
;
simplify_eq
/=).
assert
(
∃
b
,
c
(
S
n
)
=
Excl
b
)
as
[
b
H
b
].
{
feed
inversion
(
chain_cauchy
c
0
(
S
n
))
;
eauto
with
lia
congruence
.
}
rewrite
H
y
;
constructor
.
by
rewrite
(
conv_compl
n
(
excl_chain
c
x
H
x
))
/=
H
y
.
}
rewrite
H
b
;
constructor
.
by
rewrite
(
conv_compl
n
(
excl_chain
c
a
H
a
))
/=
H
b
.
}
feed
inversion
(
chain_cauchy
c
0
(
S
n
))
;
first
lia
;
constructor
;
destruct
(
c
1
)
;
simplify_eq
/=.
Qed
.
...
...
@@ -76,7 +78,7 @@ Proof. by inversion_clear 2; constructor; apply (timeless _). Qed.
Global
Instance
excl_leibniz
:
LeibnizEquiv
A
→
LeibnizEquiv
(
excl
A
).
Proof
.
by
destruct
2
;
f_equal
;
apply
leibniz_equiv
.
Qed
.
Global
Instance
Excl_timeless
(
x
:
A
)
:
Timeless
x
→
Timeless
(
Excl
x
).
Global
Instance
Excl_timeless
a
:
Timeless
a
→
Timeless
(
Excl
a
).
Proof
.
by
inversion_clear
2
;
constructor
;
apply
(
timeless
_
).
Qed
.
Global
Instance
ExclUnit_timeless
:
Timeless
(@
ExclUnit
A
).
Proof
.
by
inversion_clear
1
;
constructor
.
Qed
.
...
...
@@ -92,7 +94,7 @@ Global Instance excl_empty : Empty (excl A) := ExclUnit.
Instance
excl_unit
:
Unit
(
excl
A
)
:
=
λ
_
,
∅
.
Instance
excl_op
:
Op
(
excl
A
)
:
=
λ
x
y
,
match
x
,
y
with
|
Excl
x
,
ExclUnit
|
ExclUnit
,
Excl
x
=>
Excl
x
|
Excl
a
,
ExclUnit
|
ExclUnit
,
Excl
a
=>
Excl
a
|
ExclUnit
,
ExclUnit
=>
ExclUnit
|
_
,
_
=>
ExclBot
end
.
...
...
@@ -131,14 +133,14 @@ Proof. split. done. by intros []. apply _. Qed.
Global
Instance
excl_cmra_discrete
:
Discrete
A
→
CMRADiscrete
exclRA
.
Proof
.
split
.
apply
_
.
by
intros
[].
Qed
.
Lemma
excl_validN_inv_l
n
x
y
:
✓
{
n
}
(
Excl
x
⋅
y
)
→
y
=
∅
.
Proof
.
by
destruct
y
.
Qed
.
Lemma
excl_validN_inv_r
n
x
y
:
✓
{
n
}
(
x
⋅
Excl
y
)
→
x
=
∅
.
Lemma
excl_validN_inv_l
n
x
a
:
✓
{
n
}
(
Excl
a
⋅
x
)
→
x
=
∅
.
Proof
.
by
destruct
x
.
Qed
.
Lemma
Excl_includedN
n
x
y
:
✓
{
n
}
y
→
Excl
x
≼
{
n
}
y
↔
y
≡
{
n
}
≡
Excl
x
.
Lemma
excl_validN_inv_r
n
x
a
:
✓
{
n
}
(
x
⋅
Excl
a
)
→
x
=
∅
.
Proof
.
by
destruct
x
.
Qed
.
Lemma
Excl_includedN
n
a
x
:
✓
{
n
}
x
→
Excl
a
≼
{
n
}
x
↔
x
≡
{
n
}
≡
Excl
a
.
Proof
.
intros
Hvalid
;
split
;
[|
by
intros
->].
by
intros
[
z
?]
;
cofe_subst
;
rewrite
(
excl_validN_inv_l
n
x
z
).
intros
[
z
?]
;
cofe_subst
.
by
rewrite
(
excl_validN_inv_l
n
z
a
).
Qed
.
(** Internalized properties *)
...
...
@@ -156,18 +158,14 @@ Lemma excl_validI {M} (x : excl A) :
Proof
.
uPred
.
unseal
.
by
destruct
x
.
Qed
.
(** ** Local updates *)
Global
Instance
excl_local_update
b
:
LocalUpdate
(
λ
a
,
if
a
is
Excl
_
then
True
else
False
)
(
λ
_
,
Excl
b
).
Proof
.
split
.
by
intros
n
y1
y2
Hy
.
by
intros
n
[
a
|
|]
[
b'
|
|].
Qed
.
Global
Instance
excl_local_update_del
:
LocalUpdate
(
λ
a
,
if
a
is
Excl
_
then
True
else
False
)
(
λ
_
,
ExclUnit
).
Proof
.
split
.
by
intros
n
y1
y2
Hy
.
by
intros
n
[
a
|
|]
[
b'
|
|].
Qed
.
Global
Instance
excl_local_update
y
:
LocalUpdate
(
λ
x
,
if
x
is
Excl
_
then
✓
y
else
False
)
(
λ
_
,
y
).
Proof
.
split
.
apply
_
.
by
destruct
y
;
intros
n
[
a
|
|]
[
b'
|
|].
Qed
.
(** Updates *)
Lemma
excl_update
(
x
:
A
)
y
:
✓
y
→
Excl
x
~~>
y
.
Lemma
excl_update
a
y
:
✓
y
→
Excl
a
~~>
y
.
Proof
.
destruct
y
;
by
intros
??
[?|
|].
Qed
.
Lemma
excl_updateP
(
P
:
excl
A
→
Prop
)
x
y
:
✓
y
→
P
y
→
Excl
x
~~>
:
P
.
Lemma
excl_updateP
(
P
:
excl
A
→
Prop
)
a
y
:
✓
y
→
P
y
→
Excl
a
~~>
:
P
.
Proof
.
intros
??
n
z
?
;
exists
y
.
by
destruct
y
,
z
as
[?|
|].
Qed
.
End
excl
.
...
...
program_logic/wsat.v
View file @
ae4262a1
...
...
@@ -117,7 +117,7 @@ Lemma wsat_update_pst n E σ1 σ1' r rf :
Proof
.
intros
Hpst_r
[
rs
[(?&?&?)
Hpst
HE
Hwld
]]
;
simpl
in
*.
assert
(
pst
rf
⋅
pst
(
big_opM
rs
)
=
∅
)
as
Hpst'
.
{
by
apply
:
(
excl_validN_inv_l
(
S
n
)
σ
1
)
;
rewrite
-
Hpst_r
assoc
.
}
{
by
apply
:
(
excl_validN_inv_l
(
S
n
)
_
σ
1
)
;
rewrite
-
Hpst_r
assoc
.
}
assert
(
σ
1
'
=
σ
1
)
as
->.
{
apply
leibniz_equiv
,
(
timeless
_
),
dist_le
with
(
S
n
)
;
auto
.
apply
(
inj
Excl
).
...
...
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