src/Pure/meta_simplifier.ML
changeset 22717 74dbc7696083
parent 22669 62857ad97cca
child 22892 c77a1e1c7323
equal deleted inserted replaced
22716:85f0ab03eeed 22717:74dbc7696083
   245 fun mk_solver name solver = mk_solver' name (solver o prems_of_ss);
   245 fun mk_solver name solver = mk_solver' name (solver o prems_of_ss);
   246 
   246 
   247 fun solver_name (Solver {name, ...}) = name;
   247 fun solver_name (Solver {name, ...}) = name;
   248 fun solver ss (Solver {solver = tac, ...}) = tac ss;
   248 fun solver ss (Solver {solver = tac, ...}) = tac ss;
   249 fun eq_solver (Solver {id = id1, ...}, Solver {id = id2, ...}) = (id1 = id2);
   249 fun eq_solver (Solver {id = id1, ...}, Solver {id = id2, ...}) = (id1 = id2);
   250 val merge_solvers = gen_merge_lists eq_solver;
       
   251 
   250 
   252 
   251 
   253 (* diagnostics *)
   252 (* diagnostics *)
   254 
   253 
   255 exception SIMPLIFIER of string * thm;
   254 exception SIMPLIFIER of string * thm;
   740   subgoal_tac, loop_tacs, (unsafe_solvers, _)) =>
   739   subgoal_tac, loop_tacs, (unsafe_solvers, _)) =>
   741     (congs, procs, mk_rews, termless, subgoal_tac, loop_tacs, (unsafe_solvers, [solver])));
   740     (congs, procs, mk_rews, termless, subgoal_tac, loop_tacs, (unsafe_solvers, [solver])));
   742 
   741 
   743 fun ss addSSolver solver = ss |> map_simpset2 (fn (congs, procs, mk_rews, termless,
   742 fun ss addSSolver solver = ss |> map_simpset2 (fn (congs, procs, mk_rews, termless,
   744   subgoal_tac, loop_tacs, (unsafe_solvers, solvers)) => (congs, procs, mk_rews, termless,
   743   subgoal_tac, loop_tacs, (unsafe_solvers, solvers)) => (congs, procs, mk_rews, termless,
   745     subgoal_tac, loop_tacs, (unsafe_solvers, merge_solvers solvers [solver])));
   744     subgoal_tac, loop_tacs, (unsafe_solvers, insert eq_solver solver solvers)));
   746 
   745 
   747 fun ss setSolver solver = ss |> map_simpset2 (fn (congs, procs, mk_rews, termless,
   746 fun ss setSolver solver = ss |> map_simpset2 (fn (congs, procs, mk_rews, termless,
   748   subgoal_tac, loop_tacs, (_, solvers)) => (congs, procs, mk_rews, termless,
   747   subgoal_tac, loop_tacs, (_, solvers)) => (congs, procs, mk_rews, termless,
   749     subgoal_tac, loop_tacs, ([solver], solvers)));
   748     subgoal_tac, loop_tacs, ([solver], solvers)));
   750 
   749 
   751 fun ss addSolver solver = ss |> map_simpset2 (fn (congs, procs, mk_rews, termless,
   750 fun ss addSolver solver = ss |> map_simpset2 (fn (congs, procs, mk_rews, termless,
   752   subgoal_tac, loop_tacs, (unsafe_solvers, solvers)) => (congs, procs, mk_rews, termless,
   751   subgoal_tac, loop_tacs, (unsafe_solvers, solvers)) => (congs, procs, mk_rews, termless,
   753     subgoal_tac, loop_tacs, (merge_solvers unsafe_solvers [solver], solvers)));
   752     subgoal_tac, loop_tacs, (insert eq_solver solver unsafe_solvers, solvers)));
   754 
   753 
   755 fun set_solvers solvers = map_simpset2 (fn (congs, procs, mk_rews, termless,
   754 fun set_solvers solvers = map_simpset2 (fn (congs, procs, mk_rews, termless,
   756   subgoal_tac, loop_tacs, _) => (congs, procs, mk_rews, termless,
   755   subgoal_tac, loop_tacs, _) => (congs, procs, mk_rews, termless,
   757   subgoal_tac, loop_tacs, (solvers, solvers)));
   756   subgoal_tac, loop_tacs, (solvers, solvers)));
   758 
   757 
   793     val bounds' = if #1 bounds1 < #1 bounds2 then bounds2 else bounds1;
   792     val bounds' = if #1 bounds1 < #1 bounds2 then bounds2 else bounds1;
   794     val congs' = merge (eq_cong o pairself #2) (congs1, congs2);
   793     val congs' = merge (eq_cong o pairself #2) (congs1, congs2);
   795     val weak' = merge (op =) (weak1, weak2);
   794     val weak' = merge (op =) (weak1, weak2);
   796     val procs' = Net.merge eq_proc (procs1, procs2);
   795     val procs' = Net.merge eq_proc (procs1, procs2);
   797     val loop_tacs' = AList.merge (op =) (K true) (loop_tacs1, loop_tacs2);
   796     val loop_tacs' = AList.merge (op =) (K true) (loop_tacs1, loop_tacs2);
   798     val unsafe_solvers' = merge_solvers unsafe_solvers1 unsafe_solvers2;
   797     val unsafe_solvers' = merge eq_solver (unsafe_solvers1, unsafe_solvers2);
   799     val solvers' = merge_solvers solvers1 solvers2;
   798     val solvers' = merge eq_solver (solvers1, solvers2);
   800   in
   799   in
   801     make_simpset ((rules', prems', bounds', NONE), ((congs', weak'), procs',
   800     make_simpset ((rules', prems', bounds', NONE), ((congs', weak'), procs',
   802       mk_rews, termless, subgoal_tac, loop_tacs', (unsafe_solvers', solvers')))
   801       mk_rews, termless, subgoal_tac, loop_tacs', (unsafe_solvers', solvers')))
   803   end;
   802   end;
   804 
   803