src/ZF/Epsilon.thy
author paulson
Thu May 23 17:05:21 2002 +0200 (2002-05-23)
changeset 13175 81082cfa5618
parent 13164 dfc399c684e4
child 13185 da61bfa0a391
permissions -rw-r--r--
new definition of "apply" and new simprule "beta_if"
clasohm@1478
     1
(*  Title:      ZF/epsilon.thy
clasohm@0
     2
    ID:         $Id$
clasohm@1478
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
clasohm@0
     4
    Copyright   1993  University of Cambridge
clasohm@0
     5
clasohm@0
     6
Epsilon induction and recursion
clasohm@0
     7
*)
clasohm@0
     8
paulson@13164
     9
theory Epsilon = Nat + mono:
paulson@13164
    10
paulson@2469
    11
constdefs
paulson@13164
    12
  eclose    :: "i=>i"
paulson@2469
    13
    "eclose(A) == UN n:nat. nat_rec(n, A, %m r. Union(r))"
clasohm@0
    14
paulson@13164
    15
  transrec  :: "[i, [i,i]=>i] =>i"
paulson@2469
    16
    "transrec(a,H) == wfrec(Memrel(eclose({a})), a, H)"
paulson@2469
    17
 
paulson@13164
    18
  rank      :: "i=>i"
paulson@2469
    19
    "rank(a) == transrec(a, %x f. UN y:x. succ(f`y))"
paulson@2469
    20
paulson@13164
    21
  transrec2 :: "[i, i, [i,i]=>i] =>i"
paulson@2469
    22
    "transrec2(k, a, b) ==                     
