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
Tej Chajed
iris
Commits
10517549
Commit
10517549
authored
Aug 28, 2016
by
Joseph Tassarotti
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rvs is (classically) equivalent to a kind of double negation
parent
a3ef214f
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
142 additions
and
0 deletions
+142
-0
_CoqProject
_CoqProject
+1
-0
algebra/double_negation.v
algebra/double_negation.v
+141
-0
No files found.
_CoqProject
View file @
10517549
...
...
@@ -63,6 +63,7 @@ algebra/updates.v
algebra/local_updates.v
algebra/gset.v
algebra/coPset.v
algebra/double_negation.v
program_logic/model.v
program_logic/adequacy.v
program_logic/lifting.v
...
...
algebra/double_negation.v
0 → 100644
View file @
10517549
From
iris
.
algebra
Require
Import
upred
.
Import
upred
.
(* In this file we show that the rvs can be thought of a kind of
step-indexed double-negation when our meta-logic is classical *)
(* To define this, we need a way to talk about iterated later modalities: *)
Definition
uPred_laterN
{
M
}
(
n
:
nat
)
(
P
:
uPred
M
)
:
uPred
M
:
=
Nat
.
iter
n
uPred_later
P
.
Instance
:
Params
(@
uPred_laterN
)
2
.
Notation
"▷^ n P"
:
=
(
uPred_laterN
n
P
)
(
at
level
20
,
n
at
level
9
,
right
associativity
,
format
"▷^ n P"
)
:
uPred_scope
.
Definition
uPred_nnvs
{
M
}
(
P
:
uPred
M
)
:
uPred
M
:
=
∀
n
,
(
P
-
★
▷
^
n
False
)
-
★
▷
^
n
False
.
Notation
"|=n=> Q"
:
=
(
uPred_nnvs
Q
)
(
at
level
99
,
Q
at
level
200
,
format
"|=n=> Q"
)
:
uPred_scope
.
Notation
"P =n=> Q"
:
=
(
P
⊢
|=
n
=>
Q
)
(
at
level
99
,
Q
at
level
200
,
only
parsing
)
:
C_scope
.
Notation
"P =n=★ Q"
:
=
(
P
-
★
|=
n
=>
Q
)%
I
(
at
level
99
,
Q
at
level
200
,
format
"P =n=★ Q"
)
:
uPred_scope
.
(* Our goal is to prove that:
(1) |=n=> has (nearly) all the properties of the |=r=> modality that are used in Iris
(2) If our meta-logic is classical, then |=n=> and |=r=> are equivalent
*)
Section
rvs_nn
.
Context
{
M
:
ucmraT
}.
Implicit
Types
φ
:
Prop
.
Implicit
Types
P
Q
:
uPred
M
.
Implicit
Types
A
:
Type
.
Implicit
Types
x
:
M
.
Import
uPred
.
(* Helper lemmas about iterated later modalities *)
Lemma
laterN_big
n
a
x
φ
:
✓
{
n
}
x
→
a
≤
n
→
(
▷
^
a
(
■
φ
))%
I
n
x
→
φ
.
Proof
.
induction
2
as
[|
??
IHle
].
-
induction
a
;
repeat
(
rewrite
//=
||
uPred
.
unseal
).
intros
Hlater
.
apply
IHa
;
auto
using
cmra_validN_S
.
move
:
Hlater
;
repeat
(
rewrite
//=
||
uPred
.
unseal
).
-
intros
.
apply
IHle
;
auto
using
cmra_validN_S
.
eapply
uPred_closed
;
eauto
using
cmra_validN_S
.
Qed
.
Lemma
laterN_small
n
a
x
φ
:
✓
{
n
}
x
→
n
<
a
→
(
▷
^
a
(
■
φ
))%
I
n
x
.
Proof
.
induction
2
.
-
induction
n
as
[|
n
IHn
]
;
[|
move
:
IHn
]
;
repeat
(
rewrite
//=
||
uPred
.
unseal
).
naive_solver
eauto
using
cmra_validN_S
.
-
induction
n
as
[|
n
IHn
]
;
[|
move
:
IHle
]
;
repeat
(
rewrite
//=
||
uPred
.
unseal
).
red
;
rewrite
//=.
intros
.
eapply
(
uPred_closed
_
_
(
S
n
))
;
eauto
using
cmra_validN_S
.
Qed
.
(* First we prove that rvs implies nn *)
Lemma
rvs_nn
P
:
(|=
r
=>
P
)
⊢
|=
n
=>
P
.
Proof
.
split
.
rewrite
/
uPred_nnvs
.
repeat
uPred
.
unseal
.
intros
n
x
?
Hrvs
a
.
red
;
rewrite
//=
=>
n'
yf
??.
edestruct
Hrvs
as
(
x'
&?&?)
;
eauto
.
case
(
decide
(
a
≤
n'
)).
-
intros
Hle
Hwand
.
exfalso
.
eapply
laterN_big
;
last
(
uPred
.
unseal
;
eapply
(
Hwand
n'
x'
))
;
eauto
.
*
rewrite
comm
.
done
.
*
rewrite
comm
.
done
.
-
intros
;
assert
(
n'
<
a
).
omega
.
move
:
laterN_small
.
uPred
.
unseal
.
naive_solver
.
Qed
.
Lemma
nn_intro
P
:
P
=
n
=>
P
.
Proof
.
apply
forall_intro
=>?.
apply
wand_intro_l
,
wand_elim_l
.
Qed
.
Lemma
nn_mono
P
Q
:
(
P
⊢
Q
)
→
(|=
n
=>
P
)
=
n
=>
Q
.
Proof
.
intros
HPQ
.
apply
forall_intro
=>
n
.
apply
wand_intro_l
.
rewrite
-{
1
}
HPQ
.
rewrite
/
uPred_nnvs
(
forall_elim
n
).
apply
wand_elim_r
.
Qed
.
(* Question: is there a clean direct proof of this? *)
(*
Lemma nn_trans P : (|=n=> |=n=> P) =n=> P.
Proof.
apply forall_intro=>n. apply wand_intro_l.
rewrite /uPred_nnvs.
rewrite {1}(nn_intro (P -★ ▷^ n False)).
rewrite /uPred_nnvs. rewrite comm (forall_elim n).
apply wand_elim_r. Qed.
*)
Lemma
nn_frame_r
P
R
:
(|=
n
=>
P
)
★
R
=
n
=>
P
★
R
.
Proof
.
apply
forall_intro
=>
n
.
apply
wand_intro_r
.
rewrite
(
comm
_
P
)
-
wand_curry
.
rewrite
/
uPred_nnvs
(
forall_elim
n
).
by
rewrite
-
assoc
wand_elim_r
wand_elim_l
.
Qed
.
Lemma
nn_ownM_updateP
x
(
Φ
:
M
→
Prop
)
:
x
~~>
:
Φ
→
uPred_ownM
x
=
n
=>
∃
y
,
■
Φ
y
∧
uPred_ownM
y
.
Proof
.
intros
.
rewrite
-
rvs_nn
.
by
apply
rvs_ownM_updateP
.
Qed
.
Lemma
except_last_nn
P
:
◇
(|=
n
=>
P
)
⊢
(|=
n
=>
◇
P
).
Proof
.
rewrite
/
uPred_except_last
.
apply
or_elim
.
-
by
rewrite
-
nn_intro
-
or_intro_l
.
-
by
apply
nn_mono
,
or_intro_r
.
Qed
.
(* Now we show, nn implies rvs, for which we need a classical axiom: *)
Require
Coq
.
Logic
.
Classical_Pred_Type
.
Lemma
nn_rvs
P
:
(|=
n
=>
P
)
⊢
(|=
r
=>
P
).
Proof
.
rewrite
/
uPred_nnvs
.
split
.
uPred
.
unseal
;
red
;
rewrite
//=.
intros
n
x
?
Hforall
k
yf
Hle
?.
apply
Classical_Pred_Type
.
not_all_not_ex
.
intros
Hfal
.
specialize
(
Hforall
k
k
).
eapply
laterN_big
;
last
(
uPred
.
unseal
;
red
;
rewrite
//=
;
eapply
Hforall
)
;
eauto
.
red
;
rewrite
//=
=>
n'
x'
???.
case
(
decide
(
n'
=
k
))
;
intros
.
-
subst
.
exfalso
.
eapply
Hfal
.
rewrite
(
comm
op
)
;
eauto
.
-
assert
(
n'
<
k
).
omega
.
move
:
laterN_small
.
uPred
.
unseal
.
naive_solver
.
Qed
.
(* Questions:
1) Can one prove an adequacy theorem for the |=n=> modality without axioms?
2) If not, can we prove a weakened form of adequacy, such as :
Lemma adequacy' φ n : (True ⊢ Nat.iter n (λ P, |=n=> ▷ P) (■ φ)) → ¬¬ φ.
3) Do the basic properties of the |=r=> modality (rvs_intro, rvs_mono, rvs_trans, rvs_frame_r,
rvs_ownM_updateP, and adequacy) characterize |=r=>?
*)
End
rvs_nn
.
\ No newline at end of file
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