src/ZF/Constructible/AC_in_L.thy
author paulson
Thu, 29 Aug 2002 11:15:36 +0200
changeset 13546 f76237c2be75
parent 13543 2b3c7e319d82
child 13615 449a70d88b38
permissions -rw-r--r--
fixed a name clash
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13543
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
     1
(*  Title:      ZF/Constructible/AC_in_L.thy
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
     2
    ID: $Id$
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
     4
    Copyright   2002  University of Cambridge
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
     5
*)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
     6
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
     7
header {* The Axiom of Choice Holds in L! *}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
     8
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
     9
theory AC_in_L = Formula:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    10
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    11
subsection{*Extending a Wellordering over a List -- Lexicographic Power*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    12
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    13
text{*This could be moved into a library.*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    14
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    15
consts
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    16
  rlist   :: "[i,i]=>i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    17
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    18
inductive
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    19
  domains "rlist(A,r)" \<subseteq> "list(A) * list(A)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    20
  intros
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    21
    shorterI:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    22
      "[| length(l') < length(l); l' \<in> list(A); l \<in> list(A) |] 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    23
       ==> <l', l> \<in> rlist(A,r)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    24
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    25
    sameI:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    26
      "[| <l',l> \<in> rlist(A,r); a \<in> A |] 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    27
       ==> <Cons(a,l'), Cons(a,l)> \<in> rlist(A,r)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    28
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    29
    diffI:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    30
      "[| length(l') = length(l); <a',a> \<in> r; 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    31
          l' \<in> list(A); l \<in> list(A); a' \<in> A; a \<in> A |] 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    32
       ==> <Cons(a',l'), Cons(a,l)> \<in> rlist(A,r)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    33
  type_intros list.intros
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    34
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    35
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    36
subsubsection{*Type checking*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    37
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    38
lemmas rlist_type = rlist.dom_subset
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    39
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    40
lemmas field_rlist = rlist_type [THEN field_rel_subset]
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    41
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    42
subsubsection{*Linearity*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    43
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    44
lemma rlist_Nil_Cons [intro]:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    45
    "[|a \<in> A; l \<in> list(A)|] ==> <[], Cons(a,l)> \<in> rlist(A, r)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    46
by (simp add: shorterI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    47
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    48
lemma linear_rlist:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    49
    "linear(A,r) ==> linear(list(A),rlist(A,r))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    50
apply (simp (no_asm_simp) add: linear_def)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    51
apply (rule ballI)  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    52
apply (induct_tac x) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    53
 apply (rule ballI)  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    54
 apply (induct_tac y)  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    55
  apply (simp_all add: shorterI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    56
apply (rule ballI)  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    57
apply (erule_tac a=y in list.cases) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    58
 apply (rename_tac [2] a2 l2) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    59
 apply (rule_tac [2] i = "length(l)" and j = "length(l2)" in Ord_linear_lt)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    60
     apply (simp_all add: shorterI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    61
apply (erule_tac x=a and y=a2 in linearE) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    62
    apply (simp_all add: diffI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    63
apply (blast intro: sameI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    64
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    65
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    66
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    67
subsubsection{*Well-foundedness*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    68
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    69
text{*Nothing preceeds Nil in this ordering.*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    70
inductive_cases rlist_NilE: " <l,[]> \<in> rlist(A,r)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    71
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    72
inductive_cases rlist_ConsE: " <l', Cons(x,l)> \<in> rlist(A,r)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    73
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    74
lemma not_rlist_Nil [simp]: " <l,[]> \<notin> rlist(A,r)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    75
by (blast intro: elim: rlist_NilE)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    76
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    77
lemma rlist_imp_length_le: "<l',l> \<in> rlist(A,r) ==> length(l') \<le> length(l)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    78
apply (erule rlist.induct)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    79
apply (simp_all add: leI)  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    80
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    81
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    82
lemma wf_on_rlist_n:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    83
  "[| n \<in> nat; wf[A](r) |] ==> wf[{l \<in> list(A). length(l) = n}](rlist(A,r))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    84
apply (induct_tac n) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    85
 apply (rule wf_onI2, simp) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    86
apply (rule wf_onI2, clarify) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    87
apply (erule_tac a=y in list.cases, clarify) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    88
 apply (simp (no_asm_use))
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    89
apply clarify 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    90
apply (simp (no_asm_use))
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    91
apply (subgoal_tac "\<forall>l2 \<in> list(A). length(l2) = x --> Cons(a,l2) \<in> B", blast)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    92
apply (erule_tac a=a in wf_on_induct, assumption)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    93
apply (rule ballI)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    94
apply (rule impI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    95
apply (erule_tac a=l2 in wf_on_induct, blast, clarify)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    96
apply (rename_tac a' l2 l') 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    97
apply (drule_tac x="Cons(a',l')" in bspec, typecheck) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    98
apply simp 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
    99
apply (erule mp, clarify) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   100
apply (erule rlist_ConsE, auto)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   101
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   102
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   103
lemma list_eq_UN_length: "list(A) = (\<Union>n\<in>nat. {l \<in> list(A). length(l) = n})"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   104
by (blast intro: length_type)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   105
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   106
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   107
lemma wf_on_rlist: "wf[A](r) ==> wf[list(A)](rlist(A,r))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   108
apply (subst list_eq_UN_length) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   109
apply (rule wf_on_Union) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   110
  apply (rule wf_imp_wf_on [OF wf_Memrel [of nat]])
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   111
 apply (simp add: wf_on_rlist_n)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   112
apply (frule rlist_type [THEN subsetD]) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   113
apply (simp add: length_type)   
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   114
apply (drule rlist_imp_length_le)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   115
apply (erule leE) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   116
apply (simp_all add: lt_def) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   117
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   118
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   119
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   120
lemma wf_rlist: "wf(r) ==> wf(rlist(field(r),r))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   121
apply (simp add: wf_iff_wf_on_field)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   122
apply (rule wf_on_subset_A [OF _ field_rlist])
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   123
apply (blast intro: wf_on_rlist) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   124
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   125
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   126
lemma well_ord_rlist:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   127
     "well_ord(A,r) ==> well_ord(list(A), rlist(A,r))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   128
apply (rule well_ordI)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   129
apply (simp add: well_ord_def wf_on_rlist)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   130
apply (simp add: well_ord_def tot_ord_def linear_rlist)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   131
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   132
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   133
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   134
subsection{*An Injection from Formulas into the Natural Numbers*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   135
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   136
text{*There is a well-known bijection between @{term "nat*nat"} and @{term
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   137
nat} given by the expression f(m,n) = triangle(m+n) + m, where triangle(k)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   138
enumerates the triangular numbers and can be defined by triangle(0)=0,
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   139
triangle(succ(k)) = succ(k + triangle(k)).  Some small amount of effort is
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   140
needed to show that f is a bijection.  We already know (by the theorem @{text
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   141
InfCard_square_eqpoll}) that such a bijection exists, but as we have no direct
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   142
way to refer to it, we must use a locale.*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   143
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   144
text{*Locale for any arbitrary injection between @{term "nat*nat"} 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   145
      and @{term nat}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   146
locale Nat_Times_Nat =
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   147
  fixes fn
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   148
  assumes fn_inj: "fn \<in> inj(nat*nat, nat)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   149
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   150
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   151
consts   enum :: "[i,i]=>i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   152
primrec
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   153
  "enum(f, Member(x,y)) = f ` <0, f ` <x,y>>"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   154
  "enum(f, Equal(x,y)) = f ` <1, f ` <x,y>>"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   155
  "enum(f, Nand(p,q)) = f ` <2, f ` <enum(f,p), enum(f,q)>>"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   156
  "enum(f, Forall(p)) = f ` <succ(2), enum(f,p)>"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   157
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   158
lemma (in Nat_Times_Nat) fn_type [TC,simp]:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   159
    "[|x \<in> nat; y \<in> nat|] ==> fn`<x,y> \<in> nat"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   160
by (blast intro: inj_is_fun [OF fn_inj] apply_funtype) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   161
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   162
lemma (in Nat_Times_Nat) fn_iff:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   163
    "[|x \<in> nat; y \<in> nat; u \<in> nat; v \<in> nat|] 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   164
     ==> (fn`<x,y> = fn`<u,v>) <-> (x=u & y=v)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   165
by (blast dest: inj_apply_equality [OF fn_inj]) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   166
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   167
lemma (in Nat_Times_Nat) enum_type [TC,simp]:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   168
    "p \<in> formula ==> enum(fn,p) \<in> nat"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   169
by (induct_tac p, simp_all) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   170
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   171
lemma (in Nat_Times_Nat) enum_inject [rule_format]:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   172
    "p \<in> formula ==> \<forall>q\<in>formula. enum(fn,p) = enum(fn,q) --> p=q"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   173
apply (induct_tac p, simp_all) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   174
   apply (rule ballI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   175
   apply (erule formula.cases) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   176
   apply (simp_all add: fn_iff) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   177
  apply (rule ballI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   178
  apply (erule formula.cases) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   179
  apply (simp_all add: fn_iff) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   180
 apply (rule ballI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   181
 apply (erule_tac a=qa in formula.cases) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   182
 apply (simp_all add: fn_iff) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   183
 apply blast 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   184
apply (rule ballI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   185
apply (erule_tac a=q in formula.cases) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   186
apply (simp_all add: fn_iff, blast) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   187
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   188
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   189
lemma (in Nat_Times_Nat) inj_formula_nat:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   190
    "(\<lambda>p \<in> formula. enum(fn,p)) \<in> inj(formula, nat)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   191
apply (simp add: inj_def lam_type) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   192
apply (blast intro: enum_inject) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   193
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   194
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   195
lemma (in Nat_Times_Nat) well_ord_formula:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   196
    "well_ord(formula, measure(formula, enum(fn)))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   197
apply (rule well_ord_measure, simp)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   198
apply (blast intro: enum_inject)   
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   199
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   200
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   201
lemmas nat_times_nat_lepoll_nat =
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   202
    InfCard_nat [THEN InfCard_square_eqpoll, THEN eqpoll_imp_lepoll]
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   203
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   204
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   205
text{*Not needed--but interesting?*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   206
theorem formula_lepoll_nat: "formula \<lesssim> nat"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   207
apply (insert nat_times_nat_lepoll_nat)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   208
apply (unfold lepoll_def)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   209
apply (blast intro: exI Nat_Times_Nat.inj_formula_nat Nat_Times_Nat.intro)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   210
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   211
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   212
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   213
subsection{*Limit Construction for Well-Orderings*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   214
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   215
text{*Now we work towards the transfinite definition of wellorderings for
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   216
@{term "Lset(i)"}.  We assume as an inductive hypothesis that there is a family
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   217
of wellorderings for smaller ordinals.*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   218
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   219
text{*This constant denotes the set of elements introduced at level
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   220
@{term "succ(i)"}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   221
constdefs
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   222
  Lset_new :: "i=>i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   223
    "Lset_new(i) == {x \<in> Lset(succ(i)). lrank(x) = i}"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   224
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   225
lemma Lset_new_iff_lrank_eq:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   226
     "Ord(i) ==> x \<in> Lset_new(i) <-> L(x) & lrank(x) = i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   227
by (auto simp add: Lset_new_def Lset_iff_lrank_lt) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   228
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   229
lemma Lset_new_eq:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   230
     "Ord(i) ==> Lset_new(i) = Lset(succ(i)) - Lset(i)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   231
apply (rule equality_iffI)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   232
apply (simp add: Lset_new_iff_lrank_eq Lset_iff_lrank_lt, auto) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   233
apply (blast elim: leE) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   234
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   235
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   236
lemma Limit_Lset_eq2:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   237
    "Limit(i) ==> Lset(i) = (\<Union>j\<in>i. Lset_new(j))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   238
apply (simp add: Limit_Lset_eq) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   239
apply (rule equalityI)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   240
 apply safe
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   241
 apply (subgoal_tac "Ord(y)")
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   242
  prefer 2 apply (blast intro: Ord_in_Ord Limit_is_Ord)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   243
 apply (rotate_tac -1) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   244
 apply (simp_all add: Limit_is_Ord Lset_iff_lrank_lt Lset_new_def 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   245
                      Ord_mem_iff_lt) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   246
 apply (blast intro: lt_trans) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   247
apply (rule_tac x = "succ(lrank(x))" in bexI)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   248
 apply (simp add: Lset_succ_lrank_iff) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   249
apply (blast intro: Limit_has_succ ltD) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   250
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   251
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   252
text{*This constant expresses the wellordering at limit ordinals.*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   253
constdefs
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   254
  rlimit :: "[i,i=>i]=>i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   255
    "rlimit(i,r) == 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   256
       {z: Lset(i) * Lset(i).
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   257
        \<exists>x' x. z = <x',x> &         
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   258
               (lrank(x') < lrank(x) | 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   259
                (lrank(x') = lrank(x) & <x',x> \<in> r(succ(lrank(x)))))}"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   260
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   261
lemma rlimit_eqI:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   262
     "[|Limit(i); \<forall>j<i. r'(j) = r(j)|] ==> rlimit(i,r) = rlimit(i,r')"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   263
apply (simp add: rlimit_def) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   264
apply (rule refl iff_refl Collect_cong ex_cong conj_cong)+
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   265
apply (simp add: Limit_is_Ord Lset_lrank_lt)  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   266
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   267
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   268
lemma wf_on_Lset:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   269
    "wf[Lset(succ(j))](r(succ(j))) ==> wf[Lset_new(j)](rlimit(i,r))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   270
apply (simp add: wf_on_def Lset_new_def) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   271
apply (erule wf_subset) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   272
apply (force simp add: rlimit_def) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   273
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   274
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   275
lemma wf_on_rlimit:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   276
    "[|Limit(i); \<forall>j<i. wf[Lset(j)](r(j)) |] ==> wf[Lset(i)](rlimit(i,r))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   277
apply (simp add: Limit_Lset_eq2)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   278
apply (rule wf_on_Union)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   279
  apply (rule wf_imp_wf_on [OF wf_Memrel [of i]]) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   280
 apply (blast intro: wf_on_Lset Limit_has_succ Limit_is_Ord ltI) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   281
apply (force simp add: rlimit_def Limit_is_Ord Lset_iff_lrank_lt Lset_new_def
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   282
                       Ord_mem_iff_lt)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   283
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   284
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   285
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   286
lemma linear_rlimit:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   287
    "[|Limit(i); \<forall>j<i. linear(Lset(j), r(j)) |]
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   288
     ==> linear(Lset(i), rlimit(i,r))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   289
apply (frule Limit_is_Ord) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   290
apply (simp add: Limit_Lset_eq2)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   291
apply (simp add: linear_def Lset_new_def rlimit_def Ball_def) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   292
apply (simp add: lt_Ord Lset_iff_lrank_lt) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   293
apply (simp add: ltI, clarify) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   294
apply (rename_tac u v) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   295
apply (rule_tac i="lrank(u)" and j="lrank(v)" in Ord_linear_lt) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   296
apply simp_all
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   297
apply (drule_tac x="succ(lrank(u) Un lrank(v))" in ospec) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   298
apply (simp add: ltI)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   299
apply (drule_tac x=u in spec, simp) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   300
apply (drule_tac x=v in spec, simp) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   301
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   302
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   303
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   304
lemma well_ord_rlimit:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   305
    "[|Limit(i); \<forall>j<i. well_ord(Lset(j), r(j)) |]
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   306
     ==> well_ord(Lset(i), rlimit(i,r))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   307
by (blast intro: well_ordI wf_on_rlimit well_ord_is_wf 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   308
                           linear_rlimit well_ord_is_linear) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   309
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   310
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   311
subsection{*Defining the Wellordering on @{term "Lset(succ(i))"}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   312
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   313
text{*We introduce wellorderings for environments, which are lists built over
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   314
@{term "Lset(succ(i))"}.  We combine it with the enumeration of formulas.  The
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   315
order type of the resulting wellordering gives us a map from (environment,
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   316
formula) pairs into the ordinals.  For each member of @{term "DPow(Lset(i))"},
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   317
we take the minimum such ordinal.  This yields a wellordering of
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   318
@{term "DPow(Lset(i))"}, which we then extend to @{term "Lset(succ(i))"}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   319
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   320
constdefs
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   321
  env_form_r :: "[i,i,i]=>i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   322
    --{*wellordering on (environment, formula) pairs*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   323
   "env_form_r(f,r,i) ==
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   324
      rmult(list(Lset(i)), rlist(Lset(i), r),
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   325
	    formula, measure(formula, enum(f)))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   326
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   327
  env_form_map :: "[i,i,i,i]=>i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   328
    --{*map from (environment, formula) pairs to ordinals*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   329
   "env_form_map(f,r,i,z) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   330
      == ordermap(list(Lset(i)) * formula, env_form_r(f,r,i)) ` z"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   331
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   332
  L_new_ord :: "[i,i,i,i,i]=>o"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   333
    --{*predicate that holds if @{term k} is a valid index for @{term X}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   334
   "L_new_ord(f,r,i,X,k) ==  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   335
           \<exists>env \<in> list(Lset(i)). \<exists>p \<in> formula. 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   336
             arity(p) \<le> succ(length(env)) & 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   337
             X = {x\<in>Lset(i). sats(Lset(i), p, Cons(x,env))} &
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   338
             env_form_map(f,r,i,<env,p>) = k"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   339
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   340
  L_new_least :: "[i,i,i,i]=>i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   341
    --{*function yielding the smallest index for @{term X}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   342
   "L_new_least(f,r,i,X) == \<mu>k. L_new_ord(f,r,i,X,k)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   343
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   344
  L_new_r :: "[i,i,i]=>i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   345
    --{*a wellordering on @{term "DPow(Lset(i))"}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   346
   "L_new_r(f,r,i) == measure(Lset_new(i), L_new_least(f,r,i))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   347
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   348
  L_succ_r :: "[i,i,i]=>i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   349
    --{*a wellordering on @{term "Lset(succ(i))"}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   350
   "L_succ_r(f,r,i) == (L_new_r(f,r,i) Un (Lset(i) * Lset_new(i))) Un r"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   351
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   352
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   353
lemma (in Nat_Times_Nat) well_ord_env_form_r:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   354
    "well_ord(Lset(i), r) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   355
     ==> well_ord(list(Lset(i)) * formula, env_form_r(fn,r,i))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   356
by (simp add: env_form_r_def well_ord_rmult well_ord_rlist well_ord_formula) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   357
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   358
lemma (in Nat_Times_Nat) Ord_env_form_map:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   359
    "[|well_ord(Lset(i), r); z \<in> list(Lset(i)) * formula|]
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   360
     ==> Ord(env_form_map(fn,r,i,z))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   361
by (simp add: env_form_map_def Ord_ordermap well_ord_env_form_r) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   362
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   363
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   364
lemma DPow_imp_ex_L_new_ord:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   365
    "X \<in> DPow(Lset(i)) ==> \<exists>k. L_new_ord(fn,r,i,X,k)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   366
apply (simp add: L_new_ord_def) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   367
apply (blast dest!: DPowD) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   368
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   369
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   370
lemma (in Nat_Times_Nat) L_new_ord_imp_Ord:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   371
     "[|L_new_ord(fn,r,i,X,k); well_ord(Lset(i), r)|] ==> Ord(k)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   372
apply (simp add: L_new_ord_def, clarify)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   373
apply (simp add: Ord_env_form_map)  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   374
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   375
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   376
lemma (in Nat_Times_Nat) DPow_imp_L_new_least:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   377
    "[|X \<in> DPow(Lset(i)); well_ord(Lset(i), r)|] 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   378
     ==> L_new_ord(fn, r, i, X, L_new_least(fn,r,i,X))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   379
apply (simp add: L_new_least_def)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   380
apply (blast dest!: DPow_imp_ex_L_new_ord intro: L_new_ord_imp_Ord LeastI)  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   381
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   382
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   383
lemma (in Nat_Times_Nat) env_form_map_inject:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   384
    "[|env_form_map(fn,r,i,u) = env_form_map(fn,r,i,v); well_ord(Lset(i), r);  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   385
       u \<in> list(Lset(i)) * formula;  v \<in> list(Lset(i)) * formula|] 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   386
     ==> u=v"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   387
apply (simp add: env_form_map_def) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   388
apply (rule inj_apply_equality [OF bij_is_inj, OF ordermap_bij, 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   389
                                OF well_ord_env_form_r], assumption+)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   390
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   391
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   392
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   393
lemma (in Nat_Times_Nat) L_new_ord_unique:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   394
    "[|L_new_ord(fn,r,i,X,k); L_new_ord(fn,r,i,Y,k); well_ord(Lset(i), r)|] 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   395
     ==> X=Y"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   396
apply (simp add: L_new_ord_def, clarify)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   397
apply (drule env_form_map_inject, auto) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   398
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   399
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   400
lemma (in Nat_Times_Nat) well_ord_L_new_r:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   401
    "[|Ord(i); well_ord(Lset(i), r)|]
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   402
     ==> well_ord(Lset_new(i), L_new_r(fn,r,i))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   403
apply (simp add: L_new_r_def) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   404
apply (rule well_ord_measure) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   405
 apply (simp add: L_new_least_def Ord_Least)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   406
apply (simp add: Lset_new_eq Lset_succ, clarify) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   407
apply (drule DPow_imp_L_new_least, assumption)+
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   408
apply simp 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   409
apply (blast intro: L_new_ord_unique) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   410
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   411
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   412
lemma L_new_r_subset: "L_new_r(f,r,i) <= Lset_new(i) * Lset_new(i)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   413
by (simp add: L_new_r_def measure_type)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   414
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   415
lemma Lset_Lset_new_disjoint: "Ord(i) ==> Lset(i) \<inter> Lset_new(i) = 0"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   416
by (simp add: Lset_new_eq, blast)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   417
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   418
lemma (in Nat_Times_Nat) linear_L_succ_r:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   419
    "[|Ord(i); well_ord(Lset(i), r)|]
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   420
     ==> linear(Lset(succ(i)), L_succ_r(fn, r, i))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   421
apply (frule well_ord_L_new_r, assumption) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   422
apply (drule well_ord_is_linear)+
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   423
apply (simp add: linear_def L_succ_r_def Lset_new_eq, auto) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   424
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   425
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   426
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   427
lemma (in Nat_Times_Nat) wf_L_new_r:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   428
    "[|Ord(i); well_ord(Lset(i), r)|] ==> wf(L_new_r(fn,r,i))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   429
apply (rule well_ord_L_new_r [THEN well_ord_is_wf, THEN wf_on_imp_wf], 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   430
       assumption+)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   431
apply (rule L_new_r_subset)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   432
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   433
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   434
13546
f76237c2be75 fixed a name clash
paulson
parents: 13543
diff changeset
   435
lemma (in Nat_Times_Nat) well_ord_L_succ_r:
13543
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   436
    "[|Ord(i); well_ord(Lset(i), r); r \<subseteq> Lset(i) * Lset(i)|]
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   437
     ==> well_ord(Lset(succ(i)), L_succ_r(fn,r,i))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   438
apply (rule well_ordI [OF wf_imp_wf_on])
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   439
 prefer 2 apply (blast intro: linear_L_succ_r) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   440
apply (simp add: L_succ_r_def)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   441
apply (rule wf_Un)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   442
  apply (cut_tac L_new_r_subset [of fn r i], simp add: Lset_new_eq, blast)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   443
 apply (rule wf_Un)  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   444
   apply (cut_tac L_new_r_subset [of fn r i], simp add: Lset_new_eq, blast)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   445
  apply (blast intro: wf_L_new_r) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   446
 apply (simp add: wf_times Lset_Lset_new_disjoint)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   447
apply (blast intro: well_ord_is_wf wf_on_imp_wf)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   448
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   449
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   450
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   451
lemma (in Nat_Times_Nat) L_succ_r_type:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   452
    "[|Ord(i); r \<subseteq> Lset(i) * Lset(i)|]
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   453
     ==> L_succ_r(fn,r,i) \<subseteq> Lset(succ(i)) * Lset(succ(i))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   454
apply (simp add: L_succ_r_def L_new_r_def measure_def Lset_new_eq) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   455
apply (blast intro: Lset_mono_mem [OF succI1, THEN subsetD] ) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   456
done				   
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   457
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   458
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   459
subsection{*Transfinite Definition of the Wellordering on @{term "L"}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   460
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   461
constdefs
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   462
 L_r :: "[i, i] => i"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   463
  "L_r(f,i) == 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   464
      transrec(i, \<lambda>x r. 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   465
         if x=0 then 0
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   466
         else if Limit(x) then rlimit(x, \<lambda>y. r`y)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   467
         else L_succ_r(f, r ` Arith.pred(x), Arith.pred(x)))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   468
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   469
subsubsection{*The Corresponding Recursion Equations*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   470
lemma [simp]: "L_r(f,0) = 0"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   471
by (simp add: def_transrec [OF L_r_def])
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   472
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   473
lemma [simp]: "Ord(i) ==> L_r(f, succ(i)) = L_succ_r(f, L_r(f,i), i)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   474
by (simp add: def_transrec [OF L_r_def])
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   475
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   476
text{*Needed to handle the limit case*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   477
lemma L_r_eq:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   478
     "Ord(i) ==> 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   479
      L_r(f, i) =
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   480
      (if i = 0 then 0
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   481
       else if Limit(i) then rlimit(i, op `(Lambda(i, L_r(f))))
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   482
       else L_succ_r (f, Lambda(i, L_r(f)) ` Arith.pred(i), Arith.pred(i)))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   483
apply (induct i rule: trans_induct3_rule)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   484
apply (simp_all add: def_transrec [OF L_r_def])
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   485
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   486
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   487
text{*I don't know why the limit case is so complicated.*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   488
lemma [simp]: "Limit(i) ==> L_r(f,i) = rlimit(i, L_r(f))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   489
apply (simp add: Limit_nonzero def_transrec [OF L_r_def])
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   490
apply (rule rlimit_eqI, assumption)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   491
apply (rule oallI)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   492
apply (frule lt_Ord) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   493
apply (simp only: beta ltD L_r_eq [symmetric])  
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   494
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   495
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   496
lemma (in Nat_Times_Nat) L_r_type:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   497
    "Ord(i) ==> L_r(fn,i) \<subseteq> Lset(i) * Lset(i)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   498
apply (induct i rule: trans_induct3_rule)
13546
f76237c2be75 fixed a name clash
paulson
parents: 13543
diff changeset
   499
  apply (simp_all add: L_succ_r_type well_ord_L_succ_r rlimit_def, blast) 
13543
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   500
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   501
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   502
lemma (in Nat_Times_Nat) well_ord_L_r:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   503
    "Ord(i) ==> well_ord(Lset(i), L_r(fn,i))"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   504
apply (induct i rule: trans_induct3_rule)
13546
f76237c2be75 fixed a name clash
paulson
parents: 13543
diff changeset
   505
apply (simp_all add: well_ord0 L_r_type well_ord_L_succ_r well_ord_rlimit ltD)
13543
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   506
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   507
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   508
lemma well_ord_L_r:
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   509
    "Ord(i) ==> \<exists>r. well_ord(Lset(i), r)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   510
apply (insert nat_times_nat_lepoll_nat)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   511
apply (unfold lepoll_def)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   512
apply (blast intro: exI Nat_Times_Nat.well_ord_L_r Nat_Times_Nat.intro)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   513
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   514
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   515
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   516
text{*Locale for proving results under the assumption @{text "V=L"}*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   517
locale V_equals_L =
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   518
  assumes VL: "L(x)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   519
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   520
text{*The Axiom of Choice holds in @{term L}!  Or, to be precise, the
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   521
Wellordering Theorem.*}
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   522
theorem (in V_equals_L) AC: "\<exists>r. well_ord(x,r)"
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   523
apply (insert Transset_Lset VL [of x]) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   524
apply (simp add: Transset_def L_def)
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   525
apply (blast dest!: well_ord_L_r intro: well_ord_subset) 
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   526
done
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   527
2b3c7e319d82 completion of the consistency proof for AC
paulson
parents:
diff changeset
   528
end