equal
deleted
inserted
replaced
449 let |
449 let |
450 fun decode_case (Const (\<^const_name>\<open>case_guard\<close>, _) $ b $ u $ t) = |
450 fun decode_case (Const (\<^const_name>\<open>case_guard\<close>, _) $ b $ u $ t) = |
451 make_case ctxt (if b = \<^term>\<open>True\<close> then Error else Warning) |
451 make_case ctxt (if b = \<^term>\<open>True\<close> then Error else Warning) |
452 Name.context (decode_case u) (decode_cases t) |
452 Name.context (decode_case u) (decode_cases t) |
453 | decode_case (t $ u) = decode_case t $ decode_case u |
453 | decode_case (t $ u) = decode_case t $ decode_case u |
454 | decode_case (Abs (x, T, u)) = |
454 | decode_case (t as Abs _) = |
455 let val (x', u') = Term.dest_abs (x, T, u); |
455 let val (v, t') = Term.dest_abs_global t; |
456 in Term.absfree (x', T) (decode_case u') end |
456 in Term.absfree v (decode_case t') end |
457 | decode_case t = t; |
457 | decode_case t = t; |
458 in |
458 in |
459 map decode_case |
459 map decode_case |
460 end; |
460 end; |
461 |
461 |
585 encode_case (strip_case_full ctxt d) |
585 encode_case (strip_case_full ctxt d) |
586 (strip_case_full ctxt d x, maps (strip_case' ctxt d) clauses) |
586 (strip_case_full ctxt d x, maps (strip_case' ctxt d) clauses) |
587 | NONE => |
587 | NONE => |
588 (case t of |
588 (case t of |
589 t $ u => strip_case_full ctxt d t $ strip_case_full ctxt d u |
589 t $ u => strip_case_full ctxt d t $ strip_case_full ctxt d u |
590 | Abs (x, T, u) => |
590 | Abs _ => |
591 let val (x', u') = Term.dest_abs (x, T, u); |
591 let val (v, t') = Term.dest_abs_global t; |
592 in Term.absfree (x', T) (strip_case_full ctxt d u') end |
592 in Term.absfree v (strip_case_full ctxt d t') end |
593 | _ => t)); |
593 | _ => t)); |
594 |
594 |
595 |
595 |
596 (* term uncheck *) |
596 (* term uncheck *) |
597 |
597 |