From 558efb33c188b4c8e81ece5b0777b7a17e692c06 Mon Sep 17 00:00:00 2001 From: Mario Carneiro Date: Fri, 12 May 2017 18:12:04 -0400 Subject: [PATCH] feat(init/data/option): option.get --- library/init/data/option/basic.lean | 4 ++++ library/init/data/option/instances.lean | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/library/init/data/option/basic.lean b/library/init/data/option/basic.lean index ee6826880c..dedaeebba2 100644 --- a/library/init/data/option/basic.lean +++ b/library/init/data/option/basic.lean @@ -27,6 +27,10 @@ def is_none {α : Type u} : option α → bool | (some _) := ff | none := tt +def get {α : Type u} : Π {o : option α}, is_some o → α +| (some x) h := x +| none h := false.rec _ $ bool.ff_ne_tt h + def rhoare {α : Type u} : bool → α → option α | tt a := none | ff a := some a diff --git a/library/init/data/option/instances.lean b/library/init/data/option/instances.lean index da7b33cb01..7397a497af 100644 --- a/library/init/data/option/instances.lean +++ b/library/init/data/option/instances.lean @@ -34,3 +34,7 @@ lemma option.eq_of_eq_some {α : Type u} : Π {x y : option α}, (∀z, x = some | none (some z) h := option.no_confusion ((h z).2 rfl) | (some z) none h := option.no_confusion ((h z).1 rfl) | (some z) (some w) h := option.no_confusion ((h w).2 rfl) (congr_arg some) + +lemma option.eq_some_of_is_some {α : Type u} : Π {o : option α} (h : option.is_some o), o = some (option.get h) +| (some x) h := rfl +| none h := false.rec _ $ bool.ff_ne_tt h