CCL/Gfp/coinduct2, coinduct3: modified proofs to suppress deep unification
authorlcp
Wed, 19 Oct 1994 09:23:56 +0100
changeset 642 0db578095e6a
parent 641 49fc43cd6a35
child 643 1e8fea151d2e
CCL/Gfp/coinduct2, coinduct3: modified proofs to suppress deep unification CCL/CCL, Fix, Gfp, Hered, Set, Term, Trancl, Type, Wfd: expanded shorthands
src/CCL/CCL.ML
src/CCL/Fix.ML
src/CCL/Gfp.ML
src/CCL/Hered.ML
src/CCL/Set.ML
src/CCL/Term.ML
src/CCL/Trancl.ML
src/CCL/Type.ML
src/CCL/Wfd.ML
src/CCL/coinduction.ML
src/CCL/eval.ML
src/CCL/genrec.ML
src/CCL/typecheck.ML
--- a/src/CCL/CCL.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/CCL.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -44,11 +44,11 @@
 (*** Termination and Divergence ***)
 
 goalw CCL.thy [Trm_def,Dvg_def] "Trm(t) <-> ~ t = bot";
-br iff_refl 1;
+by (rtac iff_refl 1);
 val Trm_iff = result();
 
 goalw CCL.thy [Trm_def,Dvg_def] "Dvg(t) <-> t = bot";
-br iff_refl 1;
+by (rtac iff_refl 1);
 val Dvg_iff = result();
 
 (*** Constructors are injective ***)
@@ -138,7 +138,7 @@
 (****** Facts from gfp Definition of [= and = ******)
 
 val major::prems = goal Set.thy "[| A=B;  a:B <-> P |] ==> a:A <-> P";
-brs (prems RL [major RS ssubst]) 1;
+by (resolve_tac (prems RL [major RS ssubst]) 1);
 val XHlemma1 = result();
 
 goal CCL.thy "(P(t,t') <-> Q) --> (<t,t'> : {p.EX t t'.p=<t,t'> &  P(t,t')} <-> Q)";
@@ -148,7 +148,7 @@
 (*** Pre-Order ***)
 
 goalw CCL.thy [POgen_def,SIM_def]  "mono(%X.POgen(X))";
-br monoI 1;
+by (rtac monoI 1);
 by (safe_tac ccl_cs);
 by (REPEAT_SOME (resolve_tac [exI,conjI,refl]));
 by (ALLGOALS (simp_tac ccl_ss));
@@ -159,7 +159,7 @@
   "<t,t'> : POgen(R) <-> t= bot | (t=true & t'=true)  | (t=false & t'=false) | \
 \                    (EX a a' b b'.t=<a,b> &  t'=<a',b'>  & <a,a'> : R & <b,b'> : R) | \
 \                    (EX f f'.t=lam x.f(x) &  t'=lam x.f'(x) & (ALL x.<f(x),f'(x)> : R))";
-br (iff_refl RS XHlemma2) 1;
+by (rtac (iff_refl RS XHlemma2) 1);
 val POgenXH = result();
 
 goal CCL.thy
@@ -169,29 +169,29 @@
 by (simp_tac (ccl_ss addsimps [PO_iff]) 1);
 br (rewrite_rule [POgen_def,SIM_def] 
                  (POgen_mono RS (PO_def RS def_gfp_Tarski) RS XHlemma1)) 1;
-br (iff_refl RS XHlemma2) 1;
+by (rtac (iff_refl RS XHlemma2) 1);
 val poXH = result();
 
 goal CCL.thy "bot [= b";
-br (poXH RS iffD2) 1;
+by (rtac (poXH RS iffD2) 1);
 by (simp_tac ccl_ss 1);
 val po_bot = result();
 
 goal CCL.thy "a [= bot --> a=bot";
-br impI 1;
-bd (poXH RS iffD1) 1;
-be rev_mp 1;
+by (rtac impI 1);
+by (dtac (poXH RS iffD1) 1);
+by (etac rev_mp 1);
 by (simp_tac ccl_ss 1);
 val bot_poleast = result() RS mp;
 
 goal CCL.thy "<a,b> [= <a',b'> <->  a [= a' & b [= b'";
-br (poXH RS iff_trans) 1;
+by (rtac (poXH RS iff_trans) 1);
 by (simp_tac ccl_ss 1);
 by (fast_tac ccl_cs 1);
 val po_pair = result();
 
 goal CCL.thy "lam x.f(x) [= lam x.f'(x) <-> (ALL x. f(x) [= f'(x))";
-br (poXH RS iff_trans) 1;
+by (rtac (poXH RS iff_trans) 1);
 by (simp_tac ccl_ss 1);
 by (REPEAT (ares_tac [iffI,allI] 1 ORELSE eresolve_tac [exE,conjE] 1));
 by (asm_simp_tac ccl_ss 1);
@@ -203,13 +203,13 @@
 val [p1,p2,p3,p4,p5] = goal CCL.thy
     "[| t [= t';  a [= a';  b [= b';  !!x y.c(x,y) [= c'(x,y); \
 \       !!u.d(u) [= d'(u) |] ==> case(t,a,b,c,d) [= case(t',a',b',c',d')";
-br (p1 RS po_cong RS po_trans) 1;
-br (p2 RS po_cong RS po_trans) 1;
-br (p3 RS po_cong RS po_trans) 1;
-br (p4 RS po_abstractn RS po_abstractn RS po_cong RS po_trans) 1;
+by (rtac (p1 RS po_cong RS po_trans) 1);
+by (rtac (p2 RS po_cong RS po_trans) 1);
+by (rtac (p3 RS po_cong RS po_trans) 1);
+by (rtac (p4 RS po_abstractn RS po_abstractn RS po_cong RS po_trans) 1);
 by (res_inst_tac [("f1","%d.case(t',a',b',c',d)")] 
                (p5 RS po_abstractn RS po_cong RS po_trans) 1);
-br po_refl 1;
+by (rtac po_refl 1);
 val case_pocong = result();
 
 val [p1,p2] = goalw CCL.thy ccl_data_defs
@@ -219,29 +219,29 @@
 
 
 val prems = goal CCL.thy "~ lam x.b(x) [= bot";
-br notI 1;
-bd bot_poleast 1;
-be (distinctness RS notE) 1;
+by (rtac notI 1);
+by (dtac bot_poleast 1);
+by (etac (distinctness RS notE) 1);
 val npo_lam_bot = result();
 
 val eq1::eq2::prems = goal CCL.thy
     "[| x=a;  y=b;  x[=y |] ==> a[=b";
-br (eq1 RS subst) 1;
-br (eq2 RS subst) 1;
-brs prems 1;
+by (rtac (eq1 RS subst) 1);
+by (rtac (eq2 RS subst) 1);
+by (resolve_tac prems 1);
 val po_lemma = result();
 
 goal CCL.thy "~ <a,b> [= lam x.f(x)";
-br notI 1;
-br (npo_lam_bot RS notE) 1;
-be (case_pocong RS (caseBlam RS (caseBpair RS po_lemma))) 1;
+by (rtac notI 1);
+by (rtac (npo_lam_bot RS notE) 1);
+by (etac (case_pocong RS (caseBlam RS (caseBpair RS po_lemma))) 1);
 by (REPEAT (resolve_tac [po_refl,npo_lam_bot] 1));
 val npo_pair_lam = result();
 
 goal CCL.thy "~ lam x.f(x) [= <a,b>";
-br notI 1;
-br (npo_lam_bot RS notE) 1;
-be (case_pocong RS (caseBpair RS (caseBlam RS po_lemma))) 1;
+by (rtac notI 1);
+by (rtac (npo_lam_bot RS notE) 1);
+by (etac (case_pocong RS (caseBpair RS (caseBlam RS po_lemma))) 1);
 by (REPEAT (resolve_tac [po_refl,npo_lam_bot] 1));
 val npo_lam_pair = result();
 
@@ -260,7 +260,7 @@
 (* Coinduction for [= *)
 
 val prems = goal CCL.thy "[|  <t,u> : R;  R <= POgen(R) |] ==> t [= u";
-br (PO_def RS def_coinduct RS (PO_iff RS iffD2)) 1;
+by (rtac (PO_def RS def_coinduct RS (PO_iff RS iffD2)) 1);
 by (REPEAT (ares_tac prems 1));
 val po_coinduct = result();
 
@@ -269,7 +269,7 @@
 (*************** EQUALITY *******************)
 
 goalw CCL.thy [EQgen_def,SIM_def]  "mono(%X.EQgen(X))";
-br monoI 1;
+by (rtac monoI 1);
 by (safe_tac set_cs);
 by (REPEAT_SOME (resolve_tac [exI,conjI,refl]));
 by (ALLGOALS (simp_tac ccl_ss));
@@ -281,7 +281,7 @@
 \                                            (t=false & t'=false) | \
 \                (EX a a' b b'.t=<a,b> &  t'=<a',b'>  & <a,a'> : R & <b,b'> : R) | \
 \                (EX f f'.t=lam x.f(x) &  t'=lam x.f'(x) & (ALL x.<f(x),f'(x)> : R))";
-br (iff_refl RS XHlemma2) 1;
+by (rtac (iff_refl RS XHlemma2) 1);
 val EQgenXH = result();
 
 goal CCL.thy
@@ -292,21 +292,21 @@
   "<t,t'> : EQ <-> (t=bot & t'=bot)  | (t=true & t'=true) | (t=false & t'=false) | \
 \             (EX a a' b b'.t=<a,b> &  t'=<a',b'>  & <a,a'> : EQ & <b,b'> : EQ) | \
 \             (EX f f'.t=lam x.f(x) &  t'=lam x.f'(x) & (ALL x.<f(x),f'(x)> : EQ))" 1);
