2014-08-07 18:36:44 +00:00
|
|
|
-- Copyright (c) 2014 Microsoft Corporation. All rights reserved.
|
2014-07-19 19:09:47 +00:00
|
|
|
-- Released under Apache 2.0 license as described in the file LICENSE.
|
2014-08-22 00:54:50 +00:00
|
|
|
-- Author: Leonardo de Moura, Jeremy Avigad
|
2014-08-01 01:40:09 +00:00
|
|
|
|
2014-08-22 00:54:50 +00:00
|
|
|
import logic.connectives.prop logic.classes.inhabited logic.classes.decidable
|
|
|
|
|
|
|
|
using inhabited decidable
|
2014-07-19 19:09:47 +00:00
|
|
|
|
|
|
|
namespace sum
|
2014-08-22 00:54:50 +00:00
|
|
|
|
|
|
|
-- TODO: take this outside the namespace when the inductive package handles it better
|
2014-08-12 22:00:32 +00:00
|
|
|
inductive sum (A B : Type) : Type :=
|
2014-07-19 19:09:47 +00:00
|
|
|
| inl : A → sum A B
|
|
|
|
| inr : B → sum A B
|
|
|
|
|
|
|
|
infixr `+`:25 := sum
|
|
|
|
|
2014-08-22 00:54:50 +00:00
|
|
|
theorem cases_on {A B : Type} {C : Prop} (s : A + B) (H1 : A → C) (H2 : B → C) : C :=
|
2014-07-29 02:58:57 +00:00
|
|
|
sum_rec H1 H2 s
|
2014-08-22 00:54:50 +00:00
|
|
|
|
|
|
|
-- TODO: need equality lemmas
|
|
|
|
-- theorem inl_eq {A : Type} (B : Type) {a1 a2 : A} (H : inl B a1 = inl B a2) : a1 = a2 := sorry
|
|
|
|
|
|
|
|
theorem sum_inhabited_left [instance] {A B : Type} (H : inhabited A) : inhabited (A + B) :=
|
|
|
|
inhabited_mk (inl B (default A))
|
|
|
|
|
|
|
|
theorem sum_inhabited_right [instance] {A B : Type} (H : inhabited B) : inhabited (A + B) :=
|
|
|
|
inhabited_mk (inr A (default B))
|
|
|
|
|
|
|
|
--theorem sum_eq_decidable [instance] {A B : Type} (s1 s2 : A + B) : decidable (s1 = s2) :=
|
|
|
|
--cases_
|
|
|
|
|
2014-08-07 23:59:08 +00:00
|
|
|
end sum
|