src/HOL/MicroJava/BV/Convert.thy
author kleing
Mon, 14 Aug 2000 18:03:19 +0200
changeset 9594 42d11e0a7a8b
parent 8119 60b606eddec8
child 9664 4cae97480a6d
permissions -rw-r--r--
Convert.thy now in Isar, tuned
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.thy
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
The supertype relation lifted to type options, type lists and state types.
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     7
*)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     8
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
     9
theory Convert = JVMExec:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    10
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    11
types
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    12
 locvars_type = "ty option list"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    13
 opstack_type = "ty list"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    14
 state_type   = "opstack_type \<times> locvars_type"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    16
constdefs
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    17
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    18
  (* lifts a relation to option with None as top element *)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    19
  lift_top :: "('a \<Rightarrow> 'a \<Rightarrow> bool) \<Rightarrow> ('a option \<Rightarrow> 'a option \<Rightarrow> bool)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    20
  "lift_top P a' a \<equiv> case a of 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    21
                       None   \<Rightarrow> True
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    22
                     | Some t \<Rightarrow> (case a' of None \<Rightarrow> False | Some t' \<Rightarrow> P t' t)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    23
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    24
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    25
 sup_ty_opt :: "['code prog,ty option,ty option] \<Rightarrow> bool" ("_ \<turnstile>_ <=o _")
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    26
 "sup_ty_opt G \<equiv> lift_top (\<lambda>t t'. G \<turnstile> t \<preceq> t')"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    27
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    28
 sup_loc :: "['code prog,locvars_type,locvars_type] \<Rightarrow> bool"	  ("_ \<turnstile> _ <=l _"  [71,71] 70)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    29
 "G \<turnstile> LT <=l LT' \<equiv> list_all2 (\<lambda>t t'. (G \<turnstile> t <=o t')) LT LT'"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    30
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    31
 sup_state :: "['code prog,state_type,state_type] \<Rightarrow> bool"	  ("_ \<turnstile> _ <=s _"  [71,71] 70)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    32
 "G \<turnstile> s <=s s' \<equiv> (G \<turnstile> map Some (fst s) <=l map Some (fst s')) \<and> G \<turnstile> snd s <=l snd s'"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    33
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    34
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    35
lemma lift_top_refl [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    36
  "[| !!x. P x x |] ==> lift_top P x x"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    37
  by (simp add: lift_top_def split: option.splits)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    38
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    39
lemma lift_top_trans [trans]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    40
  "[| !!x y z. [| P x y; P y z |] ==> P x z; lift_top P x y; lift_top P y z |] ==> lift_top P x z"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    41
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    42
  assume [trans]: "!!x y z. [| P x y; P y z |] ==> P x z"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    43
  assume a: "lift_top P x y"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    44
  assume b: "lift_top P y z"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    45
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    46
  { assume "z = None" 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    47
    hence ?thesis by (simp add: lift_top_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    48
  } note z_none = this
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    49
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    50
  { assume "x = None"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    51
    with a b
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    52
    have ?thesis
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    53
      by (simp add: lift_top_def split: option.splits)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    54
  } note x_none = this
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    55
  
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    56
  { fix r t
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    57
    assume x: "x = Some r" and z: "z = Some t"    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    58
    with a b
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    59
    obtain s where y: "y = Some s" 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    60
      by (simp add: lift_top_def split: option.splits)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    61
    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    62
    from a x y
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    63
    have "P r s" by (simp add: lift_top_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    64
    also
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    65
    from b y z
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    66
    have "P s t" by (simp add: lift_top_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    67
    finally 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    68
    have "P r t" .
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    69
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    70
    with x z
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    71
    have ?thesis by (simp add: lift_top_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    72
  } 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    73
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    74
  with x_none z_none
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    75
  show ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    76
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    77
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    78
lemma lift_top_None_any [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    79
  "lift_top P None any = (any = None)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    80
  by (simp add: lift_top_def split: option.splits)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    81
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    82
lemma lift_top_Some_Some [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    83
  "lift_top P (Some a) (Some b) = P a b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    84
  by (simp add: lift_top_def split: option.splits)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    85
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    86
lemma lift_top_any_Some [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    87
  "lift_top P any (Some b) = (\<exists>a. any = Some a \<and> P a b)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    88
  by (simp add: lift_top_def split: option.splits)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    89
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    90
lemma lift_top_Some_any:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    91
  "lift_top P (Some a) any = (any = None \<or> (\<exists>b. any = Some b \<and> P a b))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    92
  by (simp add: lift_top_def split: option.splits)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    93
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    94
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    95
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    96
theorem sup_ty_opt_refl [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    97
  "G \<turnstile> t <=o t"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    98
  by (simp add: sup_ty_opt_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    99
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   100
theorem sup_loc_refl [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   101
  "G \<turnstile> t <=l t"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   102
  by (induct t, auto simp add: sup_loc_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   103
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   104
theorem sup_state_refl [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   105
  "G \<turnstile> s <=s s"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   106
  by (simp add: sup_state_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   107
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   108
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   109
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   110
theorem anyConvNone [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   111
  "(G \<turnstile> None <=o any) = (any = None)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   112
  by (simp add: sup_ty_opt_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   113
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   114
theorem SomeanyConvSome [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   115
  "(G \<turnstile> (Some ty') <=o (Some ty)) = (G \<turnstile> ty' \<preceq> ty)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   116
  by (simp add: sup_ty_opt_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   117
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   118
theorem sup_ty_opt_Some:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   119
  "G \<turnstile> a <=o (Some b) \<Longrightarrow> \<exists> x. a = Some x"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   120
  by (clarsimp simp add: sup_ty_opt_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   121
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   122
lemma widen_PrimT_conv1 [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   123
  "[| G \<turnstile> S \<preceq> T; S = PrimT x|] ==> T = PrimT x"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   124
  by (auto elim: widen.elims)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   125
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   126
theorem sup_PTS_eq:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   127
  "(G \<turnstile> Some (PrimT p) <=o X) = (X=None \<or> X = Some (PrimT p))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   128
  by (auto simp add: sup_ty_opt_def lift_top_Some_any)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   129
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   130
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   131
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   132
theorem sup_loc_Nil [iff]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   133
  "(G \<turnstile> [] <=l XT) = (XT=[])"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   134
  by (simp add: sup_loc_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   135
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   136
theorem sup_loc_Cons [iff]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   137
  "(G \<turnstile> (Y#YT) <=l XT) = (\<exists>X XT'. XT=X#XT' \<and> (G \<turnstile> Y <=o X) \<and> (G \<turnstile> YT <=l XT'))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   138
  by (simp add: sup_loc_def list_all2_Cons1)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   139
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   140
theorem sup_loc_Cons2:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   141
  "(G \<turnstile> YT <=l (X#XT)) = (\<exists>Y YT'. YT=Y#YT' \<and> (G \<turnstile> Y <=o X) \<and> (G \<turnstile> YT' <=l XT))";
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   142
  by (simp add: sup_loc_def list_all2_Cons2)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   143
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   144
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   145
theorem sup_loc_length:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   146
  "G \<turnstile> a <=l b \<Longrightarrow> length a = length b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   147
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   148
  assume G: "G \<turnstile> a <=l b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   149
  have "\<forall> b. (G \<turnstile> a <=l b) \<longrightarrow> length a = length b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   150
    by (induct a, auto)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   151
  with G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   152
  show ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   153
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   154
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   155
theorem sup_loc_nth:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   156
  "[| G \<turnstile> a <=l b; n < length a |] ==> G \<turnstile> (a!n) <=o (b!n)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   157
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   158
  assume a: "G \<turnstile> a <=l b" "n < length a"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   159
  have "\<forall> n b. (G \<turnstile> a <=l b) \<longrightarrow> n < length a \<longrightarrow> (G \<turnstile> (a!n) <=o (b!n))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   160
    (is "?P a")
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   161
  proof (induct a)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   162
    show "?P []" by simp
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   163
    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   164
    fix x xs assume IH: "?P xs"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   165
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   166
    show "?P (x#xs)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   167
    proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   168
      fix n b
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   169
      assume "G \<turnstile> (x # xs) <=l b" "n < length (x # xs)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   170
      with IH
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   171
      show "G \<turnstile> ((x # xs) ! n) <=o (b ! n)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   172
        by - (cases n, auto)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   173
    qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   174
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   175
  with a
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   176
  show ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   177
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   178
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   179
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   180
theorem all_nth_sup_loc:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   181
  "\<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)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   182
  (is "?P a")
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   183
proof (induct a)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   184
  show "?P []" by simp
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   185
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   186
  fix l ls assume IH: "?P ls"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   187
  
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   188
  show "?P (l#ls)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   189
  proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   190
    fix b
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   191
    assume f: "\<forall>n. n < length (l # ls) \<longrightarrow> (G \<turnstile> ((l # ls) ! n) <=o (b ! n))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   192
    assume l: "length (l#ls) = length b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   193
    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   194
    then obtain b' bs where b: "b = b'#bs"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   195
      by - (cases b, simp, simp add: neq_Nil_conv, rule that)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   196
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   197
    with f
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   198
    have "\<forall>n. n < length ls \<longrightarrow> (G \<turnstile> (ls!n) <=o (bs!n))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   199
      by auto
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   200
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   201
    with f b l IH
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   202
    show "G \<turnstile> (l # ls) <=l b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   203
      by auto
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   204
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   205
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   206
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   207
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   208
theorem sup_loc_append:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   209
  "[| length a = length b |] ==> (G \<turnstile> (a@x) <=l (b@y)) = ((G \<turnstile> a <=l b) \<and> (G \<turnstile> x <=l y))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   210
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   211
  assume l: "length a = length b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   212
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   213
  have "\<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))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   214
    (is "?P a") 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   215
  proof (induct a)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   216
    show "?P []" by simp
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   217
    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   218
    fix l ls assume IH: "?P ls"    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   219
    show "?P (l#ls)" 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   220
    proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   221
      fix b
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   222
      assume "length (l#ls) = length (b::ty option list)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   223
      with IH
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   224
      show "(G \<turnstile> ((l#ls)@x) <=l (b@y)) = ((G \<turnstile> (l#ls) <=l b) \<and> (G \<turnstile> x <=l y))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   225
        by - (cases b, auto)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   226
    qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   227
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   228
  with l
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   229
  show ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   230
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   231
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   232
theorem sup_loc_rev [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   233
  "(G \<turnstile> (rev a) <=l rev b) = (G \<turnstile> a <=l b)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   234
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   235
  have "\<forall>b. (G \<turnstile> (rev a) <=l rev b) = (G \<turnstile> a <=l b)" (is "\<forall>b. ?Q a b" is "?P a")
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   236
  proof (induct a)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   237
    show "?P []" by simp
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   238
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   239
    fix l ls assume IH: "?P ls"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   240
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   241
    { 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   242
      fix b
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   243
      have "?Q (l#ls) b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   244
      proof (cases b)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   245
        case Nil
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   246
        thus ?thesis by (auto dest: sup_loc_length)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   247
      next
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   248
        case Cons 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   249
        show ?thesis
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   250
        proof
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   251
          assume "G \<turnstile> (l # ls) <=l b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   252
          thus "G \<turnstile> rev (l # ls) <=l rev b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   253
            by (clarsimp simp add: Cons IH sup_loc_length sup_loc_append)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   254
        next
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   255
          assume "G \<turnstile> rev (l # ls) <=l rev b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   256
          hence G: "G \<turnstile> (rev ls @ [l]) <=l (rev list @ [a])"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   257
            by (simp add: Cons)          
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   258
          
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   259
          hence "length (rev ls) = length (rev list)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   260
            by (auto dest: sup_loc_length)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   261
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   262
          from this G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   263
          obtain "G \<turnstile> rev ls <=l rev list" "G \<turnstile> l <=o a"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   264
            by (simp add: sup_loc_append)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   265
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   266
          thus "G \<turnstile> (l # ls) <=l b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   267
            by (simp add: Cons IH)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   268
        qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   269
      qed    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   270
    }
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   271
    thus "?P (l#ls)" by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   272
  qed
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   273
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   274
  thus ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   275
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   276
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   277
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   278
theorem sup_loc_update [rulify]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   279
  "\<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])"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   280
  (is "?P x")
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   281
proof (induct x)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   282
  show "?P []" by simp
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   283
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   284
  fix l ls assume IH: "?P ls"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   285
  show "?P (l#ls)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   286
  proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   287
    fix n y
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   288
    assume "G \<turnstile>a <=o b" "G \<turnstile> (l # ls) <=l y" "n < length y"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   289
    with IH
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   290
    show "G \<turnstile> (l # ls)[n := a] <=l y[n := b]"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   291
      by - (cases n, auto simp add: sup_loc_Cons2 list_all2_Cons1)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   292
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   293
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   294
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   295
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   296
theorem sup_state_length [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   297
  "G \<turnstile> s2 <=s s1 \<Longrightarrow> length (fst s2) = length (fst s1) \<and> length (snd s2) = length (snd s1)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   298
  by (auto dest: sup_loc_length simp add: sup_state_def);
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   299
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   300
theorem sup_state_append_snd:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   301
  "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)))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   302
  by (auto simp add: sup_state_def sup_loc_append)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   303
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   304
theorem sup_state_append_fst:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   305
  "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)))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   306
  by (auto simp add: sup_state_def sup_loc_append)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   307
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   308
theorem sup_state_Cons1:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   309
  "(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)))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   310
  by (auto simp add: sup_state_def map_eq_Cons)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   311
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   312
theorem sup_state_Cons2:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   313
  "(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)))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   314
  by (auto simp add: sup_state_def map_eq_Cons sup_loc_Cons2)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   315
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   316
theorem sup_state_ignore_fst:  
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   317
  "G \<turnstile> (a, x) <=s (b, y) \<Longrightarrow> G \<turnstile> (c, x) <=s (c, y)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   318
  by (simp add: sup_state_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   319
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   320
theorem sup_state_rev_fst:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   321
  "(G \<turnstile> (rev a, x) <=s (rev b, y)) = (G \<turnstile> (a, x) <=s (b, y))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   322
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   323
  have m: "!!f x. map f (rev x) = rev (map f x)" by (simp add: rev_map)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   324
  show ?thesis by (simp add: m sup_state_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   325
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   326
  
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   327
theorem sup_ty_opt_trans [trans]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   328
  "\<lbrakk>G \<turnstile> a <=o b; G \<turnstile> b <=o c\<rbrakk> \<Longrightarrow> G \<turnstile> a <=o c"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   329
  by (auto intro: lift_top_trans widen_trans simp add: sup_ty_opt_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   330
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   331
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   332
theorem sup_loc_trans [trans]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   333
  "\<lbrakk>G \<turnstile> a <=l b; G \<turnstile> b <=l c\<rbrakk> \<Longrightarrow> G \<turnstile> a <=l c"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   334
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   335
  assume G: "G \<turnstile> a <=l b" "G \<turnstile> b <=l c"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   336
 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   337
  hence "\<forall> n. n < length a \<longrightarrow> (G \<turnstile> (a!n) <=o (c!n))"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   338
  proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   339
    fix n 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   340
    assume n: "n < length a"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   341
    with G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   342
    have "G \<turnstile> (a!n) <=o (b!n)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   343
      by - (rule sup_loc_nth)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   344
    also 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   345
    from n G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   346
    have "G \<turnstile> ... <=o (c!n)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   347
      by - (rule sup_loc_nth, auto dest: sup_loc_length)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   348
    finally
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   349
    show "G \<turnstile> (a!n) <=o (c!n)" .
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   350
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   351
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   352
  with G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   353
  show ?thesis 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   354
    by (auto intro!: all_nth_sup_loc [rulify] dest!: sup_loc_length) 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   355
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   356
  
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   357
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   358
theorem sup_state_trans [trans]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   359
  "\<lbrakk>G \<turnstile> a <=s b; G \<turnstile> b <=s c\<rbrakk> \<Longrightarrow> G \<turnstile> a <=s c"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   360
  by (auto intro: sup_loc_trans simp add: sup_state_def)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   361
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   362
end