-be rev_mp 1;
+by (etac rev_mp 1);
 by (simp_tac (CCL_ss addsimps [EQ_iff RS iff_sym]) 1);
 br (rewrite_rule [EQgen_def,SIM_def]
                  (EQgen_mono RS (EQ_def RS def_gfp_Tarski) RS XHlemma1)) 1;
-br (iff_refl RS XHlemma2) 1;
+by (rtac (iff_refl RS XHlemma2) 1);
 val eqXH = result();
 
 val prems = goal CCL.thy "[|  <t,u> : R;  R <= EQgen(R) |] ==> t = u";
-br (EQ_def RS def_coinduct RS (EQ_iff RS iffD2)) 1;
+by (rtac (EQ_def RS def_coinduct RS (EQ_iff RS iffD2)) 1);
 by (REPEAT (ares_tac prems 1));
 val eq_coinduct = result();
 
 val prems = goal CCL.thy 
     "[|  <t,u> : R;  R <= EQgen(lfp(%x.EQgen(x) Un R Un EQ)) |] ==> t = u";
-br (EQ_def RS def_coinduct3 RS (EQ_iff RS iffD2)) 1;
+by (rtac (EQ_def RS def_coinduct3 RS (EQ_iff RS iffD2)) 1);
 by (REPEAT (ares_tac (EQgen_mono::prems) 1));
 val eq_coinduct3 = result();
 
--- a/src/CCL/Fix.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/Fix.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -12,7 +12,7 @@
 
 val [base,step,incl] = goalw Fix.thy [INCL_def]
     "[| P(bot);  !!x.P(x) ==> P(f(x));  INCL(P) |] ==> P(fix(f))";
-br (incl RS spec RS mp) 1;
+by (rtac (incl RS spec RS mp) 1);
 by (rtac (Nat_ind RS ballI) 1 THEN atac 1);
 by (ALLGOALS (simp_tac term_ss));
 by (REPEAT (ares_tac [base,step] 1));
@@ -22,7 +22,7 @@
 
 val prems = goalw Fix.thy [INCL_def]
      "INCL(P) <-> (ALL f. (ALL n:Nat. P(f ^ n ` bot)) --> P(fix(f)))";
-br iff_refl 1;
+by (rtac iff_refl 1);
 val inclXH = result();
 
 val prems = goal Fix.thy
@@ -45,13 +45,13 @@
 (*** Lemmas for Inclusive Predicates ***)
 
 goal Fix.thy "INCL(%x.~ a(x) [= t)";
-br inclI 1;
-bd bspec 1;
-br zeroT 1;
-be contrapos 1;
-br po_trans 1;
-ba 2;
-br (napplyBzero RS ssubst) 1;
+by (rtac inclI 1);
+by (dtac bspec 1);
+by (rtac zeroT 1);
+by (etac contrapos 1);
+by (rtac po_trans 1);
+by (assume_tac 2);
+by (rtac (napplyBzero RS ssubst) 1);
 by (rtac po_cong 1 THEN rtac po_bot 1);
 val npo_INCL = result();
 
@@ -77,21 +77,21 @@
 (* Fixed points of idgen *)
 
 goal Fix.thy "idgen(fix(idgen)) = fix(idgen)";
-br (fixB RS sym) 1;
+by (rtac (fixB RS sym) 1);
 val fix_idgenfp = result();
 
 goalw Fix.thy [idgen_def] "idgen(lam x.x) = lam x.x";
 by (simp_tac term_ss 1);
-br (term_case RS allI) 1;
+by (rtac (term_case RS allI) 1);
 by (ALLGOALS (simp_tac term_ss));
 val id_idgenfp = result();
 
 (* All fixed points are lam-expressions *)
 
 val [prem] = goal Fix.thy "idgen(d) = d ==> d = lam x.?f(x)";
-br (prem RS subst) 1;
-bw idgen_def;
-br refl 1;
+by (rtac (prem RS subst) 1);
+by (rewtac idgen_def);
+by (rtac refl 1);
 val idgenfp_lam = result();
 
 (* Lemmas for rewriting fixed points of idgen *)
@@ -117,14 +117,14 @@
 
 val [p1,p2,p3] = goal CCL.thy
     "[| ALL x.t ` x [= u ` x;  EX f.t=lam x.f(x);  EX f.u=lam x.f(x) |] ==> t [= u";
-br (p2 RS cond_eta RS ssubst) 1;
-br (p3 RS cond_eta RS ssubst) 1;
-br (p1 RS (po_lam RS iffD2)) 1;
+by (rtac (p2 RS cond_eta RS ssubst) 1);
+by (rtac (p3 RS cond_eta RS ssubst) 1);
+by (rtac (p1 RS (po_lam RS iffD2)) 1);
 val po_eta = result();
 
 val [prem] = goalw Fix.thy [idgen_def] "idgen(d) = d ==> d = lam x.?f(x)";
-br (prem RS subst) 1;
-br refl 1;
+by (rtac (prem RS subst) 1);
+by (rtac refl 1);
 val po_eta_lemma = result();
 
 val [prem] = goal Fix.thy
@@ -139,8 +139,8 @@
 
 val [prem] = goal Fix.thy
     "idgen(d) = d ==> fix(idgen) [= d";
-br (allI RS po_eta) 1;
-br (lemma1 RSN(2,po_coinduct)) 1;
+by (rtac (allI RS po_eta) 1);
+by (rtac (lemma1 RSN(2,po_coinduct)) 1);
 by (ALLGOALS (fast_tac (term_cs addIs [prem,po_eta_lemma,fix_idgenfp])));
 val fix_least_idgen = result();
 
@@ -155,8 +155,8 @@
 
 val [prem] = goal Fix.thy
     "idgen(d) = d ==> lam x.x [= d";
-br (allI RS po_eta) 1;
-br (lemma2 RSN(2,po_coinduct)) 1;
+by (rtac (allI RS po_eta) 1);
+by (rtac (lemma2 RSN(2,po_coinduct)) 1);
 by (simp_tac term_ss 1);
 by (ALLGOALS (fast_tac (term_cs addIs [prem,po_eta_lemma,fix_idgenfp])));
 val id_least_idgen = result();
@@ -170,8 +170,8 @@
 (********)
 
 val [prem] = goal Fix.thy "f = lam x.x ==> f`t = t";
-br (prem RS sym RS subst) 1;
-br applyB 1;
+by (rtac (prem RS sym RS subst) 1);
+by (rtac applyB 1);
 val id_apply = result();
 
 val prems = goal Fix.thy
@@ -179,13 +179,13 @@
 \        !!x y.[| P(x);  P(y) |] ==> P(<x,y>);  \
 \        !!u.(!!x.P(u(x))) ==> P(lam x.u(x));  INCL(P) |] ==> \
 \     P(t)";
-br (reachability RS id_apply RS subst) 1;
+by (rtac (reachability RS id_apply RS subst) 1);
 by (res_inst_tac [("x","t")] spec 1);
-br fix_ind 1;
-bw idgen_def;
+by (rtac fix_ind 1);
+by (rewtac idgen_def);
 by (REPEAT_SOME (ares_tac [allI]));
-br (applyBbot RS ssubst) 1;
-brs prems 1;
+by (rtac (applyBbot RS ssubst) 1);
+by (resolve_tac prems 1);
 br (applyB RS ssubst )1;
 by (res_inst_tac [("t","xa")] term_case 1);
 by (ALLGOALS (simp_tac term_ss));
--- a/src/CCL/Gfp.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/Gfp.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -60,10 +60,11 @@
 val coinduct2_lemma = result();
 
 (*strong version, thanks to Martin Coen*)
-val prems = goal Gfp.thy
+val ainA::prems = goal Gfp.thy
     "[| a: A;  A <= f(A) Un gfp(f);  mono(f) |] ==> a : gfp(f)";
