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
5651f58e
Commit
5651f58e
authored
Nov 17, 2015
by
Robbert Krebbers
Browse files
STSs with infinite sets of tokens.
parent
04f40730
Changes
1
Hide whitespace changes
Inline
Side-by-side
iris/sts.v
View file @
5651f58e
Require
Export
iris
.
ra
.
Require
Import
prelude
.
sets
prelude
.
list
set
iris
.
dra
.
Require
Import
prelude
.
sets
prelude
.
b
set
s
iris
.
dra
.
Local
Arguments
valid
_
_
!
_
/.
Local
Arguments
op
_
_
!
_
!
_
/.
Local
Arguments
unit
_
_
!
_
/.
Module
sts
.
Inductive
t
{
A
B
}
(
R
:
relation
A
)
(
tok
:
A
→
list
set
B
)
:
=
|
auth
:
A
→
list
set
B
→
t
R
tok
|
frag
:
set
A
→
list
set
B
→
t
R
tok
.
Inductive
t
{
A
B
}
(
R
:
relation
A
)
(
tok
:
A
→
b
set
B
)
:
=
|
auth
:
A
→
b
set
B
→
t
R
tok
|
frag
:
set
A
→
b
set
B
→
t
R
tok
.
Arguments
auth
{
_
_
_
_
}
_
_
.
Arguments
frag
{
_
_
_
_
}
_
_
.
Section
sts_core
.
Context
{
A
B
:
Type
}
`
{
∀
x
y
:
B
,
Decision
(
x
=
y
)}.
Context
(
R
:
relation
A
)
(
tok
:
A
→
list
set
B
).
Context
(
R
:
relation
A
)
(
tok
:
A
→
b
set
B
).
Inductive
sts_equiv
:
Equiv
(
t
R
tok
)
:
=
|
auth_equiv
s
T1
T2
:
T1
≡
T2
→
auth
s
T1
≡
auth
s
T2
|
frag_equiv
S1
S2
T1
T2
:
T1
≡
T2
→
S1
≡
S2
→
frag
S1
T1
≡
frag
S2
T2
.
Global
Existing
Instance
sts_equiv
.
Inductive
step
:
relation
(
A
*
list
set
B
)
:
=
Inductive
step
:
relation
(
A
*
b
set
B
)
:
=
|
Step
s1
s2
T1
T2
:
R
s1
s2
→
tok
s1
∩
T1
≡
∅
→
tok
s2
∩
T2
≡
∅
→
tok
s1
∪
T1
≡
tok
s2
∪
T2
→
step
(
s1
,
T1
)
(
s2
,
T2
).
Hint
Resolve
Step
.
Inductive
frame_step
(
T
:
list
set
B
)
(
s1
s2
:
A
)
:
Prop
:
=
Inductive
frame_step
(
T
:
b
set
B
)
(
s1
s2
:
A
)
:
Prop
:
=
|
Frame_step
T1
T2
:
T1
∩
(
tok
s1
∪
T
)
≡
∅
→
step
(
s1
,
T1
)
(
s2
,
T2
)
→
frame_step
T
s1
s2
.
Hint
Resolve
Frame_step
.
Record
closed
(
T
:
list
set
B
)
(
S
:
set
A
)
:
Prop
:
=
Closed
{
Record
closed
(
T
:
b
set
B
)
(
S
:
set
A
)
:
Prop
:
=
Closed
{
closed_disjoint
s
:
s
∈
S
→
tok
s
∩
T
≡
∅
;
closed_step
s1
s2
:
s1
∈
S
→
frame_step
T
s1
s2
→
s2
∈
S
}.
...
...
@@ -37,8 +37,8 @@ Lemma closed_steps S T s1 s2 :
Proof
.
induction
3
;
eauto
using
closed_step
.
Qed
.
Global
Instance
sts_valid
:
Valid
(
t
R
tok
)
:
=
λ
x
,
match
x
with
auth
s
T
=>
tok
s
∩
T
≡
∅
|
frag
S'
T
=>
closed
T
S'
end
.
Definition
up
(
T
:
list
set
B
)
(
s
:
A
)
:
set
A
:
=
mkSet
(
rtc
(
frame_step
T
)
s
).
Definition
up_set
(
T
:
list
set
B
)
(
S
:
set
A
)
:
set
A
:
=
S
≫
=
up
T
.
Definition
up
(
T
:
b
set
B
)
(
s
:
A
)
:
set
A
:
=
mkSet
(
rtc
(
frame_step
T
)
s
).
Definition
up_set
(
T
:
b
set
B
)
(
S
:
set
A
)
:
set
A
:
=
S
≫
=
up
T
.
Global
Instance
sts_unit
:
Unit
(
t
R
tok
)
:
=
λ
x
,
match
x
with
|
frag
S'
_
=>
frag
(
up_set
∅
S'
)
∅
|
auth
s
_
=>
frag
(
up
∅
s
)
∅
...
...
@@ -70,7 +70,7 @@ Global Instance sts_minus : Minus (t R tok) := λ x1 x2,
end
.
Hint
Extern
5
(
equiv
(
A
:
=
set
_
)
_
_
)
=>
esolve_elem_of
:
sts
.
Hint
Extern
5
(
equiv
(
A
:
=
list
set
_
)
_
_
)
=>
esolve_elem_of
:
sts
.
Hint
Extern
5
(
equiv
(
A
:
=
b
set
_
)
_
_
)
=>
esolve_elem_of
:
sts
.
Hint
Extern
5
(
_
∈
_
)
=>
esolve_elem_of
:
sts
.
Hint
Extern
5
(
_
⊆
_
)
=>
esolve_elem_of
:
sts
.
Instance
:
Equivalence
((
≡
)
:
relation
(
t
R
tok
)).
...
...
@@ -198,7 +198,7 @@ End sts.
Section
sts_ra
.
Context
{
A
B
:
Type
}
`
{
∀
x
y
:
B
,
Decision
(
x
=
y
)}.
Context
(
R
:
relation
A
)
(
tok
:
A
→
list
set
B
).
Context
(
R
:
relation
A
)
(
tok
:
A
→
b
set
B
).
Definition
sts
:
=
validity
(
valid
:
sts
.
t
R
tok
→
Prop
).
Global
Instance
sts_unit
:
Unit
sts
:
=
validity_unit
_
.
...
...
@@ -206,8 +206,8 @@ Global Instance sts_op : Op sts := validity_op _.
Global
Instance
sts_included
:
Included
sts
:
=
validity_included
_
.
Global
Instance
sts_minus
:
Minus
sts
:
=
validity_minus
_
.
Global
Instance
sts_ra
:
RA
sts
:
=
validity_ra
_
.
Definition
sts_auth
(
s
:
A
)
(
T
:
list
set
B
)
:
sts
:
=
to_validity
(
sts
.
auth
s
T
).
Definition
sts_frag
(
S
:
set
A
)
(
T
:
list
set
B
)
:
sts
:
=
Definition
sts_auth
(
s
:
A
)
(
T
:
b
set
B
)
:
sts
:
=
to_validity
(
sts
.
auth
s
T
).
Definition
sts_frag
(
S
:
set
A
)
(
T
:
b
set
B
)
:
sts
:
=
to_validity
(
sts
.
frag
S
T
).
Lemma
sts_update
s1
s2
T1
T2
:
sts
.
step
R
tok
(
s1
,
T1
)
(
s2
,
T2
)
→
sts_auth
s1
T1
⇝
sts_auth
s2
T2
.
...
...
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