Skip to content
Snippets Groups Projects

Monadic bind for `option` is non-expansive.

Merged Dan Frumin requested to merge dfrumin/iris-coq:option_mbind_ne into master
All threads resolved!
+ 3
0
@@ -959,6 +959,9 @@ Arguments optionC : clear implicits.
@@ -959,6 +959,9 @@ Arguments optionC : clear implicits.
Instance option_fmap_ne {A B : ofeT} n:
Instance option_fmap_ne {A B : ofeT} n:
Proper ((dist n ==> dist n) ==> dist n ==> dist n) (@fmap option _ A B).
Proper ((dist n ==> dist n) ==> dist n ==> dist n) (@fmap option _ A B).
Proof. intros f f' Hf ?? []; constructor; auto. Qed.
Proof. intros f f' Hf ?? []; constructor; auto. Qed.
 
Instance option_mbind_ne {A B : ofeT} n :
 
+1
Proper ((dist n ==> dist n) ==> dist n ==> dist n) (@option_bind A B).
 
+1
Proof. destruct 2; simpl; try constructor; auto. Qed.
Definition optionC_map {A B} (f : A -n> B) : optionC A -n> optionC B :=
Definition optionC_map {A B} (f : A -n> B) : optionC A -n> optionC B :=
CofeMor (fmap f : optionC A optionC B).
CofeMor (fmap f : optionC A optionC B).
Instance optionC_map_ne A B : NonExpansive (@optionC_map A B).
Instance optionC_map_ne A B : NonExpansive (@optionC_map A B).
Loading