src/Provers/Arith/cancel_sums.ML
changeset 15531 08c8dad8e399
parent 15027 d23887300b96
child 17613 072c21e31b42
equal deleted inserted replaced
15530:6f43714517ee 15531:08c8dad8e399
    58 
    58 
    59 (* the simplification procedure *)
    59 (* the simplification procedure *)
    60 
    60 
    61 fun proc sg _ t =
    61 fun proc sg _ t =
    62   (case try Data.dest_bal t of
    62   (case try Data.dest_bal t of
    63     None => None
    63     NONE => NONE
    64   | Some bal =>
    64   | SOME bal =>
    65       let
    65       let
    66         val (ts, us) = pairself (sort Term.term_ord o Data.dest_sum) bal;
    66         val (ts, us) = pairself (sort Term.term_ord o Data.dest_sum) bal;
    67         val (ts', us', vs) = cancel ts us [];
    67         val (ts', us', vs) = cancel ts us [];
    68       in
    68       in
    69         if null vs then None
    69         if null vs then NONE
    70         else Some
    70         else SOME
    71           (Data.prove_conv (uncancel_sums_tac sg vs) Data.norm_tac sg
    71           (Data.prove_conv (uncancel_sums_tac sg vs) Data.norm_tac sg
    72             (t, Data.mk_bal (Data.mk_sum ts', Data.mk_sum us')))
    72             (t, Data.mk_bal (Data.mk_sum ts', Data.mk_sum us')))
    73       end);
    73       end);
    74 
    74 
    75 
    75