src/CCL/Hered.ML
author lcp
Mon, 20 Sep 1993 17:02:11 +0200
changeset 8 c3d2c6dcf3f0
parent 0 a5a9c433f639
child 289 78541329ff35
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/hered
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     3
    Author: 	Martin Coen, Cambridge University Computer Laboratory
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1993  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
For hered.thy.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
open Hered;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
fun type_of_terms (Const("Trueprop",_) $ (Const("op =",(Type ("fun", [t,_])))$_$_)) = t;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
(*** Hereditary Termination ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
goalw Hered.thy [HTTgen_def]  "mono(%X.HTTgen(X))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
br monoI 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
by (fast_tac set_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
val HTTgen_mono = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
goalw Hered.thy [HTTgen_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
  "t : HTTgen(A) <-> t=true | t=false | (EX a b.t=<a,b> & a : A & b : A) | \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
\                                       (EX f.t=lam x.f(x) & (ALL x.f(x) : A))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
by (fast_tac set_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
val HTTgenXH = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
goal Hered.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
  "t : HTT <-> t=true | t=false | (EX a b.t=<a,b> & a : HTT & b : HTT) | \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
\                                  (EX f.t=lam x.f(x) & (ALL x.f(x) : HTT))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
br (rewrite_rule [HTTgen_def] 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
                 (HTTgen_mono RS (HTT_def RS def_gfp_Tarski) RS XHlemma1)) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
by (fast_tac set_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
val HTTXH = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    33
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
(*** Introduction Rules for HTT ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
goal Hered.thy "~ bot : HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
by (fast_tac (term_cs addDs [XH_to_D HTTXH]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
val HTT_bot = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
goal Hered.thy "true : HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
by (fast_tac (term_cs addIs [XH_to_I HTTXH]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
val HTT_true = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
goal Hered.thy "false : HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
by (fast_tac (term_cs addIs [XH_to_I HTTXH]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
val HTT_false = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
goal Hered.thy "<a,b> : HTT <->  a : HTT  & b : HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
br (HTTXH RS iff_trans) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    50
by (fast_tac term_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
val HTT_pair = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    53
goal Hered.thy "lam x.f(x) : HTT <-> (ALL x. f(x) : HTT)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    54
br (HTTXH RS iff_trans) 1;
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
    55
by (simp_tac term_ss 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    56
by (safe_tac term_cs);
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
    57
by (asm_simp_tac term_ss 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    58
by (fast_tac term_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    59
val HTT_lam = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    60
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    61
local
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    62
  val raw_HTTrews = [HTT_bot,HTT_true,HTT_false,HTT_pair,HTT_lam];
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    63
  fun mk_thm s = prove_goalw Hered.thy data_defs s (fn _ => 
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
    64
                  [simp_tac (term_ss addsimps raw_HTTrews) 1]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    65
in
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    66
  val HTT_rews = raw_HTTrews @
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    67
               map mk_thm ["one : HTT",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    68
                           "inl(a) : HTT <-> a : HTT",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
                           "inr(b) : HTT <-> b : HTT",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    70
                           "zero : HTT",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    71
                           "succ(n) : HTT <-> n : HTT",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    72
                           "[] : HTT",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    73
                           "x.xs : HTT <-> x : HTT & xs : HTT"];
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    74
end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    75
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    76
val HTT_Is = HTT_rews @ (HTT_rews RL [iffD2]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    77
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    78
(*** Coinduction for HTT ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    79
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    80
val prems = goal Hered.thy "[|  t : R;  R <= HTTgen(R) |] ==> t : HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    81
br (HTT_def RS def_coinduct) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    82
by (REPEAT (ares_tac prems 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    83
val HTT_coinduct = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    84
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    85
fun HTT_coinduct_tac s i = res_inst_tac [("R",s)] HTT_coinduct i;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    86
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    87
val prems = goal Hered.thy 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    88
    "[|  t : R;   R <= HTTgen(lfp(%x. HTTgen(x) Un R Un HTT)) |] ==> t : HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    89
br (HTTgen_mono RSN(3,HTT_def RS def_coinduct3)) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    90
by (REPEAT (ares_tac prems 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    91
val HTT_coinduct3 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    92
val HTT_coinduct3_raw = rewrite_rule [HTTgen_def] HTT_coinduct3;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    93
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    94
fun HTT_coinduct3_tac s i = res_inst_tac [("R",s)] HTT_coinduct3 i;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    95
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    96
val HTTgenIs = map (mk_genIs Hered.thy data_defs HTTgenXH HTTgen_mono)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    97
       ["true : HTTgen(R)",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    98
        "false : HTTgen(R)",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    99
        "[| a : R;  b : R |] ==> <a,b> : HTTgen(R)",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   100
        "[| !!x. b(x) : R |] ==> lam x.b(x) : HTTgen(R)",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   101
        "one : HTTgen(R)",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   102
        "a : lfp(%x. HTTgen(x) Un R Un HTT) ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   103
\                         inl(a) : HTTgen(lfp(%x. HTTgen(x) Un R Un HTT))",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   104
        "b : lfp(%x. HTTgen(x) Un R Un HTT) ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   105
\                         inr(b) : HTTgen(lfp(%x. HTTgen(x) Un R Un HTT))",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   106
        "zero : HTTgen(lfp(%x. HTTgen(x) Un R Un HTT))",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   107
        "n : lfp(%x. HTTgen(x) Un R Un HTT) ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   108
\                         succ(n) : HTTgen(lfp(%x. HTTgen(x) Un R Un HTT))",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   109
        "[] : HTTgen(lfp(%x. HTTgen(x) Un R Un HTT))",
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   110
        "[| h : lfp(%x. HTTgen(x) Un R Un HTT); t : lfp(%x. HTTgen(x) Un R Un HTT) |] ==>\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   111
\                         h.t : HTTgen(lfp(%x. HTTgen(x) Un R Un HTT))"];
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   112
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   113
(*** Formation Rules for Types ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   114
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   115
goal Hered.thy "Unit <= HTT";
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   116
by (simp_tac (CCL_ss addsimps ([subsetXH,UnitXH] @ HTT_rews)) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   117
val UnitF = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   118
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   119
goal Hered.thy "Bool <= HTT";
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   120
by (simp_tac (CCL_ss addsimps ([subsetXH,BoolXH] @ HTT_rews)) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   121
by (fast_tac (set_cs addIs HTT_Is @ (prems RL [subsetD])) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   122
val BoolF = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   123
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   124
val prems = goal Hered.thy "[| A <= HTT;  B <= HTT |] ==> A + B  <= HTT";
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   125
by (simp_tac (CCL_ss addsimps ([subsetXH,PlusXH] @ HTT_rews)) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   126
by (fast_tac (set_cs addIs HTT_Is @ (prems RL [subsetD])) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   127
val PlusF = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   128
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   129
val prems = goal Hered.thy 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   130
     "[| A <= HTT;  !!x.x:A ==> B(x) <= HTT |] ==> SUM x:A.B(x) <= HTT";
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   131
by (simp_tac (CCL_ss addsimps ([subsetXH,SgXH] @ HTT_rews)) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   132
by (fast_tac (set_cs addIs HTT_Is @ (prems RL [subsetD])) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   133
val SigmaF = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   134
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   135
(*** Formation Rules for Recursive types - using coinduction these only need ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   136
(***                                          exhaution rule for type-former ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   137
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   138
(*Proof by induction - needs induction rule for type*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   139
goal Hered.thy "Nat <= HTT";
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   140
by (simp_tac (term_ss addsimps [subsetXH]) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   141
by (safe_tac set_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   142
be Nat_ind 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   143
by (ALLGOALS (fast_tac (set_cs addIs HTT_Is @ (prems RL [subsetD]))));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   144
val NatF = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   145
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   146
goal Hered.thy "Nat <= HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   147
by (safe_tac set_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   148
be HTT_coinduct3 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   149
by (fast_tac (set_cs addIs HTTgenIs 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   150
                 addSEs [HTTgen_mono RS ci3_RI] addEs [XH_to_E NatXH]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   151
val NatF = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   152
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   153
val [prem] = goal Hered.thy "A <= HTT ==> List(A) <= HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   154
by (safe_tac set_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   155
be HTT_coinduct3 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   156
by (fast_tac (set_cs addSIs HTTgenIs 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   157
                 addSEs [HTTgen_mono RS ci3_RI,prem RS subsetD RS (HTTgen_mono RS ci3_AI)] 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   158
                 addEs [XH_to_E ListXH]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   159
val ListF = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   160
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   161
val [prem] = goal Hered.thy "A <= HTT ==> Lists(A) <= HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   162
by (safe_tac set_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   163
be HTT_coinduct3 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   164
by (fast_tac (set_cs addSIs HTTgenIs 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   165
                 addSEs [HTTgen_mono RS ci3_RI,prem RS subsetD RS (HTTgen_mono RS ci3_AI)] 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   166
                 addEs [XH_to_E ListsXH]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   167
val ListsF = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   168
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   169
val [prem] = goal Hered.thy "A <= HTT ==> ILists(A) <= HTT";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   170
by (safe_tac set_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   171
be HTT_coinduct3 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   172
by (fast_tac (set_cs addSIs HTTgenIs 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   173
                 addSEs [HTTgen_mono RS ci3_RI,prem RS subsetD RS (HTTgen_mono RS ci3_AI)] 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   174
                 addEs [XH_to_E IListsXH]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   175
val IListsF = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   176
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   177
(*** A possible use for this predicate is proving equality from pre-order       ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   178
(*** but it seems as easy (and more general) to do this directly by coinduction ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   179
(*
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   180
val prems = goal Hered.thy "[| t : HTT;  t [= u |] ==> u [= t";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   181
by (po_coinduct_tac "{p. EX a b.p=<a,b> & b : HTT & b [= a}" 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   182
by (fast_tac (ccl_cs addIs prems) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   183
by (safe_tac ccl_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   184
bd (poXH RS iffD1) 1;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   185
by (safe_tac (set_cs addSEs [HTT_bot RS notE]));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   186
by (REPEAT_SOME (rtac (POgenXH RS iffD2) ORELSE' etac rev_mp));
8
c3d2c6dcf3f0 Installation of new simplfier. Previously appeared to set up the old
lcp
parents: 0
diff changeset
   187
by (ALLGOALS (simp_tac (term_ss addsimps HTT_rews)));
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   188
by (ALLGOALS (fast_tac ccl_cs));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   189
val HTT_po_op = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   190
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   191
val prems = goal Hered.thy "[| t : HTT;  t [= u |] ==> t = u";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   192
by (REPEAT (ares_tac (prems @ [conjI RS (eq_iff RS iffD2),HTT_po_op]) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   193
val HTT_po_eq = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   194
*)