src/HOL/BCV/Err.ML
author wenzelm
Thu, 14 Dec 2000 19:36:48 +0100
changeset 10671 ac6b3b671198
parent 10172 3daeda3d3cd0
child 11224 5f10ca5e0b49
permissions -rw-r--r--
added Summation;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/BCV/Err.ML
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     2
    ID:         $Id$
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     4
    Copyright   2000 TUM
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     5
*)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     6
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     7
Goalw [lesub_def] "e1 <=_(le r) e2 == le r e1 e2";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     8
by (Simp_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     9
qed "unfold_lesub_err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    10
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    11
Goalw [lesub_def,Err.le_def] "!x. x <=_r x ==> e <=_(Err.le r) e";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    12
by (asm_simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    13
qed "le_err_refl";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    14
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    15
Goalw [unfold_lesub_err,le_def] "order r ==> \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    16
\     e1 <=_(le r) e2 --> e2 <=_(le r) e3 --> e1 <=_(le r) e3";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    17
by (simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    18
by (blast_tac (claset() addIs [order_trans]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    19
qed_spec_mp "le_err_trans";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    20
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    21
Goalw [unfold_lesub_err,le_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    22
 "order r ==> e1 <=_(le r) e2 --> e2 <=_(le r) e1 --> e1=e2";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    23
by (simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    24
by (blast_tac (claset() addIs [order_antisym]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    25
qed_spec_mp "le_err_antisym";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    26
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    27
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    28
Goalw [unfold_lesub_err,le_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    29
  "(OK x <=_(le r) OK y) = (x <=_r y)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    30
by (Simp_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    31
qed "OK_le_err_OK";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    32
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    33
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    34
Goal "order(le r) = order r";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
    35
by (rtac iffI 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
    36
 by (stac order_def 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
    37
 by (blast_tac (claset() addDs [order_antisym,OK_le_err_OK RS iffD2]
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    38
                        addIs [order_trans,OK_le_err_OK RS iffD1]) 1);
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
    39
by (stac order_def 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
    40
by (blast_tac (claset() addIs [le_err_refl,le_err_trans,le_err_antisym]
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    41
                       addDs [order_refl]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    42
qed "order_le_err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    43
AddIffs [order_le_err];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    44
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    45
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    46
Goalw [unfold_lesub_err,le_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    47
 "e <=_(le r) Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    48
by (Simp_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    49
qed "le_Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    50
AddIffs [le_Err];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    51
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    52
Goalw [unfold_lesub_err,le_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    53
 "Err <=_(le r) e  = (e = Err)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    54
by (simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    55
qed "Err_le_conv";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    56
AddIffs [Err_le_conv];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    57
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    58
Goalw [unfold_lesub_err,le_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    59
 "e <=_(le r) OK x  =  (? y. e = OK y & y <=_r x)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    60
by (simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    61
qed "le_OK_conv";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    62
AddIffs [le_OK_conv];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    63
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    64
Goalw [unfold_lesub_err,le_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    65
 "OK x <=_(le r) e  =  (e = Err | (? y. e = OK y & x <=_r y))";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    66
by (simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    67
qed "OK_le_conv";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    68
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    69
Goalw [top_def] "top (le r) Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    70
by (Simp_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    71
qed "top_Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    72
AddIffs [top_Err];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    73
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    74
Goalw [lesssub_def,lesub_def,le_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    75
 "OK x <_(le r) e = (e=Err | (? y. e = OK y & x <_r y))";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    76
by (simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    77
qed_spec_mp "OK_less_conv";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    78
AddIffs [OK_less_conv];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    79
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    80
Goalw [lesssub_def,lesub_def,le_def] "~(Err <_(le r) x)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    81
by (simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    82
qed_spec_mp "not_Err_less";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    83
AddIffs [not_Err_less];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    84
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    85
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    86
Goalw
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    87
 [semilat_Def,closed_def,plussub_def,lesub_def,lift2_def,Err.le_def,err_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    88
 "semilat(A,r,f) ==> semilat(err A, Err.le r, lift2(%x y. OK(f x y)))";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    89
by (asm_full_simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    90
by (Blast_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    91
qed "semilat_errI";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    92
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    93
Goalw [sl_def,esl_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    94
  "!!L. semilat L ==> err_semilat(esl L)";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
    95
by (split_all_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
    96
by (asm_full_simp_tac (simpset() addsimps [semilat_errI]) 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    97
qed "err_semilat_eslI";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    98
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    99
Goalw [acc_def,lesub_def,le_def,lesssub_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   100
 "acc r ==> acc(le r)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   101
by (asm_full_simp_tac (simpset() addsimps [wf_eq_minimal] addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   102
by (Clarify_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   103
by (case_tac "Err : Q" 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   104
 by (Blast_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   105
by (eres_inst_tac [("x","{a . OK a : Q}")] allE 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   106
by (case_tac "x" 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   107
 by (Fast_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   108
by (Blast_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   109
qed "acc_err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   110
Addsimps [acc_err];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   111
AddSIs [acc_err];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   112
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   113
Goalw [err_def] "Err : err A";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   114
by (Simp_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   115
qed "Err_in_err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   116
AddIffs [Err_in_err];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   117
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   118
Goalw [err_def] "(OK x : err A) = (x:A)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   119
by (Auto_tac);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   120
qed "OK_in_err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   121
AddIffs [OK_in_err];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   122
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   123
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   124
(** lift **)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   125
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   126
Goalw [lift_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   127
 "[| e : err S; !x:S. e = OK x --> f x : err S |] ==> lift f e : err S";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   128
by (asm_simp_tac (simpset() addsplits [err.split]) 1);
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   129
by (Blast_tac 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   130
qed "lift_in_errI";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   131
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   132
(** lift2 **)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   133
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   134
Goalw [lift2_def,plussub_def] "Err +_(lift2 f) x = Err";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   135
by (Simp_tac 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   136
qed "Err_lift2";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   137
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   138
Goalw [lift2_def,plussub_def] "x +_(lift2 f) Err = Err";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   139
by (simp_tac (simpset() addsplits [err.split]) 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   140
qed "lift2_Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   141
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   142
Goalw [lift2_def,plussub_def] "OK x +_(lift2 f) OK y = x +_f y";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   143
by (simp_tac (simpset() addsplits [err.split]) 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   144
qed "OK_lift2_OK";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   145
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   146
Addsimps [Err_lift2,lift2_Err,OK_lift2_OK];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   147
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   148
(** sup **)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   149
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   150
Goalw [plussub_def,Err.sup_def,Err.lift2_def] "Err +_(Err.sup f) x = Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   151
by (Simp_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   152
qed "Err_sup_Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   153
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   154
Goalw [plussub_def,Err.sup_def,Err.lift2_def] "x +_(Err.sup f) Err = Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   155
by (simp_tac (simpset() addsplits [err.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   156
qed "Err_sup_Err2";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   157
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   158
Goalw [plussub_def,Err.sup_def,Err.lift2_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   159
 "OK x +_(Err.sup f) OK y = OK(x +_f y)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   160
by (Simp_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   161
qed "Err_sup_OK";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   162
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   163
Addsimps [Err_sup_Err,Err_sup_Err2,Err_sup_OK];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   164
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   165
Goalw [Err.sup_def,lift2_def,plussub_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   166
 "(Err.sup f ex ey = OK z) = (? x y. ex = OK x & ey = OK y & f x y = z)";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   167
by (rtac iffI 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   168
 by (Clarify_tac 2);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   169
 by (Asm_simp_tac 2);
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   170
by (asm_full_simp_tac (simpset() addsplits [err.split_asm]) 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   171
qed "Err_sup_eq_OK_conv";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   172
AddIffs [Err_sup_eq_OK_conv];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   173
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   174
Goalw [Err.sup_def,lift2_def,plussub_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   175
 "(Err.sup f ex ey = Err) = (ex=Err | ey=Err)";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   176
by (simp_tac (simpset() addsplits [err.split]) 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   177
qed "Err_sup_eq_Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   178
AddIffs [Err_sup_eq_Err];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   179
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   180
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   181
(*** semilat (err A) (le r) f ***)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   182
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   183
Goal "[| x: err A; semilat(err A, le r, f) |] ==> Err +_f x = Err";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   184
by (blast_tac (claset() addIs [le_iff_plus_unchanged RS iffD1,le_iff_plus_unchanged2 RS iffD1]) 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   185
qed "semilat_le_err_Err_plus";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   186
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   187
Goal "[| x: err A; semilat(err A, le r, f) |] ==> x +_f Err = Err";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   188
by (blast_tac (claset() addIs [le_iff_plus_unchanged RS iffD1,le_iff_plus_unchanged2 RS iffD1]) 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   189
qed "semilat_le_err_plus_Err";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   190
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   191
Addsimps [semilat_le_err_Err_plus,semilat_le_err_plus_Err];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   192
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   193
Goal "[| x:A; y:A; semilat(err A, le r, f); OK x +_f OK y = OK z |] \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   194
\     ==> x <=_r z";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   195
by (rtac (OK_le_err_OK RS iffD1) 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   196
by (etac subst 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   197
by (Asm_simp_tac 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   198
qed "semilat_le_err_OK1";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   199
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   200
Goal "[| x:A; y:A; semilat(err A, le r, f); OK x +_f OK y = OK z |] \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   201
\     ==> y <=_r z";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   202
by (rtac (OK_le_err_OK RS iffD1) 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   203
by (etac subst 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   204
by (Asm_simp_tac 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   205
qed "semilat_le_err_OK2";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   206
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   207
Goalw [order_def] "[| x=y; order r |] ==> x <=_r y";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   208
by (Blast_tac 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   209
qed "eq_order_le";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   210
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   211
Goal
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   212
 "[| x:A; y:A; semilat(err A, le r, fe) |] ==> \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   213
\ ((OK x) +_fe (OK y) = Err) = (~(? z:A. x <=_r z & y <=_r z))";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   214
by (rtac iffI 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   215
 by (Clarify_tac 1);
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   216
 by (dtac (OK_le_err_OK RS iffD2) 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   217
 by (dtac (OK_le_err_OK RS iffD2) 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   218
 by (dtac semilat_lub 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   219
      by (assume_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   220
     by (assume_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   221
    by (Asm_simp_tac 1); 
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   222
   by (Asm_simp_tac 1); 
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   223
  by (Asm_simp_tac 1); 
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   224
 by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   225
by (case_tac "(OK x) +_fe (OK y)" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   226
 by (assume_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   227
by (rename_tac "z" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   228
by (subgoal_tac "OK z: err A" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   229
by (dtac eq_order_le 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   230
  by (Blast_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   231
 by (blast_tac (claset() addDs [rotate_prems 3 (plus_le_conv RS iffD1)]) 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   232
by (etac subst 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   233
by (blast_tac (claset() addIs [closedD]) 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   234
qed "OK_plus_OK_eq_Err_conv";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   235
Addsimps [OK_plus_OK_eq_Err_conv];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   236
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   237
(*** semilat (err(Union AS)) ***)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   238
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   239
(* FIXME? *)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   240
Goal "(!x. (? y:A. x = f y) --> P x) = (!y:A. P(f y))";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   241
by (Blast_tac 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   242
qed "all_bex_swap_lemma";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   243
AddIffs [all_bex_swap_lemma];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   244
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   245
Goalw [closed_def,err_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   246
 "[| !A:AS. closed (err A) (lift2 f); AS ~= {}; \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   247
\    !A:AS.!B:AS. A~=B --> (!a:A.!b:B. a +_f b = Err) |] \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   248
\ ==> closed (err(Union AS)) (lift2 f)";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   249
by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   250
by (Clarify_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   251
by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   252
by (Fast_tac 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   253
qed "closed_err_Union_lift2I";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   254
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   255
(* If AS = {} the thm collapses to
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   256
   order r & closed {Err} f & Err +_f Err = Err
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   257
   which may not hold *)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   258
Goalw [semilat_def,sl_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   259
 "[| !A:AS. err_semilat(A, r, f); AS ~= {}; \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   260
\    !A:AS.!B:AS. A~=B --> (!a:A.!b:B. ~ a <=_r b & a +_f b = Err) |] \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   261
\ ==> err_semilat(Union AS, r, f)";
10172
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   262
by (asm_full_simp_tac (simpset() addsimps [closed_err_Union_lift2I]) 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   263
by (rtac conjI 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   264
 by (Blast_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   265
by (asm_full_simp_tac (simpset() addsimps [err_def]) 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   266
by (rtac conjI 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   267
 by (Clarify_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   268
 by (rename_tac "A a u B b" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   269
 by (case_tac "A = B" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   270
  by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   271
 by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   272
by (rtac conjI 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   273
 by (Clarify_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   274
 by (rename_tac "A a u B b" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   275
 by (case_tac "A = B" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   276
  by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   277
 by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   278
by (Clarify_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   279
by (rename_tac "A ya yb B yd z C c a b" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   280
by (case_tac "A = B" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   281
 by (case_tac "A = C" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   282
  by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   283
 by (rotate_tac ~1 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   284
 by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   285
by (rotate_tac ~1 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   286
by (case_tac "B = C" 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   287
 by (Asm_full_simp_tac 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   288
by (rotate_tac ~1 1);
3daeda3d3cd0 expandshort
paulson
parents: 9791
diff changeset
   289
by (Asm_full_simp_tac 1);
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   290
qed "err_semilat_UnionI";