Library zoo_std.option
Require Import zoo.prelude.
Require Import zoo.base.
Require Import zoo.options.
Implicit Type o : option val.
Implicit Type v : val.
Coercion option۰to_val o :=
match o with
| None ⇒
§None
| Some v ⇒
‘Some( v )
end%V.
#[global] Arguments option۰to_val !_ / : assert.
#[global] Instance option۰to_valーinj :
Inj (=) (=) option۰to_val.
Lemma option۰to_valーsimilarーNoneーl o :
§None%V ≈ o →
o = None.
Lemma option۰to_valーsimilarーNoneーr o :
(o : val) ≈ §None%V →
o = None.
Section zoo۰G.
Context `{zoo۰G : !ZooG Σ}.
Context τ `{!iType (iPropI Σ) τ}.
Definition itype۰option t : iProp Σ :=
⌜t = §None%V⌝
∨ ∃ v,
⌜t = ‘Some( v )%V⌝ ∗
τ v.
#[global] Instance itype۰optionーitype :
iType _ itype۰option.
Lemma wpーmatchーoption t e1 x e2 Φ :
itype۰option t -∗
( WP e1 {{ Φ }} ∧
∀ v, τ v -∗ WP subst' x v e2 {{ Φ }}
) -∗
WP 𝗺𝗮𝘁𝗰𝗵 t 𝘄𝗶𝘁𝗵 None → e1 | Some x → e2 𝗲𝗻𝗱 {{ Φ }}.
End zoo۰G.
Require Import zoo.base.
Require Import zoo.options.
Implicit Type o : option val.
Implicit Type v : val.
Coercion option۰to_val o :=
match o with
| None ⇒
§None
| Some v ⇒
‘Some( v )
end%V.
#[global] Arguments option۰to_val !_ / : assert.
#[global] Instance option۰to_valーinj :
Inj (=) (=) option۰to_val.
Lemma option۰to_valーsimilarーNoneーl o :
§None%V ≈ o →
o = None.
Lemma option۰to_valーsimilarーNoneーr o :
(o : val) ≈ §None%V →
o = None.
Section zoo۰G.
Context `{zoo۰G : !ZooG Σ}.
Context τ `{!iType (iPropI Σ) τ}.
Definition itype۰option t : iProp Σ :=
⌜t = §None%V⌝
∨ ∃ v,
⌜t = ‘Some( v )%V⌝ ∗
τ v.
#[global] Instance itype۰optionーitype :
iType _ itype۰option.
Lemma wpーmatchーoption t e1 x e2 Φ :
itype۰option t -∗
( WP e1 {{ Φ }} ∧
∀ v, τ v -∗ WP subst' x v e2 {{ Φ }}
) -∗
WP 𝗺𝗮𝘁𝗰𝗵 t 𝘄𝗶𝘁𝗵 None → e1 | Some x → e2 𝗲𝗻𝗱 {{ Φ }}.
End zoo۰G.