Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
iris-coq
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Janno
iris-coq
Commits
271e3d12
Commit
271e3d12
authored
9 years ago
by
Robbert Krebbers
Browse files
Options
Downloads
Patches
Plain Diff
Shorter proofs in logic.v
parent
d8570afb
Branches
new_lifetime_logic
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
iris/logic.v
+15
-20
15 additions, 20 deletions
iris/logic.v
with
15 additions
and
20 deletions
iris/logic.v
+
15
−
20
View file @
271e3d12
...
@@ -8,7 +8,7 @@ Structure uPred (M : cmraT) : Type := IProp {
...
@@ -8,7 +8,7 @@ Structure uPred (M : cmraT) : Type := IProp {
uPred_ne
x1
x2
n
:
uPred_holds
n
x1
→
x1
=
{
n
}
=
x2
→
uPred_holds
n
x2
;
uPred_ne
x1
x2
n
:
uPred_holds
n
x1
→
x1
=
{
n
}
=
x2
→
uPred_holds
n
x2
;
uPred_0
x
:
uPred_holds
0
x
;
uPred_0
x
:
uPred_holds
0
x
;
uPred_weaken
x1
x2
n1
n2
:
uPred_weaken
x1
x2
n1
n2
:
x1
≼
x2
→
n2
≤
n1
→
validN
n2
x2
→
uPred_holds
n1
x1
→
uPred_holds
n2
x2
uPred_holds
n1
x1
→
x1
≼
x2
→
n2
≤
n1
→
validN
n2
x2
→
uPred_holds
n2
x2
}
.
}
.
Arguments
uPred_holds
{_}
_
_
_
.
Arguments
uPred_holds
{_}
_
_
_
.
Hint
Resolve
uPred_0
.
Hint
Resolve
uPred_0
.
...
@@ -53,14 +53,13 @@ Program Definition uPred_map {M1 M2 : cmraT} (f : M2 → M1)
...
@@ -53,14 +53,13 @@ Program Definition uPred_map {M1 M2 : cmraT} (f : M2 → M1)
Next
Obligation
.
by
intros
M1
M2
f
??
P
y1
y2
n
?
Hy
;
simpl
;
rewrite
<-
Hy
.
Qed
.
Next
Obligation
.
by
intros
M1
M2
f
??
P
y1
y2
n
?
Hy
;
simpl
;
rewrite
<-
Hy
.
Qed
.
Next
Obligation
.
intros
M1
M2
f
_
_
P
x
;
apply
uPred_0
.
Qed
.
Next
Obligation
.
intros
M1
M2
f
_
_
P
x
;
apply
uPred_0
.
Qed
.
Next
Obligation
.
Next
Obligation
.
by
intros
M1
M2
f
??
P
y1
y2
n
i
???;
simpl
;
apply
uPred_weaken
;
auto
;
naive_solver
eauto
using
uPred_weaken
,
included_preserving
,
validN_preserving
.
apply
validN_preserving
||
apply
included_preserving
.
Qed
.
Qed
.
Instance
uPred_map_ne
{
M1
M2
:
cmraT
}
(
f
:
M2
→
M1
)
Instance
uPred_map_ne
{
M1
M2
:
cmraT
}
(
f
:
M2
→
M1
)
`{
!∀
n
,
Proper
(
dist
n
==>
dist
n
)
f
,
!
CMRAPreserving
f
}
:
`{
!∀
n
,
Proper
(
dist
n
==>
dist
n
)
f
,
!
CMRAPreserving
f
}
:
Proper
(
dist
n
==>
dist
n
)
(
uPred_map
f
)
.
Proper
(
dist
n
==>
dist
n
)
(
uPred_map
f
)
.
Proof
.
Proof
.
by
intros
n
x1
x2
Hx
y
n'
;
split
;
apply
Hx
;
try
apply
validN_preserving
.
by
intros
n
x1
x2
Hx
y
n'
;
split
;
apply
Hx
;
auto
using
validN_preserving
.
Qed
.
Qed
.
Definition
uPredC_map
{
M1
M2
:
cmraT
}
(
f
:
M2
-
n
>
M1
)
`{
!
CMRAPreserving
f
}
:
Definition
uPredC_map
{
M1
M2
:
cmraT
}
(
f
:
M2
-
n
>
M1
)
`{
!
CMRAPreserving
f
}
:
uPredC
M1
-
n
>
uPredC
M2
:=
CofeMor
(
uPred_map
f
:
uPredC
M1
→
uPredC
M2
)
.
uPredC
M1
-
n
>
uPredC
M2
:=
CofeMor
(
uPred_map
f
:
uPredC
M1
→
uPredC
M2
)
.
...
@@ -96,7 +95,7 @@ Next Obligation.
...
@@ -96,7 +95,7 @@ Next Obligation.
destruct
(
cmra_included_dist_l
x1
x2
x1'
n1
)
as
(
x2'
&
?
&
Hx2
);
auto
.
destruct
(
cmra_included_dist_l
x1
x2
x1'
n1
)
as
(
x2'
&
?
&
Hx2
);
auto
.
assert
(
x2'
=
{
n2
}
=
x2
)
as
Hx2'
by
(
by
apply
dist_le
with
n1
)
.
assert
(
x2'
=
{
n2
}
=
x2
)
as
Hx2'
by
(
by
apply
dist_le
with
n1
)
.
assert
(
validN
n2
x2'
)
by
(
by
rewrite
Hx2'
);
rewrite
<-
Hx2'
.
assert
(
validN
n2
x2'
)
by
(
by
rewrite
Hx2'
);
rewrite
<-
Hx2'
.
by
apply
HPQ
,
uPred_weaken
with
x2'
n2
,
uPred_ne
with
x2
.
eauto
using
uPred_weaken
,
uPred_ne
.
Qed
.
Qed
.
Next
Obligation
.
intros
M
P
Q
x1
x2
[|
n
];
auto
with
lia
.
Qed
.
Next
Obligation
.
intros
M
P
Q
x1
x2
[|
n
];
auto
with
lia
.
Qed
.
Next
Obligation
.
naive_solver
eauto
2
with
lia
.
Qed
.
Next
Obligation
.
naive_solver
eauto
2
with
lia
.
Qed
.
...
@@ -124,16 +123,14 @@ Next Obligation.
...
@@ -124,16 +123,14 @@ Next Obligation.
Qed
.
Qed
.
Next
Obligation
.
by
intros
M
P
Q
x
;
exists
x
,
x
.
Qed
.
Next
Obligation
.
by
intros
M
P
Q
x
;
exists
x
,
x
.
Qed
.
Next
Obligation
.
Next
Obligation
.
intros
M
P
Q
x
y
n1
n2
Hxy
??
(
x1
&
x2
&
Hx
&
?
&
?)
.
intros
M
P
Q
x
y
n1
n2
(
x1
&
x2
&
Hx
&
?
&
?)
Hxy
?
Hvalid
.
assert
(
∃
x2'
,
y
=
{
n2
}
=
x1
⋅
x2'
∧
x2
≼
x2'
)
as
(
x2'
&
Hy
&
?)
.
assert
(
∃
x2'
,
y
=
{
n2
}
=
x1
⋅
x2'
∧
x2
≼
x2'
)
as
(
x2'
&
Hy
&
?)
.
{
rewrite
ra_included_spec
in
Hxy
;
destruct
Hxy
as
[
z
Hy
]
.
{
rewrite
ra_included_spec
in
Hxy
;
destruct
Hxy
as
[
z
Hy
]
.
exists
(
x2
⋅
z
);
split
;
eauto
using
ra_included_l
.
exists
(
x2
⋅
z
);
split
;
eauto
using
ra_included_l
.
apply
dist_le
with
n1
;
auto
.
by
rewrite
(
associative
op
),
<-
Hx
,
Hy
.
}
apply
dist_le
with
n1
;
auto
.
by
rewrite
(
associative
op
),
<-
Hx
,
Hy
.
}
exists
x1
,
x2'
;
split_ands
;
auto
.
rewrite
Hy
in
Hvalid
;
exists
x1
,
x2'
;
split_ands
;
auto
.
*
apply
uPred_weaken
with
x1
n1
;
auto
.
*
apply
uPred_weaken
with
x1
n1
;
eauto
using
cmra_valid_op_l
.
by
apply
cmra_valid_op_l
with
x2'
;
rewrite
<-
Hy
.
*
apply
uPred_weaken
with
x2
n1
;
eauto
using
cmra_valid_op_r
.
*
apply
uPred_weaken
with
x2
n1
;
auto
.
by
apply
cmra_valid_op_r
with
x1
;
rewrite
<-
Hy
.
Qed
.
Qed
.
Program
Definition
uPred_wand
{
M
}
(
P
Q
:
uPred
M
)
:
uPred
M
:=
Program
Definition
uPred_wand
{
M
}
(
P
Q
:
uPred
M
)
:
uPred
M
:=
...
@@ -146,10 +143,9 @@ Next Obligation.
...
@@ -146,10 +143,9 @@ Next Obligation.
Qed
.
Qed
.
Next
Obligation
.
intros
M
P
Q
x1
x2
[|
n
];
auto
with
lia
.
Qed
.
Next
Obligation
.
intros
M
P
Q
x1
x2
[|
n
];
auto
with
lia
.
Qed
.
Next
Obligation
.
Next
Obligation
.
intros
M
P
Q
x1
x2
n1
n2
???
HPQ
x3
n3
???;
simpl
in
*.
intros
M
P
Q
x1
x2
n1
n2
HPQ
???
x3
n3
???;
simpl
in
*.
apply
uPred_weaken
with
(
x1
⋅
x3
)
n3
;
auto
using
ra_preserving_r
.
apply
uPred_weaken
with
(
x1
⋅
x3
)
n3
;
apply
HPQ
;
auto
.
eauto
using
cmra_valid_included
,
ra_preserving_r
.
apply
cmra_valid_included
with
(
x2
⋅
x3
);
auto
using
ra_preserving_r
.
Qed
.
Qed
.
Program
Definition
uPred_later
{
M
}
(
P
:
uPred
M
)
:
uPred
M
:=
Program
Definition
uPred_later
{
M
}
(
P
:
uPred
M
)
:
uPred
M
:=
...
@@ -157,8 +153,7 @@ Program Definition uPred_later {M} (P : uPred M) : uPred M :=
...
@@ -157,8 +153,7 @@ Program Definition uPred_later {M} (P : uPred M) : uPred M :=
Next
Obligation
.
intros
M
P
??
[|
n
];
eauto
using
uPred_ne
,(
dist_le
(
A
:=
M
))
.
Qed
.
Next
Obligation
.
intros
M
P
??
[|
n
];
eauto
using
uPred_ne
,(
dist_le
(
A
:=
M
))
.
Qed
.
Next
Obligation
.
done
.
Qed
.
Next
Obligation
.
done
.
Qed
.
Next
Obligation
.
Next
Obligation
.
intros
M
P
x1
x2
[|
n1
]
[|
n2
]
????;
auto
with
lia
.
intros
M
P
x1
x2
[|
n1
]
[|
n2
];
eauto
using
uPred_weaken
,
cmra_valid_S
.
apply
uPred_weaken
with
x1
n1
;
eauto
using
cmra_valid_S
.
Qed
.
Qed
.
Program
Definition
uPred_always
{
M
}
(
P
:
uPred
M
)
:
uPred
M
:=
Program
Definition
uPred_always
{
M
}
(
P
:
uPred
M
)
:
uPred
M
:=
{|
uPred_holds
n
x
:=
P
n
(
unit
x
)
|}
.
{|
uPred_holds
n
x
:=
P
n
(
unit
x
)
|}
.
...
@@ -174,7 +169,7 @@ Program Definition uPred_own {M : cmraT} (a : M) : uPred M :=
...
@@ -174,7 +169,7 @@ Program Definition uPred_own {M : cmraT} (a : M) : uPred M :=
Next
Obligation
.
by
intros
M
a
x1
x2
n
[
a'
Hx
]
?;
exists
a'
;
rewrite
<-
Hx
.
Qed
.
Next
Obligation
.
by
intros
M
a
x1
x2
n
[
a'
Hx
]
?;
exists
a'
;
rewrite
<-
Hx
.
Qed
.
Next
Obligation
.
by
intros
M
a
x
;
exists
x
.
Qed
.
Next
Obligation
.
by
intros
M
a
x
;
exists
x
.
Qed
.
Next
Obligation
.
Next
Obligation
.
intros
M
a
x1
x
n1
n2
;
rewrite
ra_included_spec
;
intros
[
x2
Hx
]
??
[
a'
Hx1
]
.
intros
M
a
x1
x
n1
n2
;
rewrite
ra_included_spec
;
intros
[
a'
Hx1
]
[
x2
Hx
]
??
.
exists
(
a'
⋅
x2
)
.
by
rewrite
(
associative
op
),
<-
(
dist_le
_
_
_
_
Hx1
),
Hx
.
exists
(
a'
⋅
x2
)
.
by
rewrite
(
associative
op
),
<-
(
dist_le
_
_
_
_
Hx1
),
Hx
.
Qed
.
Qed
.
Program
Definition
uPred_valid
{
M
:
cmraT
}
(
a
:
M
)
:
uPred
M
:=
Program
Definition
uPred_valid
{
M
:
cmraT
}
(
a
:
M
)
:
uPred
M
:=
...
@@ -346,13 +341,13 @@ Proof. by intros HPQ x [|n] ?; [|intros [a ?]; apply HPQ with a]. Qed.
...
@@ -346,13 +341,13 @@ Proof. by intros HPQ x [|n] ?; [|intros [a ?]; apply HPQ with a]. Qed.
Lemma
uPred_sep_elim_l
P
Q
:
(
P
★
Q
)
%
I
⊆
P
.
Lemma
uPred_sep_elim_l
P
Q
:
(
P
★
Q
)
%
I
⊆
P
.
Proof
.
Proof
.
intros
x
n
Hvalid
(
x1
&
x2
&
Hx
&
?
&
?);
rewrite
Hx
in
Hvalid
|
-
*.
intros
x
n
Hvalid
(
x1
&
x2
&
Hx
&
?
&
?);
rewrite
Hx
in
Hvalid
|
-
*.
by
apply
uPred_weaken
with
x1
n
;
auto
using
ra_included_l
.
eauto
using
uPred_weaken
,
ra_included_l
.
Qed
.
Qed
.
Global
Instance
uPred_sep_left_id
:
LeftId
(
≡
)
True
%
I
(
@
uPred_sep
M
)
.
Global
Instance
uPred_sep_left_id
:
LeftId
(
≡
)
True
%
I
(
@
uPred_sep
M
)
.
Proof
.
Proof
.
intros
P
x
n
Hvalid
;
split
.
intros
P
x
n
Hvalid
;
split
.
*
intros
(
x1
&
x2
&
Hx
&
_
&
?);
rewrite
Hx
in
Hvalid
|
-
*.
*
intros
(
x1
&
x2
&
Hx
&
_
&
?);
rewrite
Hx
in
Hvalid
|
-
*.
apply
uPred_weaken
with
x2
n
;
auto
using
ra_included_r
.
eauto
using
uPred_weaken
,
ra_included_r
.
*
by
destruct
n
as
[|
n
];
[|
intros
?;
exists
(
unit
x
),
x
;
rewrite
ra_unit_l
]
.
*
by
destruct
n
as
[|
n
];
[|
intros
?;
exists
(
unit
x
),
x
;
rewrite
ra_unit_l
]
.
Qed
.
Qed
.
Global
Instance
uPred_sep_commutative
:
Commutative
(
≡
)
(
@
uPred_sep
M
)
.
Global
Instance
uPred_sep_commutative
:
Commutative
(
≡
)
(
@
uPred_sep
M
)
.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment