# HG changeset patch # User nipkow # Date 791655455 -3600 # Node ID 7b9a06035a92f09894d5c4801c4f2a1d5ad0c24f # Parent ccbbe1264c0ffeafb1fe138884a9cc8a1ce89f4f The thm if(P,Q,R) now yields the two conditional rewrite rules P ==> Q and P ==> R. diff -r ccbbe1264c0f -r 7b9a06035a92 simpdata.ML --- a/simpdata.ML Mon Jan 30 16:32:32 1995 +0100 +++ b/simpdata.ML Wed Feb 01 17:17:35 1995 +0100 @@ -70,9 +70,6 @@ val eq_sym_conv = prover "(x=y) = (y=x)"; val conj_assoc = prover "((P&Q)&R) = (P&(Q&R))"; -val conj_commute = prover "(P&Q) = (Q&P)"; -val conj_left_commute = prover "(P&(Q&R)) = (Q&(P&R))"; -val conj_comms = [conj_commute, conj_left_commute]; val if_True = prove_goalw HOL.thy [if_def] "if(True,x,y) = x" (fn _=>[fast_tac (HOL_cs addIs [select_equality]) 1]); @@ -93,12 +90,16 @@ rtac (if_not_P RS ssubst) 1, REPEAT(fast_tac HOL_cs 1) ]); +val if_bool_eq = prove_goal HOL.thy "if(P,Q,R) = ((P-->Q) & (~P-->R))" + (fn _ => [rtac expand_if 1]); + infix addcongs; fun ss addcongs congs = ss addeqcongs (congs RL [eq_reflection]); val mksimps_pairs = [("op -->", [mp]), ("op &", [conjunct1,conjunct2]), - ("All", [spec]), ("True", []), ("False", [])]; + ("All", [spec]), ("True", []), ("False", []), + ("if", [if_bool_eq RS iffD1])]; fun mksimps pairs = map mk_meta_eq o atomize pairs o gen_all; @@ -151,3 +152,12 @@ (fn [prem] => [rtac (prem RS arg_cong) 1]); end; + +fun prove nm thm = qed_goal nm HOL.thy thm (fn _ => [fast_tac HOL_cs 1]); + +prove "conj_commute" "(P&Q) = (Q&P)"; +prove "conj_left_commute" "(P&(Q&R)) = (Q&(P&R))"; +val conj_comms = [conj_commute, conj_left_commute]; + +prove "conj_disj_distribL" "(P&(Q|R)) = (P&Q | P&R)"; +prove "conj_disj_distribR" "((P|Q)&R) = (P&R | Q&R)";