paulson@2469
    23
       transrec(k, 
paulson@2469
    24
                %i r. if(i=0, a, 
paulson@2469
    25
                        if(EX j. i=succ(j),        
paulson@2469
    26
                           b(THE j. i=succ(j), r`(THE j. i=succ(j))),   
paulson@2469
    27
                           UN j<i. r`j)))"
paulson@2469
    28
paulson@13164
    29
  recursor  :: "[i, [i,i]=>i, i]=>i"
paulson@13164
    30
    "recursor(a,b,k) ==  transrec(k, %n f. nat_case(a, %m. b(m, f`m), n))"
paulson@13164
    31
paulson@13164
    32
  rec  :: "[i, i, [i,i]=>i]=>i"
paulson@13164
    33
    "rec(k,a,b) == recursor(a,b,k)"
paulson@13164
    34
paulson@13164
    35
paulson@13164
    36
(*** Basic closure properties ***)
paulson@13164
    37
paulson@13164
    38
lemma arg_subset_eclose: "A <= eclose(A)"
paulson@13164
    39
apply (unfold eclose_def)
paulson@13164
    40
apply (rule nat_rec_0 [THEN equalityD2, THEN subset_trans])
paulson@13164
    41
apply (rule nat_0I [THEN UN_upper])
paulson@13164
    42
done
paulson@13164
    43
paulson@13164
    44
lemmas arg_into_eclose = arg_subset_eclose [THEN subsetD, standard]
paulson@13164
    45
paulson@13164
    46
lemma Transset_eclose: "Transset(eclose(A))"
paulson@13164
    47
apply (unfold eclose_def Transset_def)
paulson@13164
    48
apply (rule subsetI [THEN ballI])
paulson@13164
    49
apply (erule UN_E)
paulson@13164
    50
apply (rule nat_succI [THEN UN_I], assumption)
paulson@13164
    51
apply (erule nat_rec_succ [THEN ssubst])
paulson@13164
    52
apply (erule UnionI, assumption)
paulson@13164
    53
done
paulson@13164
    54
paulson@13164
    55
(* x : eclose(A) ==> x <= eclose(A) *)
paulson@13164
    56
lemmas eclose_subset =  
paulson@13164
    57
       Transset_eclose [unfolded Transset_def, THEN bspec, standard]
paulson@13164
    58
paulson@13164
    59
(* [| A : eclose(B); c : A |] ==> c : eclose(B) *)
paulson@13164
    60
lemmas ecloseD = eclose_subset [THEN subsetD, standard]
paulson@13164
    61
paulson@13164
    62
lemmas arg_in_eclose_sing = arg_subset_eclose [THEN singleton_subsetD]
paulson@13164
    63
lemmas arg_into_eclose_sing = arg_in_eclose_sing [THEN ecloseD, standard]
paulson@13164
    64
paulson@13164
    65
(* This is epsilon-induction for eclose(A); see also eclose_induct_down...
paulson@13164
    66
   [| a: eclose(A);  !!x. [| x: eclose(A); ALL y:x. P(y) |] ==> P(x) 
paulson@13164
    67
   |] ==> P(a) 
paulson@13164
    68
*)
paulson@13164
    69
lemmas eclose_induct = Transset_induct [OF _ Transset_eclose]
paulson@13164
    70
paulson@13164
    71
(*Epsilon induction*)
paulson@13164
    72
lemma eps_induct:
paulson@13164
    73
    "[| !!x. ALL y:x. P(y) ==> P(x) |]  ==>  P(a)"
paulson@13164
    74
by (rule arg_in_eclose_sing [THEN eclose_induct], blast) 
paulson@13164
    75
paulson@13164
    76
paulson@13164
    77
(*** Leastness of eclose ***)
paulson@13164
    78
paulson@13164
    79
(** eclose(A) is the least transitive set including A as a subset. **)
paulson@13164
    80
paulson@13164
    81
lemma eclose_least_lemma: 
paulson@13164
    82
    "[| Transset(X);  A<=X;  n: nat |] ==> nat_rec(n, A, %m r. Union(r)) <= X"
paulson@13164
    83
apply (unfold Transset_def)
paulson@13164
    84
apply (erule nat_induct) 
paulson@13164
    85
apply (simp add: nat_rec_0)
paulson@13164
    86
apply (simp add: nat_rec_succ, blast)
paulson@13164
    87
done
paulson@13164
    88
paulson@13164
    89
lemma eclose_least: 
paulson@13164
    90
     "[| Transset(X);  A<=X |] ==> eclose(A) <= X"
paulson@13164
    91
apply (unfold eclose_def)
paulson@13164
    92
apply (rule eclose_least_lemma [THEN UN_least], assumption+)
paulson@13164
    93
done
paulson@13164
    94
paulson@13164
    95
(*COMPLETELY DIFFERENT induction principle from eclose_induct!!*)
paulson@13164
    96
lemma eclose_induct_down: 
paulson@13164
    97
    "[| a: eclose(b);                                            
paulson@13164
    98
        !!y.   [| y: b |] ==> P(y);                              
paulson@13164
    99
        !!y z. [| y: eclose(b);  P(y);  z: y |] ==> P(z)         
paulson@13164
   100
     |] ==> P(a)"
paulson@13164
   101
apply (rule eclose_least [THEN subsetD, THEN CollectD2, of "eclose(b)"])
paulson@13164
   102
  prefer 3 apply assumption
paulson@13164
   103
 apply (unfold Transset_def) 
paulson@13164
   104
 apply (blast intro: ecloseD)
paulson@13164
   105
apply (blast intro: arg_subset_eclose [THEN subsetD])
paulson@13164
   106
done
paulson@13164
   107
paulson@13164
   108
lemma Transset_eclose_eq_arg: "Transset(X) ==> eclose(X) = X"
paulson@13164
   109
apply (erule equalityI [OF eclose_least arg_subset_eclose])
paulson@13164
   110
apply (rule subset_refl)
paulson@13164
   111
done
paulson@13164
   112
paulson@13164
   113
paulson@13164
   114
(*** Epsilon recursion ***)
paulson@13164
   115
paulson@13164
   116
(*Unused...*)
paulson@13164
   117
lemma mem_eclose_trans: "[| A: eclose(B);  B: eclose(C) |] ==> A: eclose(C)"
paulson@13164
   118
by (rule eclose_least [OF Transset_eclose eclose_subset, THEN subsetD], 
paulson@13164
   119
    assumption+)
paulson@13164
   120
