src/HOL/Statespace/state_space.ML
changeset 61144 5e94dfead1c2
parent 60754 02924903a6fd
child 61606 6d5213bd9709
equal deleted inserted replaced
61143:5f898411ce87 61144:5e94dfead1c2
   209   | _ => no_tac));
   209   | _ => no_tac));
   210 
   210 
   211 val distinctNameSolver = mk_solver "distinctNameSolver" distinctTree_tac;
   211 val distinctNameSolver = mk_solver "distinctNameSolver" distinctTree_tac;
   212 
   212 
   213 val distinct_simproc =
   213 val distinct_simproc =
   214   Simplifier.simproc_global @{theory HOL} "StateSpace.distinct_simproc" ["x = y"]
   214   Simplifier.make_simproc @{context} "StateSpace.distinct_simproc"
   215     (fn ctxt => (fn (Const (@{const_name HOL.eq},_)$(x as Free _)$(y as Free _)) =>
   215    {lhss = [@{term "x = y"}],
   216         Option.map (fn neq => DistinctTreeProver.neq_to_eq_False OF [neq]) (neq_x_y ctxt x y)
   216     proc = fn _ => fn ctxt => fn ct =>
   217       | _ => NONE));
   217       (case Thm.term_of ct of
       
   218         Const (@{const_name HOL.eq},_) $ (x as Free _) $ (y as Free _) =>
       
   219           Option.map (fn neq => DistinctTreeProver.neq_to_eq_False OF [neq])
       
   220             (neq_x_y ctxt x y)
       
   221       | _ => NONE),
       
   222     identifier = []};
   218 
   223 
   219 fun interprete_parent name dist_thm_name parent_expr thy =
   224 fun interprete_parent name dist_thm_name parent_expr thy =
   220   let
   225   let
   221     fun solve_tac ctxt = CSUBGOAL (fn (goal, i) =>
   226     fun solve_tac ctxt = CSUBGOAL (fn (goal, i) =>
   222       let
   227       let