Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Simon Spies
stdpp
Commits
93de71b2
Commit
93de71b2
authored
Sep 06, 2014
by
Robbert Krebbers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Clean up ars.v.
parent
7df27997
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
54 additions
and
52 deletions
+54
-52
theories/ars.v
theories/ars.v
+54
-52
No files found.
theories/ars.v
View file @
93de71b2
...
...
@@ -37,28 +37,35 @@ Section definitions.
|
tc_once
x
y
:
R
x
y
→
tc
x
y
|
tc_l
x
y
z
:
R
x
y
→
tc
y
z
→
tc
x
z
.
(** An element [x] is looping if all paths starting at [x] are infinite. *)
CoInductive
looping
:
A
→
Prop
:
=
|
looping_do_step
x
:
red
x
→
(
∀
y
,
R
x
y
→
looping
y
)
→
looping
x
.
(** An element [x] is universally looping if all paths starting at [x]
are infinite. *)
CoInductive
all_loop
:
A
→
Prop
:
=
|
all_loop_do_step
x
:
red
x
→
(
∀
y
,
R
x
y
→
all_loop
y
)
→
all_loop
x
.
(** An element [x] is existentally looping if some path starting at [x]
is infinite. *)
CoInductive
ex_loop
:
A
→
Prop
:
=
|
ex_loop_do_step
x
y
:
R
x
y
→
ex_loop
y
→
ex_loop
x
.
End
definitions
.
Hint
Constructors
rtc
nsteps
bsteps
tc
:
ars
.
(** * General theorems *)
Section
rtc
.
Context
`
{
R
:
relation
A
}.
Hint
Constructors
rtc
nsteps
bsteps
tc
.
Global
Instance
rtc_reflexive
:
Reflexive
(
rtc
R
).
Proof
.
red
.
apply
rtc_refl
.
Qed
.
Global
Instance
rtc_transitive
:
Transitive
(
rtc
R
).
Proof
.
red
.
induction
1
;
eauto
with
ars
.
Qed
.
Proof
.
exact
(@
rtc_refl
A
R
).
Qed
.
Lemma
rtc_transitive
x
y
z
:
rtc
R
x
y
→
rtc
R
y
z
→
rtc
R
x
z
.
Proof
.
induction
1
;
eauto
.
Qed
.
Global
Instance
:
Transitive
(
rtc
R
).
Proof
.
exact
rtc_transitive
.
Qed
.
Lemma
rtc_once
x
y
:
R
x
y
→
rtc
R
x
y
.
Proof
.
eauto
with
ars
.
Qed
.
Proof
.
eauto
.
Qed
.
Instance
rtc_once_subrel
:
subrelation
R
(
rtc
R
).
Proof
.
exact
@
rtc_once
.
Qed
.
Lemma
rtc_r
x
y
z
:
rtc
R
x
y
→
R
y
z
→
rtc
R
x
z
.
Proof
.
intros
.
etransitivity
;
eauto
with
ars
.
Qed
.
Proof
.
intros
.
etransitivity
;
eauto
.
Qed
.
Lemma
rtc_inv
x
z
:
rtc
R
x
z
→
x
=
z
∨
∃
y
,
R
x
y
∧
rtc
R
y
z
.
Proof
.
inversion_clear
1
;
eauto
.
Qed
.
Lemma
rtc_ind_r_weak
(
P
:
A
→
A
→
Prop
)
...
...
@@ -79,22 +86,22 @@ Section rtc.
Proof
.
revert
z
.
apply
rtc_ind_r
;
eauto
.
Qed
.
Lemma
nsteps_once
x
y
:
R
x
y
→
nsteps
R
1
x
y
.
Proof
.
eauto
with
ars
.
Qed
.
Proof
.
eauto
.
Qed
.
Lemma
nsteps_trans
n
m
x
y
z
:
nsteps
R
n
x
y
→
nsteps
R
m
y
z
→
nsteps
R
(
n
+
m
)
x
z
.
Proof
.
induction
1
;
simpl
;
eauto
with
ars
.
Qed
.
Proof
.
induction
1
;
simpl
;
eauto
.
Qed
.
Lemma
nsteps_r
n
x
y
z
:
nsteps
R
n
x
y
→
R
y
z
→
nsteps
R
(
S
n
)
x
z
.
Proof
.
induction
1
;
eauto
with
ars
.
Qed
.
Proof
.
induction
1
;
eauto
.
Qed
.
Lemma
nsteps_rtc
n
x
y
:
nsteps
R
n
x
y
→
rtc
R
x
y
.
Proof
.
induction
1
;
eauto
with
ars
.
Qed
.
Proof
.
induction
1
;
eauto
.
Qed
.
Lemma
rtc_nsteps
x
y
:
rtc
R
x
y
→
∃
n
,
nsteps
R
n
x
y
.
Proof
.
induction
1
;
firstorder
eauto
with
ars
.
Qed
.
Proof
.
induction
1
;
firstorder
eauto
.
Qed
.
Lemma
bsteps_once
n
x
y
:
R
x
y
→
bsteps
R
(
S
n
)
x
y
.
Proof
.
eauto
with
ars
.
Qed
.
Proof
.
eauto
.
Qed
.
Lemma
bsteps_plus_r
n
m
x
y
:
bsteps
R
n
x
y
→
bsteps
R
(
n
+
m
)
x
y
.
Proof
.
induction
1
;
simpl
;
eauto
with
ars
.
Qed
.
Proof
.
induction
1
;
simpl
;
eauto
.
Qed
.
Lemma
bsteps_weaken
n
m
x
y
:
n
≤
m
→
bsteps
R
n
x
y
→
bsteps
R
m
x
y
.
Proof
.
...
...
@@ -107,62 +114,57 @@ Section rtc.
Proof
.
apply
bsteps_weaken
.
lia
.
Qed
.
Lemma
bsteps_trans
n
m
x
y
z
:
bsteps
R
n
x
y
→
bsteps
R
m
y
z
→
bsteps
R
(
n
+
m
)
x
z
.
Proof
.
induction
1
;
simpl
;
eauto
using
bsteps_plus_l
with
ars
.
Qed
.
Proof
.
induction
1
;
simpl
;
eauto
using
bsteps_plus_l
.
Qed
.
Lemma
bsteps_r
n
x
y
z
:
bsteps
R
n
x
y
→
R
y
z
→
bsteps
R
(
S
n
)
x
z
.
Proof
.
induction
1
;
eauto
with
ars
.
Qed
.
Proof
.
induction
1
;
eauto
.
Qed
.
Lemma
bsteps_rtc
n
x
y
:
bsteps
R
n
x
y
→
rtc
R
x
y
.
Proof
.
induction
1
;
eauto
with
ars
.
Qed
.
Proof
.
induction
1
;
eauto
.
Qed
.
Lemma
rtc_bsteps
x
y
:
rtc
R
x
y
→
∃
n
,
bsteps
R
n
x
y
.
Proof
.
induction
1
.
*
exists
0
.
constructor
.
*
naive_solver
eauto
with
ars
.
Qed
.
Proof
.
induction
1
;
[
exists
0
;
constructor
|].
naive_solver
eauto
.
Qed
.
Lemma
bsteps_ind_r
(
P
:
nat
→
A
→
Prop
)
(
x
:
A
)
(
Prefl
:
∀
n
,
P
n
x
)
(
Pstep
:
∀
n
y
z
,
bsteps
R
n
x
y
→
R
y
z
→
P
n
y
→
P
(
S
n
)
z
)
:
∀
n
z
,
bsteps
R
n
x
z
→
P
n
z
.
Proof
.
cut
(
∀
m
y
z
,
bsteps
R
m
y
z
→
∀
n
,
bsteps
R
n
x
y
→
(
∀
m'
,
n
≤
m'
∧
m'
≤
n
+
m
→
P
m'
y
)
→
P
(
n
+
m
)
z
).
{
intros
help
?.
change
n
with
(
0
+
n
).
eauto
with
ars
.
}
bsteps
R
n
x
y
→
(
∀
m'
,
n
≤
m'
∧
m'
≤
n
+
m
→
P
m'
y
)
→
P
(
n
+
m
)
z
).
{
intros
help
?.
change
n
with
(
0
+
n
).
eauto
.
}
induction
1
as
[|
m
x'
y
z
p2
p3
IH
]
;
[
by
eauto
with
arith
|].
intros
n
p1
H
.
rewrite
<-
plus_n_Sm
.
apply
(
IH
(
S
n
))
;
[
by
eauto
using
bsteps_r
|].
intros
[|
m'
]
[??]
;
[
lia
|].
apply
Pstep
with
x'
.
intros
[|
m'
]
[??]
;
[
lia
|].
apply
Pstep
with
x'
.
*
apply
bsteps_weaken
with
n
;
intuition
lia
.
*
done
.
*
apply
H
;
intuition
lia
.
Qed
.
Global
Instance
tc_trans
:
Transitive
(
tc
R
).
Proof
.
red
;
induction
1
;
eauto
with
ars
.
Qed
.
Lemma
tc_transitive
x
y
z
:
tc
R
x
y
→
tc
R
y
z
→
tc
R
x
z
.
Proof
.
induction
1
;
eauto
.
Qed
.
Global
Instance
:
Transitive
(
tc
R
).
Proof
.
exact
tc_transitive
.
Qed
.
Lemma
tc_r
x
y
z
:
tc
R
x
y
→
R
y
z
→
tc
R
x
z
.
Proof
.
intros
.
etransitivity
;
eauto
with
ars
.
Qed
.
Proof
.
intros
.
etransitivity
;
eauto
.
Qed
.
Lemma
tc_rtc_l
x
y
z
:
rtc
R
x
y
→
tc
R
y
z
→
tc
R
x
z
.
Proof
.
induction
1
;
eauto
.
Qed
.
Lemma
tc_rtc_r
x
y
z
:
tc
R
x
y
→
rtc
R
y
z
→
tc
R
x
z
.
Proof
.
intros
Hxy
Hyz
.
revert
x
Hxy
.
induction
Hyz
;
eauto
using
tc_r
.
Qed
.
Lemma
tc_rtc
x
y
:
tc
R
x
y
→
rtc
R
x
y
.
Proof
.
induction
1
;
eauto
with
ars
.
Qed
.
Proof
.
induction
1
;
eauto
.
Qed
.
Instance
tc_once_subrel
:
subrelation
(
tc
R
)
(
rtc
R
).
Proof
.
exact
@
tc_rtc
.
Qed
.
Lemma
loop
ing
_red
x
:
loop
ing
R
x
→
red
R
x
.
Lemma
all_
loop_red
x
:
all_
loop
R
x
→
red
R
x
.
Proof
.
destruct
1
;
auto
.
Qed
.
Lemma
loop
ing
_step
x
y
:
loop
ing
R
x
→
R
x
y
→
loop
ing
R
y
.
Lemma
all_
loop_step
x
y
:
all_
loop
R
x
→
R
x
y
→
all_
loop
R
y
.
Proof
.
destruct
1
;
auto
.
Qed
.
Lemma
looping_rtc
x
y
:
looping
R
x
→
rtc
R
x
y
→
looping
R
y
.
Proof
.
induction
2
;
eauto
using
looping_step
.
Qed
.
Lemma
looping_alt
x
:
looping
R
x
↔
∀
y
,
rtc
R
x
y
→
red
R
y
.
Lemma
all_loop_rtc
x
y
:
all_loop
R
x
→
rtc
R
x
y
→
all_loop
R
y
.
Proof
.
induction
2
;
eauto
using
all_loop_step
.
Qed
.
Lemma
all_loop_alt
x
:
all_loop
R
x
↔
∀
y
,
rtc
R
x
y
→
red
R
y
.
Proof
.
split
.
*
eauto
using
looping_red
,
looping_rtc
.
*
intros
H
.
cut
(
∀
z
,
rtc
R
x
z
→
looping
R
z
).
{
eauto
with
ars
.
}
cofix
FIX
.
constructor
;
eauto
using
rtc_r
with
ars
.
split
;
[
eauto
using
all_loop_red
,
all_loop_rtc
|].
intros
H
.
cut
(
∀
z
,
rtc
R
x
z
→
all_loop
R
z
)
;
[
eauto
|].
cofix
FIX
.
constructor
;
eauto
using
rtc_r
.
Qed
.
End
rtc
.
...
...
@@ -172,9 +174,9 @@ Hint Extern 5 (subrelation _ (rtc _)) =>
Hint
Extern
5
(
subrelation
_
(
tc
_
))
=>
eapply
@
tc_once_subrel
:
typeclass_instances
.
Hint
Resolve
rtc_once
rtc_r
tc_r
bsteps_once
bsteps_r
bsteps_refl
bsteps_trans
:
ars
.
Hint
Constructors
rtc
nsteps
bsteps
tc
:
ars
.
Hint
Resolve
rtc_once
rtc_r
tc_r
rtc_transitive
tc_rtc_l
tc_rtc_r
tc_rtc
bsteps_once
bsteps_r
bsteps_refl
bsteps_trans
:
ars
.
(** * Theorems on sub relations *)
Section
subrel
.
...
...
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