Skip to content
Snippets Groups Projects

Make `union_Some` a `:left_right_arrow:`, add `union_None` and `union_is_Some`.

Merged Robbert Krebbers requested to merge robbert/option_union into master
All threads resolved!
2 files
+ 9
2
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 7
1
@@ -297,7 +297,7 @@ Global Instance option_difference_with {A} : DifferenceWith A (option A) := λ f
Global Instance option_union {A} : Union (option A) := union_with (λ x _, Some x).
Lemma union_Some {A} (mx my : option A) z :
mx my = Some z mx = Some z my = Some z.
mx my = Some z mx = Some z (mx = None my = Some z).
Proof. destruct mx, my; naive_solver. Qed.
Lemma union_Some_l {A} x (my : option A) :
Some x my = Some x.
@@ -305,6 +305,12 @@ Proof. destruct my; done. Qed.
Lemma union_Some_r {A} (mx : option A) y :
mx Some y = Some (default y mx).
Proof. destruct mx; done. Qed.
Lemma union_None {A} (mx my : option A) :
mx my = None mx = None my = None.
Proof. destruct mx, my; naive_solver. Qed.
Lemma union_is_Some {A} (mx my : option A) :
is_Some (mx my) is_Some mx is_Some my.
Proof. destruct mx, my; naive_solver. Qed.
Global Instance option_union_left_id {A} : LeftId (=@{option A}) None union.
Proof. by intros [?|]. Qed.
Loading