205 if nT T then add_atom all m pi else poly (t, ~ m, pi) |
205 if nT T then add_atom all m pi else poly (t, ~ m, pi) |
206 | poly (Const (@{const_name Groups.zero}, _), _, pi) = |
206 | poly (Const (@{const_name Groups.zero}, _), _, pi) = |
207 pi |
207 pi |
208 | poly (Const (@{const_name Groups.one}, _), m, (p, i)) = |
208 | poly (Const (@{const_name Groups.one}, _), m, (p, i)) = |
209 (p, Rat.add i m) |
209 (p, Rat.add i m) |
210 | poly (all as Const ("Num.numeral_class.numeral", Type(_,[_,_])) (*DYNAMIC BINDING!*) $ t, m, pi as (p, i)) = |
210 | poly (all as Const ("Num.numeral_class.numeral", _) (*DYNAMIC BINDING!*) $ t, m, pi as (p, i)) = |
211 (let val k = HOLogic.dest_numeral t |
211 (let val k = HOLogic.dest_numeral t |
212 in (p, Rat.add i (Rat.mult m (Rat.of_int k))) end |
212 in (p, Rat.add i (Rat.mult m (Rat.of_int k))) end |
213 handle TERM _ => add_atom all m pi) |
213 handle TERM _ => add_atom all m pi) |
214 | poly (Const (@{const_name Suc}, _) $ t, m, (p, i)) = |
214 | poly (Const (@{const_name Suc}, _) $ t, m, (p, i)) = |
215 poly (t, m, (p, Rat.add i m)) |
215 poly (t, m, (p, Rat.add i m)) |