src/CCL/Wfd.ML
author lcp
Mon, 20 Sep 1993 17:02:11 +0200
changeset 8 c3d2c6dcf3f0
parent 0 a5a9c433f639
child 226 cc87161971e4
permissions -rw-r--r--
Installation of new simplfier. Previously appeared to set up the old simplifier to rewrite with the partial ordering [=, something not possible with the new simplifier. But such rewriting appears not to have actually been used, and there were few complications. In terms.ML setloop was used to avoid infinite rewriting with the letrec rule. Congruence rules were deleted, and an occasional SIMP_TAC had to become asm_simp_tac.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	CCL/wf
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     3
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
For wf.thy.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
Based on
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
    Titles: 	ZF/wf.ML and HOL/ex/lex-prod
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
    Authors: 	Lawrence C Paulson and Tobias Nipkow
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
    Copyright   1992  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
open Wfd;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
(***********)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
val [major,prem] = goalw Wfd.thy [Wfd_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
    "[| Wfd(R);       \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
\       !!x.[| ALL y. <y,x>: R --> P(y) |] ==> P(x) |]  ==>  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
\    P(a)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
by (rtac (major RS spec RS mp RS spec RS CollectD) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
by (fast_tac (set_cs addSIs [prem RS CollectI]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
val wfd_induct = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
val [p1,p2,p3] = goal Wfd.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
    "[| !!x y.<x,y> : R ==> Q(x); \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
\       ALL x. (ALL y. <y,x> : R --> y : P) --> x : P; \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
\       !!x.Q(x) ==> x:P |] ==> a:P";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
br (p2 RS  spec  RS mp) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
by (fast_tac (set_cs addSIs [p1 RS p3]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
val wfd_strengthen_lemma = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    33
fun wfd_strengthen_tac s i = res_inst_tac [("Q",s)] wfd_strengthen_lemma i THEN
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
                             assume_tac (i+1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
val wfd::prems = goal Wfd.thy "[| Wfd(r);  <a,x>:r;  <x,a>:r |] ==> P";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
by (subgoal_tac "ALL x. <a,x>:r --> <x,a>:r --> P" 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
by (fast_tac (FOL_cs addIs prems) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
br (wfd RS  wfd_induct) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
by (ALLGOALS (fast_tac (ccl_cs addSIs prems)));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
val wf_anti_sym = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
val prems = goal Wfd.thy "[| Wfd(r);  <a,a>: r |] ==> P";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
by (rtac wf_anti_sym 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
by (REPEAT (resolve_tac prems 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
val wf_anti_refl = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
(*** Irreflexive transitive closure ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    50
val [prem] = goal Wfd.thy "Wfd(R) ==> Wfd(R^+)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
by (rewtac Wfd_def);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
by (REPEAT (ares_tac [allI,ballI,impI] 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    53
(*must retain the universal formula for later use!*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    54
by (rtac allE 1 THEN assume_tac 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    55
by (etac mp 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    56
br (prem RS wfd_induct) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    57
by (rtac (impI RS allI) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    58
by (etac tranclE 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    59
by (fast_tac ccl_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    60
be (spec RS mp RS spec RS mp) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    61
by (REPEAT (atac 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    62
val trancl_wf = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    63
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    64
(*** Lexicographic Ordering ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    65
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    66
goalw Wfd.thy [lex_def] 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    67
 "p : ra**rb <-> (EX a a' b b'.p = <<a,b>,<a',b'>> & (<a,a'> : ra | a=a' & <b,b'> : rb))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    68
by (fast_tac ccl_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
val lexXH = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    70
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    71
val prems = goal Wfd.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    72
 "<a,a'> : ra ==> <<a,b>,<a',b'>> : ra**rb";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    73
by (fast_tac (ccl_cs addSIs (prems @ [lexXH RS iffD2])) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    74
val lexI1 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    75
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    76
val prems = goal Wfd.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    77
 "<b,b'> : rb ==> <<a,b>,<a,b'>> : ra**rb";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    78
by (fast_tac (ccl_cs addSIs (prems @ [lexXH RS iffD2])) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    79
val lexI2 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    80
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    81
val major::prems = goal Wfd.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    82
 "[| p : ra**rb;  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    83
\    !!a a' b b'.[| <a,a'> : ra; p=<<a,b>,<a',b'>> |] ==> R;  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    84
\    !!a b b'.[| <b,b'> : rb;  p = <<a,b>,<a,b'>> |] ==> R  |] ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    85
\ R";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    86
br (major RS (lexXH RS iffD1) RS exE) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    87
by (REPEAT_SOME (eresolve_tac ([exE,conjE,disjE]@prems)));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    88
by (ALLGOALS (fast_tac ccl_cs));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    89
val lexE = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    90
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    91
val [major,minor] = goal Wfd.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    92
 "[| p : r**s;  !!a a' b b'. p = <<a,b>,<a',b'>> ==> P |] ==>P";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    93
br (major RS lexE) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    94
by (ALLGOALS (fast_tac (set_cs addSEs [minor])));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    95
val lex_pair = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    96
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    97
val [wfa,wfb] = goal Wfd.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    98
 "[| Wfd(R); Wfd(S) |] ==> Wfd(R**S)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    99
bw Wfd_def;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   100
by (safe_tac ccl_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   101
by (wfd_strengthen_tac "%x.EX a b.x=<a,b>" 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   102
by (fast_tac (term_cs addSEs [lex_pair]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   103
by (subgoal_tac "ALL a b.<a,b>:P" 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   104
by (fast_tac ccl_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   105
br (wfa RS wfd_induct RS allI) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   106
br (wfb RS wfd_induct RS allI) 1;back();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   107
by (fast_tac (type_cs addSEs [lexE]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   108
val lex_wf = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   109
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   110
(*** Mapping ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   111
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   112
goalw Wfd.thy [wmap_def] 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   113
 "p : wmap(f,r) <-> (EX x y. p=<x,y>  &  <f(x),f(y)> : r)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   114
by (fast_tac ccl_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   115
val wmapXH = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   116
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   117
val prems = goal Wfd.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   118
 "<f(a),f(b)> : r ==> <a,b> : wmap(f,r)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   119
by (fast_tac (ccl_cs addSIs (prems @ [wmapXH RS iffD2])) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   120
val wmapI = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   121
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   122
val major::prems = goal Wfd.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   123
 "[| p : wmap(f,r);  !!a b.[| <f(a),f(b)> : r;  p=<a,b> |] ==> R |] ==> R";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   124
br (major RS (wmapXH RS iffD1) RS exE) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   125
by (REPEAT_SOME (eresolve_tac ([exE,conjE,disjE]@prems)));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   126
by (ALLGOALS (fast_tac ccl_cs));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   127
val wmapE = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   128
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   129
val [wf] = goal Wfd.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   130
 "Wfd(r) ==> Wfd(wmap(f,r))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   131
bw Wfd_def;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   132
by (safe_tac ccl_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   133
by (subgoal_tac "ALL b.ALL a.f(a)=b-->a:P" 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   134
by (fast_tac ccl_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   135
br (wf RS wfd_induct RS allI) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   136
by (safe_tac ccl_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   137
be (spec RS mp) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   138
by (safe_tac (ccl_cs addSEs [wmapE]));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   139
be (spec RS mp RS spec RS mp) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   140
ba 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   141
br refl 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   142
val wmap_wf = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   143
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   144
(* Projections *)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   145
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   146
val prems = goal Wfd.thy "<xa,ya> : r ==> <<xa,xb>,<ya,yb>> : wmap(fst,r)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   147
br wmapI 1;
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   148
by (simp_tac (term_ss addsimps prems) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   149
val wfstI = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   150
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   151
val prems = goal Wfd.thy "<xb,yb> : r ==> <<xa,xb>,<ya,yb>> : wmap(snd,r)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   152
br wmapI 1;
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   153
by (simp_tac (term_ss addsimps prems) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   154
val wsndI = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   155
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   156
val prems = goal Wfd.thy "<xc,yc> : r ==> <<xa,<xb,xc>>,<ya,<yb,yc>>> : wmap(thd,r)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   157
br wmapI 1;
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   158
by (simp_tac (term_ss addsimps prems) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   159
val wthdI = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   160
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   161
(*** Ground well-founded relations ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   162
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   163
val prems = goalw Wfd.thy [wf_def] 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   164
    "[| Wfd(r);  a : r |] ==> a : wf(r)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   165
by (fast_tac (set_cs addSIs prems) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   166
val wfI = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   167
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   168
val prems = goalw Wfd.thy [Wfd_def] "Wfd({})";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   169
by (fast_tac (set_cs addEs [EmptyXH RS iffD1 RS FalseE]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   170
val Empty_wf = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   171
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   172
val prems = goalw Wfd.thy [wf_def] "Wfd(wf(R))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   173
by (res_inst_tac [("Q","Wfd(R)")] (excluded_middle RS disjE) 1);
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   174
by (ALLGOALS (asm_simp_tac CCL_ss));
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   175
br Empty_wf 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   176
val wf_wf = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   177
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   178
goalw Wfd.thy [NatPR_def]  "p : NatPR <-> (EX x:Nat.p=<x,succ(x)>)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   179
by (fast_tac set_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   180
val NatPRXH = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   181
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   182
goalw Wfd.thy [ListPR_def]  "p : ListPR(A) <-> (EX h:A.EX t:List(A).p=<t,h.t>)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   183
by (fast_tac set_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   184
val ListPRXH = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   185
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   186
val NatPRI = refl RS (bexI RS (NatPRXH RS iffD2));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   187
val ListPRI = refl RS (bexI RS (bexI RS (ListPRXH RS iffD2)));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   188
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   189
goalw Wfd.thy [Wfd_def]  "Wfd(NatPR)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   190
by (safe_tac set_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   191
by (wfd_strengthen_tac "%x.x:Nat" 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   192
by (fast_tac (type_cs addSEs [XH_to_E NatPRXH]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   193
be Nat_ind 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   194
by (ALLGOALS (fast_tac (type_cs addEs [XH_to_E NatPRXH])));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   195
val NatPR_wf = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   196
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   197
goalw Wfd.thy [Wfd_def]  "Wfd(ListPR(A))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   198
by (safe_tac set_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   199
by (wfd_strengthen_tac "%x.x:List(A)" 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   200
by (fast_tac (type_cs addSEs [XH_to_E ListPRXH]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   201
be List_ind 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   202
by (ALLGOALS (fast_tac (type_cs addEs [XH_to_E ListPRXH])));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   203
val ListPR_wf = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   204