529 by (eresolve_tac [lt_Ord RSN (2, LeastI)] 1 THEN (assume_tac 1)); |
529 by (eresolve_tac [lt_Ord RSN (2, LeastI)] 1 THEN (assume_tac 1)); |
530 val main_induct = result(); |
530 val main_induct = result(); |
531 |
531 |
532 (* ********************************************************************** *) |
532 (* ********************************************************************** *) |
533 (* Lemma to simplify the inductive proof *) |
533 (* Lemma to simplify the inductive proof *) |
534 (* - the disired property is a consequence of the inductive assumption *) |
534 (* - the desired property is a consequence of the inductive assumption *) |
535 (* ********************************************************************** *) |
535 (* ********************************************************************** *) |
536 |
536 |
537 val [prem1, prem2, prem3, prem4] = goal thy |
537 val [prem1, prem2, prem3, prem4] = goal thy |
538 "[| (!!b. b<a ==> F(b) <= S & (ALL x<a. (x<b | (EX Y:F(b). f`x <= Y)) \ |
538 "[| (!!b. b<a ==> F(b) <= S & (ALL x<a. (x<b | (EX Y:F(b). f`x <= Y)) \ |
539 \ --> (EX! Y. Y : F(b) & f`x <= Y))); \ |
539 \ --> (EX! Y. Y : F(b) & f`x <= Y))); \ |
559 by (resolve_tac [ex1I] 1); |
559 by (resolve_tac [ex1I] 1); |
560 by (fast_tac (AC_cs addSIs [OUN_I]) 1); |
560 by (fast_tac (AC_cs addSIs [OUN_I]) 1); |
561 by (REPEAT (eresolve_tac [conjE, OUN_E] 1)); |
561 by (REPEAT (eresolve_tac [conjE, OUN_E] 1)); |
562 by (eresolve_tac [lt_Ord RSN (2, lt_Ord RS Ord_linear_le)] 1 THEN (assume_tac 1)); |
562 by (eresolve_tac [lt_Ord RSN (2, lt_Ord RS Ord_linear_le)] 1 THEN (assume_tac 1)); |
563 by (dresolve_tac [prem4 RS subsetD] 2 THEN (assume_tac 2)); |
563 by (dresolve_tac [prem4 RS subsetD] 2 THEN (assume_tac 2)); |
564 by (fast_tac AC_cs 2); |
564 by (fast_tac FOL_cs 2); |
565 by (forward_tac [prem1] 1); |
565 by (forward_tac [prem1] 1); |
566 by (forward_tac [succ_leE] 1); |
566 by (forward_tac [succ_leE] 1); |
567 by (dresolve_tac [prem4 RS subsetD] 1 THEN (assume_tac 1)); |
567 by (dresolve_tac [prem4 RS subsetD] 1 THEN (assume_tac 1)); |
568 by (eresolve_tac [conjE] 1); |
568 by (eresolve_tac [conjE] 1); |
569 by (dresolve_tac [lt_trans RSN (2, ospec)] 1 THEN (TRYALL assume_tac)); |
569 by (dresolve_tac [lt_trans RSN (2, ospec)] 1 THEN (TRYALL assume_tac)); |
570 by (dresolve_tac [disjI1 RSN (2, mp)] 1 THEN (assume_tac 1)); |
570 by (dresolve_tac [disjI1 RSN (2, mp)] 1 THEN (assume_tac 1)); |
571 by (eresolve_tac [ex1_two_eq] 1); |
571 by (eresolve_tac [ex1_two_eq] 1); |
572 by (REPEAT (fast_tac AC_cs 1)); |
572 by (REPEAT (fast_tac FOL_cs 1)); |
573 val lemma_simp_induct = result(); |
573 val lemma_simp_induct = result(); |
574 |
574 |
575 (* ********************************************************************** *) |
575 (* ********************************************************************** *) |
576 (* The target theorem *) |
576 (* The target theorem *) |
577 (* ********************************************************************** *) |
577 (* ********************************************************************** *) |