equal
deleted
inserted
replaced
288 |
288 |
289 (* overall procedure *) |
289 (* overall procedure *) |
290 |
290 |
291 val is_free_constraint = Term.exists_subterm (fn Free _ => true | _ => false) |
291 val is_free_constraint = Term.exists_subterm (fn Free _ => true | _ => false) |
292 |
292 |
|
293 fun is_free_def (Const (@{const_name HOL.eq}, _) $ Free _ $ _) = true |
|
294 | is_free_def _ = false |
|
295 |
|
296 fun defined tp = |
|
297 try (pairself (fst o HOLogic.dest_eq)) tp |
|
298 |> the_default false o Option.map (op aconv) |
|
299 |
|
300 fun add_free_defs free_cs defs = |
|
301 let val (free_defs, defs') = List.partition is_free_def defs |
|
302 in (free_cs @ filter_out (member defined free_cs) free_defs, defs') end |
|
303 |
293 fun is_const_def (Const (@{const_name HOL.eq}, _) $ Const _ $ _) = true |
304 fun is_const_def (Const (@{const_name HOL.eq}, _) $ Const _ $ _) = true |
294 | is_const_def _ = false |
305 | is_const_def _ = false |
295 |
306 |
296 fun parse_counterex ctxt ({terms, ...} : SMT_Translate.recon) ls = |
307 fun parse_counterex ctxt ({terms, ...} : SMT_Translate.recon) ls = |
297 read_cex terms ls |
308 read_cex terms ls |
300 |> remove_int_nat_coercions |
311 |> remove_int_nat_coercions |
301 |> unfold_funapp |
312 |> unfold_funapp |
302 |> unfold_eqs |
313 |> unfold_eqs |
303 |>> map swap_free |
314 |>> map swap_free |
304 |>> filter is_free_constraint |
315 |>> filter is_free_constraint |
|
316 |-> add_free_defs |
305 |> frees_for_vars ctxt |
317 |> frees_for_vars ctxt |
306 ||> filter is_const_def |
318 ||> filter is_const_def |
307 |
319 |
308 end |
320 end |
309 |
321 |