paulson@13164
   121
(*Variant of the previous lemma in a useable form for the sequel*)
paulson@13164
   122
lemma mem_eclose_sing_trans:
paulson@13164
   123
     "[| A: eclose({B});  B: eclose({C}) |] ==> A: eclose({C})"
paulson@13164
   124
by (rule eclose_least [OF Transset_eclose singleton_subsetI, THEN subsetD], 
paulson@13164
   125
    assumption+)
paulson@13164
   126
paulson@13164
   127
lemma under_Memrel: "[| Transset(i);  j:i |] ==> Memrel(i)-``{j} = j"
paulson@13164
   128
by (unfold Transset_def, blast)
paulson@13164
   129
paulson@13164
   130
(* j : eclose(A) ==> Memrel(eclose(A)) -`` j = j *)
paulson@13164
   131
lemmas under_Memrel_eclose = Transset_eclose [THEN under_Memrel, standard]
paulson@13164
   132
paulson@13164
   133
lemmas wfrec_ssubst = wf_Memrel [THEN wfrec, THEN ssubst]
paulson@13164
   134
paulson@13164
   135
lemma wfrec_eclose_eq:
paulson@13164
   136
    "[| k:eclose({j});  j:eclose({i}) |] ==>  
paulson@13164
   137
     wfrec(Memrel(eclose({i})), k, H) = wfrec(Memrel(eclose({j})), k, H)"
paulson@13164
   138
apply (erule eclose_induct)
paulson@13164
   139
apply (rule wfrec_ssubst)
paulson@13164
   140
apply (rule wfrec_ssubst)
paulson@13164
   141
apply (simp add: under_Memrel_eclose mem_eclose_sing_trans [of _ j i])
paulson@13164
   142
done
paulson@13164
   143
paulson@13164
   144
lemma wfrec_eclose_eq2: 
paulson@13164
   145
    "k: i ==> wfrec(Memrel(eclose({i})),k,H) = wfrec(Memrel(eclose({k})),k,H)"
paulson@13164
   146
apply (rule arg_in_eclose_sing [THEN wfrec_eclose_eq])
paulson@13164
   147
apply (erule arg_into_eclose_sing)
paulson@13164
   148
done
paulson@13164
   149
paulson@13164
   150
lemma transrec: "transrec(a,H) = H(a, lam x:a. transrec(x,H))"
paulson@13164
   151
apply (unfold transrec_def)
paulson@13164
   152
apply (rule wfrec_ssubst)
paulson@13164
   153
apply (simp add: wfrec_eclose_eq2 arg_in_eclose_sing under_Memrel_eclose)
paulson@13164
   154
done
paulson@13164
   155
paulson@13164
   156
(*Avoids explosions in proofs; resolve it with a meta-level definition.*)
paulson@13164
   157
lemma def_transrec:
paulson@13164
   158
    "[| !!x. f(x)==transrec(x,H) |] ==> f(a) = H(a, lam x:a. f(x))"
paulson@13164
   159
apply simp
paulson@13164
   160
apply (rule transrec)
paulson@13164
   161
done
paulson@13164
   162
paulson@13164
   163
lemma transrec_type:
paulson@13164
   164
    "[| !!x u. [| x:eclose({a});  u: Pi(x,B) |] ==> H(x,u) : B(x) |]
paulson@13164
   165
     ==> transrec(a,H) : B(a)"
paulson@13164
   166
apply (rule_tac i = "a" in arg_in_eclose_sing [THEN eclose_induct])
paulson@13164
   167
apply (subst transrec)
paulson@13164
   168
apply (simp add: lam_type) 
paulson@13164
   169
done
paulson@13164
   170
paulson@13164
   171
lemma eclose_sing_Ord: "Ord(i) ==> eclose({i}) <= succ(i)"
paulson@13164
   172
apply (erule Ord_is_Transset [THEN Transset_succ, THEN eclose_least])
paulson@13164
   173
apply (rule succI1 [THEN singleton_subsetI])
paulson@13164
   174
done
paulson@13164
   175
paulson@13164
   176
