src/HOL/MicroJava/BV/Convert.ML
author wenzelm
Tue, 30 May 2000 16:08:38 +0200
changeset 9000 c20d58286a51
parent 8442 96023903c2df
permissions -rw-r--r--
cleaned up;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/BV/Convert.ML
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     2
    ID:         $Id$
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     3
    Author:     Cornelia Pusch
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     4
    Copyright   1999 Technische Universitaet Muenchen
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     5
*)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     6
8139
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
     7
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
     8
Goalw[sup_ty_opt_def] "G \\<turnstile> t <=o t";
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
     9
by (case_tac "t" 1);
8139
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    10
by Auto_tac;
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    11
qed "sup_ty_opt_refl";
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    12
Addsimps [sup_ty_opt_refl];
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    13
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    14
Goalw[sup_loc_def] "G \\<turnstile> t <=l t";
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    15
by (induct_tac "t" 1);
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    16
by Auto_tac;
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    17
qed "sup_loc_refl";
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    18
Addsimps [sup_loc_refl];
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    19
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    20
Goalw[sup_state_def] "G \\<turnstile> s <=s s";
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    21
by Auto_tac;
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    22
qed "sup_state_refl";
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    23
Addsimps [sup_state_refl];
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    24
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
val widen_PrimT_conv1 =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
 prove_typerel "(G \\<turnstile> PrimT x \\<preceq> T) = (T = PrimT x)"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    27
 [ prove_widen_lemma "G\\<turnstile>S\\<preceq>T \\<Longrightarrow> S = PrimT x \\<longrightarrow> T = PrimT x"];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    28
