Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
Iris
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Pierre-Marie Pédrot
Iris
Commits
88e93595
Commit
88e93595
authored
Dec 23, 2017
by
Jacques-Henri Jourdan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Whitespaces.
parent
ca60948b
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
25 additions
and
25 deletions
+25
-25
theories/algebra/deprecated.v
theories/algebra/deprecated.v
+1
-1
theories/algebra/dra.v
theories/algebra/dra.v
+3
-3
theories/algebra/functions.v
theories/algebra/functions.v
+1
-1
theories/algebra/ofe.v
theories/algebra/ofe.v
+1
-1
theories/algebra/sts.v
theories/algebra/sts.v
+1
-1
theories/base_logic/double_negation.v
theories/base_logic/double_negation.v
+4
-4
theories/base_logic/lib/namespaces.v
theories/base_logic/lib/namespaces.v
+1
-1
theories/base_logic/lib/sts.v
theories/base_logic/lib/sts.v
+1
-1
theories/base_logic/tactics.v
theories/base_logic/tactics.v
+1
-1
theories/heap_lang/lang.v
theories/heap_lang/lang.v
+3
-3
theories/heap_lang/lib/counter.v
theories/heap_lang/lib/counter.v
+1
-1
theories/heap_lang/lib/ticket_lock.v
theories/heap_lang/lib/ticket_lock.v
+2
-2
theories/program_logic/weakestpre.v
theories/program_logic/weakestpre.v
+1
-1
theories/proofmode/base.v
theories/proofmode/base.v
+1
-1
theories/proofmode/environments.v
theories/proofmode/environments.v
+1
-1
theories/proofmode/tactics.v
theories/proofmode/tactics.v
+2
-2
No files found.
theories/algebra/deprecated.v
View file @
88e93595
...
@@ -14,7 +14,7 @@ Local Arguments op _ _ _ !_ /.
...
@@ -14,7 +14,7 @@ Local Arguments op _ _ _ !_ /.
Local
Arguments
pcore
_
_
!
_
/.
Local
Arguments
pcore
_
_
!
_
/.
(* This is isomorphic to option, but has a very different RA structure. *)
(* This is isomorphic to option, but has a very different RA structure. *)
Inductive
dec_agree
(
A
:
Type
)
:
Type
:
=
Inductive
dec_agree
(
A
:
Type
)
:
Type
:
=
|
DecAgree
:
A
→
dec_agree
A
|
DecAgree
:
A
→
dec_agree
A
|
DecAgreeBot
:
dec_agree
A
.
|
DecAgreeBot
:
dec_agree
A
.
Arguments
DecAgree
{
_
}
_
.
Arguments
DecAgree
{
_
}
_
.
...
...
theories/algebra/dra.v
View file @
88e93595
...
@@ -22,7 +22,7 @@ Record DraMixin A `{Equiv A, Core A, Disjoint A, Op A, Valid A} := {
...
@@ -22,7 +22,7 @@ Record DraMixin A `{Equiv A, Core A, Disjoint A, Op A, Valid A} := {
mixin_dra_core_disjoint_l
x
:
✓
x
→
core
x
##
x
;
mixin_dra_core_disjoint_l
x
:
✓
x
→
core
x
##
x
;
mixin_dra_core_l
x
:
✓
x
→
core
x
⋅
x
≡
x
;
mixin_dra_core_l
x
:
✓
x
→
core
x
⋅
x
≡
x
;
mixin_dra_core_idemp
x
:
✓
x
→
core
(
core
x
)
≡
core
x
;
mixin_dra_core_idemp
x
:
✓
x
→
core
(
core
x
)
≡
core
x
;
mixin_dra_core_mono
x
y
:
mixin_dra_core_mono
x
y
:
∃
z
,
✓
x
→
✓
y
→
x
##
y
→
core
(
x
⋅
y
)
≡
core
x
⋅
z
∧
✓
z
∧
core
x
##
z
∃
z
,
✓
x
→
✓
y
→
x
##
y
→
core
(
x
⋅
y
)
≡
core
x
⋅
z
∧
✓
z
∧
core
x
##
z
}.
}.
Structure
draT
:
=
DraT
{
Structure
draT
:
=
DraT
{
...
@@ -81,7 +81,7 @@ Section dra_mixin.
...
@@ -81,7 +81,7 @@ Section dra_mixin.
Proof
.
apply
(
mixin_dra_core_l
_
(
dra_mixin
A
)).
Qed
.
Proof
.
apply
(
mixin_dra_core_l
_
(
dra_mixin
A
)).
Qed
.
Lemma
dra_core_idemp
x
:
✓
x
→
core
(
core
x
)
≡
core
x
.
Lemma
dra_core_idemp
x
:
✓
x
→
core
(
core
x
)
≡
core
x
.
Proof
.
apply
(
mixin_dra_core_idemp
_
(
dra_mixin
A
)).
Qed
.
Proof
.
apply
(
mixin_dra_core_idemp
_
(
dra_mixin
A
)).
Qed
.
Lemma
dra_core_mono
x
y
:
Lemma
dra_core_mono
x
y
:
∃
z
,
✓
x
→
✓
y
→
x
##
y
→
core
(
x
⋅
y
)
≡
core
x
⋅
z
∧
✓
z
∧
core
x
##
z
.
∃
z
,
✓
x
→
✓
y
→
x
##
y
→
core
(
x
⋅
y
)
≡
core
x
⋅
z
∧
✓
z
∧
core
x
##
z
.
Proof
.
apply
(
mixin_dra_core_mono
_
(
dra_mixin
A
)).
Qed
.
Proof
.
apply
(
mixin_dra_core_mono
_
(
dra_mixin
A
)).
Qed
.
End
dra_mixin
.
End
dra_mixin
.
...
@@ -209,7 +209,7 @@ Proof.
...
@@ -209,7 +209,7 @@ Proof.
assert (✓ y) by (rewrite EQ; by apply dra_op_valid).
assert (✓ y) by (rewrite EQ; by apply dra_op_valid).
split; first done. exists (to_validity z). split; first split.
split; first done. exists (to_validity z). split; first split.
+ intros _. simpl. by split_and!.
+ intros _. simpl. by split_and!.
+ intros _. setoid_subst. by apply dra_op_valid.
+ intros _. setoid_subst. by apply dra_op_valid.
+ intros _. rewrite /= EQ //.
+ intros _. rewrite /= EQ //.
Qed.
Qed.
*)
*)
...
...
theories/algebra/functions.v
View file @
88e93595
...
@@ -8,7 +8,7 @@ Definition ofe_fun_insert `{EqDecision A} {B : A → ofeT}
...
@@ -8,7 +8,7 @@ Definition ofe_fun_insert `{EqDecision A} {B : A → ofeT}
match
decide
(
x
=
x'
)
with
left
H
=>
eq_rect
_
B
y
_
H
|
right
_
=>
f
x'
end
.
match
decide
(
x
=
x'
)
with
left
H
=>
eq_rect
_
B
y
_
H
|
right
_
=>
f
x'
end
.
Instance
:
Params
(@
ofe_fun_insert
)
5
.
Instance
:
Params
(@
ofe_fun_insert
)
5
.
Definition
ofe_fun_singleton
`
{
Finite
A
}
{
B
:
A
→
ucmraT
}
Definition
ofe_fun_singleton
`
{
Finite
A
}
{
B
:
A
→
ucmraT
}
(
x
:
A
)
(
y
:
B
x
)
:
ofe_fun
B
:
=
ofe_fun_insert
x
y
ε
.
(
x
:
A
)
(
y
:
B
x
)
:
ofe_fun
B
:
=
ofe_fun_insert
x
y
ε
.
Instance
:
Params
(@
ofe_fun_singleton
)
5
.
Instance
:
Params
(@
ofe_fun_singleton
)
5
.
...
...
theories/algebra/ofe.v
View file @
88e93595
...
@@ -6,7 +6,7 @@ Set Default Proof Using "Type".
...
@@ -6,7 +6,7 @@ Set Default Proof Using "Type".
category, and mathematically speaking, the entire development lives
category, and mathematically speaking, the entire development lives
in this category. However, we will generally prefer to work with raw
in this category. However, we will generally prefer to work with raw
Coq functions plus some registered Proper instances for non-expansiveness.
Coq functions plus some registered Proper instances for non-expansiveness.
This makes writing such functions much easier. It turns out that it many
This makes writing such functions much easier. It turns out that it many
cases, we do not even need non-expansiveness.
cases, we do not even need non-expansiveness.
*)
*)
...
...
theories/algebra/sts.v
View file @
88e93595
...
@@ -311,7 +311,7 @@ Proof. done. Qed.
...
@@ -311,7 +311,7 @@ Proof. done. Qed.
Lemma
sts_frag_up_valid
s
T
:
✓
sts_frag_up
s
T
↔
tok
s
##
T
.
Lemma
sts_frag_up_valid
s
T
:
✓
sts_frag_up
s
T
↔
tok
s
##
T
.
Proof
.
Proof
.
split
.
split
.
-
move
=>/
sts_frag_valid
[
H
_
].
apply
H
,
elem_of_up
.
-
move
=>/
sts_frag_valid
[
H
_
].
apply
H
,
elem_of_up
.
-
intros
.
apply
sts_frag_valid
;
split
.
by
apply
closed_up
.
set_solver
.
-
intros
.
apply
sts_frag_valid
;
split
.
by
apply
closed_up
.
set_solver
.
Qed
.
Qed
.
...
...
theories/base_logic/double_negation.v
View file @
88e93595
...
@@ -228,7 +228,7 @@ Proof.
...
@@ -228,7 +228,7 @@ Proof.
revert
P
.
revert
P
.
induction
k
;
intros
P
.
induction
k
;
intros
P
.
-
rewrite
//=
?right_id
.
apply
wand_intro_l
.
-
rewrite
//=
?right_id
.
apply
wand_intro_l
.
rewrite
{
1
}(
nnupd_k_intro
0
(
P
-
∗
False
)%
I
)
//=
?right_id
.
apply
wand_elim_r
.
rewrite
{
1
}(
nnupd_k_intro
0
(
P
-
∗
False
)%
I
)
//=
?right_id
.
apply
wand_elim_r
.
-
rewrite
{
2
}(
nnupd_k_unfold
k
P
).
-
rewrite
{
2
}(
nnupd_k_unfold
k
P
).
apply
and_intro
.
apply
and_intro
.
*
rewrite
(
nnupd_k_unfold
k
P
).
rewrite
and_elim_l
.
*
rewrite
(
nnupd_k_unfold
k
P
).
rewrite
and_elim_l
.
...
@@ -291,9 +291,9 @@ Qed.
...
@@ -291,9 +291,9 @@ Qed.
End
classical
.
End
classical
.
(* We might wonder whether we can prove an adequacy lemma for nnupd. We could combine
(* We might wonder whether we can prove an adequacy lemma for nnupd. We could combine
the adequacy lemma for bupd with the previous result to get adquacy for nnupd, but
the adequacy lemma for bupd with the previous result to get adquacy for nnupd, but
this would rely on the classical axiom we needed to prove the equivalence! Can
this would rely on the classical axiom we needed to prove the equivalence! Can
we establish adequacy without axioms? Unfortunately not, because adequacy for
we establish adequacy without axioms? Unfortunately not, because adequacy for
nnupd would imply double negation elimination, which is classical: *)
nnupd would imply double negation elimination, which is classical: *)
Lemma
nnupd_dne
φ
:
(|=
n
=>
⌜
¬¬
φ
→
φ⌝
:
uPred
M
)%
I
.
Lemma
nnupd_dne
φ
:
(|=
n
=>
⌜
¬¬
φ
→
φ⌝
:
uPred
M
)%
I
.
...
@@ -327,7 +327,7 @@ Proof.
...
@@ -327,7 +327,7 @@ Proof.
intros
???
Hx'
.
rewrite
left_id
in
Hx'
*=>
Hx'
.
intros
???
Hx'
.
rewrite
left_id
in
Hx'
*=>
Hx'
.
unseal
.
unseal
.
assert
(
n'
<
S
k
∨
n'
=
S
k
)
as
[|]
by
omega
.
assert
(
n'
<
S
k
∨
n'
=
S
k
)
as
[|]
by
omega
.
*
intros
.
move
:
(
laterN_small
n'
(
S
k
)
x'
False
).
rewrite
//=.
unseal
.
intros
Hsmall
.
*
intros
.
move
:
(
laterN_small
n'
(
S
k
)
x'
False
).
rewrite
//=.
unseal
.
intros
Hsmall
.
eapply
Hsmall
;
eauto
.
eapply
Hsmall
;
eauto
.
*
subst
.
intros
.
exfalso
.
eapply
Hf2
.
exists
x'
.
split
;
eauto
using
cmra_validN_S
.
*
subst
.
intros
.
exfalso
.
eapply
Hf2
.
exists
x'
.
split
;
eauto
using
cmra_validN_S
.
-
intros
k
P
x
Hx
.
rewrite
?Nat_iter_S_r
.
-
intros
k
P
x
Hx
.
rewrite
?Nat_iter_S_r
.
...
...
theories/base_logic/lib/namespaces.v
View file @
88e93595
...
@@ -84,7 +84,7 @@ End namespace.
...
@@ -84,7 +84,7 @@ End namespace.
(* The hope is that registering these will suffice to solve most goals
(* The hope is that registering these will suffice to solve most goals
of the forms:
of the forms:
- [N1 ## N2]
- [N1 ## N2]
- [↑N1 ⊆ E ∖ ↑N2 ∖ .. ∖ ↑Nn]
- [↑N1 ⊆ E ∖ ↑N2 ∖ .. ∖ ↑Nn]
- [E1 ∖ ↑N1 ⊆ E2 ∖ ↑N2 ∖ .. ∖ ↑Nn] *)
- [E1 ∖ ↑N1 ⊆ E2 ∖ ↑N2 ∖ .. ∖ ↑Nn] *)
Create
HintDb
ndisj
.
Create
HintDb
ndisj
.
...
...
theories/base_logic/lib/sts.v
View file @
88e93595
...
@@ -82,7 +82,7 @@ Section sts.
...
@@ -82,7 +82,7 @@ Section sts.
sts_own
γ
s1
T
==
∗
sts_own
γ
s2
T
.
sts_own
γ
s1
T
==
∗
sts_own
γ
s2
T
.
Proof
.
Proof
.
intros
??.
apply
own_update
,
sts_update_frag_up
;
[|
done
..].
intros
??.
apply
own_update
,
sts_update_frag_up
;
[|
done
..].
intros
Hdisj
.
apply
sts
.
closed_up
.
done
.
intros
Hdisj
.
apply
sts
.
closed_up
.
done
.
Qed
.
Qed
.
Lemma
sts_own_weaken_tok
γ
s
T1
T2
:
Lemma
sts_own_weaken_tok
γ
s
T1
T2
:
...
...
theories/base_logic/tactics.v
View file @
88e93595
...
@@ -60,7 +60,7 @@ Module uPred_reflection. Section uPred_reflection.
...
@@ -60,7 +60,7 @@ Module uPred_reflection. Section uPred_reflection.
match
e
with
match
e
with
|
ETrue
=>
None
|
ETrue
=>
None
|
EVar
n'
=>
if
decide
(
n
=
n'
)
then
Some
ETrue
else
None
|
EVar
n'
=>
if
decide
(
n
=
n'
)
then
Some
ETrue
else
None
|
ESep
e1
e2
=>
|
ESep
e1
e2
=>
match
cancel_go
n
e1
with
match
cancel_go
n
e1
with
|
Some
e1'
=>
Some
(
ESep
e1'
e2
)
|
Some
e1'
=>
Some
(
ESep
e1'
e2
)
|
None
=>
ESep
e1
<$>
cancel_go
n
e2
|
None
=>
ESep
e1
<$>
cancel_go
n
e2
...
...
theories/heap_lang/lang.v
View file @
88e93595
...
@@ -276,7 +276,7 @@ Definition fill_item (Ki : ectx_item) (e : expr) : expr :=
...
@@ -276,7 +276,7 @@ Definition fill_item (Ki : ectx_item) (e : expr) : expr :=
|
CaseCtx
e1
e2
=>
Case
e
e1
e2
|
CaseCtx
e1
e2
=>
Case
e
e1
e2
|
AllocCtx
=>
Alloc
e
|
AllocCtx
=>
Alloc
e
|
LoadCtx
=>
Load
e
|
LoadCtx
=>
Load
e
|
StoreLCtx
e2
=>
Store
e
e2
|
StoreLCtx
e2
=>
Store
e
e2
|
StoreRCtx
v1
=>
Store
(
of_val
v1
)
e
|
StoreRCtx
v1
=>
Store
(
of_val
v1
)
e
|
CasLCtx
e1
e2
=>
CAS
e
e1
e2
|
CasLCtx
e1
e2
=>
CAS
e
e1
e2
|
CasMCtx
v0
e2
=>
CAS
(
of_val
v0
)
e
e2
|
CasMCtx
v0
e2
=>
CAS
(
of_val
v0
)
e
e2
...
@@ -365,11 +365,11 @@ Inductive head_step : expr → state → expr → state → list (expr) → Prop
...
@@ -365,11 +365,11 @@ Inductive head_step : expr → state → expr → state → list (expr) → Prop
head_step
(
App
(
Rec
f
x
e1
)
e2
)
σ
e'
σ
[]
head_step
(
App
(
Rec
f
x
e1
)
e2
)
σ
e'
σ
[]
|
UnOpS
op
e
v
v'
σ
:
|
UnOpS
op
e
v
v'
σ
:
to_val
e
=
Some
v
→
to_val
e
=
Some
v
→
un_op_eval
op
v
=
Some
v'
→
un_op_eval
op
v
=
Some
v'
→
head_step
(
UnOp
op
e
)
σ
(
of_val
v'
)
σ
[]
head_step
(
UnOp
op
e
)
σ
(
of_val
v'
)
σ
[]
|
BinOpS
op
e1
e2
v1
v2
v'
σ
:
|
BinOpS
op
e1
e2
v1
v2
v'
σ
:
to_val
e1
=
Some
v1
→
to_val
e2
=
Some
v2
→
to_val
e1
=
Some
v1
→
to_val
e2
=
Some
v2
→
bin_op_eval
op
v1
v2
=
Some
v'
→
bin_op_eval
op
v1
v2
=
Some
v'
→
head_step
(
BinOp
op
e1
e2
)
σ
(
of_val
v'
)
σ
[]
head_step
(
BinOp
op
e1
e2
)
σ
(
of_val
v'
)
σ
[]
|
IfTrueS
e1
e2
σ
:
|
IfTrueS
e1
e2
σ
:
head_step
(
If
(
Lit
$
LitBool
true
)
e1
e2
)
σ
e1
σ
[]
head_step
(
If
(
Lit
$
LitBool
true
)
e1
e2
)
σ
e1
σ
[]
...
...
theories/heap_lang/lib/counter.v
View file @
88e93595
...
@@ -55,7 +55,7 @@ Section mono_proof.
...
@@ -55,7 +55,7 @@ Section mono_proof.
-
iDestruct
(
own_valid_2
with
"Hγ Hγf"
)
-
iDestruct
(
own_valid_2
with
"Hγ Hγf"
)
as
%[?%
mnat_included
_
]%
auth_valid_discrete_2
.
as
%[?%
mnat_included
_
]%
auth_valid_discrete_2
.
iMod
(
own_update_2
with
"Hγ Hγf"
)
as
"[Hγ Hγf]"
.
iMod
(
own_update_2
with
"Hγ Hγf"
)
as
"[Hγ Hγf]"
.
{
apply
auth_update
,
(
mnat_local_update
_
_
(
S
c
))
;
auto
.
}
{
apply
auth_update
,
(
mnat_local_update
_
_
(
S
c
))
;
auto
.
}
wp_cas_suc
.
iMod
(
"Hclose"
with
"[Hl Hγ]"
)
as
"_"
.
wp_cas_suc
.
iMod
(
"Hclose"
with
"[Hl Hγ]"
)
as
"_"
.
{
iNext
.
iExists
(
S
c
).
rewrite
Nat2Z
.
inj_succ
Z
.
add_1_l
.
by
iFrame
.
}
{
iNext
.
iExists
(
S
c
).
rewrite
Nat2Z
.
inj_succ
Z
.
add_1_l
.
by
iFrame
.
}
iModIntro
.
wp_if
.
iApply
"HΦ"
;
iExists
γ
;
repeat
iSplit
;
eauto
.
iModIntro
.
wp_if
.
iApply
"HΦ"
;
iExists
γ
;
repeat
iSplit
;
eauto
.
...
...
theories/heap_lang/lib/ticket_lock.v
View file @
88e93595
...
@@ -94,7 +94,7 @@ Section proof.
...
@@ -94,7 +94,7 @@ Section proof.
+
iMod
(
"Hclose"
with
"[Hlo Hln Hainv Ht]"
)
as
"_"
.
+
iMod
(
"Hclose"
with
"[Hlo Hln Hainv Ht]"
)
as
"_"
.
{
iNext
.
iExists
o
,
n
.
iFrame
.
eauto
.
}
{
iNext
.
iExists
o
,
n
.
iFrame
.
eauto
.
}
iModIntro
.
wp_let
.
wp_op
.
case_bool_decide
;
[|
done
].
iModIntro
.
wp_let
.
wp_op
.
case_bool_decide
;
[|
done
].
wp_if
.
wp_if
.
iApply
(
"HΦ"
with
"[-]"
).
rewrite
/
locked
.
iFrame
.
eauto
.
iApply
(
"HΦ"
with
"[-]"
).
rewrite
/
locked
.
iFrame
.
eauto
.
+
iDestruct
(
own_valid_2
with
"Ht Haown"
)
as
%
[
_
?%
gset_disj_valid_op
].
+
iDestruct
(
own_valid_2
with
"Ht Haown"
)
as
%
[
_
?%
gset_disj_valid_op
].
set_solver
.
set_solver
.
...
@@ -129,7 +129,7 @@ Section proof.
...
@@ -129,7 +129,7 @@ Section proof.
iModIntro
.
wp_if
.
iModIntro
.
wp_if
.
iApply
(
wait_loop_spec
γ
(#
lo
,
#
ln
)
with
"[-HΦ]"
).
iApply
(
wait_loop_spec
γ
(#
lo
,
#
ln
)
with
"[-HΦ]"
).
+
iFrame
.
rewrite
/
is_lock
;
eauto
10
.
+
iFrame
.
rewrite
/
is_lock
;
eauto
10
.
+
by
iNext
.
+
by
iNext
.
-
wp_cas_fail
.
-
wp_cas_fail
.
iMod
(
"Hclose"
with
"[Hlo' Hln' Hauth Haown]"
)
as
"_"
.
iMod
(
"Hclose"
with
"[Hlo' Hln' Hauth Haown]"
)
as
"_"
.
{
iNext
.
iExists
o'
,
n'
.
by
iFrame
.
}
{
iNext
.
iExists
o'
,
n'
.
by
iFrame
.
}
...
...
theories/program_logic/weakestpre.v
View file @
88e93595
...
@@ -237,7 +237,7 @@ Proof.
...
@@ -237,7 +237,7 @@ Proof.
iSplitL
"He2"
;
first
by
iApply
(
"IH"
with
"He2"
).
iClear
"Hred Hstep"
.
iSplitL
"He2"
;
first
by
iApply
(
"IH"
with
"He2"
).
iClear
"Hred Hstep"
.
induction
efs
as
[|
ef
efs
IH
]
;
first
by
iApply
big_sepL_nil
.
induction
efs
as
[|
ef
efs
IH
]
;
first
by
iApply
big_sepL_nil
.
rewrite
!
big_sepL_cons
.
iDestruct
"Hefs"
as
"(Hef & Hefs)"
.
rewrite
!
big_sepL_cons
.
iDestruct
"Hefs"
as
"(Hef & Hefs)"
.
iSplitL
"Hef"
.
by
iApply
(
"IH"
with
"Hef"
).
exact
:
IH
.
iSplitL
"Hef"
.
by
iApply
(
"IH"
with
"Hef"
).
exact
:
IH
.
Qed
.
Qed
.
Lemma
fupd_wp
s
E
e
Φ
:
(|={
E
}=>
WP
e
@
s
;
E
{{
Φ
}})
⊢
WP
e
@
s
;
E
{{
Φ
}}.
Lemma
fupd_wp
s
E
e
Φ
:
(|={
E
}=>
WP
e
@
s
;
E
{{
Φ
}})
⊢
WP
e
@
s
;
E
{{
Φ
}}.
...
...
theories/proofmode/base.v
View file @
88e93595
...
@@ -27,7 +27,7 @@ Definition ascii_beq (x y : ascii) : bool :=
...
@@ -27,7 +27,7 @@ Definition ascii_beq (x y : ascii) : bool :=
beq
x5
y5
&&
beq
x6
y6
&&
beq
x7
y7
&&
beq
x8
y8
.
beq
x5
y5
&&
beq
x6
y6
&&
beq
x7
y7
&&
beq
x8
y8
.
Fixpoint
string_beq
(
s1
s2
:
string
)
:
bool
:
=
Fixpoint
string_beq
(
s1
s2
:
string
)
:
bool
:
=
match
s1
,
s2
with
match
s1
,
s2
with
|
""
,
""
=>
true
|
""
,
""
=>
true
|
String
a1
s1
,
String
a2
s2
=>
ascii_beq
a1
a2
&&
string_beq
s1
s2
|
String
a1
s1
,
String
a2
s2
=>
ascii_beq
a1
a2
&&
string_beq
s1
s2
|
_
,
_
=>
false
|
_
,
_
=>
false
...
...
theories/proofmode/environments.v
View file @
88e93595
...
@@ -40,7 +40,7 @@ Fixpoint env_app {A} (Γapp : env A) (Γ : env A) : option (env A) :=
...
@@ -40,7 +40,7 @@ Fixpoint env_app {A} (Γapp : env A) (Γ : env A) : option (env A) :=
match
Γ
app
with
match
Γ
app
with
|
Enil
=>
Some
Γ
|
Enil
=>
Some
Γ
|
Esnoc
Γ
app
i
x
=>
|
Esnoc
Γ
app
i
x
=>
Γ
'
←
env_app
Γ
app
Γ
;
Γ
'
←
env_app
Γ
app
Γ
;
match
Γ
'
!!
i
with
None
=>
Some
(
Esnoc
Γ
'
i
x
)
|
Some
_
=>
None
end
match
Γ
'
!!
i
with
None
=>
Some
(
Esnoc
Γ
'
i
x
)
|
Some
_
=>
None
end
end
.
end
.
...
...
theories/proofmode/tactics.v
View file @
88e93595
...
@@ -327,14 +327,14 @@ Local Tactic Notation "iIntro" "#" constr(H) :=
...
@@ -327,14 +327,14 @@ Local Tactic Notation "iIntro" "#" constr(H) :=
first
first
[
(* (?P → _) *)
[
(* (?P → _) *)
eapply
tac_impl_intro_persistent
with
_
H
_;
(* (i:=H) *)
eapply
tac_impl_intro_persistent
with
_
H
_;
(* (i:=H) *)
[
apply
_
||
[
apply
_
||
let
P
:
=
match
goal
with
|-
IntoPersistent
_
?P
_
=>
P
end
in
let
P
:
=
match
goal
with
|-
IntoPersistent
_
?P
_
=>
P
end
in
fail
1
"iIntro: "
P
" not persistent"
fail
1
"iIntro: "
P
" not persistent"
|
env_reflexivity
||
fail
1
"iIntro:"
H
"not fresh"
|
env_reflexivity
||
fail
1
"iIntro:"
H
"not fresh"
|]
|]
|
(* (?P -∗ _) *)
|
(* (?P -∗ _) *)
eapply
tac_wand_intro_persistent
with
_
H
_;
(* (i:=H) *)
eapply
tac_wand_intro_persistent
with
_
H
_;
(* (i:=H) *)
[
apply
_
||
[
apply
_
||
let
P
:
=
match
goal
with
|-
IntoPersistent
_
?P
_
=>
P
end
in
let
P
:
=
match
goal
with
|-
IntoPersistent
_
?P
_
=>
P
end
in
fail
1
"iIntro: "
P
" not persistent"
fail
1
"iIntro: "
P
" not persistent"
|
env_reflexivity
||
fail
1
"iIntro:"
H
"not fresh"
|
env_reflexivity
||
fail
1
"iIntro:"
H
"not fresh"
...
...
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