lemma Ord_transrec_type:
paulson@13164
   177
  assumes jini: "j: i"
paulson@13164
   178
      and ordi: "Ord(i)"
paulson@13164
   179
      and minor: " !!x u. [| x: i;  u: Pi(x,B) |] ==> H(x,u) : B(x)"
paulson@13164
   180
  shows "transrec(j,H) : B(j)"
paulson@13164
   181
apply (rule transrec_type)
paulson@13164
   182
apply (insert jini ordi)
paulson@13164
   183
apply (blast intro!: minor
paulson@13164
   184
             intro: Ord_trans 
paulson@13164
   185
             dest: Ord_in_Ord [THEN eclose_sing_Ord, THEN subsetD])
paulson@13164
   186
done
paulson@13164
   187
paulson@13164
   188
(*** Rank ***)
paulson@13164
   189
paulson@13164
   190
(*NOT SUITABLE FOR REWRITING -- RECURSIVE!*)
paulson@13164
   191
lemma rank: "rank(a) = (UN y:a. succ(rank(y)))"
paulson@13164
   192
by (subst rank_def [THEN def_transrec], simp)
paulson@13164
   193
paulson@13164
   194
lemma Ord_rank [simp]: "Ord(rank(a))"
paulson@13164
   195
apply (rule_tac a="a" in eps_induct) 
paulson@13164
   196
apply (subst rank)
paulson@13164
   197
apply (rule Ord_succ [THEN Ord_UN])
paulson@13164
   198
apply (erule bspec, assumption)
paulson@13164
   199
done
paulson@13164
   200
paulson@13164
   201
lemma rank_of_Ord: "Ord(i) ==> rank(i) = i"
paulson@13164
   202
apply (erule trans_induct)
paulson@13164
   203
apply (subst rank)
paulson@13164
   204
apply (simp add: Ord_equality)
paulson@13164
   205
done
paulson@13164
   206
paulson@13164
   207
lemma rank_lt: "a:b ==> rank(a) < rank(b)"
paulson@13164
   208
apply (rule_tac a1 = "b" in rank [THEN ssubst])
paulson@13164
   209
apply (erule UN_I [THEN ltI])
paulson@13164
   210
apply (rule_tac [2] Ord_UN, auto)
paulson@13164
   211
done
paulson@13164
   212
paulson@13164
   213
lemma eclose_rank_lt: "a: eclose(b) ==> rank(a) < rank(b)"
paulson@13164
   214
apply (erule eclose_induct_down)
paulson@13164
   215
apply (erule rank_lt)
paulson@13164
   216
apply (erule rank_lt [THEN lt_trans], assumption)
paulson@13164
   217
done
paulson@6070
   218
paulson@13164
   219
lemma rank_mono: "a<=b ==> rank(a) le rank(b)"
paulson@13164
   220
apply (rule subset_imp_le)
paulson@13164
   221
apply (subst rank)
paulson@13164
   222
apply (subst rank, auto)
paulson@13164
   223
done
paulson@13164
   224
paulson@13164
   225
lemma rank_Pow: "rank(Pow(a)) = succ(rank(a))"
paulson@13164
   226
apply (rule rank [THEN trans])
paulson@13164
   227
apply (rule le_anti_sym)
paulson@13164
   228
apply (rule_tac [2] UN_upper_le)
paulson@13164
   229
apply (rule UN_least_le)
paulson@13164
   230
apply (auto intro: rank_mono simp add: Ord_UN)
paulson@13164
   231
done
paulson@13164
   232
paulson@13164
   233
lemma rank_0 [simp]: "rank(0) = 0"
paulson@13164
   234
by (rule rank [THEN trans], blast)
paulson@13164
   235
paulson@13164
   236
lemma rank_succ [simp]: "rank(succ(x)) = succ(rank(x))"
paulson@13164
   237
apply (rule rank [THEN trans])
paulson@13164
   238
apply (rule equalityI [OF UN_least succI1 [THEN UN_upper]])
paulson@13164
   239
apply (erule succE, blast)
paulson@13164
   240