Addsimps [widen_PrimT_conv1];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    29
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    30
Goalw [sup_ty_opt_def] "(G \\<turnstile> None <=o any) = (any = None)";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    31
by(simp_tac (simpset() addsplits [option.split]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    32
qed "anyConvNone";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    33
Addsimps [anyConvNone];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    34
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    35
Goalw [sup_ty_opt_def] "(G \\<turnstile> Some ty' <=o Some ty) = (G \\<turnstile> ty' \\<preceq> ty)";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    36
by(Simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    37
qed "SomeanyConvSome";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
Addsimps [SomeanyConvSome];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    40
Goal
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    41
"(G \\<turnstile> Some(PrimT Integer) <=o X) = (X=None \\<or> (X=Some(PrimT Integer)))";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    42
by (simp_tac (simpset() setloop (split_tac [ty.split,option.split]) addsimps [sup_ty_opt_def]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    43
qed "sup_PTS_eq";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    44
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    45
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8023
diff changeset
    46
Goalw [sup_loc_def] "CFS \\<turnstile> [] <=l XT = (XT=[])";
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8023
diff changeset
    47
by(Simp_tac 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    48
qed "sup_loc_Nil";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8023
diff changeset
    49
AddIffs [sup_loc_Nil];
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8023
diff changeset
    50
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    51
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8023
diff changeset
    52
Goalw [sup_loc_def]
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    53
"CFS \\<turnstile> (Y#YT) <=l XT = (\\<exists>X XT'. XT=X#XT' \\<and> CFS \\<turnstile> Y <=o X \\<and> CFS \\<turnstile> YT <=l XT')";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8023
diff changeset
    54
by(simp_tac (simpset() addsimps [list_all2_Cons1]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    55
qed "sup_loc_Cons";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8023
diff changeset
    56
AddIffs [sup_loc_Cons];
8139
037172b3623c reflexivity simp rules
kleing
parents: 8119
diff changeset
    57
8389
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    58
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    59
Goal "\\<forall> b. G \\<turnstile> a <=l b \\<longrightarrow> length a = length b";
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    60
by (induct_tac "a" 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    61
 by (Simp_tac 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    62
by (Clarsimp_tac 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    63
qed_spec_mp "sup_loc_length";
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    64
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    65
Goal "\\<forall> n b. (G \\<turnstile> a <=l b) \\<longrightarrow> n < length a \\<longrightarrow> (G \\<turnstile> (a!n) <=o (b!n))";
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    66
by (induct_tac "a" 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    67
 by (Simp_tac 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    68
by (Clarsimp_tac 1);
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
    69
by (case_tac "n" 1);
8389
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    70
 by (Asm_full_simp_tac 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    71
by (eres_inst_tac [("x","nat")] allE 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    72
by (smp_tac 1 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    73
by (Asm_full_simp_tac 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    74
qed_spec_mp "sup_loc_nth";
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    75
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    76
Goalw[sup_state_def]
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    77
"(G \\<turnstile> (x, y) <=s (a, b)) \\<Longrightarrow> length x = length a";
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    78
by (Clarsimp_tac 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    79
bd sup_loc_length 1;
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    80
by Auto_tac;
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    81
qed "sup_state_length_fst";
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    82
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    83
Goalw[sup_state_def] 
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    84
"(G \\<turnstile> (x, y) <=s (a, b)) \\<longrightarrow> length y = length b";
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    85
by (clarsimp_tac (claset(), simpset() addsimps [sup_loc_length]) 1);
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    86
qed "sup_state_length_snd";
130109a9b8c1 some more small lemmas
kleing
parents: 8139
diff changeset
    87
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    88
Goal "\\<forall>b. length a = length b \\<longrightarrow> (G \\<turnstile> (a@x) <=l (b@y)) = ((G \\<turnstile> a <=l b) \\<and> (G \\<turnstile> x <=l y))";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    89
by (induct_tac "a" 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    90
 by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    91
by (Clarify_tac 1);
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
    92
by (case_tac "b" 1);
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    93
 by (Clarsimp_tac 1);  
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    94
by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    95
qed_spec_mp "sup_loc_append";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    96
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    97
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    98
Goalw[sup_state_def] 
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
    99
"length a = length b \\<Longrightarrow> (G \\<turnstile> (i,a@x) <=s (j,b@y)) = ((G \\<turnstile> (i,a) <=s (j,b)) \\<and> (G \\<turnstile> (i,x) <=s (j,y)))";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   100
by (auto_tac (claset(), simpset() addsimps [sup_loc_append]));
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   101
qed "sup_state_append_snd";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   102
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   103
Goalw[sup_state_def]
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   104
"length a = length b \\<Longrightarrow> (G \\<turnstile> (a@x,i) <=s (b@y,j)) = ((G \\<turnstile> (a,i) <=s (b,j)) \\<and> (G \\<turnstile> (x,i) <=s (y,j)))";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   105
by (auto_tac (claset(), simpset() addsimps [sup_loc_append]));
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   106
qed "sup_state_append_fst";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   107
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   108
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   109
Goal "\\<forall> b. (G \\<turnstile> (rev a) <=l rev b) = (G \\<turnstile> a <=l b)";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   110
by (induct_tac "a" 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   111
 by (Simp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   112
by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   113
by Safe_tac;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   114
 by (clarsimp_tac (claset(), simpset() addsimps [sup_loc_append, sup_loc_length]) 2);
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
   115
by (case_tac "b" 1); 
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   116
 bd sup_loc_length 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   117
 by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   118
by (clarsimp_tac (claset(), simpset() addsimps [sup_loc_append, sup_loc_length]) 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   119
by (subgoal_tac "length (rev list) = length (rev lista)" 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   120
 bd sup_loc_length 2;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   121
 by (Clarsimp_tac 2);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   122
by (dres_inst_tac [("G","G"),("x","[a]"),("y","[aa]")] sup_loc_append 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   123
by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   124
qed_spec_mp "sup_loc_rev";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   125
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   126
Goalw[sup_state_def]
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   127
"(G \\<turnstile> (rev a,x) <=s (rev b,y)) = (G \\<turnstile> (a,x) <=s (b,y))";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   128
by (auto_tac (claset(), simpset() addsimps [sup_loc_rev, rev_map RS sym]));
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   129
qed "sup_state_rev_fst";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   130
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   131
Goal "map x a = Y # YT \\<longrightarrow> map x (tl a) = YT \\<and> x (hd a) = Y \\<and> (\\<exists> y yt. a = y#yt)";
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
   132
by (case_tac "a" 1);
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   133
by Auto_tac;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   134
qed_spec_mp "map_hd_tl";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   135
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   136
Goalw[sup_state_def]
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   137
"(G \\<turnstile> (x#xt, a) <=s (yt, b)) = (\\<exists>y yt'. yt=y#yt' \\<and> (G \\<turnstile> x \\<preceq> y) \\<and> (G \\<turnstile> (xt,a) <=s (yt',b)))";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   138
by Auto_tac;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   139
bd map_hd_tl 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   140
by Auto_tac;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   141
qed "sup_state_Cons1";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   142
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   143
Goalw [sup_loc_def]
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   144
"CFS \\<turnstile> YT <=l (X#XT) = (\\<exists>Y YT'. YT=Y#YT' \\<and> CFS \\<turnstile> Y <=o X \\<and> CFS \\<turnstile> YT' <=l XT)";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   145
by(simp_tac (simpset() addsimps [list_all2_Cons2]) 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   146
qed "sup_loc_Cons2";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   147
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   148
Goalw[sup_state_def]
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   149
"(G \\<turnstile> (xt, a) <=s (y#yt, b)) = (\\<exists>x xt'. xt=x#xt' \\<and> (G \\<turnstile> x \\<preceq> y) \\<and> (G \\<turnstile> (xt',a) <=s (yt,b)))";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   150
by (auto_tac (claset(), simpset() addsimps [sup_loc_Cons2]));
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   151
bd map_hd_tl 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   152
by Auto_tac;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   153
qed "sup_state_Cons2"; 
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   154
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   155
Goalw[sup_state_def] 
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   156
"G \\<turnstile> (a, x) <=s (b, y) \\<Longrightarrow> G \\<turnstile> (c, x) <=s (c, y)";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   157
by Auto_tac;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   158
qed "sup_state_ignore_fst";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   159
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   160
Goalw[sup_ty_opt_def] 
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   161
"\\<lbrakk>G \\<turnstile> a <=o b; G \\<turnstile> b <=o c\\<rbrakk> \\<Longrightarrow> G \\<turnstile> a <=o c";
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
   162
by (case_tac "c" 1);
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   163
 by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   164
by (Clarsimp_tac 1);
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
   165
by (case_tac "a" 1);
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   166
 by (Clarsimp_tac 1);
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
   167
 by (case_tac "b" 1);
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   168
  by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   169
 by (Clarsimp_tac 1);
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
   170
by (case_tac "b" 1);
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   171
 by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   172
by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   173
be widen_trans 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   174
ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   175
qed "sup_ty_opt_trans";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   176
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   177
Goal "\\<lbrakk>G \\<turnstile> a <=l b; G \\<turnstile> b <=l c\\<rbrakk> \\<Longrightarrow> \\<forall> n. n < length a \\<longrightarrow> G \\<turnstile> a!n <=o c!n";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   178
by (Clarify_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   179
by (forward_tac [sup_loc_length] 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   180
bd sup_loc_nth 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   181
 ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   182
bd sup_loc_nth 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   183
 by (Force_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   184
bd sup_ty_opt_trans 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   185
 ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   186
ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   187
qed "sup_loc_all_trans";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   188
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   189
Goal "\\<forall> b. length a = length b \\<longrightarrow> (\\<forall> n. n < length a \\<longrightarrow> (G \\<turnstile> (a!n) <=o (b!n))) \\<longrightarrow> (G \\<turnstile> a <=l b)";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   190
by (induct_tac "a" 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   191
 by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   192
by (Clarsimp_tac 1);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8394
diff changeset
   193
by (case_tac "b=[]" 1);
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   194
 by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   195
by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   196
by (asm_full_simp_tac (simpset() addsimps [neq_Nil_conv]) 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   197
by (Clarify_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   198
by (res_inst_tac [("x","y")] exI 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   199
by (res_inst_tac [("x","ys")] exI 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   200
by (eres_inst_tac [("x","ys")] allE 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   201
by (Full_simp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   202
by (Clarify_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   203
be impE 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   204
 by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   205
 by (eres_inst_tac [("x","Suc n")] allE 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   206
 by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   207
by (eres_inst_tac [("x","0")] allE 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   208
by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   209
qed_spec_mp "all_nth_sup_loc";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   210
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   211
Goal "\\<lbrakk>G \\<turnstile> a <=l b; G \\<turnstile> b <=l c\\<rbrakk> \\<Longrightarrow> G \\<turnstile> a <=l c";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   212
by (forward_tac [sup_loc_all_trans] 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   213
 ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   214
bd sup_loc_length 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   215
bd sup_loc_length 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   216
br all_nth_sup_loc 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   217
 by (Clarsimp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   218
ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   219
qed "sup_loc_trans";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   220
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   221
Goalw[sup_state_def] 
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   222
"\\<lbrakk>G \\<turnstile> a <=s b; G \\<turnstile> b <=s c\\<rbrakk> \\<Longrightarrow> G \\<turnstile> a <=s c";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   223
by Safe_tac;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   224
 br sup_loc_trans 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   225
  ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   226
 ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   227
br sup_loc_trans 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   228
 ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   229
ba 1;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   230
qed "sup_state_trans";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   231
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   232
Goalw[sup_ty_opt_def] "G \\<turnstile> a <=o Some b \\<Longrightarrow> \\<exists> x. a = Some x";
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
   233
by (case_tac "a" 1);
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   234
 by Auto_tac;
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   235
qed "sup_ty_opt_some";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   236
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   237
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   238
Goalw[sup_loc_def]
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   239
"\\<forall> n y. (G \\<turnstile> a <=o b) \\<longrightarrow> n < length y \\<longrightarrow> (G \\<turnstile> x <=l y) \\<longrightarrow> (G \\<turnstile> x[n := a] <=l y[n := b])";
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   240
by (induct_tac "x" 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   241
 by (Simp_tac 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   242
by (clarsimp_tac ((claset(), simpset()) addIffs [sup_loc_Cons2]) 1);
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
   243
by (case_tac "n" 1);
8394
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   244
 by (clarsimp_tac (claset(), simpset() addsimps [list_all2_Cons1]) 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   245
by (clarsimp_tac (claset(), simpset() addsimps [list_all2_Cons1]) 1);
6db1309c8241 moved more lemmas to Convert (transitivity etc)
kleing
parents: 8389
diff changeset
   246
qed_spec_mp "sup_loc_update";