From a1e93de9b2286ab1709063318ef0b2f8b2f0b986 Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Mon, 18 Jul 2016 11:15:21 +0200
Subject: [PATCH] Use option in spawn.

---
 heap_lang/lib/spawn.v | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/heap_lang/lib/spawn.v b/heap_lang/lib/spawn.v
index 00a00b59e..fd74020d3 100644
--- a/heap_lang/lib/spawn.v
+++ b/heap_lang/lib/spawn.v
@@ -5,13 +5,13 @@ Import uPred.
 
 Definition spawn : val :=
   λ: "f",
-    let: "c" := ref (InjL #0) in
-    Fork ("c" <- InjR ("f" #())) ;; "c".
+    let: "c" := ref NONE in
+    Fork ("c" <- SOME ("f" #())) ;; "c".
 Definition join : val :=
   rec: "join" "c" :=
     match: !"c" with
-      InjR "x" => "x"
-    | InjL <>  => "join" "c"
+      SOME "x" => "x"
+    | NONE => "join" "c"
     end.
 Global Opaque spawn join.
 
@@ -33,8 +33,8 @@ Context (heapN N : namespace).
 Local Notation iProp := (iPropG heap_lang Σ).
 
 Definition spawn_inv (γ : gname) (l : loc) (Ψ : val → iProp) : iProp :=
-  (∃ lv, l ↦ lv ★ (lv = InjLV #0 ∨
-                   ∃ v, lv = InjRV v ★ (Ψ v ∨ own γ (Excl ()))))%I.
+  (∃ lv, l ↦ lv ★ (lv = NONEV ∨
+                   ∃ v, lv = SOMEV v ★ (Ψ v ∨ own γ (Excl ()))))%I.
 
 Definition join_handle (l : loc) (Ψ : val → iProp) : iProp :=
   (heapN ⊥ N ★ ∃ γ, heap_ctx heapN ★ own γ (Excl ()) ★
@@ -60,13 +60,13 @@ Proof.
   wp_let. wp_alloc l as "Hl". wp_let.
   iPvs (own_alloc (Excl ())) as (γ) "Hγ"; first done.
   iPvs (inv_alloc N _ (spawn_inv γ l Ψ) with "[Hl]") as "#?"; first done.
-  { iNext. iExists (InjLV #0). iFrame; eauto. }
+  { iNext. iExists NONEV. iFrame; eauto. }
   wp_apply wp_fork. iSplitR "Hf".
   - iPvsIntro. wp_seq. iPvsIntro. iApply "HΦ". rewrite /join_handle. eauto.
   - wp_focus (f _). iApply wp_wand_l. iFrame "Hf"; iIntros (v) "Hv".
     iInv N as (v') "[Hl _]"; first wp_done.
     wp_store. iPvsIntro. iSplit; [iNext|done].
-    iExists (InjRV v). iFrame. eauto.
+    iExists (SOMEV v). iFrame. eauto.
 Qed.
 
 Lemma join_spec (Ψ : val → iProp) l (Φ : val → iProp) :
-- 
GitLab