apply (erule rank_lt [THEN leI, THEN succ_leI, THEN le_imp_subset])
paulson@13164
   241
done
paulson@13164
   242
paulson@13164
   243
lemma rank_Union: "rank(Union(A)) = (UN x:A. rank(x))"
paulson@13164
   244
apply (rule equalityI)
paulson@13164
   245
apply (rule_tac [2] rank_mono [THEN le_imp_subset, THEN UN_least])
paulson@13164
   246
apply (erule_tac [2] Union_upper)
paulson@13164
   247
apply (subst rank)
paulson@13164
   248
apply (rule UN_least)
paulson@13164
   249
apply (erule UnionE)
paulson@13164
   250
apply (rule subset_trans)
paulson@13164
   251
apply (erule_tac [2] RepFunI [THEN Union_upper])
paulson@13164
   252
apply (erule rank_lt [THEN succ_leI, THEN le_imp_subset])
paulson@13164
   253
done
paulson@13164
   254
paulson@13164
   255
lemma rank_eclose: "rank(eclose(a)) = rank(a)"
paulson@13164
   256
apply (rule le_anti_sym)
paulson@13164
   257
apply (rule_tac [2] arg_subset_eclose [THEN rank_mono])
paulson@13164
   258
apply (rule_tac a1 = "eclose (a) " in rank [THEN ssubst])
paulson@13164
   259
apply (rule Ord_rank [THEN UN_least_le])
paulson@13164
   260
apply (erule eclose_rank_lt [THEN succ_leI])
paulson@13164
   261
done
paulson@13164
   262
paulson@13164
   263
lemma rank_pair1: "rank(a) < rank(<a,b>)"
paulson@13164
   264
apply (unfold Pair_def)
paulson@13164
   265
apply (rule consI1 [THEN rank_lt, THEN lt_trans])
paulson@13164
   266
apply (rule consI1 [THEN consI2, THEN rank_lt])
paulson@13164
   267
done
paulson@13164
   268
paulson@13164
   269
lemma rank_pair2: "rank(b) < rank(<a,b>)"
paulson@13164
   270
apply (unfold Pair_def)
paulson@13164
   271
apply (rule consI1 [THEN consI2, THEN rank_lt, THEN lt_trans])
paulson@13164
   272
apply (rule consI1 [THEN consI2, THEN rank_lt])
paulson@13164
   273
done
paulson@13164
   274
paulson@13164
   275
(*Not clear how to remove the P(a) condition, since the "then" part
paulson@13164
   276
  must refer to "a"*)
paulson@13164
   277
lemma the_equality_if:
paulson@13164
   278
     "P(a) ==> (THE x. P(x)) = (if (EX!x. P(x)) then a else 0)"
paulson@13164
   279
by (simp add: the_0 the_equality2)
paulson@13164
   280
paulson@13175
   281
(*The first premise not only fixs i but ensures f~=0.
paulson@13175
   282
  The second premise is now essential.  Consider otherwise the relation 
paulson@13175
   283
  r = {<0,0>,<0,1>,<0,2>,...}.  Then f`0 = Union(f``{0}) = Union(nat) = nat,
paulson@13175
   284
  whose rank equals that of r.*)
paulson@13175
   285
lemma rank_apply: "[|i : domain(f); function(f)|] ==> rank(f`i) < rank(f)"
paulson@13175
   286
apply (clarify );  
paulson@13175
   287
apply (simp add: function_apply_equality); 
paulson@13175
   288
apply (blast intro: lt_trans rank_lt rank_pair2)
paulson@13164
   289
done
paulson@13164
   290
paulson@13164
   291
paulson@13164
   292
(*** Corollaries of leastness ***)
paulson@13164
   293
paulson@13164
   294
lemma mem_eclose_subset: "A:B ==> eclose(A)<=eclose(B)"
paulson@13164
   295
apply (rule Transset_eclose [THEN eclose_least])
paulson@13164
   296
apply (erule arg_into_eclose [THEN eclose_subset])
paulson@13164
   297
done
paulson@13164
   298