-by (rtac (coinduct2_lemma RSN (2,coinduct)) 1);
-by (REPEAT (resolve_tac (prems@[UnI1]) 1));
+by (rtac coinduct 1);
+by (rtac (prems MRS coinduct2_lemma) 2);
+by (resolve_tac [ainA RS UnI1] 1);
 val coinduct2 = result();
 
 (***  Even Stronger version of coinduct  [by Martin Coen]
@@ -78,22 +79,22 @@
     "[| A <= f(lfp(%x.f(x) Un A Un gfp(f)));  mono(f) |] ==> \
 \    lfp(%x.f(x) Un A Un gfp(f)) <= f(lfp(%x.f(x) Un A Un gfp(f)))";
 by (rtac subset_trans 1);
-br (mono RS coinduct3_mono_lemma RS lfp_lemma3) 1;
+by (rtac (mono RS coinduct3_mono_lemma RS lfp_lemma3) 1);
 by (rtac (Un_least RS Un_least) 1);
-br subset_refl 1;
-br prem 1;
-br (mono RS gfp_Tarski RS equalityD1 RS subset_trans) 1;
+by (rtac subset_refl 1);
+by (rtac prem 1);
+by (rtac (mono RS gfp_Tarski RS equalityD1 RS subset_trans) 1);
 by (rtac (mono RS monoD) 1);
 by (rtac (mono RS coinduct3_mono_lemma RS lfp_Tarski RS ssubst) 1);
 by (rtac Un_upper2 1);
 val coinduct3_lemma = result();
 
-val prems = goal Gfp.thy
+val ainA::prems = goal Gfp.thy
     "[| a:A;  A <= f(lfp(%x.f(x) Un A Un gfp(f))); mono(f) |] ==> a : gfp(f)";
-by (rtac (coinduct3_lemma RSN (2,coinduct)) 1);
-brs (prems RL [coinduct3_mono_lemma RS lfp_Tarski RS ssubst]) 1;
-br (UnI2 RS UnI1) 1;
-by (REPEAT (resolve_tac prems 1));
+by (rtac coinduct 1);
+by (rtac (prems MRS coinduct3_lemma) 2);
+by (resolve_tac (prems RL [coinduct3_mono_lemma RS lfp_Tarski RS ssubst]) 1);
+by (rtac (ainA RS UnI2 RS UnI1) 1);
 val coinduct3 = result();
 
 
--- a/src/CCL/Hered.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/Hered.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -13,7 +13,7 @@
 (*** Hereditary Termination ***)
 
 goalw Hered.thy [HTTgen_def]  "mono(%X.HTTgen(X))";
-br monoI 1;
+by (rtac monoI 1);
 by (fast_tac set_cs 1);
 val HTTgen_mono = result();
 
@@ -46,12 +46,12 @@
 val HTT_false = result();
 
 goal Hered.thy "<a,b> : HTT <->  a : HTT  & b : HTT";
-br (HTTXH RS iff_trans) 1;
+by (rtac (HTTXH RS iff_trans) 1);
 by (fast_tac term_cs 1);
 val HTT_pair = result();
 
 goal Hered.thy "lam x.f(x) : HTT <-> (ALL x. f(x) : HTT)";
-br (HTTXH RS iff_trans) 1;
+by (rtac (HTTXH RS iff_trans) 1);
 by (simp_tac term_ss 1);
 by (safe_tac term_cs);
 by (asm_simp_tac term_ss 1);
@@ -78,7 +78,7 @@
 (*** Coinduction for HTT ***)
 
 val prems = goal Hered.thy "[|  t : R;  R <= HTTgen(R) |] ==> t : HTT";
-br (HTT_def RS def_coinduct) 1;
+by (rtac (HTT_def RS def_coinduct) 1);
 by (REPEAT (ares_tac prems 1));
 val HTT_coinduct = result();
 
@@ -86,7 +86,7 @@
 
 val prems = goal Hered.thy 
     "[|  t : R;   R <= HTTgen(lfp(%x. HTTgen(x) Un R Un HTT)) |] ==> t : HTT";
-br (HTTgen_mono RSN(3,HTT_def RS def_coinduct3)) 1;
+by (rtac (HTTgen_mono RSN(3,HTT_def RS def_coinduct3)) 1);
 by (REPEAT (ares_tac prems 1));
 val HTT_coinduct3 = result();
 val HTT_coinduct3_raw = rewrite_rule [HTTgen_def] HTT_coinduct3;
@@ -139,20 +139,20 @@
 goal Hered.thy "Nat <= HTT";
 by (simp_tac (term_ss addsimps [subsetXH]) 1);
 by (safe_tac set_cs);
-be Nat_ind 1;
+by (etac Nat_ind 1);
 by (ALLGOALS (fast_tac (set_cs addIs HTT_Is @ (prems RL [subsetD]))));
 val NatF = result();
 
 goal Hered.thy "Nat <= HTT";
 by (safe_tac set_cs);
-be HTT_coinduct3 1;
+by (etac HTT_coinduct3 1);
 by (fast_tac (set_cs addIs HTTgenIs 
                  addSEs [HTTgen_mono RS ci3_RI] addEs [XH_to_E NatXH]) 1);
 val NatF = result();
 
 val [prem] = goal Hered.thy "A <= HTT ==> List(A) <= HTT";
 by (safe_tac set_cs);
-be HTT_coinduct3 1;
+by (etac HTT_coinduct3 1);
 by (fast_tac (set_cs addSIs HTTgenIs 
                  addSEs [HTTgen_mono RS ci3_RI,prem RS subsetD RS (HTTgen_mono RS ci3_AI)] 
                  addEs [XH_to_E ListXH]) 1);
@@ -160,7 +160,7 @@
 
 val [prem] = goal Hered.thy "A <= HTT ==> Lists(A) <= HTT";
 by (safe_tac set_cs);
-be HTT_coinduct3 1;
+by (etac HTT_coinduct3 1);
 by (fast_tac (set_cs addSIs HTTgenIs 
                  addSEs [HTTgen_mono RS ci3_RI,prem RS subsetD RS (HTTgen_mono RS ci3_AI)] 
                  addEs [XH_to_E ListsXH]) 1);
@@ -168,7 +168,7 @@
 
 val [prem] = goal Hered.thy "A <= HTT ==> ILists(A) <= HTT";
 by (safe_tac set_cs);
-be HTT_coinduct3 1;
+by (etac HTT_coinduct3 1);
 by (fast_tac (set_cs addSIs HTTgenIs 
                  addSEs [HTTgen_mono RS ci3_RI,prem RS subsetD RS (HTTgen_mono RS ci3_AI)] 
                  addEs [XH_to_E IListsXH]) 1);
@@ -181,7 +181,7 @@
 by (po_coinduct_tac "{p. EX a b.p=<a,b> & b : HTT & b [= a}" 1);
 by (fast_tac (ccl_cs addIs prems) 1);
 by (safe_tac ccl_cs);
-bd (poXH RS iffD1) 1;
+by (dtac (poXH RS iffD1) 1);
 by (safe_tac (set_cs addSEs [HTT_bot RS notE]));
 by (REPEAT_SOME (rtac (POgenXH RS iffD2) ORELSE' etac rev_mp));
 by (ALLGOALS (simp_tac (term_ss addsimps HTT_rews)));
--- a/src/CCL/Set.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/Set.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -117,7 +117,7 @@
  (fn _=> [ (REPEAT (ares_tac [subsetI] 1)) ]);
 
 goal Set.thy "!!A B C. [| A<=B;  B<=C |] ==> A<=C";
-br subsetI 1;
+by (rtac subsetI 1);
 by (REPEAT (eresolve_tac [asm_rl, subsetD] 1));
 val subset_trans = result();
 
@@ -164,7 +164,7 @@
 val setup_induction = result();
 
 goal Set.thy "{x.x:A} = A";
-by (REPEAT (ares_tac [equalityI,subsetI,CollectI] 1  ORELSE eresolve_tac [CollectD] 1));
+by (REPEAT (ares_tac [equalityI,subsetI,CollectI] 1  ORELSE etac CollectD 1));
 val trivial_set = result();
 
 (*** Rules for binary union -- Un ***)
@@ -235,7 +235,7 @@
 (*** Empty sets ***)
 
 goalw Set.thy [empty_def] "{x.False} = {}";
-br refl 1;
+by (rtac refl 1);
 val empty_eq = result();
 
 val [prem] = goalw Set.thy [empty_def] "a : {} ==> P";
@@ -245,8 +245,8 @@
 val emptyE = make_elim emptyD;
 
 val [prem] = goal Set.thy "~ A={} ==> (EX x.x:A)";
-br (prem RS swap) 1;
-br equalityI 1;
+by (rtac (prem RS swap) 1);
+by (rtac equalityI 1);
 by (ALLGOALS (fast_tac (FOL_cs addSIs [subsetI] addSEs [emptyD])));
 val not_emptyD = result();
 
--- a/src/CCL/Term.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/Term.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -27,11 +27,11 @@
 val letB = result() RS mp;
 
 goalw Term.thy [let_def] "let x be bot in f(x) = bot";
-br caseBbot 1;
+by (rtac caseBbot 1);
 val letBabot = result();
 
 goalw Term.thy [let_def] "let x be t in bot = bot";
-brs ([caseBbot] RL [term_case]) 1;
+by (resolve_tac ([caseBbot] RL [term_case]) 1);
 by (ALLGOALS(simp_tac(CCL_ss addsimps [caseBtrue,caseBfalse,caseBpair,caseBlam])));
 val letBbbot = result();
 
@@ -40,17 +40,17 @@
 val applyB = result();
 
 goalw Term.thy [apply_def] "bot ` a = bot";
-br caseBbot 1;
+by (rtac caseBbot 1);
 val applyBbot = result();
 
 goalw Term.thy [fix_def] "fix(f) = f(fix(f))";
-by (resolve_tac [applyB RS ssubst] 1 THEN resolve_tac [refl] 1);
+by (resolve_tac [applyB RS ssubst] 1 THEN rtac refl 1);
 val fixB = result();
 
 goalw Term.thy [letrec_def]
       "letrec g x be h(x,g) in g(a) = h(a,%y.letrec g x be h(x,g) in g(y))";
 by (resolve_tac [fixB RS ssubst] 1 THEN 
-    resolve_tac [applyB RS ssubst] 1 THEN resolve_tac [refl] 1);
+    resolve_tac [applyB RS ssubst] 1 THEN rtac refl 1);
 val letrecB = result();
 
 val rawBs = caseBs @ [applyB,applyBbot];
--- a/src/CCL/Trancl.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/Trancl.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -86,14 +86,14 @@
 
 (*Reflexivity of rtrancl*)
 goal Trancl.thy "<a,a> : r^*";
-br (rtrancl_unfold RS ssubst) 1;
+by (rtac (rtrancl_unfold RS ssubst) 1);
 by (fast_tac comp_cs 1);
 val rtrancl_refl = result();
 
 (*Closure under composition with r*)
 val prems = goal Trancl.thy
     "[| <a,b> : r^*;  <b,c> : r |] ==> <a,c> : r^*";
-br (rtrancl_unfold RS ssubst) 1;
+by (rtac (rtrancl_unfold RS ssubst) 1);
 by (fast_tac (comp_cs addIs prems) 1);
 val rtrancl_into_rtrancl = result();
 
--- a/src/CCL/Type.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/Type.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -67,7 +67,7 @@
                        (REPEAT_SOME (eresolve_tac (crls @ [exE,bexE,conjE,disjE]))),
                        (ALLGOALS (asm_simp_tac term_ss)),
                        (ALLGOALS (ares_tac (prems RL [lemma]) ORELSE' 
-                                  eresolve_tac [bspec])),
+                                  etac bspec )),
                        (safe_tac (ccl_cs addSIs prems))]);
 end;
 
