equal
deleted
inserted
replaced
316 let |
316 let |
317 val zs = strip_abs_vars t; |
317 val zs = strip_abs_vars t; |
318 val _ = if length zs < i then raise CASE_ERROR ("", 0) else (); |
318 val _ = if length zs < i then raise CASE_ERROR ("", 0) else (); |
319 val (xs, ys) = chop i zs; |
319 val (xs, ys) = chop i zs; |
320 val u = list_abs (ys, strip_abs_body t); |
320 val u = list_abs (ys, strip_abs_body t); |
321 val xs' = map Free (Name.variant_list (OldTerm.add_term_names (u, used)) |
321 val xs' = map Free (Name.variant_list (Misc_Legacy.add_term_names (u, used)) |
322 (map fst xs) ~~ map snd xs) |
322 (map fst xs) ~~ map snd xs) |
323 in (xs', subst_bounds (rev xs', u)) end; |
323 in (xs', subst_bounds (rev xs', u)) end; |
324 fun is_dependent i t = |
324 fun is_dependent i t = |
325 let val k = length (strip_abs_vars t) - i |
325 let val k = length (strip_abs_vars t) - i |
326 in k < 0 orelse exists (fn j => j >= k) (loose_bnos (strip_abs_body t)) end; |
326 in k < 0 orelse exists (fn j => j >= k) (loose_bnos (strip_abs_body t)) end; |
377 (* destruct nested patterns *) |
377 (* destruct nested patterns *) |
378 |
378 |
379 fun strip_case'' dest (pat, rhs) = |
379 fun strip_case'' dest (pat, rhs) = |
380 (case dest (Term.add_free_names pat []) rhs of |
380 (case dest (Term.add_free_names pat []) rhs of |
381 SOME (exp as Free _, clauses) => |
381 SOME (exp as Free _, clauses) => |
382 if member op aconv (OldTerm.term_frees pat) exp andalso |
382 if member op aconv (Misc_Legacy.term_frees pat) exp andalso |
383 not (exists (fn (_, rhs') => |
383 not (exists (fn (_, rhs') => |
384 member op aconv (OldTerm.term_frees rhs') exp) clauses) |
384 member op aconv (Misc_Legacy.term_frees rhs') exp) clauses) |
385 then |
385 then |
386 maps (strip_case'' dest) (map (fn (pat', rhs') => |
386 maps (strip_case'' dest) (map (fn (pat', rhs') => |
387 (subst_free [(exp, pat')] pat, rhs')) clauses) |
387 (subst_free [(exp, pat')] pat, rhs')) clauses) |
388 else [(pat, rhs)] |
388 else [(pat, rhs)] |
389 | _ => [(pat, rhs)]); |
389 | _ => [(pat, rhs)]); |