src/HOL/Integ/nat_simprocs.ML
changeset 20485 3078fd2eec7b
parent 20044 92cc2f4c7335
child 20713 823967ef47f1
equal deleted inserted replaced
20484:3d3d24186352 20485:3078fd2eec7b
    62       add_nat_number_of, nat_number_of_add_left, 
    62       add_nat_number_of, nat_number_of_add_left, 
    63       diff_nat_number_of, le_number_of_eq_not_less,
    63       diff_nat_number_of, le_number_of_eq_not_less,
    64       mult_nat_number_of, nat_number_of_mult_left, 
    64       mult_nat_number_of, nat_number_of_mult_left, 
    65       less_nat_number_of, 
    65       less_nat_number_of, 
    66       Let_number_of, nat_number_of] @
    66       Let_number_of, nat_number_of] @
    67      bin_arith_simps @ bin_rel_simps;
    67      arith_simps @ rel_simps;
    68 
    68 
    69 fun prep_simproc (name, pats, proc) =
    69 fun prep_simproc (name, pats, proc) =
    70   Simplifier.simproc (Theory.sign_of (the_context ())) name pats proc;
    70   Simplifier.simproc (Theory.sign_of (the_context ())) name pats proc;
    71 
    71 
    72 
    72 
   180   end;
   180   end;
   181 
   181 
   182 
   182 
   183 structure EqCancelNumerals = CancelNumeralsFun
   183 structure EqCancelNumerals = CancelNumeralsFun
   184  (open CancelNumeralsCommon
   184  (open CancelNumeralsCommon
   185   val prove_conv = Bin_Simprocs.prove_conv
   185   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   186   val mk_bal   = HOLogic.mk_eq
   186   val mk_bal   = HOLogic.mk_eq
   187   val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT
   187   val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT
   188   val bal_add1 = nat_eq_add_iff1 RS trans
   188   val bal_add1 = nat_eq_add_iff1 RS trans
   189   val bal_add2 = nat_eq_add_iff2 RS trans
   189   val bal_add2 = nat_eq_add_iff2 RS trans
   190 );
   190 );
   191 
   191 
   192 structure LessCancelNumerals = CancelNumeralsFun
   192 structure LessCancelNumerals = CancelNumeralsFun
   193  (open CancelNumeralsCommon
   193  (open CancelNumeralsCommon
   194   val prove_conv = Bin_Simprocs.prove_conv
   194   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   195   val mk_bal   = HOLogic.mk_binrel "Orderings.less"
   195   val mk_bal   = HOLogic.mk_binrel "Orderings.less"
   196   val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT
   196   val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT
   197   val bal_add1 = nat_less_add_iff1 RS trans
   197   val bal_add1 = nat_less_add_iff1 RS trans
   198   val bal_add2 = nat_less_add_iff2 RS trans
   198   val bal_add2 = nat_less_add_iff2 RS trans
   199 );
   199 );
   200 
   200 
   201 structure LeCancelNumerals = CancelNumeralsFun
   201 structure LeCancelNumerals = CancelNumeralsFun
   202  (open CancelNumeralsCommon
   202  (open CancelNumeralsCommon
   203   val prove_conv = Bin_Simprocs.prove_conv
   203   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   204   val mk_bal   = HOLogic.mk_binrel "Orderings.less_eq"
   204   val mk_bal   = HOLogic.mk_binrel "Orderings.less_eq"
   205   val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT
   205   val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT
   206   val bal_add1 = nat_le_add_iff1 RS trans
   206   val bal_add1 = nat_le_add_iff1 RS trans
   207   val bal_add2 = nat_le_add_iff2 RS trans
   207   val bal_add2 = nat_le_add_iff2 RS trans
   208 );
   208 );
   209 
   209 
   210 structure DiffCancelNumerals = CancelNumeralsFun
   210 structure DiffCancelNumerals = CancelNumeralsFun
   211  (open CancelNumeralsCommon
   211  (open CancelNumeralsCommon
   212   val prove_conv = Bin_Simprocs.prove_conv
   212   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   213   val mk_bal   = HOLogic.mk_binop "HOL.minus"
   213   val mk_bal   = HOLogic.mk_binop "HOL.minus"
   214   val dest_bal = HOLogic.dest_bin "HOL.minus" HOLogic.natT
   214   val dest_bal = HOLogic.dest_bin "HOL.minus" HOLogic.natT
   215   val bal_add1 = nat_diff_add_eq1 RS trans
   215   val bal_add1 = nat_diff_add_eq1 RS trans
   216   val bal_add2 = nat_diff_add_eq2 RS trans
   216   val bal_add2 = nat_diff_add_eq2 RS trans
   217 );
   217 );
   249   val mk_sum            = (fn T:typ => long_mk_sum)  (*to work for 2*x + 3*x *)
   249   val mk_sum            = (fn T:typ => long_mk_sum)  (*to work for 2*x + 3*x *)
   250   val dest_sum          = dest_Sucs_sum false
   250   val dest_sum          = dest_Sucs_sum false
   251   val mk_coeff          = mk_coeff
   251   val mk_coeff          = mk_coeff
   252   val dest_coeff        = dest_coeff
   252   val dest_coeff        = dest_coeff
   253   val left_distrib      = left_add_mult_distrib RS trans
   253   val left_distrib      = left_add_mult_distrib RS trans
   254   val prove_conv        = Bin_Simprocs.prove_conv_nohyps
   254   val prove_conv        = Int_Numeral_Base_Simprocs.prove_conv_nohyps
   255   val trans_tac         = fn _ => trans_tac
   255   val trans_tac         = fn _ => trans_tac
   256 
   256 
   257   val norm_ss1 = num_ss addsimps numeral_syms @ add_0s @ mult_1s @ [Suc_eq_add_numeral_1] @ add_ac
   257   val norm_ss1 = num_ss addsimps numeral_syms @ add_0s @ mult_1s @ [Suc_eq_add_numeral_1] @ add_ac
   258   val norm_ss2 = num_ss addsimps bin_simps @ add_ac @ mult_ac
   258   val norm_ss2 = num_ss addsimps bin_simps @ add_ac @ mult_ac
   259   fun norm_tac ss =
   259   fun norm_tac ss =
   291   val simplify_meta_eq  = simplify_meta_eq
   291   val simplify_meta_eq  = simplify_meta_eq
   292   end
   292   end
   293 
   293 
   294 structure DivCancelNumeralFactor = CancelNumeralFactorFun
   294 structure DivCancelNumeralFactor = CancelNumeralFactorFun
   295  (open CancelNumeralFactorCommon
   295  (open CancelNumeralFactorCommon
   296   val prove_conv = Bin_Simprocs.prove_conv
   296   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   297   val mk_bal   = HOLogic.mk_binop "Divides.op div"
   297   val mk_bal   = HOLogic.mk_binop "Divides.op div"
   298   val dest_bal = HOLogic.dest_bin "Divides.op div" HOLogic.natT
   298   val dest_bal = HOLogic.dest_bin "Divides.op div" HOLogic.natT
   299   val cancel = nat_mult_div_cancel1 RS trans
   299   val cancel = nat_mult_div_cancel1 RS trans
   300   val neg_exchanges = false
   300   val neg_exchanges = false
   301 )
   301 )
   302 
   302 
   303 structure EqCancelNumeralFactor = CancelNumeralFactorFun
   303 structure EqCancelNumeralFactor = CancelNumeralFactorFun
   304  (open CancelNumeralFactorCommon
   304  (open CancelNumeralFactorCommon
   305   val prove_conv = Bin_Simprocs.prove_conv
   305   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   306   val mk_bal   = HOLogic.mk_eq
   306   val mk_bal   = HOLogic.mk_eq
   307   val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT
   307   val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT
   308   val cancel = nat_mult_eq_cancel1 RS trans
   308   val cancel = nat_mult_eq_cancel1 RS trans
   309   val neg_exchanges = false
   309   val neg_exchanges = false
   310 )
   310 )
   311 
   311 
   312 structure LessCancelNumeralFactor = CancelNumeralFactorFun
   312 structure LessCancelNumeralFactor = CancelNumeralFactorFun
   313  (open CancelNumeralFactorCommon
   313  (open CancelNumeralFactorCommon
   314   val prove_conv = Bin_Simprocs.prove_conv
   314   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   315   val mk_bal   = HOLogic.mk_binrel "Orderings.less"
   315   val mk_bal   = HOLogic.mk_binrel "Orderings.less"
   316   val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT
   316   val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT
   317   val cancel = nat_mult_less_cancel1 RS trans
   317   val cancel = nat_mult_less_cancel1 RS trans
   318   val neg_exchanges = true
   318   val neg_exchanges = true
   319 )
   319 )
   320 
   320 
   321 structure LeCancelNumeralFactor = CancelNumeralFactorFun
   321 structure LeCancelNumeralFactor = CancelNumeralFactorFun
   322  (open CancelNumeralFactorCommon
   322  (open CancelNumeralFactorCommon
   323   val prove_conv = Bin_Simprocs.prove_conv
   323   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   324   val mk_bal   = HOLogic.mk_binrel "Orderings.less_eq"
   324   val mk_bal   = HOLogic.mk_binrel "Orderings.less_eq"
   325   val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT
   325   val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT
   326   val cancel = nat_mult_le_cancel1 RS trans
   326   val cancel = nat_mult_le_cancel1 RS trans
   327   val neg_exchanges = true
   327   val neg_exchanges = true
   328 )
   328 )
   377   fun norm_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss))
   377   fun norm_tac ss = ALLGOALS (simp_tac (Simplifier.inherit_context ss norm_ss))
   378   end;
   378   end;
   379 
   379 
   380 structure EqCancelFactor = ExtractCommonTermFun
   380 structure EqCancelFactor = ExtractCommonTermFun
   381  (open CancelFactorCommon
   381  (open CancelFactorCommon
   382   val prove_conv = Bin_Simprocs.prove_conv
   382   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   383   val mk_bal   = HOLogic.mk_eq
   383   val mk_bal   = HOLogic.mk_eq
   384   val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT
   384   val dest_bal = HOLogic.dest_bin "op =" HOLogic.natT
   385   val simplify_meta_eq  = cancel_simplify_meta_eq nat_mult_eq_cancel_disj
   385   val simplify_meta_eq  = cancel_simplify_meta_eq nat_mult_eq_cancel_disj
   386 );
   386 );
   387 
   387 
   388 structure LessCancelFactor = ExtractCommonTermFun
   388 structure LessCancelFactor = ExtractCommonTermFun
   389  (open CancelFactorCommon
   389  (open CancelFactorCommon
   390   val prove_conv = Bin_Simprocs.prove_conv
   390   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   391   val mk_bal   = HOLogic.mk_binrel "Orderings.less"
   391   val mk_bal   = HOLogic.mk_binrel "Orderings.less"
   392   val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT
   392   val dest_bal = HOLogic.dest_bin "Orderings.less" HOLogic.natT
   393   val simplify_meta_eq  = cancel_simplify_meta_eq nat_mult_less_cancel_disj
   393   val simplify_meta_eq  = cancel_simplify_meta_eq nat_mult_less_cancel_disj
   394 );
   394 );
   395 
   395 
   396 structure LeCancelFactor = ExtractCommonTermFun
   396 structure LeCancelFactor = ExtractCommonTermFun
   397  (open CancelFactorCommon
   397  (open CancelFactorCommon
   398   val prove_conv = Bin_Simprocs.prove_conv
   398   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   399   val mk_bal   = HOLogic.mk_binrel "Orderings.less_eq"
   399   val mk_bal   = HOLogic.mk_binrel "Orderings.less_eq"
   400   val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT
   400   val dest_bal = HOLogic.dest_bin "Orderings.less_eq" HOLogic.natT
   401   val simplify_meta_eq  = cancel_simplify_meta_eq nat_mult_le_cancel_disj
   401   val simplify_meta_eq  = cancel_simplify_meta_eq nat_mult_le_cancel_disj
   402 );
   402 );
   403 
   403 
   404 structure DivideCancelFactor = ExtractCommonTermFun
   404 structure DivideCancelFactor = ExtractCommonTermFun
   405  (open CancelFactorCommon
   405  (open CancelFactorCommon
   406   val prove_conv = Bin_Simprocs.prove_conv
   406   val prove_conv = Int_Numeral_Base_Simprocs.prove_conv
   407   val mk_bal   = HOLogic.mk_binop "Divides.op div"
   407   val mk_bal   = HOLogic.mk_binop "Divides.op div"
   408   val dest_bal = HOLogic.dest_bin "Divides.op div" HOLogic.natT
   408   val dest_bal = HOLogic.dest_bin "Divides.op div" HOLogic.natT
   409   val simplify_meta_eq  = cancel_simplify_meta_eq nat_mult_div_cancel_disj
   409   val simplify_meta_eq  = cancel_simplify_meta_eq nat_mult_div_cancel_disj
   410 );
   410 );
   411 
   411