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