src/Pure/conv.ML
changeset 74525 c960bfcb91db
parent 74518 de4f151c2a34
child 74545 6c123914883a
equal deleted inserted replaced
74524:8ee3d5d3c1bf 74525:c960bfcb91db
    89 
    89 
    90 (* lambda terms *)
    90 (* lambda terms *)
    91 
    91 
    92 fun abs_conv cv ctxt ct =
    92 fun abs_conv cv ctxt ct =
    93   (case Thm.term_of ct of
    93   (case Thm.term_of ct of
    94     Abs (x, _, _) =>
    94     Abs (a, _, _) =>
    95       let
    95       let
    96         val (u, ctxt') = yield_singleton Variable.variant_fixes Name.uu ctxt;
    96         val ((v, ct'), ctxt') = Variable.dest_abs_cterm ct ctxt;
    97         val (v, ct') = Thm.dest_abs_name u ct;
       
    98         val eq = cv (v, ctxt') ct';
    97         val eq = cv (v, ctxt') ct';
    99       in if Thm.is_reflexive eq then all_conv ct else Thm.abstract_rule x v eq end
    98       in if Thm.is_reflexive eq then all_conv ct else Thm.abstract_rule a v eq end
   100   | _ => raise CTERM ("abs_conv", [ct]));
    99   | _ => raise CTERM ("abs_conv", [ct]));
   101 
   100 
   102 fun combination_conv cv1 cv2 ct =
   101 fun combination_conv cv1 cv2 ct =
   103   let val (ct1, ct2) = Thm.dest_comb ct
   102   let val (ct1, ct2) = Thm.dest_comb ct
   104   in Thm.combination (cv1 ct1) (cv2 ct2) end;
   103   in Thm.combination (cv1 ct1) (cv2 ct2) end;