src/CTT/Bool.ML
changeset 0 a5a9c433f639
child 360 2b74eebdbdb8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/CTT/Bool.ML	Thu Sep 16 12:20:38 1993 +0200
@@ -0,0 +1,79 @@
+(*  Title: 	CTT/bool
+    ID:         $Id$
+    Author: 	Lawrence C Paulson, Cambridge University Computer Laboratory
+    Copyright   1991  University of Cambridge
+
+Theorems for bool.thy (booleans and conditionals)
+*)
+
+open Bool;
+
+val bool_defs = [Bool_def,true_def,false_def,cond_def];
+
+(*Derivation of rules for the type Bool*)
+
+(*formation rule*)
+val boolF = prove_goal Bool.thy 
+    "Bool type"
+ (fn prems=>
+  [ (rewrite_goals_tac bool_defs),
+    (typechk_tac[]) ]);
+
+
+(*introduction rules for true, false*)
+
+val boolI_true = prove_goal Bool.thy 
+    "true : Bool"
+ (fn prems=>
+  [ (rewrite_goals_tac bool_defs),
+    (typechk_tac[]) ]);
+
+val boolI_false = prove_goal Bool.thy 
+    "false : Bool"
+ (fn prems=>
+  [ (rewrite_goals_tac bool_defs),
+    (typechk_tac[]) ]);
+
+(*elimination rule: typing of cond*)
+val boolE = prove_goal Bool.thy 
+    "[| p:Bool;  a : C(true);  b : C(false) |] ==> cond(p,a,b) : C(p)"
+ (fn prems=>
+  [ (cut_facts_tac prems 1),
+    (rewrite_goals_tac bool_defs),
+    (typechk_tac prems),
+    (ALLGOALS (etac TE)),
+    (typechk_tac prems) ]);
+
+val boolEL = prove_goal Bool.thy 
+    "[| p = q : Bool;  a = c : C(true);  b = d : C(false) |] ==> \
+\    cond(p,a,b) = cond(q,c,d) : C(p)"
+ (fn prems=>
+  [ (cut_facts_tac prems 1),
+    (rewrite_goals_tac bool_defs),
+    (resolve_tac [PlusEL] 1),
+    (REPEAT (eresolve_tac [asm_rl, refl_elem RS TEL] 1)) ]);
+
+(*computation rules for true, false*)
+
+val boolC_true = prove_goal Bool.thy 
+    "[| a : C(true);  b : C(false) |] ==> cond(true,a,b) = a : C(true)"
+ (fn prems=>
+  [ (cut_facts_tac prems 1),
+    (rewrite_goals_tac bool_defs),
+    (resolve_tac comp_rls 1),
+    (typechk_tac[]),
+    (ALLGOALS (etac TE)),
+    (typechk_tac prems) ]);
+
+val boolC_false = prove_goal Bool.thy 
+    "[| a : C(true);  b : C(false) |] ==> cond(false,a,b) = b : C(false)"
+ (fn prems=>
+  [ (cut_facts_tac prems 1),
+    (rewrite_goals_tac bool_defs),
+    (resolve_tac comp_rls 1),
+    (typechk_tac[]),
+    (ALLGOALS (etac TE)),
+    (typechk_tac prems) ]);
+
+writeln"Reached end of file.";
+