src/ZF/Arith.ML
changeset 3016 15763781afb0
parent 2637 e9b203f854ae
child 3207 fe79ad367d77
equal deleted inserted replaced
3015:65778b9d865f 3016:15763781afb0
    49 
    49 
    50 goal Arith.thy "!!k. [| 0<k; k: nat |] ==> EX j: nat. k = succ(j)";
    50 goal Arith.thy "!!k. [| 0<k; k: nat |] ==> EX j: nat. k = succ(j)";
    51 by (etac rev_mp 1);
    51 by (etac rev_mp 1);
    52 by (etac nat_induct 1);
    52 by (etac nat_induct 1);
    53 by (Simp_tac 1);
    53 by (Simp_tac 1);
    54 by (Fast_tac 1);
    54 by (Blast_tac 1);
    55 val lemma = result();
    55 val lemma = result();
    56 
    56 
    57 (* [| 0 < k; k: nat; !!j. [| j: nat; k = succ(j) |] ==> Q |] ==> Q *)
    57 (* [| 0 < k; k: nat; !!j. [| j: nat; k = succ(j) |] ==> Q |] ==> Q *)
    58 bind_thm ("zero_lt_natE", lemma RS bexE);
    58 bind_thm ("zero_lt_natE", lemma RS bexE);
    59 
    59 
   426     "!!k b. [| k: nat; b<2 |] ==> k mod 2 = b | k mod 2 = if(b=1,0,1)";
   426     "!!k b. [| k: nat; b<2 |] ==> k mod 2 = b | k mod 2 = if(b=1,0,1)";
   427 by (subgoal_tac "k mod 2: 2" 1);
   427 by (subgoal_tac "k mod 2: 2" 1);
   428 by (asm_simp_tac (!simpset addsimps [mod_less_divisor RS ltD]) 2);
   428 by (asm_simp_tac (!simpset addsimps [mod_less_divisor RS ltD]) 2);
   429 by (dtac ltD 1);
   429 by (dtac ltD 1);
   430 by (asm_simp_tac (!simpset setloop split_tac [expand_if]) 1);
   430 by (asm_simp_tac (!simpset setloop split_tac [expand_if]) 1);
   431 by (Fast_tac 1);
   431 by (Blast_tac 1);
   432 qed "mod2_cases";
   432 qed "mod2_cases";
   433 
   433 
   434 goal Arith.thy "!!m. m:nat ==> succ(succ(m)) mod 2 = m mod 2";
   434 goal Arith.thy "!!m. m:nat ==> succ(succ(m)) mod 2 = m mod 2";
   435 by (subgoal_tac "m mod 2: 2" 1);
   435 by (subgoal_tac "m mod 2: 2" 1);
   436 by (asm_simp_tac (!simpset addsimps [mod_less_divisor RS ltD]) 2);
   436 by (asm_simp_tac (!simpset addsimps [mod_less_divisor RS ltD]) 2);
   481      "[| !!i j. [| i<j; j:k |] ==> f(i) < f(j); \
   481      "[| !!i j. [| i<j; j:k |] ==> f(i) < f(j); \
   482 \        !!i. i:k ==> Ord(f(i));                \
   482 \        !!i. i:k ==> Ord(f(i));                \
   483 \        i le j;  j:k                           \
   483 \        i le j;  j:k                           \
   484 \     |] ==> f(i) le f(j)";
   484 \     |] ==> f(i) le f(j)";
   485 by (cut_facts_tac prems 1);
   485 by (cut_facts_tac prems 1);
   486 by (fast_tac (le_cs addSIs [lt_mono,ford] addSEs [leE]) 1);
   486 by (blast_tac (le_cs addSIs [lt_mono,ford] addSEs [leE]) 1);
   487 qed "Ord_lt_mono_imp_le_mono";
   487 qed "Ord_lt_mono_imp_le_mono";
   488 
   488 
   489 (*le monotonicity, 1st argument*)
   489 (*le monotonicity, 1st argument*)
   490 goal Arith.thy
   490 goal Arith.thy
   491     "!!i j k. [| i le j; j:nat; k:nat |] ==> i#+k le j#+k";
   491     "!!i j k. [| i le j; j:nat; k:nat |] ==> i#+k le j#+k";
   584 
   584 
   585 (*Thanks to Sten Agerholm*)
   585 (*Thanks to Sten Agerholm*)
   586 goal Arith.thy  (* add_le_elim1 *)
   586 goal Arith.thy  (* add_le_elim1 *)
   587     "!!m n k. [|m#+n le m#+k; m:nat; n:nat; k:nat|] ==> n le k";
   587     "!!m n k. [|m#+n le m#+k; m:nat; n:nat; k:nat|] ==> n le k";
   588 by (etac rev_mp 1);
   588 by (etac rev_mp 1);
   589 by (eres_inst_tac[("n","n")]nat_induct 1);
   589 by (eres_inst_tac [("n","n")] nat_induct 1);
   590 by (Asm_simp_tac 1);
   590 by (Asm_simp_tac 1);
   591 by (Step_tac 1);
   591 by (Step_tac 1);
   592 by (asm_full_simp_tac (!simpset addsimps [not_le_iff_lt,nat_into_Ord]) 1);
   592 by (asm_full_simp_tac (!simpset addsimps [not_le_iff_lt,nat_into_Ord]) 1);
   593 by (etac lt_asym 1);
   593 by (etac lt_asym 1);
   594 by (assume_tac 1);
   594 by (assume_tac 1);
   595 by (Asm_full_simp_tac 1);
   595 by (Asm_full_simp_tac 1);
   596 by (asm_full_simp_tac (!simpset addsimps [le_iff, nat_into_Ord]) 1);
   596 by (asm_full_simp_tac (!simpset addsimps [le_iff, nat_into_Ord]) 1);
   597 by (Fast_tac 1);
   597 by (Blast_tac 1);
   598 qed "add_le_elim1";
   598 qed "add_le_elim1";
   599 
   599