src/HOL/arith_data.ML
changeset 4332 d4a15e32c024
parent 4310 cad4f24be60b
child 4336 7fb8a0c4578a
equal deleted inserted replaced
4331:34bb65b037dd 4332:d4a15e32c024
   121 end);
   121 end);
   122 
   122 
   123 
   123 
   124 (* nat diff *)
   124 (* nat diff *)
   125 
   125 
   126 (* FIXME *)
   126 structure DiffCancelSums = CancelSumsFun
       
   127 (struct
       
   128   open Sum;
       
   129   val mk_bal = HOLogic.mk_binop "op -";
       
   130   val dest_bal = HOLogic.dest_bin "op -" HOLogic.natT;
       
   131   val uncancel_tac = gen_uncancel_tac diff_cancel;
       
   132 end);
   127 
   133 
   128 
   134 
   129 
   135 
   130 (** cancel common factor **)
   136 (** cancel common factor **)
   131 
   137 
   187 fun prep_simproc (name, pats, proc) = Simplifier.mk_simproc name pats proc;
   193 fun prep_simproc (name, pats, proc) = Simplifier.mk_simproc name pats proc;
   188 
   194 
   189 val eq_pats = prep_pats ["(l::nat) + m = n", "(l::nat) = m + n", "Suc m = n", "m = Suc n"];
   195 val eq_pats = prep_pats ["(l::nat) + m = n", "(l::nat) = m + n", "Suc m = n", "m = Suc n"];
   190 val less_pats = prep_pats ["(l::nat) + m < n", "(l::nat) < m + n", "Suc m < n", "m < Suc n"];
   196 val less_pats = prep_pats ["(l::nat) + m < n", "(l::nat) < m + n", "Suc m < n", "m < Suc n"];
   191 val le_pats = prep_pats ["(l::nat) + m <= n", "(l::nat) <= m + n", "Suc m <= n", "m <= Suc n"];
   197 val le_pats = prep_pats ["(l::nat) + m <= n", "(l::nat) <= m + n", "Suc m <= n", "m <= Suc n"];
       
   198 val diff_pats = prep_pats ["((l::nat) + m) - n", "(l::nat) - (m + n)", "Suc m - n", "m - Suc n"];
   192 
   199 
   193 val nat_cancel_sums = map prep_simproc
   200 val nat_cancel_sums = map prep_simproc
   194   [("nateq_cancel_sums", eq_pats, EqCancelSums.proc),
   201   [("nateq_cancel_sums", eq_pats, EqCancelSums.proc),
   195    ("natless_cancel_sums", less_pats, LessCancelSums.proc),
   202    ("natless_cancel_sums", less_pats, LessCancelSums.proc),
   196    ("natle_cancel_sums", le_pats, LeCancelSums.proc)];
   203    ("natle_cancel_sums", le_pats, LeCancelSums.proc),
       
   204    ("natdiff_cancel_sums", diff_pats, DiffCancelSums.proc)];
   197 
   205 
   198 val nat_cancel_factor = map prep_simproc
   206 val nat_cancel_factor = map prep_simproc
   199   [("nateq_cancel_factor", eq_pats, EqCancelFactor.proc),
   207   [("nateq_cancel_factor", eq_pats, EqCancelFactor.proc),
   200    ("natless_cancel_factor", less_pats, LessCancelFactor.proc),
   208    ("natless_cancel_factor", less_pats, LessCancelFactor.proc),
   201    ("natle_cancel_factor", le_pats, LeCancelFactor.proc)];
   209    ("natle_cancel_factor", le_pats, LeCancelFactor.proc)];