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