Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Glen Mével
Iris
Commits
ec0acc9c
Commit
ec0acc9c
authored
Dec 17, 2021
by
Ralf Jung
Browse files
Merge branch 'telescope-notation' into 'master'
simplify telescope-based notations See merge request
iris/iris!762
parents
6dfda15b
ea0b55fa
Changes
2
Hide whitespace changes
Inline
Side-by-side
iris/bi/lib/atomic.v
View file @
ec0acc9c
...
...
@@ -95,21 +95,18 @@ Global Arguments atomic_acc {PROP _ TA TB} Eo Ei _ _ _ _ : simpl never.
Global
Arguments
atomic_update
{
PROP
_
TA
TB
}
Eo
Ei
_
_
_
:
simpl
never
.
(** Notation: Atomic updates *)
(* The way to read the [tele_app foo] here is that they convert the n-ary
function [foo] into a unary function taking a telescope as the argument. *)
Notation
"'AU' '<<' ∀ x1 .. xn , α '>>' @ Eo , Ei '<<' ∃ y1 .. yn , β , 'COMM' Φ '>>'"
:
=
(
atomic_update
(
TA
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
(
TB
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
Eo
Ei
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..
)
)
..
)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
Φ
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
λ
y1
,
..
(
λ
yn
,
Φ
%
I
)
..
)
)
..
)
)
(
at
level
20
,
Eo
,
Ei
,
α
,
β
,
Φ
at
level
200
,
x1
binder
,
xn
binder
,
y1
binder
,
yn
binder
,
...
...
@@ -119,12 +116,9 @@ Notation "'AU' '<<' ∀ x1 .. xn , α '>>' @ Eo , Ei '<<' β , 'COMM' Φ '>>'" :
(
atomic_update
(
TA
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
(
TB
:
=
TeleO
)
Eo
Ei
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleO
)
β
%
I
)
..
)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleO
)
Φ
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
β
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
Φ
%
I
)
..
)
)
(
at
level
20
,
Eo
,
Ei
,
α
,
β
,
Φ
at
level
200
,
x1
binder
,
xn
binder
,
format
"'[hv ' 'AU' '<<' '[' ∀ x1 .. xn , '/' α ']' '>>' '/' @ '[' Eo , '/' Ei ']' '/' '<<' '[' β , '/' COMM Φ ']' '>>' ']'"
)
:
bi_scope
.
...
...
@@ -133,22 +127,19 @@ Notation "'AU' '<<' α '>>' @ Eo , Ei '<<' ∃ y1 .. yn , β , 'COMM' Φ '>>'" :
(
atomic_update
(
TA
:
=
TeleO
)
(
TB
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
Eo
Ei
(
tele_app
(
TT
:
=
TeleO
)
α
%
I
)
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..))
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
Φ
%
I
)
..))
(
tele_app
α
%
I
)
(
tele_app
$
tele_app
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..))
(
tele_app
$
tele_app
(
λ
y1
,
..
(
λ
yn
,
Φ
%
I
)
..))
)
(
at
level
20
,
Eo
,
Ei
,
α
,
β
,
Φ
at
level
200
,
y1
binder
,
yn
binder
,
format
"'[hv ' 'AU' '<<' '[' α ']' '>>' '/' @ '[' Eo , '/' Ei ']' '/' '<<' '[' ∃ y1 .. yn , '/' β , '/' COMM Φ ']' '>>' ']'"
)
:
bi_scope
.
Notation
"'AU' '<<' α '>>' @ Eo , Ei '<<' β , 'COMM' Φ '>>'"
:
=
(
atomic_update
(
TA
:
=
TeleO
)
(
TB
:
=
TeleO
)
Eo
Ei
(
tele_app
(
TT
:
=
TeleO
)
α
%
I
)
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleO
)
β
%
I
)
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleO
)
Φ
%
I
)
(
atomic_update
(
TA
:
=
TeleO
)
(
TB
:
=
TeleO
)
Eo
Ei
(
tele_app
α
%
I
)
(
tele_app
$
tele_app
β
%
I
)
(
tele_app
$
tele_app
Φ
%
I
)
)
(
at
level
20
,
Eo
,
Ei
,
α
,
β
,
Φ
at
level
200
,
format
"'[hv ' 'AU' '<<' '[' α ']' '>>' '/' @ '[' Eo , '/' Ei ']' '/' '<<' '[' β , '/' COMM Φ ']' '>>' ']'"
)
:
bi_scope
.
...
...
@@ -158,18 +149,13 @@ Notation "'AACC' '<<' ∀ x1 .. xn , α , 'ABORT' P '>>' @ Eo , Ei '<<' ∃ y1 .
(
atomic_acc
(
TA
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
(
TB
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
Eo
Ei
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
P
%
I
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..
)
)
..
)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
Φ
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
λ
y1
,
..
(
λ
yn
,
Φ
%
I
)
..
)
)
..
)
)
(
at
level
20
,
Eo
,
Ei
,
α
,
P
,
β
,
Φ
at
level
200
,
x1
binder
,
xn
binder
,
y1
binder
,
yn
binder
,
...
...
@@ -179,13 +165,10 @@ Notation "'AACC' '<<' ∀ x1 .. xn , α , 'ABORT' P '>>' @ Eo , Ei '<<' β , 'CO
(
atomic_acc
(
TA
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
(
TB
:
=
TeleO
)
Eo
Ei
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
P
%
I
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleO
)
β
%
I
)
..
)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleO
)
Φ
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
β
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
Φ
%
I
)
..
)
)
(
at
level
20
,
Eo
,
Ei
,
α
,
P
,
β
,
Φ
at
level
200
,
x1
binder
,
xn
binder
,
format
"'[hv ' 'AACC' '<<' '[' ∀ x1 .. xn , '/' α , '/' ABORT P ']' '>>' '/' @ '[' Eo , '/' Ei ']' '/' '<<' '[' β , '/' COMM Φ ']' '>>' ']'"
)
:
bi_scope
.
...
...
@@ -194,14 +177,10 @@ Notation "'AACC' '<<' α , 'ABORT' P '>>' @ Eo , Ei '<<' ∃ y1 .. yn , β , 'CO
(
atomic_acc
(
TA
:
=
TeleO
)
(
TB
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
Eo
Ei
(
tele_app
(
TT
:
=
TeleO
)
α
%
I
)
(
tele_app
α
%
I
)
P
%
I
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..))
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
Φ
%
I
)
..))
(
tele_app
$
tele_app
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..))
(
tele_app
$
tele_app
(
λ
y1
,
..
(
λ
yn
,
Φ
%
I
)
..))
)
(
at
level
20
,
Eo
,
Ei
,
α
,
P
,
β
,
Φ
at
level
200
,
y1
binder
,
yn
binder
,
format
"'[hv ' 'AACC' '<<' '[' α , '/' ABORT P ']' '>>' '/' @ '[' Eo , '/' Ei ']' '/' '<<' '[' ∃ y1 .. yn , '/' β , '/' COMM Φ ']' '>>' ']'"
)
:
bi_scope
.
...
...
@@ -210,10 +189,10 @@ Notation "'AACC' '<<' α , 'ABORT' P '>>' @ Eo , Ei '<<' β , 'COMM' Φ '>>'" :=
(
atomic_acc
(
TA
:
=
TeleO
)
(
TB
:
=
TeleO
)
Eo
Ei
(
tele_app
(
TT
:
=
TeleO
)
α
%
I
)
(
tele_app
α
%
I
)
P
%
I
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleO
)
β
%
I
)
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleO
)
Φ
%
I
)
(
tele_app
$
tele_app
β
%
I
)
(
tele_app
$
tele_app
Φ
%
I
)
)
(
at
level
20
,
Eo
,
Ei
,
α
,
P
,
β
,
Φ
at
level
200
,
format
"'[hv ' 'AACC' '<<' '[' α , '/' ABORT P ']' '>>' '/' @ '[' Eo , '/' Ei ']' '/' '<<' '[' β , '/' COMM Φ ']' '>>' ']'"
)
:
bi_scope
.
...
...
iris/program_logic/atomic.v
View file @
ec0acc9c
...
...
@@ -23,22 +23,19 @@ Definition atomic_wp `{!irisGS Λ Σ} {TA TB : tele}
(* Note: To add a private postcondition, use
atomic_update α β Eo Ei (λ x y, POST x y -∗ Φ (f x y)) *)
(* The way to read the [tele_app foo] here is that they convert the n-ary
function [foo] into a unary function taking a telescope as the argument. *)
Notation
"'<<<' ∀ x1 .. xn , α '>>>' e @ E '<<<' ∃ y1 .. yn , β , 'RET' v '>>>'"
:
=
(
atomic_wp
(
TA
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
(
TB
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
e
%
E
E
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..
)
)
..
)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
v
%
V
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
λ
y1
,
..
(
λ
yn
,
v
%
V
)
..
)
)
..
)
)
(
at
level
20
,
E
,
α
,
β
,
v
at
level
200
,
x1
binder
,
xn
binder
,
y1
binder
,
yn
binder
,
...
...
@@ -50,16 +47,9 @@ Notation "'<<<' ∀ x1 .. xn , α '>>>' e @ E '<<<' β , 'RET' v '>>>'" :=
(
TB
:
=
TeleO
)
e
%
E
E
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleO
)
β
%
I
)
..
)
(
tele_app
(
TT
:
=
TeleS
(
λ
x1
,
..
(
TeleS
(
λ
xn
,
TeleO
))
..
))
$
λ
x1
,
..
(
λ
xn
,
tele_app
(
TT
:
=
TeleO
)
v
%
V
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
α
%
I
)
..)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
β
%
I
)
..
)
(
tele_app
$
λ
x1
,
..
(
λ
xn
,
tele_app
v
%
V
)
..
)
)
(
at
level
20
,
E
,
α
,
β
,
v
at
level
200
,
x1
binder
,
xn
binder
,
format
"'[hv' '<<<' '[' ∀ x1 .. xn , '/' α ']' '>>>' '/ ' e @ E '/' '<<<' '[' β , '/' 'RET' v ']' '>>>' ']'"
)
...
...
@@ -70,13 +60,9 @@ Notation "'<<<' α '>>>' e @ E '<<<' ∃ y1 .. yn , β , 'RET' v '>>>'" :=
(
TB
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
e
%
E
E
(
tele_app
(
TT
:
=
TeleO
)
α
%
I
)
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..
))
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleS
(
λ
y1
,
..
(
TeleS
(
λ
yn
,
TeleO
))
..
))
(
λ
y1
,
..
(
λ
yn
,
v
%
V
)
..
))
(
tele_app
α
%
I
)
(
tele_app
$
tele_app
(
λ
y1
,
..
(
λ
yn
,
β
%
I
)
..
))
(
tele_app
$
tele_app
(
λ
y1
,
..
(
λ
yn
,
v
%
V
)
..
))
)
(
at
level
20
,
E
,
α
,
β
,
v
at
level
200
,
y1
binder
,
yn
binder
,
format
"'[hv' '<<<' '[' α ']' '>>>' '/ ' e @ E '/' '<<<' '[' ∃ y1 .. yn , '/' β , '/' 'RET' v ']' '>>>' ']'"
)
...
...
@@ -87,9 +73,9 @@ Notation "'<<<' α '>>>' e @ E '<<<' β , 'RET' v '>>>'" :=
(
TB
:
=
TeleO
)
e
%
E
E
(
tele_app
(
TT
:
=
TeleO
)
α
%
I
)
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleO
)
β
%
I
)
(
tele_app
(
TT
:
=
TeleO
)
$
tele_app
(
TT
:
=
TeleO
)
v
%
V
)
(
tele_app
α
%
I
)
(
tele_app
$
tele_app
β
%
I
)
(
tele_app
$
tele_app
v
%
V
)
)
(
at
level
20
,
E
,
α
,
β
,
v
at
level
200
,
format
"'[hv' '<<<' '[' α ']' '>>>' '/ ' e @ E '/' '<<<' '[' β , '/' 'RET' v ']' '>>>' ']'"
)
...
...
Write
Preview
Supports
Markdown
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