@@ -118,13 +118,13 @@
 
 val major::prems = goal Type.thy
     "mono(%X.A(X)) ==> mono(%X.[A(X)])";
-br (subsetI RS monoI) 1;
-bd (LiftXH RS iffD1) 1;
-be disjE 1;
-be (disjI1 RS (LiftXH RS iffD2)) 1;
-br (disjI2 RS (LiftXH RS iffD2)) 1;
-be (major RS monoD RS subsetD) 1;
-ba 1;
+by (rtac (subsetI RS monoI) 1);
+by (dtac (LiftXH RS iffD1) 1);
+by (etac disjE 1);
+by (etac (disjI1 RS (LiftXH RS iffD2)) 1);
+by (rtac (disjI2 RS (LiftXH RS iffD2)) 1);
+by (etac (major RS monoD RS subsetD) 1);
+by (assume_tac 1);
 val LiftM = result();
 
 val prems = goal Type.thy
@@ -261,8 +261,8 @@
 val [major,minor] = goal Type.thy
     "[| <a,b> : Sigma(A,B);  [| a:A;  b:B(a) |] ==> P   \
 \    |] ==> P";
-br (major RS (XH_to_E SgXH)) 1;
-br minor 1;
+by (rtac (major RS (XH_to_E SgXH)) 1);
+by (rtac minor 1);
 by (ALLGOALS (fast_tac term_cs));
 val SgE2 = result();
 
