src/HOL/Euclidean_Division.thy
changeset 66813 351142796345
parent 66810 cc2b490f9dc4
child 66814 a24cde9588bb
equal deleted inserted replaced
66812:7163b780549d 66813:351142796345
   753 structure Cancel_Div_Mod_Nat = Cancel_Div_Mod
   753 structure Cancel_Div_Mod_Nat = Cancel_Div_Mod
   754 (
   754 (
   755   val div_name = @{const_name divide};
   755   val div_name = @{const_name divide};
   756   val mod_name = @{const_name modulo};
   756   val mod_name = @{const_name modulo};
   757   val mk_binop = HOLogic.mk_binop;
   757   val mk_binop = HOLogic.mk_binop;
   758   val mk_plus = HOLogic.mk_binop @{const_name Groups.plus};
       
   759   val dest_plus = HOLogic.dest_bin @{const_name Groups.plus} HOLogic.natT;
   758   val dest_plus = HOLogic.dest_bin @{const_name Groups.plus} HOLogic.natT;
   760   fun mk_sum' [] = HOLogic.zero
   759   val mk_sum = Arith_Data.mk_sum;
   761     | mk_sum' [t] = t
       
   762     | mk_sum' (t :: ts) = mk_plus (t, mk_sum' ts);
       
   763   fun mk_sum _ = mk_sum';
       
   764   fun dest_sum tm =
   760   fun dest_sum tm =
   765     if HOLogic.is_zero tm then []
   761     if HOLogic.is_zero tm then []
   766     else
   762     else
   767       (case try HOLogic.dest_Suc tm of
   763       (case try HOLogic.dest_Suc tm of
   768         SOME t => HOLogic.Suc_zero :: dest_sum t
   764         SOME t => HOLogic.Suc_zero :: dest_sum t