# HG changeset patch # User Christian Urban # Date 1260045841 -3600 # Node ID 287ea842a7d43a5f6c445f8d6b8821bf05409fca # Parent 09cd71fac4eca91d67ea108a81e93bdfe54e8b23 simpler version of clean_tac diff -r 09cd71fac4ec -r 287ea842a7d4 IntEx.thy --- a/IntEx.thy Sat Dec 05 16:26:18 2009 +0100 +++ b/IntEx.thy Sat Dec 05 21:44:01 2009 +0100 @@ -149,6 +149,8 @@ ML {* fun inj_repabs_tac_intex lthy = inj_repabs_tac lthy [rel_refl] [trans2] *} ML {* fun all_inj_repabs_tac_intex lthy = all_inj_repabs_tac lthy [rel_refl] [trans2] *} +lemma cheat: "P" sorry + lemma test1: "my_plus a b = my_plus a b" apply(rule refl) done @@ -160,10 +162,12 @@ abbreviation "Resp \ Respects" + lemma "PLUS a b = PLUS a b" apply(tactic {* procedure_tac @{context} @{thm test1} 1 *}) apply(tactic {* regularize_tac @{context} [rel_eqv] 1 *}) apply(tactic {* all_inj_repabs_tac_intex @{context} 1*}) +apply(tactic {* lambda_allex_prs_tac @{context} 1 *}) apply(tactic {* clean_tac @{context} 1 *}) done @@ -173,7 +177,10 @@ lemma "PLUS a = PLUS a" apply(tactic {* procedure_tac @{context} @{thm test2} 1 *}) -oops +apply(rule cheat) +apply(rule cheat) +apply(tactic {* clean_tac @{context} 1 *}) +done lemma test3: "my_plus = my_plus" apply(rule refl) @@ -181,7 +188,10 @@ lemma "PLUS = PLUS" apply(tactic {* procedure_tac @{context} @{thm test3} 1 *}) -oops +apply(rule cheat) +apply(rule cheat) +apply(tactic {* clean_tac @{context} 1 *}) +done lemma "PLUS a b = PLUS b a" @@ -262,7 +272,8 @@ apply(simp only: Quotient_abs_rep[OF list_quotient[OF Quotient_my_int]]) apply(simp only: foldl_prs[OF Quotient_my_int Quotient_my_int]) apply(tactic {* clean_tac @{context} 1 *}) -sorry +apply(simp) (* FIXME: why is this needed *) +done lemma ho_tst2: "foldl my_plus x (h # t) \ my_plus h (foldl my_plus x t)" sorry diff -r 09cd71fac4ec -r 287ea842a7d4 QuotMain.thy --- a/QuotMain.thy Sat Dec 05 16:26:18 2009 +0100 +++ b/QuotMain.thy Sat Dec 05 21:44:01 2009 +0100 @@ -1137,25 +1137,31 @@ The rest are a simp_tac and are fast. *) +ML {* fun OF1 thm1 thm2 = thm2 RS thm1 *} +ML {* +fun quotient_solver_tac ss = quotient_tac (Simplifier.the_context ss) +val quotient_solver = Simplifier.mk_solver' "Quotient goal solver" quotient_solver_tac +*} + ML {* fun clean_tac lthy = let val thy = ProofContext.theory_of lthy; - val quotients = quotient_rules_get lthy - val defs = map (Thm.varifyT o #def) (qconsts_dest thy); - val absrep = map (fn x => @{thm Quotient_abs_rep} OF [x]) quotients - val reps_same = map (fn x => @{thm Quotient_rel_rep} OF [x]) quotients - val simp_ctxt = (Simplifier.context lthy empty_ss) addsimps - (@{thm eq_reflection[OF fun_map.simps]} :: @{thms id_simps} @ absrep @ reps_same @ defs) + val defs = map (Thm.varifyT o #def) (qconsts_dest thy) + val thms = @{thms eq_reflection[OF fun_map.simps]} + @ @{thms id_simps Quotient_abs_rep Quotient_rel_rep} + @ defs + val simp_ctxt = HOL_basic_ss addsimps thms addSolver quotient_solver in EVERY' [ - (* (Rep1 ---> Abs2) (\x. Rep2 (f (Abs1 x))) ----> f *) - (* \x\Respects R. (abs ---> id) f ----> \x. f *) + (* (rep1 ---> abs2) (\x. rep2 (f (abs1 x))) ----> f *) + (* Ball (Respects R) ((abs ---> id) f) ----> All f *) NDT lthy "a" (TRY o lambda_allex_prs_tac lthy), - (* NewConst ----> (rep ---> abs) oldConst *) - (* Abs (Rep x) ----> x *) - (* id_simps; fun_map.simps *) + (* NewConst -----> (rep ---> abs) oldConst *) + (* abs (rep x) -----> x *) + (* R (Rep x) (Rep y) -----> x = y *) + (* id_simps; fun_map.simps *) NDT lthy "c" (TRY o simp_tac simp_ctxt), (* final step *)