Skip to content
Snippets Groups Projects
atomic.ref 9.46 KiB
Newer Older
Ralf Jung's avatar
Ralf Jung committed
  
  Σ : gFunctors
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
Ralf Jung's avatar
Ralf Jung committed
  Q : iProp Σ
  l : loc
  v : val
  ============================
  "Hl" : l ↦ v
  --------------------------------------∗
  atomic_acc (⊤ ∖ ∅) ∅ (tele_app (λ (v0 : val) (q : dfrac), l ↦{q} v0))
    (l ↦ v) (tele_app (λ (v0 : val) (q : dfrac), tele_app (l ↦{q} v0)))
    (λ.. (_ : [tele (_ : val) (_ : dfrac)]) (_ : [tele]), Q -∗ Q)
"printing"
     : string
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  P : val → iProp Σ
  ============================
  ⊢ <<< ∀∀ x : val, P x >>> code @ ∅ <<< ∃∃ y : val, P y, RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  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 }}
Ralf Jung's avatar
Ralf Jung committed
  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 }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  ============================
  ⊢ <<< ∀∀ x : val, l ↦ x >>> code @ ∅ <<< l ↦ x, RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  Φ : language.val heap_lang → iProp Σ
  ============================
  "AU" : AU << ∃∃ x : val, l ↦ x >> @ ⊤ ∖ ∅, ∅ << l ↦ x, COMM Φ #() >>
  --------------------------------------∗
  WP code {{ v, Φ v }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  Φ : language.val heap_lang → iProp Σ
  ============================
  _ : AACC << ∃∃ x : val, l ↦ x,
              ABORT AU << ∃∃ x : val, l ↦ x >>
                       @ ⊤ ∖ ∅, ∅
                       << l ↦ x, COMM Φ #() >> >>
           @ ⊤ ∖ ∅, ∅
  --------------------------------------∗
  WP code {{ v, Φ v }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  ============================
  ⊢ <<< l ↦ #() >>> code @ ∅ <<< ∃∃ y : val, l ↦ y, RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  Φ : language.val heap_lang → iProp Σ
  ============================
  "AU" : AU << l ↦ #() >> @ ⊤ ∖ ∅, ∅ << ∀∀ y : val, l ↦ y, COMM Φ #() >>
  --------------------------------------∗
  WP code {{ v, Φ v }}
Ralf Jung's avatar
Ralf Jung committed
  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 }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  ⊢ <<< l ↦ #() >>> code @ ∅ <<< l ↦ #(), RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  Φ : language.val heap_lang → iProp Σ
  ============================
  "AU" : AU << l ↦ #() >> @ ⊤ ∖ ∅, ∅ << l ↦ #(), COMM Φ #() >>
  --------------------------------------∗
  WP code {{ v, Φ v }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  Φ : language.val heap_lang → iProp Σ
  ============================
  _ : AACC << l ↦ #(),
              ABORT AU << l ↦ #() >> @ ⊤ ∖ ∅, ∅ << l ↦ #(), COMM Φ #() >> >>
           @ ⊤ ∖ ∅, ∅
  --------------------------------------∗
  WP code {{ v, Φ v }}
"Now come the long pre/post tests"
     : string
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  ⊢ <<< ∀∀ x : val, l ↦ x ∗ l ↦ x >>>
Gregory Malecha's avatar
Gregory Malecha committed
    <<< ∃ y : val, l ↦ y, RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  Φ : language.val heap_lang → iProp Σ
  ============================
  "AU" : AU << ∃∃ x : val, l ↦ x ∗ l ↦ x >>
            @ ⊤ ∖ ∅, ∅
Ralf Jung's avatar
Ralf Jung committed
            << ∃ y : val, l ↦ y, COMM Φ #() >>
  --------------------------------------∗
  WP code {{ v, Φ v }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  ⊢ <<< ∀∀ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>>
    <<< ∃∃ y : val, l ↦ y, RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  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 }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  ⊢ <<< ∀∀ xx : val, l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>>
    <<< ∃∃ yyyy : val, l ↦ yyyy ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx,
Gregory Malecha's avatar
Gregory Malecha committed
        RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  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 }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  ⊢ <<< ∀∀ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>>
Gregory Malecha's avatar
Gregory Malecha committed
    <<< l ↦ x, RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  Φ : language.val heap_lang → iProp Σ
  ============================
  "AU" : AU << ∃∃ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>
            @ ⊤ ∖ ∅, ∅
  --------------------------------------∗
  WP code {{ v, Φ v }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  x : val
  ============================
  ⊢ <<< l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>>
    <<< ∃∃ y : val, l ↦ y, RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  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 }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  x : val
  ============================
  ⊢ <<< l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>>
Gregory Malecha's avatar
Gregory Malecha committed
    <<< l ↦ #(), RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  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 >>
            @ ⊤ ∖ ∅, ∅
  --------------------------------------∗
  WP code {{ v, Φ v }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  xx, yyyy : val
  ============================
  ⊢ <<< l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>>
Gregory Malecha's avatar
Gregory Malecha committed
    <<< l ↦ yyyy, RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  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 }}
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
  l : loc
  xx, yyyy : val
  ============================
  ⊢ <<< l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>>
Gregory Malecha's avatar
Gregory Malecha committed
    <<< l ↦ yyyy ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx,
        RET #() >>>
Ralf Jung's avatar
Ralf Jung committed
  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 }}
Ralf Jung's avatar
Ralf Jung committed
"Prettification"
     : string
Ralf Jung's avatar
Ralf Jung committed
  
  Σ : gFunctors
Ralf Jung's avatar
Ralf Jung committed
  heapGS0 : heapGS Σ
Ralf Jung's avatar
Ralf Jung committed
  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 ={∅,⊤}=∗ Φ #())
Ralf Jung's avatar
Ralf Jung committed
  --------------------------------------∗
  WP ! #0 @ ∅ {{ v, |={∅,⊤}=> Φ v }}