2 ||M|| This file is part of HELM, an Hypertextual, Electronic
3 ||A|| Library of Mathematics, developed at the Computer Science
4 ||T|| Department of the University of Bologna, Italy.
8 \ / This file is distributed under the terms of the
9 \ / GNU General Public License Version 2
10 V_______________________________________________________________ *)
12 include "basics/relations.ma".
14 (********** bool **********)
15 inductive bool: Type[0] ≝
19 theorem not_eq_true_false : true ≠ false.
23 definition notb : bool → bool ≝
24 λ b:bool. match b with [true ⇒ false|false ⇒ true ].
26 interpretation "boolean not" 'not x = (notb x).
28 theorem notb_elim: ∀ b:bool.∀ P:bool → Prop.
31 | false ⇒ P true] → P (notb b).
32 #b #P elim b normalize // qed.
34 theorem notb_notb: ∀b:bool. notb (notb b) = b.
37 theorem injective_notb: injective bool bool notb.
40 definition andb : bool → bool → bool ≝
41 λb1,b2:bool. match b1 with [ true ⇒ b2 | false ⇒ false ].
43 interpretation "boolean and" 'and x y = (andb x y).
45 theorem andb_elim: ∀ b1,b2:bool. ∀ P:bool → Prop.
46 match b1 with [ true ⇒ P b2 | false ⇒ P false] → P (b1 ∧ b2).
47 #b1 #b2 #P (elim b1) normalize // qed.
49 theorem andb_true_l: ∀ b1,b2. (b1 ∧ b2) = true → b1 = true.
50 #b1 (cases b1) normalize // qed.
52 theorem andb_true_r: ∀b1,b2. (b1 ∧ b2) = true → b2 = true.
53 #b1 #b2 (cases b1) normalize // (cases b2) // qed.
55 definition orb : bool → bool → bool ≝
56 λb1,b2:bool.match b1 with [ true ⇒ true | false ⇒ b2].
58 interpretation "boolean or" 'or x y = (orb x y).
60 theorem orb_elim: ∀ b1,b2:bool. ∀ P:bool → Prop.
61 match b1 with [ true ⇒ P true | false ⇒ P b2] → P (orb b1 b2).
62 #b1 #b2 #P (elim b1) normalize // qed.
64 definition if_then_else: ∀A:Type[0]. bool → A → A → A ≝
65 λA.λb.λ P,Q:A. match b with [ true ⇒ P | false ⇒ Q].
67 theorem bool_to_decidable_eq:
68 ∀b1,b2:bool. decidable (b1=b2).
69 #b1 #b2 (cases b1) (cases b2) /2/ %2 /3/ qed.
71 theorem true_or_false:
72 ∀b:bool. b = true ∨ b = false.