3 Author: Lawrence C Paulson, Cambridge University Computer Laboratory
4 Copyright 1991 University of Cambridge
7 val bool_defs = [Bool_def,true_def,false_def,cond_def];
9 (*Derivation of rules for the type Bool*)
12 Goalw bool_defs "Bool type";
17 (*introduction rules for true, false*)
19 Goalw bool_defs "true : Bool";
23 Goalw bool_defs "false : Bool";
27 (*elimination rule: typing of cond*)
29 "[| p:Bool; a : C(true); b : C(false) |] ==> cond(p,a,b) : C(p)";
31 by (ALLGOALS (etac TE));
36 "[| p = q : Bool; a = c : C(true); b = d : C(false) |] \
37 \ ==> cond(p,a,b) = cond(q,c,d) : C(p)";
39 by (REPEAT (eresolve_tac [asm_rl, refl_elem RS TEL] 1)) ;
42 (*computation rules for true, false*)
45 "[| a : C(true); b : C(false) |] ==> cond(true,a,b) = a : C(true)";
46 by (resolve_tac comp_rls 1);
48 by (ALLGOALS (etac TE));
53 "[| a : C(true); b : C(false) |] ==> cond(false,a,b) = b : C(false)";
54 by (resolve_tac comp_rls 1);
56 by (ALLGOALS (etac TE));