(* *)
(**************************************************************************)
-set "baseuri" "cic:/matita/bool/".
+set "baseuri" "cic:/matita/datatypes/bool/".
+
+include "logic/equality.ma".
inductive bool : Set \def
| true : bool
| false : bool.
+
+theorem not_eq_true_false : \lnot true = false.
+simplify.intro.
+change with
+match true with
+[ true \Rightarrow False
+| flase \Rightarrow True].
+rewrite > H.simplify.exact I.
+qed.
definition notb : bool \to bool \def
\lambda b:bool.
match b with
[ true \Rightarrow false
| false \Rightarrow true ].
+
+theorem notb_elim: \forall b:bool.\forall P:bool \to Prop.
+match b with
+[ true \Rightarrow P false
+| false \Rightarrow P true] \to P (notb b).
+intros 2.elim b.exact H. exact H.
+qed.
+
+(*CSC: the URI must disappear: there is a bug now *)
+interpretation "boolean not" 'not x = (cic:/matita/datatypes/bool/notb.con x).
definition andb : bool \to bool \to bool\def
\lambda b1,b2:bool.
match b1 with
- [ true \Rightarrow
- match b2 with [true \Rightarrow true | false \Rightarrow false]
+ [ true \Rightarrow b2
| false \Rightarrow false ].
+theorem andb_elim: \forall b1,b2:bool. \forall P:bool \to Prop.
+match b1 with
+[ true \Rightarrow P b2
+| false \Rightarrow P false] \to P (andb b1 b2).
+intros 3.elim b1.exact H. exact H.
+qed.
+
+(*CSC: the URI must disappear: there is a bug now *)
+interpretation "boolean and" 'and x y = (cic:/matita/datatypes/bool/andb.con x y).
+
definition orb : bool \to bool \to bool\def
\lambda b1,b2:bool.
match b1 with
- [ true \Rightarrow
- match b2 with [true \Rightarrow true | false \Rightarrow false]
- | false \Rightarrow false ].
+ [ true \Rightarrow true
+ | false \Rightarrow b2].
+
+theorem orb_elim: \forall b1,b2:bool. \forall P:bool \to Prop.
+match b1 with
+[ true \Rightarrow P true
+| false \Rightarrow P b2] \to P (orb b1 b2).
+intros 3.elim b1.exact H. exact H.
+qed.
+
+(*CSC: the URI must disappear: there is a bug now *)
+interpretation "boolean or" 'or x y = (cic:/matita/datatypes/bool/orb.con x y).
definition if_then_else : bool \to Prop \to Prop \to Prop \def
\lambda b:bool.\lambda P,Q:Prop.
match b with
[ true \Rightarrow P
| false \Rightarrow Q].
+
+(*CSC: missing notation for if_then_else *)