src/ZF/AC/WO6_WO1.thy
author wenzelm
Tue, 14 Feb 2012 21:19:39 +0100
changeset 46471 2289a3869c88
parent 45602 2a858377c3d2
child 46822 95f1e700b712
permissions -rw-r--r--
prefer high-level elim_format;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     1
(*  Title:      ZF/AC/WO6_WO1.thy
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     2
    Author:     Krzysztof Grabczewski
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
     3
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
     4
Proofs needed to state that formulations WO1,...,WO6 are all equivalent.
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
     5
The only hard one is WO6 ==> WO1.
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
     6
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
     7
Every proof (except WO6 ==> WO1 and WO1 ==> WO2) are described as "clear"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
     8
by Rubin & Rubin (page 2). 
40945
b8703f63bfb2 recoded latin1 as utf8;
wenzelm
parents: 32960
diff changeset
     9
They refer reader to a book by Gödel to see the proof WO1 ==> WO2.
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    10
Fortunately order types made this proof also very easy.
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
    11
*)
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
    12
27678
85ea2be46c71 dropped locale (open)
haftmann
parents: 27150
diff changeset
    13
theory WO6_WO1
85ea2be46c71 dropped locale (open)
haftmann
parents: 27150
diff changeset
    14
imports Cardinal_aux
85ea2be46c71 dropped locale (open)
haftmann
parents: 27150
diff changeset
    15
begin
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
    16
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
    17
(* Auxiliary definitions used in proof *)
24893
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    18
definition
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    19
  NN  :: "i => i"  where
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    20
    "NN(y) == {m \<in> nat. \<exists>a. \<exists>f. Ord(a) & domain(f)=a  &  
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    21
                        (\<Union>b<a. f`b) = y & (\<forall>b<a. f`b \<lesssim> m)}"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    22
  
24893
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    23
definition
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    24
  uu  :: "[i, i, i, i] => i"  where
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    25
    "uu(f, beta, gamma, delta) == (f`beta * f`gamma) Int f`delta"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    26
24893
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    27
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    28
(** Definitions for case 1 **)
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    29
definition
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    30
  vv1 :: "[i, i, i] => i"  where
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    31
     "vv1(f,m,b) ==                                                
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    32
           let g = LEAST g. (\<exists>d. Ord(d) & (domain(uu(f,b,g,d)) \<noteq> 0 & 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    33
                                 domain(uu(f,b,g,d)) \<lesssim> m));      
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    34
               d = LEAST d. domain(uu(f,b,g,d)) \<noteq> 0 &                  
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    35
                            domain(uu(f,b,g,d)) \<lesssim> m         
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    36
           in  if f`b \<noteq> 0 then domain(uu(f,b,g,d)) else 0"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    37
24893
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    38
definition
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    39
  ww1 :: "[i, i, i] => i"  where
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    40
     "ww1(f,m,b) == f`b - vv1(f,m,b)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    41
24893
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    42
definition
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    43
  gg1 :: "[i, i, i] => i"  where
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    44
     "gg1(f,a,m) == \<lambda>b \<in> a++a. if b<a then vv1(f,m,b) else ww1(f,m,b--a)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    45
24893
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    46
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    47
(** Definitions for case 2 **)
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    48
definition
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    49
  vv2 :: "[i, i, i, i] => i"  where
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    50
     "vv2(f,b,g,s) ==   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    51
           if f`g \<noteq> 0 then {uu(f, b, g, LEAST d. uu(f,b,g,d) \<noteq> 0)`s} else 0"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    52
24893
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    53
definition
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    54
  ww2 :: "[i, i, i, i] => i"  where
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    55
     "ww2(f,b,g,s) == f`g - vv2(f,b,g,s)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    56
