diff -r 142f1eb707b4 -r befa4e9f7c90 Prod.ML --- a/Prod.ML Thu Sep 16 14:29:14 1993 +0200 +++ b/Prod.ML Wed Sep 22 15:43:05 1993 +0200 @@ -58,17 +58,21 @@ by (rtac refl 1); val split = result(); -(*FIXME: split's congruence rule should only simplifies the pair*) val pair_ss = set_ss addsimps [fst_conv, snd_conv, split]; +(*Prevents simplification of c: much faster*) +val split_weak_cong = prove_goal Prod.thy + "p=q ==> split(p,c) = split(q,c)" + (fn [prem] => [rtac (prem RS arg_cong) 1]); + goal Prod.thy "p = "; by (res_inst_tac [("p","p")] PairE 1); -by(asm_simp_tac pair_ss 1); +by (asm_simp_tac pair_ss 1); val surjective_pairing = result(); goal Prod.thy "p = split(p, %x y.)"; by (res_inst_tac [("p","p")] PairE 1); -by(asm_simp_tac pair_ss 1); +by (asm_simp_tac pair_ss 1); val surjective_pairing2 = result(); (** split used as a logical connective, with result type bool **) @@ -99,13 +103,13 @@ "prod_fun(f1 o f2, g1 o g2) = (prod_fun(f1,g1) o prod_fun(f2,g2))"; by (rtac ext 1); by (res_inst_tac [("p","x")] PairE 1); -by(asm_simp_tac (pair_ss addsimps [prod_fun,o_def]) 1); +by (asm_simp_tac (pair_ss addsimps [prod_fun,o_def]) 1); val prod_fun_compose = result(); goal Prod.thy "prod_fun(%x.x, %y.y) = (%z.z)"; by (rtac ext 1); by (res_inst_tac [("p","z")] PairE 1); -by(asm_simp_tac (pair_ss addsimps [prod_fun]) 1); +by (asm_simp_tac (pair_ss addsimps [prod_fun]) 1); val prod_fun_ident = result(); val prems = goal Prod.thy ":r ==> : prod_fun(f,g)``r";