paulson@13164
   299
lemma eclose_mono: "A<=B ==> eclose(A) <= eclose(B)"
paulson@13164
   300
apply (rule Transset_eclose [THEN eclose_least])
paulson@13164
   301
apply (erule subset_trans)
paulson@13164
   302
apply (rule arg_subset_eclose)
paulson@13164
   303
done
paulson@13164
   304
paulson@13164
   305
(** Idempotence of eclose **)
paulson@13164
   306
paulson@13164
   307
lemma eclose_idem: "eclose(eclose(A)) = eclose(A)"
paulson@13164
   308
apply (rule equalityI)
paulson@13164
   309
apply (rule eclose_least [OF Transset_eclose subset_refl])
paulson@13164
   310
apply (rule arg_subset_eclose)
paulson@13164
   311
done
paulson@13164
   312
paulson@13164
   313
(** Transfinite recursion for definitions based on the 
paulson@13164
   314
    three cases of ordinals **)
paulson@13164
   315
paulson@13164
   316
lemma transrec2_0 [simp]: "transrec2(0,a,b) = a"
paulson@13164
   317
by (rule transrec2_def [THEN def_transrec, THEN trans], simp)
paulson@13164
   318
paulson@13164
   319
lemma transrec2_succ [simp]: "transrec2(succ(i),a,b) = b(i, transrec2(i,a,b))"
paulson@13164
   320
apply (rule transrec2_def [THEN def_transrec, THEN trans])
paulson@13164
   321
apply (simp add: the_equality if_P)
paulson@13164
   322
done
paulson@13164
   323
paulson@13164
   324
lemma transrec2_Limit:
paulson@13164
   325
     "Limit(i) ==> transrec2(i,a,b) = (UN j<i. transrec2(j,a,b))"
paulson@13175
   326
apply (rule transrec2_def [THEN def_transrec, THEN trans])
paulson@13175
   327
apply (auto simp add: OUnion_def); 
paulson@13164
   328
done
paulson@13164
   329
paulson@13164
   330
paulson@13164
   331
(** recursor -- better than nat_rec; the succ case has no type requirement! **)
paulson@13164
   332
paulson@13164
   333
(*NOT suitable for rewriting*)
paulson@13164
   334
lemmas recursor_lemma = recursor_def [THEN def_transrec, THEN trans]
paulson@13164
   335
paulson@13164
   336
lemma recursor_0: "recursor(a,b,0) = a"
paulson@13164
   337
by (rule nat_case_0 [THEN recursor_lemma])
paulson@13164
   338
paulson@13164
   339
lemma recursor_succ: "recursor(a,b,succ(m)) = b(m, recursor(a,b,m))"
paulson@13164
   340
by (rule recursor_lemma, simp)
paulson@13164
   341
paulson@13164
   342
paulson@13164
   343
(** rec: old version for compatibility **)
paulson@13164
   344
paulson@13164
   345
lemma rec_0 [simp]: "rec(0,a,b) = a"
paulson@13164
   346
apply (unfold rec_def)
paulson@13164
   347
apply (rule recursor_0)
paulson@13164
   348
done
paulson@13164
   349
paulson@13164
   350
lemma rec_succ [simp]: "rec(succ(m),a,b) = b(m, rec(m,a,b))"
paulson@13164
   351
apply (unfold rec_def)
paulson@13164
   352
apply (rule recursor_succ)
paulson@13164
   353
done
paulson@13164
   354
paulson@13164
   355
lemma rec_type:
paulson@13164
   356
    "[| n: nat;   
paulson@13164
   357
        a: C(0);   
paulson@13164
   358
        !!m z. [| m: nat;  z: C(m) |] ==> b(m,z): C(succ(m)) |]
paulson@13164
   359
     ==> rec(n,a,b) : C(n)"
paulson@13164
   360
apply (erule nat_induct, auto)
paulson@13164
   361
done
paulson@13164
   362
paulson@13164
   363
