src/HOL/Arith.ML
changeset 5654 8b872d546b9e
parent 5604 cd17004d09e1
child 5758 27a2b36efd95
equal deleted inserted replaced
5653:204083e3f368 5654:8b872d546b9e
   152 qed_spec_mp "less_eq_Suc_add";
   152 qed_spec_mp "less_eq_Suc_add";
   153 
   153 
   154 Goal "n <= ((m + n)::nat)";
   154 Goal "n <= ((m + n)::nat)";
   155 by (induct_tac "m" 1);
   155 by (induct_tac "m" 1);
   156 by (ALLGOALS Simp_tac);
   156 by (ALLGOALS Simp_tac);
   157 by (etac le_trans 1);
       
   158 by (rtac (lessI RS less_imp_le) 1);
       
   159 qed "le_add2";
   157 qed "le_add2";
   160 
   158 
   161 Goal "n <= ((n + m)::nat)";
   159 Goal "n <= ((n + m)::nat)";
   162 by (simp_tac (simpset() addsimps add_ac) 1);
   160 by (simp_tac (simpset() addsimps add_ac) 1);
   163 by (rtac le_add2 1);
   161 by (rtac le_add2 1);
   181 bind_thm ("trans_less_add1", le_add1 RSN (2,less_le_trans));
   179 bind_thm ("trans_less_add1", le_add1 RSN (2,less_le_trans));
   182 
   180 
   183 (*"i < j ==> i < m+j"*)
   181 (*"i < j ==> i < m+j"*)
   184 bind_thm ("trans_less_add2", le_add2 RSN (2,less_le_trans));
   182 bind_thm ("trans_less_add2", le_add2 RSN (2,less_le_trans));
   185 
   183 
   186 Goal "i+j < (k::nat) ==> i<k";
   184 Goal "i+j < (k::nat) --> i<k";
   187 by (etac rev_mp 1);
       
   188 by (induct_tac "j" 1);
   185 by (induct_tac "j" 1);
   189 by (ALLGOALS Asm_simp_tac);
   186 by (ALLGOALS Asm_simp_tac);
   190 by (blast_tac (claset() addDs [Suc_lessD]) 1);
   187 qed_spec_mp "add_lessD1";
   191 qed "add_lessD1";
       
   192 
   188 
   193 Goal "~ (i+j < (i::nat))";
   189 Goal "~ (i+j < (i::nat))";
   194 by (rtac notI 1);
   190 by (rtac notI 1);
   195 by (etac (add_lessD1 RS less_irrefl) 1);
   191 by (etac (add_lessD1 RS less_irrefl) 1);
   196 qed "not_add_less1";
   192 qed "not_add_less1";