@@ -277,15 +277,15 @@
 (*** Infinite Data Types ***)
 
 val [mono] = goal Type.thy "mono(f) ==> lfp(f) <= gfp(f)";
-br (lfp_lowerbound RS subset_trans) 1;
-br (mono RS gfp_lemma3) 1;
-br subset_refl 1;
+by (rtac (lfp_lowerbound RS subset_trans) 1);
+by (rtac (mono RS gfp_lemma3) 1);
+by (rtac subset_refl 1);
 val lfp_subset_gfp = result();
 
 val prems = goal Type.thy
     "[| a:A;  !!x X.[| x:A;  ALL y:A.t(y):X |] ==> t(x) : B(X) |] ==> \
 \    t(a) : gfp(B)";
-br coinduct 1;
+by (rtac coinduct 1);
 by (res_inst_tac [("P","%x.EX y:A.x=t(y)")] CollectI 1);
 by (ALLGOALS (fast_tac (ccl_cs addSIs prems)));
 val gfpI = result();
@@ -302,7 +302,7 @@
 val prems = goal Type.thy 
     "letrec g x be zero$g(x) in g(bot) : Lists(Nat)";
 by (rtac (refl RS (XH_to_I UnitXH) RS (Lists_def RS def_gfpI)) 1);
-br (letrecB RS ssubst) 1;
-bw cons_def;
+by (rtac (letrecB RS ssubst) 1);
+by (rewtac cons_def);
 by (fast_tac type_cs 1);
 result();
--- a/src/CCL/Wfd.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/Wfd.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -26,7 +26,7 @@
     "[| !!x y.<x,y> : R ==> Q(x); \
 \       ALL x. (ALL y. <y,x> : R --> y : P) --> x : P; \
 \       !!x.Q(x) ==> x:P |] ==> a:P";
-br (p2 RS  spec  RS mp) 1;
+by (rtac (p2 RS  spec  RS mp) 1);
 by (fast_tac (set_cs addSIs [p1 RS p3]) 1);
 val wfd_strengthen_lemma = result();
 
@@ -36,7 +36,7 @@
 val wfd::prems = goal Wfd.thy "[| Wfd(r);  <a,x>:r;  <x,a>:r |] ==> P";
 by (subgoal_tac "ALL x. <a,x>:r --> <x,a>:r --> P" 1);
 by (fast_tac (FOL_cs addIs prems) 1);
-br (wfd RS  wfd_induct) 1;
+by (rtac (wfd RS  wfd_induct) 1);
 by (ALLGOALS (fast_tac (ccl_cs addSIs prems)));
 val wf_anti_sym = result();
 
@@ -53,11 +53,11 @@
 (*must retain the universal formula for later use!*)
 by (rtac allE 1 THEN assume_tac 1);
 by (etac mp 1);
-br (prem RS wfd_induct) 1;
+by (rtac (prem RS wfd_induct) 1);
 by (rtac (impI RS allI) 1);
 by (etac tranclE 1);
 by (fast_tac ccl_cs 1);
-be (spec RS mp RS spec RS mp) 1;
+by (etac (spec RS mp RS spec RS mp) 1);
 by (REPEAT (atac 1));
 val trancl_wf = result();
 
@@ -83,27 +83,27 @@
 \    !!a a' b b'.[| <a,a'> : ra; p=<<a,b>,<a',b'>> |] ==> R;  \
 \    !!a b b'.[| <b,b'> : rb;  p = <<a,b>,<a,b'>> |] ==> R  |] ==> \
 \ R";
-br (major RS (lexXH RS iffD1) RS exE) 1;
+by (rtac (major RS (lexXH RS iffD1) RS exE) 1);
 by (REPEAT_SOME (eresolve_tac ([exE,conjE,disjE]@prems)));
 by (ALLGOALS (fast_tac ccl_cs));
 val lexE = result();
 
 val [major,minor] = goal Wfd.thy
  "[| p : r**s;  !!a a' b b'. p = <<a,b>,<a',b'>> ==> P |] ==>P";
-br (major RS lexE) 1;
+by (rtac (major RS lexE) 1);
 by (ALLGOALS (fast_tac (set_cs addSEs [minor])));
 val lex_pair = result();
 
 val [wfa,wfb] = goal Wfd.thy
  "[| Wfd(R); Wfd(S) |] ==> Wfd(R**S)";
-bw Wfd_def;
+by (rewtac Wfd_def);
 by (safe_tac ccl_cs);
 by (wfd_strengthen_tac "%x.EX a b.x=<a,b>" 1);
 by (fast_tac (term_cs addSEs [lex_pair]) 1);
 by (subgoal_tac "ALL a b.<a,b>:P" 1);
 by (fast_tac ccl_cs 1);
-br (wfa RS wfd_induct RS allI) 1;
-br (wfb RS wfd_induct RS allI) 1;back();
+by (rtac (wfa RS wfd_induct RS allI) 1);
+by (rtac (wfb RS wfd_induct RS allI) 1);back();
 by (fast_tac (type_cs addSEs [lexE]) 1);
 val lex_wf = result();
 
@@ -121,40 +121,40 @@
 
 val major::prems = goal Wfd.thy
  "[| p : wmap(f,r);  !!a b.[| <f(a),f(b)> : r;  p=<a,b> |] ==> R |] ==> R";
-br (major RS (wmapXH RS iffD1) RS exE) 1;
+by (rtac (major RS (wmapXH RS iffD1) RS exE) 1);
 by (REPEAT_SOME (eresolve_tac ([exE,conjE,disjE]@prems)));
 by (ALLGOALS (fast_tac ccl_cs));
 val wmapE = result();
 
 val [wf] = goal Wfd.thy
  "Wfd(r) ==> Wfd(wmap(f,r))";
-bw Wfd_def;
+by (rewtac Wfd_def);
 by (safe_tac ccl_cs);
 by (subgoal_tac "ALL b.ALL a.f(a)=b-->a:P" 1);
 by (fast_tac ccl_cs 1);
-br (wf RS wfd_induct RS allI) 1;
+by (rtac (wf RS wfd_induct RS allI) 1);
 by (safe_tac ccl_cs);