ML
paulson@13164
   364
{*
paulson@13164
   365
val arg_subset_eclose = thm "arg_subset_eclose";
paulson@13164
   366
val arg_into_eclose = thm "arg_into_eclose";
paulson@13164
   367
val Transset_eclose = thm "Transset_eclose";
paulson@13164
   368
val eclose_subset = thm "eclose_subset";
paulson@13164
   369
val ecloseD = thm "ecloseD";
paulson@13164
   370
val arg_in_eclose_sing = thm "arg_in_eclose_sing";
paulson@13164
   371
val arg_into_eclose_sing = thm "arg_into_eclose_sing";
paulson@13164
   372
val eclose_induct = thm "eclose_induct";
paulson@13164
   373
val eps_induct = thm "eps_induct";
paulson@13164
   374
val eclose_least_lemma = thm "eclose_least_lemma";
paulson@13164
   375
val eclose_least = thm "eclose_least";
paulson@13164
   376
val eclose_induct_down = thm "eclose_induct_down";
paulson@13164
   377
val Transset_eclose_eq_arg = thm "Transset_eclose_eq_arg";
paulson@13164
   378
val mem_eclose_trans = thm "mem_eclose_trans";
paulson@13164
   379
val mem_eclose_sing_trans = thm "mem_eclose_sing_trans";
paulson@13164
   380
val under_Memrel = thm "under_Memrel";
paulson@13164
   381
val under_Memrel_eclose = thm "under_Memrel_eclose";
paulson@13164
   382
val wfrec_ssubst = thm "wfrec_ssubst";
paulson@13164
   383
val wfrec_eclose_eq = thm "wfrec_eclose_eq";
paulson@13164
   384
val wfrec_eclose_eq2 = thm "wfrec_eclose_eq2";
paulson@13164
   385
val transrec = thm "transrec";
paulson@13164
   386
val def_transrec = thm "def_transrec";
paulson@13164
   387
val transrec_type = thm "transrec_type";
paulson@13164
   388
val eclose_sing_Ord = thm "eclose_sing_Ord";
paulson@13164
   389
val Ord_transrec_type = thm "Ord_transrec_type";
paulson@13164
   390
val rank = thm "rank";
paulson@13164
   391
val Ord_rank = thm "Ord_rank";
paulson@13164
   392
val rank_of_Ord = thm "rank_of_Ord";
paulson@13164
   393
val rank_lt = thm "rank_lt";
paulson@13164
   394
val eclose_rank_lt = thm "eclose_rank_lt";
paulson@13164
   395
val rank_mono = thm "rank_mono";
paulson@13164
   396
val rank_Pow = thm "rank_Pow";
paulson@13164
   397
val rank_0 = thm "rank_0";
paulson@13164
   398
val rank_succ = thm "rank_succ";
paulson@13164
   399
val rank_Union = thm "rank_Union";
paulson@13164
   400
val rank_eclose = thm "rank_eclose";
paulson@13164
   401
val rank_pair1 = thm "rank_pair1";
paulson@13164
   402
val rank_pair2 = thm "rank_pair2";
paulson@13164
   403
val the_equality_if = thm "the_equality_if";
paulson@13164
   404
val rank_apply = thm "rank_apply";
paulson@13164
   405
val mem_eclose_subset = thm "mem_eclose_subset";
paulson@13164
   406
val eclose_mono = thm "eclose_mono";
paulson@13164
   407
val eclose_idem = thm "eclose_idem";
paulson@13164
   408
val transrec2_0 = thm "transrec2_0";
paulson@13164
   409
val transrec2_succ = thm "transrec2_succ";
paulson@13164
   410
val transrec2_Limit = thm "transrec2_Limit";
paulson@13164
   411
val recursor_lemma = thm "recursor_lemma";
paulson@13164
   412
val recursor_0 = thm "recursor_0";
paulson@13164
   413
val recursor_succ = thm "recursor_succ";
paulson@13164
   414
val rec_0 = thm "rec_0";
paulson@13164
   415
val rec_succ = thm "rec_succ";
paulson@13164
   416
val rec_type = thm "rec_type";
paulson@13164
   417
*}
paulson@6070
   418
clasohm@0
   419
end