281 ) handle TERM _ => atomult(mC,s,t,m)) |
281 ) handle TERM _ => atomult(mC,s,t,m)) |
282 | demult(atom as Const("HOL.divide",_) $ t $ (Const("Numeral.number_of",_)$dent), m) = |
282 | demult(atom as Const("HOL.divide",_) $ t $ (Const("Numeral.number_of",_)$dent), m) = |
283 (let val den = HOLogic.dest_binum dent |
283 (let val den = HOLogic.dest_binum dent |
284 in if den = 0 then raise Zero else demult(t,ratmul(m, ratinv(rat_of_int den))) end |
284 in if den = 0 then raise Zero else demult(t,ratmul(m, ratinv(rat_of_int den))) end |
285 handle TERM _ => (Some atom,m)) |
285 handle TERM _ => (Some atom,m)) |
|
286 | demult(Const("0",_),m) = (None, rat_of_int 0) |
|
287 | demult(Const("1",_),m) = (None, m) |
286 | demult(t as Const("Numeral.number_of",_)$n,m) = |
288 | demult(t as Const("Numeral.number_of",_)$n,m) = |
287 ((None,ratmul(m,rat_of_int(HOLogic.dest_binum n))) |
289 ((None,ratmul(m,rat_of_int(HOLogic.dest_binum n))) |
288 handle TERM _ => (Some t,m)) |
290 handle TERM _ => (Some t,m)) |
289 | demult(Const("uminus",_)$t, m) = demult(t,ratmul(m,rat_of_int(~1))) |
291 | demult(Const("uminus",_)$t, m) = demult(t,ratmul(m,rat_of_int(~1))) |
290 | demult(t as Const f $ x, m) = |
292 | demult(t as Const f $ x, m) = |
310 (case demult inj_consts (t,m) of |
312 (case demult inj_consts (t,m) of |
311 (None,m') => (p,ratadd(i,m)) |
313 (None,m') => (p,ratadd(i,m)) |
312 | (Some u,m') => add_atom(u,m',pi)) |
314 | (Some u,m') => add_atom(u,m',pi)) |
313 | poly(t as Const("HOL.divide",_) $ _ $ _, m, pi as (p,i)) = |
315 | poly(t as Const("HOL.divide",_) $ _ $ _, m, pi as (p,i)) = |
314 (case demult inj_consts (t,m) of |
316 (case demult inj_consts (t,m) of |
315 (None,m') => (p,ratadd(i,m)) |
317 (None,m') => (p,ratadd(i,m')) |
316 | (Some u,m') => add_atom(u,m',pi)) |
318 | (Some u,m') => add_atom(u,m',pi)) |
317 | poly(all as (Const("Numeral.number_of",_)$t,m,(p,i))) = |
319 | poly(all as (Const("Numeral.number_of",_)$t,m,(p,i))) = |
318 ((p,ratadd(i,ratmul(m,rat_of_int(HOLogic.dest_binum t)))) |
320 ((p,ratadd(i,ratmul(m,rat_of_int(HOLogic.dest_binum t)))) |
319 handle TERM _ => add_atom all) |
321 handle TERM _ => add_atom all) |
320 | poly(all as Const f $ x, m, pi) = |
322 | poly(all as Const f $ x, m, pi) = |