Forked from
Iris / Iris
1135 commits behind the upstream repository.
atomic.ref 10.02 KiB
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
aheap : atomic_heap Σ
Q : iProp Σ
l : loc
v : val
============================
"Hl" : l ↦ v
--------------------------------------∗
AACC << ∃∃ (v0 : val) (q : dfrac), l ↦{q} v0, ABORT l ↦ v >>
@ ⊤ ∖ ∅, ∅
<< l ↦{q} v0, COMM Q -∗ Q >>
"non_laterable"
: string
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
aheap : atomic_heap Σ
P : iProp Σ
l : loc
============================
"HP" : ▷ P
--------------------------------------∗
AACC << ∃∃ (v : val) (q : dfrac), l ↦{q} v, ABORT ▷ P >>
@ ⊤ ∖ ∅, ∅
<< l ↦{q} v, COMM True >>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
aheap : atomic_heap Σ
P : iProp Σ
l : loc
============================
"HP" : ▷ P
--------------------------------------∗
AACC << ∃∃ (v : val) (q : dfrac), l ↦{q} v, ABORT ▷ P >>
@ ⊤ ∖ ∅, ∅
<< l ↦{q} v, COMM True >>
"printing"
: string
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
P : val → iProp Σ
============================
⊢ <<< ∀∀ x : val, P x >>> code @ ∅ <<< ∃∃ y : val, P y, RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
P : val → iProp Σ
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << ∃∃ x : val, P x >> @ ⊤, ∅ << ∀∀ y : val, P y, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
P : val → iProp Σ
Φ : language.val heap_lang → iProp Σ
============================
_ : AACC << ∃∃ x : val, P x,
ABORT AU << ∃∃ x : val, P x >>
@ ⊤, ∅
<< ∀∀ y : val, P y, COMM Φ #() >> >>
@ ⊤, ∅
<< ∀∀ y : val, P y, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
============================
⊢ <<< ∀∀ x : val, l ↦ x >>> code @ ∅ <<< l ↦ x, RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << ∃∃ x : val, l ↦ x >> @ ⊤ ∖ ∅, ∅ << l ↦ x, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
_ : AACC << ∃∃ x : val, l ↦ x,
ABORT AU << ∃∃ x : val, l ↦ x >>
@ ⊤ ∖ ∅, ∅
<< l ↦ x, COMM Φ #() >> >>
@ ⊤ ∖ ∅, ∅
<< l ↦ x, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
============================
⊢ <<< l ↦ #() >>> code @ ∅ <<< ∃∃ y : val, l ↦ y, RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << l ↦ #() >> @ ⊤ ∖ ∅, ∅ << ∀∀ y : val, l ↦ y, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
_ : AACC << l ↦ #(),
ABORT AU << l ↦ #() >>
@ ⊤ ∖ ∅, ∅
<< ∀∀ y : val, l ↦ y, COMM Φ #() >> >>
@ ⊤ ∖ ∅, ∅
<< ∀∀ y : val, l ↦ y, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
============================
⊢ <<< l ↦ #() >>> code @ ∅ <<< l ↦ #(), RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << l ↦ #() >> @ ⊤ ∖ ∅, ∅ << l ↦ #(), COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
_ : AACC << l ↦ #(),
ABORT AU << l ↦ #() >> @ ⊤ ∖ ∅, ∅ << l ↦ #(), COMM Φ #() >> >>
@ ⊤ ∖ ∅, ∅
<< l ↦ #(), COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
"Now come the long pre/post tests"
: string
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
============================
⊢ <<< ∀∀ x : val, l ↦ x ∗ l ↦ x >>>
code @ ∅
<<< ∃ y : val, l ↦ y, RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << ∃∃ x : val, l ↦ x ∗ l ↦ x >>
@ ⊤ ∖ ∅, ∅
<< ∃ y : val, l ↦ y, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
============================
⊢ <<< ∀∀ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>>
code @ ∅
<<< ∃∃ y : val, l ↦ y, RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << ∃∃ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>
@ ⊤ ∖ ∅, ∅
<< ∀∀ y : val, l ↦ y, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
============================
⊢ <<< ∀∀ xx : val, l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>>
code @ ∅
<<< ∃∃ yyyy : val, l ↦ yyyy ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx,
RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
_ : AU << ∃∃ xx : val, l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>
@ ⊤ ∖ ∅, ∅
<< ∀∀ yyyy : val, l ↦ yyyy ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗
l ↦ xx, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
============================
⊢ <<< ∀∀ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>>
code @ ∅
<<< l ↦ x, RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << ∃∃ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>
@ ⊤ ∖ ∅, ∅
<< l ↦ x, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
x : val
============================
⊢ <<< l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>>
code @ ∅
<<< ∃∃ y : val, l ↦ y, RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
x : val
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>
@ ⊤ ∖ ∅, ∅
<< ∀∀ y : val, l ↦ y, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
x : val
============================
⊢ <<< l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>>
code @ ∅
<<< l ↦ #(), RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
x : val
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>
@ ⊤ ∖ ∅, ∅
<< l ↦ #(), COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
xx, yyyy : val
============================
⊢ <<< l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>>
code @ ∅
<<< l ↦ yyyy, RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
xx, yyyy : val
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>
@ ⊤ ∖ ∅, ∅
<< l ↦ yyyy, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
xx, yyyy : val
============================
⊢ <<< l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>>
code @ ∅
<<< l ↦ yyyy ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx,
RET #() >>>
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
l : loc
xx, yyyy : val
Φ : language.val heap_lang → iProp Σ
============================
"AU" : AU << l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>
@ ⊤ ∖ ∅, ∅
<< l ↦ yyyy ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗
l ↦ xx, COMM Φ #() >>
--------------------------------------∗
WP code {{ v, Φ v }}
"Prettification"
: string
1 goal
Σ : gFunctors
heapGS0 : heapGS Σ
P : val → iProp Σ
Φ : language.val heap_lang → iProp Σ
============================
"AU" : ∃ x : val, P x ∗
(P x ={∅,⊤}=∗
AU << ∃∃ x0 : val, P x0 >>
@ ⊤ ∖ ∅, ∅
<< ∀∀ y : val, P y, COMM Φ #() >>)
∧ (∀ x0 : val, P x0 ={∅,⊤}=∗ Φ #())
--------------------------------------∗
WP ! #0 @ ∅ {{ v, |={∅,⊤}=> Φ v }}