24893
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    57
definition
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 24783
diff changeset
    58
  gg2 :: "[i, i, i, i] => i"  where
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    59
     "gg2(f,a,b,s) ==
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 27678
diff changeset
    60
              \<lambda>g \<in> a++a. if g<a then vv2(f,b,g,s) else ww2(f,b,g--a,s)"
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    61
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    62
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    63
lemma WO2_WO3: "WO2 ==> WO3"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    64
by (unfold WO2_def WO3_def, fast)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    65
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    66
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    67
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    68
lemma WO3_WO1: "WO3 ==> WO1"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    69
apply (unfold eqpoll_def WO1_def WO3_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    70
apply (intro allI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    71
apply (drule_tac x=A in spec) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    72
apply (blast intro: bij_is_inj well_ord_rvimage 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    73
                    well_ord_Memrel [THEN well_ord_subset])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    74
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    75
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    76
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    77
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    78
lemma WO1_WO2: "WO1 ==> WO2"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    79
apply (unfold eqpoll_def WO1_def WO2_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    80
apply (blast intro!: Ord_ordertype ordermap_bij)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    81
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    82
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    83
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    84
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    85
lemma lam_sets: "f \<in> A->B ==> (\<lambda>x \<in> A. {f`x}): A -> {{b}. b \<in> B}"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    86
by (fast intro!: lam_type apply_type)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    87
24783
5a3e336a2e37 avoid internal names;
wenzelm
parents: 16417
diff changeset
    88
lemma surj_imp_eq': "f \<in> surj(A,B) ==> (\<Union>a \<in> A. {f`a}) = B"
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    89
apply (unfold surj_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    90
apply (fast elim!: apply_type)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    91
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    92
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    93
lemma surj_imp_eq: "[| f \<in> surj(A,B); Ord(A) |] ==> (\<Union>a<A. {f`a}) = B"
24783
5a3e336a2e37 avoid internal names;
wenzelm
parents: 16417
diff changeset
    94
by (fast dest!: surj_imp_eq' intro!: ltI elim!: ltE)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    95
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    96
lemma WO1_WO4: "WO1 ==> WO4(1)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    97
apply (unfold WO1_def WO4_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
    98
apply (rule allI)
13339
0f89104dd377 Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents: 13175
diff changeset
    99
apply (erule_tac x = A in allE)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   100
apply (erule exE)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   101
apply (intro exI conjI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   102
apply (erule Ord_ordertype)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   103
apply (erule ordermap_bij [THEN bij_converse_bij, THEN bij_is_fun, THEN lam_sets, THEN domain_of_fun])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   104
apply (simp_all add: singleton_eqpoll_1 eqpoll_imp_lepoll Ord_ordertype
13175
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   105
       ordermap_bij [THEN bij_converse_bij, THEN bij_is_surj, THEN surj_imp_eq]
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   106
       ltD)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   107
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   108
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   109
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   110
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   111
lemma WO4_mono: "[| m\<le>n; WO4(m) |] ==> WO4(n)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   112
apply (unfold WO4_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   113
apply (blast dest!: spec intro: lepoll_trans [OF _ le_imp_lepoll])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   114
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   115
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   116
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   117
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   118
lemma WO4_WO5: "[| m \<in> nat; 1\<le>m; WO4(m) |] ==> WO5"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   119
by (unfold WO4_def WO5_def, blast)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   120
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   121
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   122
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   123
lemma WO5_WO6: "WO5 ==> WO6"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   124
by (unfold WO4_def WO5_def WO6_def, blast)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   125
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   126
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   127
(* ********************************************************************** 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   128
    The proof of "WO6 ==> WO1".  Simplified by L C Paulson.
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   129
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   130
    From the book "Equivalents of the Axiom of Choice" by Rubin & Rubin,
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   131
    pages 2-5
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   132
************************************************************************* *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   133
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   134
lemma lt_oadd_odiff_disj:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   135
      "[| k < i++j;  Ord(i);  Ord(j) |] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   136
       ==> k < i  |  (~ k<i & k = i ++ (k--i) & (k--i)<j)"
13339
0f89104dd377 Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents: 13175
diff changeset
   137
apply (rule_tac i = k and j = i in Ord_linear2)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   138
prefer 4 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   139
   apply (drule odiff_lt_mono2, assumption)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   140
   apply (simp add: oadd_odiff_inverse odiff_oadd_inverse)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   141
apply (auto elim!: lt_Ord)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   142
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   143
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   144
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   145
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   146
(* The most complicated part of the proof - lemma ii - p. 2-4             *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   147
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   148
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   149
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   150
(* some properties of relation uu(beta, gamma, delta) - p. 2              *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   151
(* ********************************************************************** *)
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
   152
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   153
lemma domain_uu_subset: "domain(uu(f,b,g,d)) \<subseteq> f`b"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   154
by (unfold uu_def, blast)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   155
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   156
lemma quant_domain_uu_lepoll_m:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   157
     "\<forall>b<a. f`b \<lesssim> m ==> \<forall>b<a. \<forall>g<a. \<forall>d<a. domain(uu(f,b,g,d)) \<lesssim> m"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   158
by (blast intro: domain_uu_subset [THEN subset_imp_lepoll] lepoll_trans)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   159
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   160
lemma uu_subset1: "uu(f,b,g,d) \<subseteq> f`b * f`g"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   161
by (unfold uu_def, blast)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   162
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   163
lemma uu_subset2: "uu(f,b,g,d) \<subseteq> f`d"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   164
by (unfold uu_def, blast)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   165
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   166
lemma uu_lepoll_m: "[| \<forall>b<a. f`b \<lesssim> m;  d<a |] ==> uu(f,b,g,d) \<lesssim> m"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   167
by (blast intro: uu_subset2 [THEN subset_imp_lepoll] lepoll_trans)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   168
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   169
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   170
(* Two cases for lemma ii                                                 *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   171
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   172
lemma cases: 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   173
     "\<forall>b<a. \<forall>g<a. \<forall>d<a. u(f,b,g,d) \<lesssim> m   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   174
      ==> (\<forall>b<a. f`b \<noteq> 0 -->  
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   175
                  (\<exists>g<a. \<exists>d<a. u(f,b,g,d) \<noteq> 0 & u(f,b,g,d) \<prec> m))  
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   176
        | (\<exists>b<a. f`b \<noteq> 0 & (\<forall>g<a. \<forall>d<a. u(f,b,g,d) \<noteq> 0 -->   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   177
                                        u(f,b,g,d) \<approx> m))"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   178
apply (unfold lesspoll_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   179
apply (blast del: equalityI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   180
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   181
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   182
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   183
(* Lemmas used in both cases                                              *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   184
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   185
lemma UN_oadd: "Ord(a) ==> (\<Union>b<a++a. C(b)) = (\<Union>b<a. C(b) Un C(a++b))"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   186
by (blast intro: ltI lt_oadd1 oadd_lt_mono2 dest!: lt_oadd_disj)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   187
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   188
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   189
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   190
(* Case 1: lemmas                                                        *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   191
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   192
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   193
lemma vv1_subset: "vv1(f,m,b) \<subseteq> f`b"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   194
by (simp add: vv1_def Let_def domain_uu_subset)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   195
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   196
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   197
(* Case 1: Union of images is the whole "y"                              *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   198
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   199
lemma UN_gg1_eq: 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   200
  "[| Ord(a);  m \<in> nat |] ==> (\<Union>b<a++a. gg1(f,a,m)`b) = (\<Union>b<a. f`b)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   201
by (simp add: gg1_def UN_oadd lt_oadd1 oadd_le_self [THEN le_imp_not_lt] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   202
              lt_Ord odiff_oadd_inverse ltD vv1_subset [THEN Diff_partition]
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   203
              ww1_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   204
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   205
lemma domain_gg1: "domain(gg1(f,a,m)) = a++a"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   206
by (simp add: lam_funtype [THEN domain_of_fun] gg1_def)
992
4ef4f7ff2aeb New example of AC Equivalences by Krzysztof Grabczewski
lcp
parents:
diff changeset
   207
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   208
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   209
(* every value of defined function is less than or equipollent to m       *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   210
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   211
lemma nested_LeastI:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   212
     "[| P(a, b);  Ord(a);  Ord(b);   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   213
         Least_a = (LEAST a. \<exists>x. Ord(x) & P(a, x)) |]   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   214
      ==> P(Least_a, LEAST b. P(Least_a, b))"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   215
apply (erule ssubst)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   216
apply (rule_tac Q = "%z. P (z, LEAST b. P (z, b))" in LeastI2)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   217
apply (fast elim!: LeastI)+
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   218
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   219
45602
2a858377c3d2 eliminated obsolete "standard";
wenzelm
parents: 40945
diff changeset
   220
lemmas nested_Least_instance =
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   221
       nested_LeastI [of "%g d. domain(uu(f,b,g,d)) \<noteq> 0 & 
45602
2a858377c3d2 eliminated obsolete "standard";
wenzelm
parents: 40945
diff changeset
   222
                                domain(uu(f,b,g,d)) \<lesssim> m"] for f b m
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
   223
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   224
lemma gg1_lepoll_m: 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   225
     "[| Ord(a);  m \<in> nat;   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   226
         \<forall>b<a. f`b \<noteq>0 -->                                        
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   227
             (\<exists>g<a. \<exists>d<a. domain(uu(f,b,g,d)) \<noteq> 0  &                
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   228
                          domain(uu(f,b,g,d)) \<lesssim> m);             
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   229
         \<forall>b<a. f`b \<lesssim> succ(m);  b<a++a |] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   230
      ==> gg1(f,a,m)`b \<lesssim> m"
13175
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   231
apply (simp add: gg1_def empty_lepollI)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   232
apply (safe dest!: lt_oadd_odiff_disj)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   233
(*Case b<a   \<in> show vv1(f,m,b) \<lesssim> m *)
13175
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   234
 apply (simp add: vv1_def Let_def empty_lepollI)
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   235
 apply (fast intro: nested_Least_instance [THEN conjunct2]
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   236
             elim!: lt_Ord)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   237
(*Case a\<le>b \<in> show ww1(f,m,b--a) \<lesssim> m *)
13175
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   238
apply (simp add: ww1_def empty_lepollI)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   239
apply (case_tac "f` (b--a) = 0", simp add: empty_lepollI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   240
apply (rule Diff_lepoll, blast)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   241
apply (rule vv1_subset)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   242
apply (drule ospec [THEN mp], assumption+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   243
apply (elim oexE conjE)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   244
apply (simp add: vv1_def Let_def lt_Ord nested_Least_instance [THEN conjunct1])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   245
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   246
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   247
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   248
(* Case 2: lemmas                                                        *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   249
(* ********************************************************************** *)
1042
04ef9b8ef1af Defined vv1 using let. Introduced gg1, gg2.
lcp
parents: 1019
diff changeset
   250
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   251
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   252
(* Case 2: vv2_subset                                                    *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   253
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   254
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   255
lemma ex_d_uu_not_empty:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   256
     "[| b<a;  g<a;  f`b\<noteq>0;  f`g\<noteq>0;         
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   257
         y*y \<subseteq> y;  (\<Union>b<a. f`b)=y |] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   258
      ==> \<exists>d<a. uu(f,b,g,d) \<noteq> 0"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   259
by (unfold uu_def, blast) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   260
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   261
lemma uu_not_empty:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   262
     "[| b<a; g<a; f`b\<noteq>0; f`g\<noteq>0;  y*y \<subseteq> y; (\<Union>b<a. f`b)=y |]   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   263
      ==> uu(f,b,g,LEAST d. (uu(f,b,g,d) \<noteq> 0)) \<noteq> 0"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   264
apply (drule ex_d_uu_not_empty, assumption+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   265
apply (fast elim!: LeastI lt_Ord)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   266
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   267
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   268
lemma not_empty_rel_imp_domain: "[| r \<subseteq> A*B; r\<noteq>0 |] ==> domain(r)\<noteq>0"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   269
by blast
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   270
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   271
lemma Least_uu_not_empty_lt_a:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   272
     "[| b<a; g<a; f`b\<noteq>0; f`g\<noteq>0; y*y \<subseteq> y; (\<Union>b<a. f`b)=y |]   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   273
      ==> (LEAST d. uu(f,b,g,d) \<noteq> 0) < a"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   274
apply (erule ex_d_uu_not_empty [THEN oexE], assumption+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   275
apply (blast intro: Least_le [THEN lt_trans1] lt_Ord)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   276
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   277
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   278
lemma subset_Diff_sing: "[| B \<subseteq> A; a\<notin>B |] ==> B \<subseteq> A-{a}"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   279
by blast
1042
04ef9b8ef1af Defined vv1 using let. Introduced gg1, gg2.
lcp
parents: 1019
diff changeset
   280
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   281
(*Could this be proved more directly?*)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   282
lemma supset_lepoll_imp_eq:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   283
     "[| A \<lesssim> m; m \<lesssim> B; B \<subseteq> A; m \<in> nat |] ==> A=B"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   284
apply (erule natE)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   285
apply (fast dest!: lepoll_0_is_0 intro!: equalityI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   286
apply (safe intro!: equalityI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   287
apply (rule ccontr)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   288
apply (rule succ_lepoll_natE)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   289
 apply (erule lepoll_trans)  
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   290
 apply (rule lepoll_trans)  
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   291
  apply (erule subset_Diff_sing [THEN subset_imp_lepoll], assumption)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   292
 apply (rule Diff_sing_lepoll, assumption+) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   293
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   294
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   295
lemma uu_Least_is_fun:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   296
     "[| \<forall>g<a. \<forall>d<a. domain(uu(f, b, g, d))\<noteq>0 -->                
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   297
          domain(uu(f, b, g, d)) \<approx> succ(m);                         
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   298
          \<forall>b<a. f`b \<lesssim> succ(m);  y*y \<subseteq> y;                        
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   299
          (\<Union>b<a. f`b)=y;  b<a;  g<a;  d<a;                             
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   300
          f`b\<noteq>0;  f`g\<noteq>0;  m \<in> nat;  s \<in> f`b |] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   301
      ==> uu(f, b, g, LEAST d. uu(f,b,g,d)\<noteq>0) \<in> f`b -> f`g"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   302
apply (drule_tac x2=g in ospec [THEN ospec, THEN mp])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   303
   apply (rule_tac [3] not_empty_rel_imp_domain [OF uu_subset1 uu_not_empty])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   304
        apply (rule_tac [2] Least_uu_not_empty_lt_a, assumption+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   305
apply (rule rel_is_fun)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   306
    apply (erule eqpoll_sym [THEN eqpoll_imp_lepoll]) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   307
   apply (erule uu_lepoll_m) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   308
   apply (rule Least_uu_not_empty_lt_a, assumption+) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   309
apply (rule uu_subset1)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   310
apply (rule supset_lepoll_imp_eq [OF _ eqpoll_sym [THEN eqpoll_imp_lepoll]])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   311
apply (fast intro!: domain_uu_subset)+
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   312
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   313
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   314
lemma vv2_subset: 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   315
     "[| \<forall>g<a. \<forall>d<a. domain(uu(f, b, g, d))\<noteq>0 -->             
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 27678
diff changeset
   316
                       domain(uu(f, b, g, d)) \<approx> succ(m);
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 27678
diff changeset
   317
         \<forall>b<a. f`b \<lesssim> succ(m); y*y \<subseteq> y;
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 27678
diff changeset
   318
         (\<Union>b<a. f`b)=y;  b<a;  g<a;  m \<in> nat;  s \<in> f`b |] 
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   319
      ==> vv2(f,b,g,s) \<subseteq> f`g"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   320
apply (simp add: vv2_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   321
apply (blast intro: uu_Least_is_fun [THEN apply_type])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   322
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   323
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   324
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   325
(* Case 2: Union of images is the whole "y"                              *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   326
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   327
lemma UN_gg2_eq: 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   328
     "[| \<forall>g<a. \<forall>d<a. domain(uu(f,b,g,d)) \<noteq> 0 -->              
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   329
               domain(uu(f,b,g,d)) \<approx> succ(m);                         
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   330
         \<forall>b<a. f`b \<lesssim> succ(m); y*y \<subseteq> y;                        
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   331
         (\<Union>b<a. f`b)=y;  Ord(a);  m \<in> nat;  s \<in> f`b;  b<a |] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   332
      ==> (\<Union>g<a++a. gg2(f,a,b,s) ` g) = y"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   333
apply (unfold gg2_def)
13175
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   334
apply (drule sym) 
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   335
apply (simp add: ltD UN_oadd  oadd_le_self [THEN le_imp_not_lt] 
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   336
                 lt_Ord odiff_oadd_inverse ww2_def 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   337
                 vv2_subset [THEN Diff_partition])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   338
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   339
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   340
lemma domain_gg2: "domain(gg2(f,a,b,s)) = a++a"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   341
by (simp add: lam_funtype [THEN domain_of_fun] gg2_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   342
1042
04ef9b8ef1af Defined vv1 using let. Introduced gg1, gg2.
lcp
parents: 1019
diff changeset
   343
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   344
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   345
(* every value of defined function is less than or equipollent to m       *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   346
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   347
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   348
lemma vv2_lepoll: "[| m \<in> nat; m\<noteq>0 |] ==> vv2(f,b,g,s) \<lesssim> m"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   349
apply (unfold vv2_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   350
apply (simp add: empty_lepollI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   351
apply (fast dest!: le_imp_subset [THEN subset_imp_lepoll, THEN lepoll_0_is_0] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   352
       intro!: singleton_eqpoll_1 [THEN eqpoll_imp_lepoll, THEN lepoll_trans]
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   353
               not_lt_imp_le [THEN le_imp_subset, THEN subset_imp_lepoll]
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   354
               nat_into_Ord nat_1I)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   355
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   356
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   357
lemma ww2_lepoll: 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   358
    "[| \<forall>b<a. f`b \<lesssim> succ(m);  g<a;  m \<in> nat;  vv2(f,b,g,d) \<subseteq> f`g |]  
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   359
     ==> ww2(f,b,g,d) \<lesssim> m"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   360
apply (unfold ww2_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   361
apply (case_tac "f`g = 0")
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   362
apply (simp add: empty_lepollI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   363
apply (drule ospec, assumption)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   364
apply (rule Diff_lepoll, assumption+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   365
apply (simp add: vv2_def not_emptyI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   366
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   367
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   368
lemma gg2_lepoll_m: 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   369
     "[| \<forall>g<a. \<forall>d<a. domain(uu(f,b,g,d)) \<noteq> 0 -->              
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   370
                      domain(uu(f,b,g,d)) \<approx> succ(m);                         
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   371
         \<forall>b<a. f`b \<lesssim> succ(m);  y*y \<subseteq> y;                     
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   372
         (\<Union>b<a. f`b)=y;  b<a;  s \<in> f`b;  m \<in> nat;  m\<noteq> 0;  g<a++a |] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   373
      ==> gg2(f,a,b,s) ` g \<lesssim> m"
13175
81082cfa5618 new definition of "apply" and new simprule "beta_if"
paulson
parents: 12820
diff changeset
   374
apply (simp add: gg2_def empty_lepollI)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   375
apply (safe elim!: lt_Ord2 dest!: lt_oadd_odiff_disj)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   376
 apply (simp add: vv2_lepoll)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   377
apply (simp add: ww2_lepoll vv2_subset)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   378
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   379
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   380
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   381
(* lemma ii                                                               *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   382
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   383
lemma lemma_ii: "[| succ(m) \<in> NN(y); y*y \<subseteq> y; m \<in> nat; m\<noteq>0 |] ==> m \<in> NN(y)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   384
apply (unfold NN_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   385
apply (elim CollectE exE conjE) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   386
apply (rule quant_domain_uu_lepoll_m [THEN cases, THEN disjE], assumption)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   387
(* case 1 *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   388
apply (simp add: lesspoll_succ_iff)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   389
apply (rule_tac x = "a++a" in exI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   390
apply (fast intro!: Ord_oadd domain_gg1 UN_gg1_eq gg1_lepoll_m)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   391
(* case 2 *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   392
apply (elim oexE conjE)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   393
apply (rule_tac A = "f`?B" in not_emptyE, assumption)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   394
apply (rule CollectI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   395
apply (erule succ_natD)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   396
apply (rule_tac x = "a++a" in exI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   397
apply (rule_tac x = "gg2 (f,a,b,x) " in exI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   398
apply (simp add: Ord_oadd domain_gg2 UN_gg2_eq gg2_lepoll_m)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   399
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   400
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   401
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   402
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   403
(* lemma iv - p. 4:                                                       *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   404
(* For every set x there is a set y such that   x Un (y * y) \<subseteq> y         *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   405
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   406
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   407
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   408
(* The leading \<forall>-quantifier looks odd but makes the proofs shorter 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   409
   (used only in the following two lemmas)                          *)
1042
04ef9b8ef1af Defined vv1 using let. Introduced gg1, gg2.
lcp
parents: 1019
diff changeset
   410
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   411
lemma z_n_subset_z_succ_n:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   412
     "\<forall>n \<in> nat. rec(n, x, %k r. r Un r*r) \<subseteq> rec(succ(n), x, %k r. r Un r*r)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   413
by (fast intro: rec_succ [THEN ssubst])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   414
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   415
lemma le_subsets:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   416
     "[| \<forall>n \<in> nat. f(n)<=f(succ(n)); n\<le>m; n \<in> nat; m \<in> nat |]   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   417
      ==> f(n)<=f(m)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   418
apply (erule_tac P = "n\<le>m" in rev_mp)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   419
apply (rule_tac P = "%z. n\<le>z --> f (n) \<subseteq> f (z) " in nat_induct) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   420
apply (auto simp add: le_iff) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   421
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   422
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   423
lemma le_imp_rec_subset:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   424
     "[| n\<le>m; m \<in> nat |] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   425
      ==> rec(n, x, %k r. r Un r*r) \<subseteq> rec(m, x, %k r. r Un r*r)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   426
apply (rule z_n_subset_z_succ_n [THEN le_subsets])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   427
apply (blast intro: lt_nat_in_nat)+
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   428
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   429
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   430
lemma lemma_iv: "\<exists>y. x Un y*y \<subseteq> y"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   431
apply (rule_tac x = "\<Union>n \<in> nat. rec (n, x, %k r. r Un r*r) " in exI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   432
apply safe
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   433
apply (rule nat_0I [THEN UN_I], simp)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   434
apply (rule_tac a = "succ (n Un na) " in UN_I)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   435
apply (erule Un_nat_type [THEN nat_succI], assumption)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   436
apply (auto intro: le_imp_rec_subset [THEN subsetD] 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   437
            intro!: Un_upper1_le Un_upper2_le Un_nat_type 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   438
            elim!: nat_into_Ord)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   439
done
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
   440
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   441
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   442
(* Rubin & Rubin wrote,                                                   *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   443
(* "It follows from (ii) and mathematical induction that if y*y \<subseteq> y then *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   444
(* y can be well-ordered"                                                 *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   445
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   446
(* In fact we have to prove                                               *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   447
(*      * WO6 ==> NN(y) \<noteq> 0                                              *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   448
(*      * reverse induction which lets us infer that 1 \<in> NN(y)            *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   449
(*      * 1 \<in> NN(y) ==> y can be well-ordered                             *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   450
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   451
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   452
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   453
(*      WO6 ==> NN(y) \<noteq> 0                                                *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   454
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   455
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   456
lemma WO6_imp_NN_not_empty: "WO6 ==> NN(y) \<noteq> 0"
12820
02e2ff3e4d37 lexical tidying
paulson
parents: 12776
diff changeset
   457
by (unfold WO6_def NN_def, clarify, blast)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   458
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   459
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   460
(*      1 \<in> NN(y) ==> y can be well-ordered                               *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   461
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   462
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   463
lemma lemma1:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   464
     "[| (\<Union>b<a. f`b)=y; x \<in> y; \<forall>b<a. f`b \<lesssim> 1; Ord(a) |] ==> \<exists>c<a. f`c = {x}"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   465
by (fast elim!: lepoll_1_is_sing)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   466
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   467
lemma lemma2:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   468
     "[| (\<Union>b<a. f`b)=y; x \<in> y; \<forall>b<a. f`b \<lesssim> 1; Ord(a) |]   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   469
      ==> f` (LEAST i. f`i = {x}) = {x}"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   470
apply (drule lemma1, assumption+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   471
apply (fast elim!: lt_Ord intro: LeastI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   472
done
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
   473
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   474
lemma NN_imp_ex_inj: "1 \<in> NN(y) ==> \<exists>a f. Ord(a) & f \<in> inj(y, a)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   475
apply (unfold NN_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   476
apply (elim CollectE exE conjE)
13339
0f89104dd377 Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents: 13175
diff changeset
   477
apply (rule_tac x = a in exI)
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   478
apply (rule_tac x = "\<lambda>x \<in> y. LEAST i. f`i = {x}" in exI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   479
apply (rule conjI, assumption)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   480
apply (rule_tac d = "%i. THE x. x \<in> f`i" in lam_injective)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   481
apply (drule lemma1, assumption+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   482
apply (fast elim!: Least_le [THEN lt_trans1, THEN ltD] lt_Ord)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   483
apply (rule lemma2 [THEN ssubst], assumption+, blast)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   484
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   485
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   486
lemma y_well_ord: "[| y*y \<subseteq> y; 1 \<in> NN(y) |] ==> \<exists>r. well_ord(y, r)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   487
apply (drule NN_imp_ex_inj)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   488
apply (fast elim!: well_ord_rvimage [OF _ well_ord_Memrel])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   489
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   490
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   491
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   492
(*      reverse induction which lets us infer that 1 \<in> NN(y)              *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   493
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   494
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   495
lemma rev_induct_lemma [rule_format]: 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   496
     "[| n \<in> nat; !!m. [| m \<in> nat; m\<noteq>0; P(succ(m)) |] ==> P(m) |]   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   497
      ==> n\<noteq>0 --> P(n) --> P(1)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   498
by (erule nat_induct, blast+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   499
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   500
lemma rev_induct:
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   501
     "[| n \<in> nat;  P(n);  n\<noteq>0;   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   502
         !!m. [| m \<in> nat; m\<noteq>0; P(succ(m)) |] ==> P(m) |]   
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   503
      ==> P(1)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   504
by (rule rev_induct_lemma, blast+)
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
   505
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   506
lemma NN_into_nat: "n \<in> NN(y) ==> n \<in> nat"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   507
by (simp add: NN_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   508
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   509
lemma lemma3: "[| n \<in> NN(y); y*y \<subseteq> y; n\<noteq>0 |] ==> 1 \<in> NN(y)"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   510
apply (rule rev_induct [OF NN_into_nat], assumption+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   511
apply (rule lemma_ii, assumption+)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   512
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   513
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   514
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   515
(* Main theorem "WO6 ==> WO1"                                             *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   516
(* ********************************************************************** *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   517
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   518
(* another helpful lemma *)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   519
lemma NN_y_0: "0 \<in> NN(y) ==> y=0"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   520
apply (unfold NN_def) 
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   521
apply (fast intro!: equalityI dest!: lepoll_0_is_0 elim: subst)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   522
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   523
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   524
lemma WO6_imp_WO1: "WO6 ==> WO1"
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   525
apply (unfold WO1_def)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   526
apply (rule allI)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   527
apply (case_tac "A=0")
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   528
apply (fast intro!: well_ord_Memrel nat_0I [THEN nat_into_Ord])
46471
2289a3869c88 prefer high-level elim_format;
wenzelm
parents: 45602
diff changeset
   529
apply (rule_tac x = A in lemma_iv [elim_format])
12776
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   530
apply (erule exE)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   531
apply (drule WO6_imp_NN_not_empty)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   532
apply (erule Un_subset_iff [THEN iffD1, THEN conjE])
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   533
apply (erule_tac A = "NN (y) " in not_emptyE)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   534
apply (frule y_well_ord)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   535
 apply (fast intro!: lemma3 dest!: NN_y_0 elim!: not_emptyE)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   536
apply (fast elim: well_ord_subset)
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   537
done
249600a63ba9 Isar version of AC
paulson
parents: 11317
diff changeset
   538
1019
0697024c3cca Received some local definitions from AC_Equiv.thy.
lcp
parents: 992
diff changeset
   539
end