src/HOL/arith_data.ML
changeset 14356 9e3ce012f843
parent 14331 8dbbb7cf3637
child 14368 2763da611ad9
equal deleted inserted replaced
14355:67e2e96bfe36 14356:9e3ce012f843
   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) =