-be (spec RS mp) 1;
+by (etac (spec RS mp) 1);
 by (safe_tac (ccl_cs addSEs [wmapE]));
-be (spec RS mp RS spec RS mp) 1;
-ba 1;
-br refl 1;
+by (etac (spec RS mp RS spec RS mp) 1);
+by (assume_tac 1);
+by (rtac refl 1);
 val wmap_wf = result();
 
 (* Projections *)
 
 val prems = goal Wfd.thy "<xa,ya> : r ==> <<xa,xb>,<ya,yb>> : wmap(fst,r)";
-br wmapI 1;
+by (rtac wmapI 1);
 by (simp_tac (term_ss addsimps prems) 1);
 val wfstI = result();
 
 val prems = goal Wfd.thy "<xb,yb> : r ==> <<xa,xb>,<ya,yb>> : wmap(snd,r)";
-br wmapI 1;
+by (rtac wmapI 1);
 by (simp_tac (term_ss addsimps prems) 1);
 val wsndI = result();
 
 val prems = goal Wfd.thy "<xc,yc> : r ==> <<xa,<xb,xc>>,<ya,<yb,yc>>> : wmap(thd,r)";
-br wmapI 1;
+by (rtac wmapI 1);
 by (simp_tac (term_ss addsimps prems) 1);
 val wthdI = result();
 
@@ -172,7 +172,7 @@
 val prems = goalw Wfd.thy [wf_def] "Wfd(wf(R))";
 by (res_inst_tac [("Q","Wfd(R)")] (excluded_middle RS disjE) 1);
 by (ALLGOALS (asm_simp_tac CCL_ss));
-br Empty_wf 1;
+by (rtac Empty_wf 1);
 val wf_wf = result();
 
 goalw Wfd.thy [NatPR_def]  "p : NatPR <-> (EX x:Nat.p=<x,succ(x)>)";
@@ -190,7 +190,7 @@
 by (safe_tac set_cs);
 by (wfd_strengthen_tac "%x.x:Nat" 1);
 by (fast_tac (type_cs addSEs [XH_to_E NatPRXH]) 1);
-be Nat_ind 1;
+by (etac Nat_ind 1);
 by (ALLGOALS (fast_tac (type_cs addEs [XH_to_E NatPRXH])));
 val NatPR_wf = result();
 
@@ -198,7 +198,7 @@
 by (safe_tac set_cs);
 by (wfd_strengthen_tac "%x.x:List(A)" 1);
 by (fast_tac (type_cs addSEs [XH_to_E ListPRXH]) 1);
-be List_ind 1;
+by (etac List_ind 1);
 by (ALLGOALS (fast_tac (type_cs addEs [XH_to_E ListPRXH])));
 val ListPR_wf = result();
 
--- a/src/CCL/coinduction.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/coinduction.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -7,8 +7,8 @@
 *)
 
 val [mono,prem] = goal Lfp.thy "[| mono(f);  a : f(lfp(f)) |] ==> a : lfp(f)";
-br ((mono RS lfp_Tarski) RS ssubst) 1;
-br prem 1;
+by (rtac ((mono RS lfp_Tarski) RS ssubst) 1);
+by (rtac prem 1);
 val lfpI = result();
 
 val prems = goal CCL.thy "[| a=a';  a' : A |] ==> a : A";
@@ -41,7 +41,7 @@
 (** POgen **)
 
 goal Term.thy "<a,a> : PO";
-br (po_refl RS (XH_to_D PO_iff)) 1;
+by (rtac (po_refl RS (XH_to_D PO_iff)) 1);
 val PO_refl = result();
 
 val POgenIs = map (mk_genIs Term.thy data_defs POgenXH POgen_mono)
@@ -71,7 +71,7 @@
 (** EQgen **)
 
 goal Term.thy "<a,a> : EQ";
-br (refl RS (EQ_iff RS iffD1)) 1;
+by (rtac (refl RS (EQ_iff RS iffD1)) 1);
 val EQ_refl = result();
 
 val EQgenIs = map (mk_genIs Term.thy data_defs EQgenXH EQgen_mono)
--- a/src/CCL/eval.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/eval.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -22,16 +22,16 @@
 
 val major::prems = goalw thy [let_def]
    "[| t ---> a;  f(a) ---> c |] ==> let x be t in f(x) ---> c";
-br (major RS canonical) 1;
+by (rtac (major RS canonical) 1);
 by (REPEAT (DEPTH_SOLVE_1 (resolve_tac ([major]@prems@(!EVal_rls)) 1 ORELSE
-                           eresolve_tac [substitute] 1)));
+                           etac substitute 1)));
 val letV = result();
 
 val prems = goalw thy [fix_def]
    "f(fix(f)) ---> c ==> fix(f) ---> c";
-br applyV 1;
-br lamV 1;
-brs prems 1;
+by (rtac applyV 1);
+by (rtac lamV 1);
+by (resolve_tac prems 1);
 val fixV = result();
 
 val prems = goalw thy [letrec_def]
--- a/src/CCL/genrec.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/genrec.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -12,18 +12,18 @@
 \       !!p g.[| p:A; ALL x:{x: A. <x,p>:wf(R)}. g(x) : D(x) |] ==>\
 \               h(p,g) : D(p) |] ==> \
 \    letrec g x be h(x,g) in g(a) : D(a)";
-br (major RS rev_mp) 1;
-br (wf_wf RS wfd_induct) 1;
-br (letrecB RS ssubst) 1;
-br impI 1;
-bes prems 1;
-br ballI 1;
-be (spec RS mp RS mp) 1;
+by (rtac (major RS rev_mp) 1);
+by (rtac (wf_wf RS wfd_induct) 1);
+by (rtac (letrecB RS ssubst) 1);
+by (rtac impI 1);
+by (eresolve_tac prems 1);
+by (rtac ballI 1);
+by (etac (spec RS mp RS mp) 1);
 by (REPEAT (eresolve_tac [SubtypeD1,SubtypeD2] 1));
 val letrecT = result();
 
 goalw Wfd.thy [SPLIT_def] "SPLIT(<a,b>,B) = B(a,b)";
