src/HOL/BCV/Opt.ML
author wenzelm
Fri, 06 Oct 2000 17:35:58 +0200
changeset 10168 50be659d4222
parent 9791 a39e5d43de55
child 10172 3daeda3d3cd0
permissions -rw-r--r--
final tuning;
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/Opt.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,le_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     8
 "o1 <=_(le r) o2 = \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     9
\ (case o2 of None => o1=None | \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    10
\             Some y => (case o1 of None => True | Some x => x <=_r y))";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    11
br refl 1;
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    12
qed "unfold_le_opt";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    13
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    14
Goal "order r ==> o1 <=_(le r) o1";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    15
by (asm_simp_tac (simpset() addsimps [unfold_le_opt] addsplits [option.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    16
qed "le_opt_refl";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    17
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    18
Goal "order r ==> \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    19
\     o1 <=_(le r) o2 --> o2 <=_(le r) o3 --> o1 <=_(le r) o3";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    20
by (simp_tac (simpset() addsimps [unfold_le_opt] addsplits [option.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    21
by (blast_tac (claset() addIs [order_trans]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    22
qed_spec_mp "le_opt_trans";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    23
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    24
Goal "order r ==> o1 <=_(le r) o2 --> o2 <=_(le r) o1 --> o1=o2";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    25
by (simp_tac (simpset() addsimps [unfold_le_opt] addsplits [option.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    26
by (blast_tac (claset() addIs [order_antisym]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    27
qed_spec_mp "le_opt_antisym";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    28
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    29
Goal "order r ==> order(le r)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    30
by(stac order_def 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    31
by(blast_tac (claset() addIs [le_opt_refl,le_opt_trans,le_opt_antisym]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    32
qed "order_le_opt";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    33
AddSIs [order_le_opt];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    34
Addsimps [order_le_opt];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    35
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    36
Goalw [lesub_def,le_def] "None <=_(le r) ox";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    37
by(simp_tac (simpset() addsplits [option.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    38
qed "None_bot";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    39
AddIffs [None_bot];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    40
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    41
Goalw [lesub_def,le_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    42
 "(Some x <=_(le r) ox) = (? y. ox = Some y & x <=_r y)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    43
by(simp_tac (simpset() addsplits [option.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    44
qed "Some_le";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    45
AddIffs [Some_le];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    46
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    47
Goalw [lesub_def,le_def] "(ox <=_(le r) None) = (ox = None)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    48
by(simp_tac (simpset() addsplits [option.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    49
qed "le_None";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    50
AddIffs [le_None];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    51
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    52
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    53
Goalw [Opt.sl_def,semilat_def,closed_def,split RS eq_reflection]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    54
 "!!L. semilat L ==> semilat (Opt.sl L)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    55
by(split_all_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    56
by (asm_full_simp_tac (simpset() addsplits [option.split]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    57
 addsimps [lesub_def,Opt.le_def,plussub_def,Opt.sup_def,opt_def,Bex_def]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    58
by (asm_full_simp_tac (simpset() addsimps [order_def,lesub_def]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    59
qed "semilat_opt";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    60
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    61
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    62
Goalw [top_def] "top (le r) (Some T) = top r T";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    63
br iffI 1;
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    64
 by(Blast_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    65
br allI 1;
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    66
by(case_tac "x" 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    67
by(ALLGOALS Asm_simp_tac);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    68
qed "top_le_opt_Some";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    69
AddIffs [top_le_opt_Some];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    70
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    71
Goalw [top_def] "[| order r; top r T |] ==> (T <=_r x) = (x = T)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    72
by(blast_tac (claset() addIs [order_antisym]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    73
qed "Top_le_conv";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    74
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    75
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    76
Goalw [opt_def] "None : opt A";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    77
by (Simp_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    78
qed "None_in_opt";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    79
AddIffs [None_in_opt];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    80
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    81
Goalw [opt_def] "(Some x : opt A) = (x:A)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    82
by (Auto_tac);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    83
qed "Some_in_opt";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    84
AddIffs [Some_in_opt];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    85
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    86
Goalw [acc_def,lesub_def,le_def,lesssub_def] "acc r ==> acc(le r)";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    87
by (asm_full_simp_tac (simpset() addsimps [wf_eq_minimal] addsplits [option.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    88
by (Clarify_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    89
by (case_tac "? a. Some a : Q" 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    90
 by (eres_inst_tac [("x","{a . Some a : Q}")] allE 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    91
 by (Blast_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    92
by (case_tac "x" 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    93
 by (Blast_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    94
by (Blast_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    95
qed "acc_le_optI";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    96
AddSIs [acc_le_optI];
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    97
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    98
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    99
Goalw [option_map_def]
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   100
 "[| ox : opt S; !x:S. ox = Some x --> f x : S |] \
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   101
\ ==> option_map f ox : opt S";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   102
by (asm_simp_tac (simpset() addsplits [option.split]) 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   103
by(Blast_tac 1);
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   104
qed "option_map_in_optionI";
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
   105