equal
deleted
inserted
replaced
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 |