-br set_ext 1;
+by (rtac set_ext 1);
 by (fast_tac ccl_cs 1);
 val SPLITB = result();
 
@@ -33,11 +33,11 @@
 \             ALL x:A.ALL y:{y: B. <<x,y>,<p,q>>:wf(R)}. g(x,y) : D(x,y) |] ==>\
 \               h(p,q,g) : D(p,q) |] ==> \
 \    letrec g x y be h(x,y,g) in g(a,b) : D(a,b)";
-br (SPLITB RS subst) 1;
+by (rtac (SPLITB RS subst) 1);
 by (REPEAT (ares_tac ([letrecT,pairT,splitT]@prems) 1));
-br (SPLITB RS ssubst) 1;
+by (rtac (SPLITB RS ssubst) 1);
 by (REPEAT (ares_tac ([ballI,SubtypeI]@prems) 1));
-br (SPLITB RS subst) 1;
+by (rtac (SPLITB RS subst) 1);
 by (REPEAT (ares_tac ([letrecT,SubtypeI,pairT,splitT]@prems) 1 ORELSE 
             eresolve_tac [bspec,SubtypeE,sym RS subst] 1));
 val letrec2T = result();
@@ -53,11 +53,11 @@
 \                                                       g(x,y,z) : D(x,y,z) |] ==>\
 \               h(p,q,r,g) : D(p,q,r) |] ==> \
 \    letrec g x y z be h(x,y,z,g) in g(a,b,c) : D(a,b,c)";
-br (lemma RS subst) 1;
+by (rtac (lemma RS subst) 1);
 by (REPEAT (ares_tac ([letrecT,pairT,splitT]@prems) 1));
 by (simp_tac (ccl_ss addsimps [SPLITB]) 1);
 by (REPEAT (ares_tac ([ballI,SubtypeI]@prems) 1));
-br (lemma RS subst) 1;
+by (rtac (lemma RS subst) 1);
 by (REPEAT (ares_tac ([letrecT,SubtypeI,pairT,splitT]@prems) 1 ORELSE 
             eresolve_tac [bspec,SubtypeE,sym RS subst] 1));
 val letrec3T = result();
@@ -99,9 +99,9 @@
 \       ALL x:{x:A.<x,p>:wf(R)}.g(x):D(x) ==> a:A;  \
 \       ALL x:{x:A.<x,p>:wf(R)}.g(x):D(x) ==> <a,p>:wf(R) |] ==> \
 \   P";
-brs (prems RL prems) 1;
-brs (prems RL [sym]) 1;
-br rcallT 1;
+by (resolve_tac (prems RL prems) 1);
+by (resolve_tac (prems RL [sym]) 1);
+by (rtac rcallT 1);
 by (REPEAT (ares_tac prems 1));
 val hyprcallT = result();
 
@@ -109,9 +109,9 @@
     "[| g(a) = b; ALL x:{x:A.<x,p>:wf(R)}.g(x):D(x);\
 \       [| b=g(a);  g(a) : D(a) |] ==> P; a:A;  <a,p>:wf(R) |] ==> \
 \   P";
-brs (prems) 1;
-brs (prems RL [sym]) 1;
-br rcallT 1;
+by (resolve_tac (prems) 1);
+by (resolve_tac (prems RL [sym]) 1);
+by (rtac rcallT 1);
 by (REPEAT (ares_tac prems 1));
 val hyprcallT = result();
 
@@ -120,9 +120,9 @@
 \       [| c=g(a,b);  g(a,b) : D(a,b) |] ==> P; \
 \       a:A;  b:B;  <<a,b>,<p,q>>:wf(R) |] ==> \
 \   P";
-brs (prems) 1;
-brs (prems RL [sym]) 1;
-br rcall2T 1;
+by (resolve_tac (prems) 1);
+by (resolve_tac (prems RL [sym]) 1);
+by (rtac rcall2T 1);
 by (REPEAT (ares_tac prems 1));
 val hyprcall2T = result();
 
@@ -132,9 +132,9 @@
 \   [| d=g(a,b,c);  g(a,b,c) : D(a,b,c) |] ==> P; \
 \   a:A;  b:B;  c:C;  <<a,<b,c>>,<p,<q,r>>> : wf(R) |] ==> \
 \   P";
-brs (prems) 1;
-brs (prems RL [sym]) 1;
-br rcall3T 1;
+by (resolve_tac (prems) 1);
+by (resolve_tac (prems RL [sym]) 1);
+by (rtac rcall3T 1);
 by (REPEAT (ares_tac prems 1));
 val hyprcall3T = result();
 
--- a/src/CCL/typecheck.ML	Wed Oct 12 16:38:58 1994 +0100
+++ b/src/CCL/typecheck.ML	Wed Oct 19 09:23:56 1994 +0100
@@ -13,7 +13,7 @@
 val Subtype_canTs = 
        let fun tac prems = cut_facts_tac prems 1 THEN
                 REPEAT (ares_tac (SubtypeI::canTs@icanTs) 1 ORELSE
-                        eresolve_tac [SubtypeE] 1)
+                        etac SubtypeE 1)
            fun solve s = prove_goal Type.thy s (fn prems => [tac prems])
        in map solve
            ["P(one) ==> one : {x:Unit.P(x)}",
@@ -31,7 +31,7 @@
 val Subtype_canTs = 
        let fun tac prems = cut_facts_tac prems 1 THEN
                 REPEAT (ares_tac (SubtypeI::canTs@icanTs) 1 ORELSE
-                        eresolve_tac [SubtypeE] 1)
+                        etac SubtypeE 1)
            fun solve s = prove_goal Type.thy s (fn prems => [tac prems])
        in map solve
            ["a : {x:A. b:{y:B(a).P(<x,y>)}} ==> <a,b> : {x:Sigma(A,B).P(x)}",
@@ -44,8 +44,8 @@
 val prems = goal Type.thy
      "[| f(t):B;  ~t=bot  |] ==> let x be t in f(x) : B";
 by (cut_facts_tac prems 1);
-be (letB RS ssubst) 1;
-ba 1;
+by (etac (letB RS ssubst) 1);
+by (assume_tac 1);
 val letT = result();
 
 val prems = goal Type.thy