Library TLC.LibOption
Instance Inhab_option : forall A, Inhab (option A).
Proof using. intros. apply (Inhab_of_val None). Qed.
unsome_default
unsome
map
Definition map A B (f : A -> B) (o : option A) : option B :=
match o with
| None => None
| Some x => Some (f x)
end.
Lemma map_eq_none_inv : forall A B (f : A->B) o,
map f o = None ->
o = None.
Proof using. introv H. destruct o; simpl; inverts* H. Qed.
Lemma map_eq_some_inv : forall A B (f : A->B) o x,
map f o = Some x ->
exists z, o = Some z /\ x = f z.
Proof using. introv H. destruct o; simpl; inverts* H. Qed.
Arguments map_eq_none_inv [A] [B] [f] [o].
Arguments map_eq_some_inv [A] [B] [f] [o] [x].
map_on o f is the same as map f o, only the arguments are swapped.
Definition map_on A B (o : option A) (f : A -> B) : option B :=
map f o.
Lemma map_on_eq_none_inv : forall A B (f : A -> B) o,
map f o = None ->
o = None.
Proof using. introv H. destruct~ o; tryfalse. Qed.
Lemma map_on_eq_some_inv : forall A B (f : A -> B) o x,
map_on o f = Some x ->
exists z, o = Some z /\ x = f z.
Proof using. introv H. destruct o; simpl; inverts* H. Qed.
Arguments map_eq_none_inv [A] [B] [f] [o].
Arguments map_on_eq_some_inv [A] [B] [f] [o] [x].
Definition apply A B (f : A->option B) (o : option A) : option B :=
match o with
| None => None
| Some x => f x
end.
apply_on o f is the same as apply f o
Definition apply_on A B (o : option A) (f : A->option B) : option B:=
apply f o.
Lemma apply_on_eq_none_inv : forall A B (f : A->option B) o,
apply_on o f = None ->
(o = None)
\/ (exists x, o = Some x /\ f x = None).
Proof using. introv H. destruct o; simpl; inverts* H. Qed.
Lemma apply_on_eq_some_inv : forall A B (f : A->option B) o x,
apply_on o f = Some x ->
exists z, o = Some z /\ f z = Some x.
Proof using. introv H. destruct o; simpl; inverts* H. Qed.
Arguments apply_on_eq_none_inv [A] [B] [f] [o].
Arguments apply_on_eq_some_inv [A] [B] [f] [o] [x].