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
Michael Sammler
iris-coq
Commits
c7164230
Commit
c7164230
authored
5 years ago
by
Robbert Krebbers
Browse files
Options
Downloads
Patches
Plain Diff
Big-op `big_orL` for disjunction over lists.
parent
84490edc
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
theories/bi/big_op.v
+116
-2
116 additions, 2 deletions
theories/bi/big_op.v
theories/bi/notation.v
+9
-0
9 additions, 0 deletions
theories/bi/notation.v
with
125 additions
and
2 deletions
theories/bi/big_op.v
+
116
−
2
View file @
c7164230
...
@@ -9,16 +9,20 @@ Notation "'[∗' 'list]' k ↦ x ∈ l , P" :=
...
@@ -9,16 +9,20 @@ Notation "'[∗' 'list]' k ↦ x ∈ l , P" :=
(
big_opL
bi_sep
(
λ
k
x
,
P
)
l
)
:
bi_scope
.
(
big_opL
bi_sep
(
λ
k
x
,
P
)
l
)
:
bi_scope
.
Notation
"'[∗' 'list]' x ∈ l , P"
:=
Notation
"'[∗' 'list]' x ∈ l , P"
:=
(
big_opL
bi_sep
(
λ
_
x
,
P
)
l
)
:
bi_scope
.
(
big_opL
bi_sep
(
λ
_
x
,
P
)
l
)
:
bi_scope
.
Notation
"'[∗]' Ps"
:=
(
big_opL
bi_sep
(
λ
_
x
,
x
)
Ps
)
:
bi_scope
.
Notation
"'[∗]' Ps"
:=
(
big_opL
bi_sep
(
λ
_
x
,
x
)
Ps
)
:
bi_scope
.
Notation
"'[∧' 'list]' k ↦ x ∈ l , P"
:=
Notation
"'[∧' 'list]' k ↦ x ∈ l , P"
:=
(
big_opL
bi_and
(
λ
k
x
,
P
)
l
)
:
bi_scope
.
(
big_opL
bi_and
(
λ
k
x
,
P
)
l
)
:
bi_scope
.
Notation
"'[∧' 'list]' x ∈ l , P"
:=
Notation
"'[∧' 'list]' x ∈ l , P"
:=
(
big_opL
bi_and
(
λ
_
x
,
P
)
l
)
:
bi_scope
.
(
big_opL
bi_and
(
λ
_
x
,
P
)
l
)
:
bi_scope
.
Notation
"'[∧]' Ps"
:=
(
big_opL
bi_and
(
λ
_
x
,
x
)
Ps
)
:
bi_scope
.
Notation
"'[∧]' Ps"
:=
(
big_opL
bi_and
(
λ
_
x
,
x
)
Ps
)
:
bi_scope
.
Notation
"'[∨' 'list]' k ↦ x ∈ l , P"
:=
(
big_opL
bi_or
(
λ
k
x
,
P
)
l
)
:
bi_scope
.
Notation
"'[∨' 'list]' x ∈ l , P"
:=
(
big_opL
bi_or
(
λ
_
x
,
P
)
l
)
:
bi_scope
.
Notation
"'[∨]' Ps"
:=
(
big_opL
bi_or
(
λ
_
x
,
x
)
Ps
)
:
bi_scope
.
Notation
"'[∗' 'map]' k ↦ x ∈ m , P"
:=
(
big_opM
bi_sep
(
λ
k
x
,
P
)
m
)
:
bi_scope
.
Notation
"'[∗' 'map]' k ↦ x ∈ m , P"
:=
(
big_opM
bi_sep
(
λ
k
x
,
P
)
m
)
:
bi_scope
.
Notation
"'[∗' 'map]' x ∈ m , P"
:=
(
big_opM
bi_sep
(
λ
_
x
,
P
)
m
)
:
bi_scope
.
Notation
"'[∗' 'map]' x ∈ m , P"
:=
(
big_opM
bi_sep
(
λ
_
x
,
P
)
m
)
:
bi_scope
.
...
@@ -536,6 +540,104 @@ Section and_list.
...
@@ -536,6 +540,104 @@ Section and_list.
Proof
.
revert
Φ
.
induction
l
as
[|
x
l
IH
]=>
Φ
?
/=
;
apply
_
.
Qed
.
Proof
.
revert
Φ
.
induction
l
as
[|
x
l
IH
]=>
Φ
?
/=
;
apply
_
.
Qed
.
End
and_list
.
End
and_list
.
Section
or_list
.
Context
{
A
:
Type
}
.
Implicit
Types
l
:
list
A
.
Implicit
Types
Φ
Ψ
:
nat
→
A
→
PROP
.
Lemma
big_orL_nil
Φ
:
([
∨
list
]
k
↦
y
∈
nil
,
Φ
k
y
)
⊣⊢
False
.
Proof
.
done
.
Qed
.
Lemma
big_orL_cons
Φ
x
l
:
([
∨
list
]
k
↦
y
∈
x
::
l
,
Φ
k
y
)
⊣⊢
Φ
0
x
∨
[
∨
list
]
k
↦
y
∈
l
,
Φ
(
S
k
)
y
.
Proof
.
by
rewrite
big_opL_cons
.
Qed
.
Lemma
big_orL_singleton
Φ
x
:
([
∨
list
]
k
↦
y
∈
[
x
],
Φ
k
y
)
⊣⊢
Φ
0
x
.
Proof
.
by
rewrite
big_opL_singleton
.
Qed
.
Lemma
big_orL_app
Φ
l1
l2
:
([
∨
list
]
k
↦
y
∈
l1
++
l2
,
Φ
k
y
)
⊣⊢
([
∨
list
]
k
↦
y
∈
l1
,
Φ
k
y
)
∨
([
∨
list
]
k
↦
y
∈
l2
,
Φ
(
length
l1
+
k
)
y
)
.
Proof
.
by
rewrite
big_opL_app
.
Qed
.
Lemma
big_orL_mono
Φ
Ψ
l
:
(
∀
k
y
,
l
!!
k
=
Some
y
→
Φ
k
y
⊢
Ψ
k
y
)
→
([
∨
list
]
k
↦
y
∈
l
,
Φ
k
y
)
⊢
[
∨
list
]
k
↦
y
∈
l
,
Ψ
k
y
.
Proof
.
apply
big_opL_forall
;
apply
_
.
Qed
.
Lemma
big_orL_proper
Φ
Ψ
l
:
(
∀
k
y
,
l
!!
k
=
Some
y
→
Φ
k
y
⊣⊢
Ψ
k
y
)
→
([
∨
list
]
k
↦
y
∈
l
,
Φ
k
y
)
⊣⊢
([
∨
list
]
k
↦
y
∈
l
,
Ψ
k
y
)
.
Proof
.
apply
big_opL_proper
.
Qed
.
Lemma
big_orL_submseteq
(
Φ
:
A
→
PROP
)
l1
l2
:
l1
⊆+
l2
→
([
∨
list
]
y
∈
l1
,
Φ
y
)
⊢
[
∨
list
]
y
∈
l2
,
Φ
y
.
Proof
.
intros
[
l
->
]
%
submseteq_Permutation
.
by
rewrite
big_orL_app
-
or_intro_l
.
Qed
.
Global
Instance
big_orL_mono'
:
Proper
(
pointwise_relation
_
(
pointwise_relation
_
(
⊢
))
==>
(
=
)
==>
(
⊢
))
(
big_opL
(
@
bi_or
PROP
)
(
A
:=
A
))
.
Proof
.
intros
f
g
Hf
m
?
<-.
apply
big_opL_forall
;
apply
_
||
intros
;
apply
Hf
.
Qed
.
Global
Instance
big_orL_id_mono'
:
Proper
(
Forall2
(
⊢
)
==>
(
⊢
))
(
big_opL
(
@
bi_or
PROP
)
(
λ
_
P
,
P
))
.
Proof
.
by
induction
1
as
[|
P
Q
Ps
Qs
HPQ
?
IH
];
rewrite
/=
?HPQ
?IH
.
Qed
.
Lemma
big_orL_lookup
Φ
l
i
x
:
l
!!
i
=
Some
x
→
Φ
i
x
⊢
([
∨
list
]
k
↦
y
∈
l
,
Φ
k
y
)
.
Proof
.
intros
.
rewrite
-
(
take_drop_middle
l
i
x
)
//
big_orL_app
/=.
rewrite
Nat
.
add_0_r
take_length_le
;
eauto
using
lookup_lt_Some
,
Nat
.
lt_le_incl
,
or_intro_l'
,
or_intro_r'
.
Qed
.
Lemma
big_orL_elem_of
(
Φ
:
A
→
PROP
)
l
x
:
x
∈
l
→
Φ
x
⊢
([
∨
list
]
y
∈
l
,
Φ
y
)
.
Proof
.
intros
[
i
?]
%
elem_of_list_lookup
;
eauto
using
(
big_orL_lookup
(
λ
_,
Φ
))
.
Qed
.
Lemma
big_orL_fmap
{
B
}
(
f
:
A
→
B
)
(
Φ
:
nat
→
B
→
PROP
)
l
:
([
∨
list
]
k
↦
y
∈
f
<$>
l
,
Φ
k
y
)
⊣⊢
([
∨
list
]
k
↦
y
∈
l
,
Φ
k
(
f
y
))
.
Proof
.
by
rewrite
big_opL_fmap
.
Qed
.
Lemma
big_orL_or
Φ
Ψ
l
:
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
∨
Ψ
k
x
)
⊣⊢
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
)
∨
([
∨
list
]
k
↦
x
∈
l
,
Ψ
k
x
)
.
Proof
.
by
rewrite
big_opL_op
.
Qed
.
Lemma
big_orL_persistently
Φ
l
:
<
pers
>
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
)
⊣⊢
[
∨
list
]
k
↦
x
∈
l
,
<
pers
>
(
Φ
k
x
)
.
Proof
.
apply
(
big_opL_commute
_)
.
Qed
.
Lemma
big_orL_exist
Φ
l
:
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
)
⊣⊢
(
∃
k
x
,
⌜
l
!!
k
=
Some
x
⌝
∧
Φ
k
x
)
.
Proof
.
apply
(
anti_symm
_)
.
{
revert
Φ
.
induction
l
as
[|
x
l
IH
]=>
Φ
.
{
rewrite
big_orL_nil
.
apply
False_elim
.
}
rewrite
big_orL_cons
.
apply
or_elim
.
-
by
rewrite
-
(
exist_intro
0
)
-
(
exist_intro
x
)
pure_True
//
left_id
.
-
rewrite
IH
.
apply
exist_elim
=>
k
.
by
rewrite
-
(
exist_intro
(
S
k
))
.
}
apply
exist_elim
=>
k
;
apply
exist_elim
=>
x
.
apply
pure_elim_l
=>
?
.
by
apply
:
big_orL_lookup
.
Qed
.
Lemma
big_orL_sep_l
P
Φ
l
:
P
∗
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
)
⊣⊢
([
∨
list
]
k
↦
x
∈
l
,
P
∗
Φ
k
x
)
.
Proof
.
rewrite
!
big_orL_exist
sep_exist_l
.
f_equiv
=>
k
.
rewrite
sep_exist_l
.
f_equiv
=>
x
.
by
rewrite
!
persistent_and_affinely_sep_l
!
assoc
(
comm
_
P
)
.
Qed
.
Lemma
big_orL_sep_r
Q
Φ
l
:
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
)
∗
Q
⊣⊢
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
∗
Q
)
.
Proof
.
setoid_rewrite
(
comm
bi_sep
)
.
apply
big_orL_sep_l
.
Qed
.
Global
Instance
big_orL_nil_persistent
Φ
:
Persistent
([
∨
list
]
k
↦
x
∈
[],
Φ
k
x
)
.
Proof
.
simpl
;
apply
_
.
Qed
.
Global
Instance
big_orL_persistent
Φ
l
:
(
∀
k
x
,
Persistent
(
Φ
k
x
))
→
Persistent
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
)
.
Proof
.
revert
Φ
.
induction
l
as
[|
x
l
IH
]=>
Φ
?
/=
;
apply
_
.
Qed
.
End
or_list
.
(** ** Big ops over finite maps *)
(** ** Big ops over finite maps *)
Section
map
.
Section
map
.
Context
`{
Countable
K
}
{
A
:
Type
}
.
Context
`{
Countable
K
}
{
A
:
Type
}
.
...
@@ -1340,6 +1442,18 @@ Section list.
...
@@ -1340,6 +1442,18 @@ Section list.
Global
Instance
big_andL_plain
Φ
l
:
Global
Instance
big_andL_plain
Φ
l
:
(
∀
k
x
,
Plain
(
Φ
k
x
))
→
Plain
([
∧
list
]
k
↦
x
∈
l
,
Φ
k
x
)
.
(
∀
k
x
,
Plain
(
Φ
k
x
))
→
Plain
([
∧
list
]
k
↦
x
∈
l
,
Φ
k
x
)
.
Proof
.
revert
Φ
.
induction
l
as
[|
x
l
IH
]=>
Φ
?
/=
;
apply
_
.
Qed
.
Proof
.
revert
Φ
.
induction
l
as
[|
x
l
IH
]=>
Φ
?
/=
;
apply
_
.
Qed
.
Lemma
big_orL_plainly
`{
!
BiPlainlyExist
PROP
}
Φ
l
:
■
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
)
⊣⊢
[
∨
list
]
k
↦
x
∈
l
,
■
(
Φ
k
x
)
.
Proof
.
apply
(
big_opL_commute
_)
.
Qed
.
Global
Instance
big_orL_nil_plain
Φ
:
Plain
([
∨
list
]
k
↦
x
∈
[],
Φ
k
x
)
.
Proof
.
simpl
;
apply
_
.
Qed
.
Global
Instance
big_orL_plain
Φ
l
:
(
∀
k
x
,
Plain
(
Φ
k
x
))
→
Plain
([
∨
list
]
k
↦
x
∈
l
,
Φ
k
x
)
.
Proof
.
revert
Φ
.
induction
l
as
[|
x
l
IH
]=>
Φ
?
/=
;
apply
_
.
Qed
.
End
plainly
.
End
plainly
.
End
list
.
End
list
.
...
...
This diff is collapsed.
Click to expand it.
theories/bi/notation.v
+
9
−
0
View file @
c7164230
...
@@ -120,6 +120,15 @@ Reserved Notation "'[∧' 'list]' x ∈ l , P"
...
@@ -120,6 +120,15 @@ Reserved Notation "'[∧' 'list]' x ∈ l , P"
Reserved
Notation
"'[∧]' Ps"
(
at
level
20
)
.
Reserved
Notation
"'[∧]' Ps"
(
at
level
20
)
.
Reserved
Notation
"'[∨' 'list]' k ↦ x ∈ l , P"
(
at
level
200
,
l
at
level
10
,
k
,
x
at
level
1
,
right
associativity
,
format
"[∨ list] k ↦ x ∈ l , P"
)
.
Reserved
Notation
"'[∨' 'list]' x ∈ l , P"
(
at
level
200
,
l
at
level
10
,
x
at
level
1
,
right
associativity
,
format
"[∨ list] x ∈ l , P"
)
.
Reserved
Notation
"'[∨]' Ps"
(
at
level
20
)
.
Reserved
Notation
"'[∗' 'map]' k ↦ x ∈ m , P"
Reserved
Notation
"'[∗' 'map]' k ↦ x ∈ m , P"
(
at
level
200
,
m
at
level
10
,
k
,
x
at
level
1
,
right
associativity
,
(
at
level
200
,
m
at
level
10
,
k
,
x
at
level
1
,
right
associativity
,
format
"[∗ map] k ↦ x ∈ m , P"
)
.
format
"[∗ map] k ↦ x ∈ m , P"
)
.
...
...
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