src/HOL/MicroJava/BV/Convert.thy
author kleing
Thu, 21 Sep 2000 10:42:49 +0200
changeset 10042 7164dc0d24d8
parent 9941 fe05af7ec816
child 10056 9f84ffa4a8d0
permissions -rw-r--r--
unsymbolized
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$
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
     3
    Author:     Cornelia Pusch and Gerwin Klein
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     4
    Copyright   1999 Technische Universitaet Muenchen
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
     5
*)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     6
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
     7
header "Lifted Type Relations"
8011
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
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    11
text "The supertype relation lifted to type err, type lists and state types."
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    12
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    13
datatype 'a err = Err | Ok 'a
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    14
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
types
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    16
 locvars_type = "ty err list"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    17
 opstack_type = "ty list"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    18
 state_type   = "opstack_type \<times> locvars_type"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    19
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    20
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    21
consts
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    22
  strict  :: "('a => 'b err) => ('a err => 'b err)"
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    23
primrec
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    24
  "strict f Err    = Err"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    25
  "strict f (Ok x) = f x"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    26
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    27
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    28
consts
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    29
  val :: "'a err => 'a"
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    30
primrec
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    31
  "val (Ok s) = s"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    32
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    33
  
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    34
constdefs
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    35
  (* lifts a relation to err with Err as top element *)
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    36
  lift_top :: "('a => 'b => bool) => ('a err => 'b err => bool)"
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    37
  "lift_top P a' a == case a of 
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    38
                       Err  => True
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    39
                     | Ok t => (case a' of Err => False | Ok t' => P t' t)"
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    40
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    41
  (* lifts a relation to option with None as bottom element *)
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    42
  lift_bottom :: "('a => 'b => bool) => ('a option => 'b option => bool)"
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    43
  "lift_bottom P a' a == case a' of 
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    44
                          None    => True 
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    45
                        | Some t' => (case a of None => False | Some t => P t' t)"
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    46
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    47
  sup_ty_opt :: "['code prog,ty err,ty err] => bool" ("_ \<turnstile> _ <=o _" [71,71] 70)
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    48
  "sup_ty_opt G == lift_top (\<lambda>t t'. G \<turnstile> t \<preceq> t')"
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    49
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    50
  sup_loc :: "['code prog,locvars_type,locvars_type] => bool" 
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    51
              ("_ \<turnstile> _ <=l _"  [71,71] 70)
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    52
  "G \<turnstile> LT <=l LT' == list_all2 (\<lambda>t t'. (G \<turnstile> t <=o t')) LT LT'"
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    53
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    54
  sup_state :: "['code prog,state_type,state_type] => bool"	  
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    55
               ("_ \<turnstile> _ <=s _"  [71,71] 70)
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    56
  "G \<turnstile> s <=s s' == (G \<turnstile> map Ok (fst s) <=l map Ok (fst s')) \<and> G \<turnstile> snd s <=l snd s'"
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    57
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    58
  sup_state_opt :: "['code prog,state_type option,state_type option] => bool" 
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    59
                   ("_ \<turnstile> _ <=' _"  [71,71] 70)
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    60
  "sup_state_opt G == lift_bottom (\<lambda>t t'. G \<turnstile> t <=s t')"
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    61
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    62
syntax (HTML output) 
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    63
  sup_ty_opt :: "['code prog,ty err,ty err] => bool" ("_ |- _ <=o _")
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    64
  sup_loc :: "['code prog,locvars_type,locvars_type] => bool" ("_ |- _ <=l _"  [71,71] 70)
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    65
  sup_state :: "['code prog,state_type,state_type] => bool"	("_ |- _ <=s _"  [71,71] 70)
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    66
  sup_state_opt :: "['code prog,state_type option,state_type option] => bool" ("_ |- _ <=' _"  [71,71] 70)
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
    67
                   
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    68
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    69
lemma not_Err_eq [iff]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    70
  "(x \<noteq> Err) = (\<exists>a. x = Ok a)" 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    71
  by (cases x) auto
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    72
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    73
lemma not_Some_eq [iff]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    74
  "(\<forall>y. x \<noteq> Ok y) = (x = Err)"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    75
  by (cases x) auto  
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    76
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_refl [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    79
  "[| !!x. P x x |] ==> lift_top P x x"
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    80
  by (simp add: lift_top_def split: err.splits)
9594
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_trans [trans]:
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    83
  "[| !!x y z. [| P x y; P y z |] ==> P x z; lift_top P x y; lift_top P y z |] 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    84
  ==> lift_top P x z"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    85
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    86
  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
    87
  assume a: "lift_top P x y"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    88
  assume b: "lift_top P y z"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    89
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    90
  { assume "z = Err" 
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    91
    hence ?thesis by (simp add: lift_top_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    92
  } note z_none = this
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    93
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    94
  { assume "x = Err"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    95
    with a b
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    96
    have ?thesis
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
    97
      by (simp add: lift_top_def split: err.splits)
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
    98
  } note x_none = this
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
  { fix r t
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   101
    assume x: "x = Ok r" and z: "z = Ok t"    
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   102
    with a b
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   103
    obtain s where y: "y = Ok s" 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   104
      by (simp add: lift_top_def split: err.splits)
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   105
    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   106
    from a x y
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   107
    have "P r s" by (simp add: lift_top_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   108
    also
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   109
    from b y z
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   110
    have "P s t" by (simp add: lift_top_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   111
    finally 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   112
    have "P r t" .
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
    with x z
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   115
    have ?thesis by (simp add: lift_top_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   116
  } 
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
  with x_none z_none
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   119
  show ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   120
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   121
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   122
lemma lift_top_Err_any [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   123
  "lift_top P Err any = (any = Err)"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   124
  by (simp add: lift_top_def split: err.splits)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   125
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   126
lemma lift_top_Ok_Ok [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   127
  "lift_top P (Ok a) (Ok b) = P a b"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   128
  by (simp add: lift_top_def split: err.splits)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   129
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   130
lemma lift_top_any_Ok [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   131
  "lift_top P any (Ok b) = (\<exists>a. any = Ok a \<and> P a b)"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   132
  by (simp add: lift_top_def split: err.splits)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   133
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   134
lemma lift_top_Ok_any:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   135
  "lift_top P (Ok a) any = (any = Err \<or> (\<exists>b. any = Ok b \<and> P a b))"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   136
  by (simp add: lift_top_def split: err.splits)
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   137
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   138
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   139
lemma lift_bottom_refl [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   140
  "[| !!x. P x x |] ==> lift_bottom P x x"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   141
  by (simp add: lift_bottom_def split: option.splits)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   142
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   143
lemma lift_bottom_trans [trans]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   144
  "[| !!x y z. [| P x y; P y z |] ==> P x z; lift_bottom P x y; lift_bottom P y z |]
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   145
  ==> lift_bottom P x z"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   146
proof -
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   147
  assume [trans]: "!!x y z. [| P x y; P y z |] ==> P x z"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   148
  assume a: "lift_bottom P x y"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   149
  assume b: "lift_bottom P y z"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   150
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   151
  { assume "x = None" 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   152
    hence ?thesis by (simp add: lift_bottom_def)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   153
  } note z_none = this
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   154
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   155
  { assume "z = None"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   156
    with a b
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   157
    have ?thesis
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   158
      by (simp add: lift_bottom_def split: option.splits)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   159
  } note x_none = this
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   160
  
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   161
  { fix r t
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   162
    assume x: "x = Some r" and z: "z = Some t"    
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   163
    with a b
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   164
    obtain s where y: "y = Some s" 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   165
      by (simp add: lift_bottom_def split: option.splits)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   166
    
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   167
    from a x y
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   168
    have "P r s" by (simp add: lift_bottom_def)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   169
    also
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   170
    from b y z
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   171
    have "P s t" by (simp add: lift_bottom_def)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   172
    finally 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   173
    have "P r t" .
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   174
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   175
    with x z
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   176
    have ?thesis by (simp add: lift_bottom_def)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   177
  } 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   178
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   179
  with x_none z_none
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   180
  show ?thesis by blast
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   181
qed
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   182
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   183
lemma lift_bottom_any_None [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   184
  "lift_bottom P any None = (any = None)"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   185
  by (simp add: lift_bottom_def split: option.splits)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   186
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   187
lemma lift_bottom_Some_Some [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   188
  "lift_bottom P (Some a) (Some b) = P a b"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   189
  by (simp add: lift_bottom_def split: option.splits)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   190
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   191
lemma lift_bottom_any_Some [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   192
  "lift_bottom P (Some a) any = (\<exists>b. any = Some b \<and> P a b)"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   193
  by (simp add: lift_bottom_def split: option.splits)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   194
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   195
lemma lift_bottom_Some_any:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   196
  "lift_bottom P any (Some b) = (any = None \<or> (\<exists>a. any = Some a \<and> P a b))"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   197
  by (simp add: lift_bottom_def split: option.splits)
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   198
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   199
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
theorem sup_ty_opt_refl [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   202
  "G \<turnstile> t <=o t"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   203
  by (simp add: sup_ty_opt_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   204
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   205
theorem sup_loc_refl [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   206
  "G \<turnstile> t <=l t"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   207
  by (induct t, auto simp add: sup_loc_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   208
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   209
theorem sup_state_refl [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   210
  "G \<turnstile> s <=s s"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   211
  by (simp add: sup_state_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   212
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   213
theorem sup_state_opt_refl [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   214
  "G \<turnstile> s <=' s"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   215
  by (simp add: sup_state_opt_def)
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   216
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   217
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   218
theorem anyConvErr [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   219
  "(G \<turnstile> Err <=o any) = (any = Err)"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   220
  by (simp add: sup_ty_opt_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   221
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   222
theorem OkanyConvOk [simp]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   223
  "(G \<turnstile> (Ok ty') <=o (Ok ty)) = (G \<turnstile> ty' \<preceq> ty)"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   224
  by (simp add: sup_ty_opt_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   225
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   226
theorem sup_ty_opt_Ok:
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   227
  "G \<turnstile> a <=o (Ok b) ==> \<exists> x. a = Ok x"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   228
  by (clarsimp simp add: sup_ty_opt_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   229
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   230
lemma widen_PrimT_conv1 [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   231
  "[| G \<turnstile> S \<preceq> T; S = PrimT x|] ==> T = PrimT x"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   232
  by (auto elim: widen.elims)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   233
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   234
theorem sup_PTS_eq:
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   235
  "(G \<turnstile> Ok (PrimT p) <=o X) = (X=Err \<or> X = Ok (PrimT p))"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   236
  by (auto simp add: sup_ty_opt_def lift_top_Ok_any)
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   237
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
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   240
theorem sup_loc_Nil [iff]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   241
  "(G \<turnstile> [] <=l XT) = (XT=[])"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   242
  by (simp add: sup_loc_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   243
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   244
theorem sup_loc_Cons [iff]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   245
  "(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
   246
  by (simp add: sup_loc_def list_all2_Cons1)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   247
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   248
theorem sup_loc_Cons2:
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   249
  "(G \<turnstile> YT <=l (X#XT)) = (\<exists>Y YT'. YT=Y#YT' \<and> (G \<turnstile> Y <=o X) \<and> (G \<turnstile> YT' <=l XT))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   250
  by (simp add: sup_loc_def list_all2_Cons2)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   251
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   252
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   253
theorem sup_loc_length:
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   254
  "G \<turnstile> a <=l b ==> length a = length b"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   255
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   256
  assume G: "G \<turnstile> a <=l b"
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   257
  have "\<forall> b. (G \<turnstile> a <=l b) --> length a = length b"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   258
    by (induct a, auto)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   259
  with G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   260
  show ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   261
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   262
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   263
theorem sup_loc_nth:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   264
  "[| 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
   265
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   266
  assume a: "G \<turnstile> a <=l b" "n < length a"
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   267
  have "\<forall> n b. (G \<turnstile> a <=l b) --> n < length a --> (G \<turnstile> (a!n) <=o (b!n))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   268
    (is "?P a")
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   269
  proof (induct a)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   270
    show "?P []" by simp
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   271
    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   272
    fix x xs assume IH: "?P xs"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   273
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   274
    show "?P (x#xs)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   275
    proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   276
      fix n b
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   277
      assume "G \<turnstile> (x # xs) <=l b" "n < length (x # xs)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   278
      with IH
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   279
      show "G \<turnstile> ((x # xs) ! n) <=o (b ! n)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   280
        by - (cases n, auto)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   281
    qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   282
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   283
  with a
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   284
  show ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   285
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   286
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   287
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   288
theorem all_nth_sup_loc:
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   289
  "\<forall>b. length a = length b --> (\<forall> n. n < length a --> (G \<turnstile> (a!n) <=o (b!n))) --> 
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   290
       (G \<turnstile> a <=l b)" (is "?P a")
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   291
proof (induct a)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   292
  show "?P []" by simp
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   293
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   294
  fix l ls assume IH: "?P ls"
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
  show "?P (l#ls)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   297
  proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   298
    fix b
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   299
    assume f: "\<forall>n. n < length (l # ls) --> (G \<turnstile> ((l # ls) ! n) <=o (b ! n))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   300
    assume l: "length (l#ls) = length b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   301
    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   302
    then obtain b' bs where b: "b = b'#bs"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   303
      by - (cases b, simp, simp add: neq_Nil_conv, rule that)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   304
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   305
    with f
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   306
    have "\<forall>n. n < length ls --> (G \<turnstile> (ls!n) <=o (bs!n))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   307
      by auto
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   308
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   309
    with f b l IH
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   310
    show "G \<turnstile> (l # ls) <=l b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   311
      by auto
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   312
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   313
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   314
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_loc_append:
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   317
  "length a = length b ==> 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   318
   (G \<turnstile> (a@x) <=l (b@y)) = ((G \<turnstile> a <=l b) \<and> (G \<turnstile> x <=l y))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   319
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   320
  assume l: "length a = length b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   321
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   322
  have "\<forall>b. length a = length b --> (G \<turnstile> (a@x) <=l (b@y)) = ((G \<turnstile> a <=l b) \<and> 
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   323
            (G \<turnstile> x <=l y))" (is "?P a") 
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   324
  proof (induct a)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   325
    show "?P []" by simp
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
    fix l ls assume IH: "?P ls"    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   328
    show "?P (l#ls)" 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   329
    proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   330
      fix b
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   331
      assume "length (l#ls) = length (b::ty err list)"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   332
      with IH
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   333
      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
   334
        by - (cases b, auto)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   335
    qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   336
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   337
  with l
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   338
  show ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   339
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   340
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   341
theorem sup_loc_rev [simp]:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   342
  "(G \<turnstile> (rev a) <=l rev b) = (G \<turnstile> a <=l b)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   343
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   344
  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
   345
  proof (induct a)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   346
    show "?P []" by simp
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   347
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   348
    fix l ls assume IH: "?P ls"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   349
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   350
    { 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   351
      fix b
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   352
      have "?Q (l#ls) b"
9664
4cae97480a6d open cases;
wenzelm
parents: 9594
diff changeset
   353
      proof (cases (open) b)
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   354
        case Nil
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   355
        thus ?thesis by (auto dest: sup_loc_length)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   356
      next
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   357
        case Cons 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   358
        show ?thesis
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   359
        proof
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   360
          assume "G \<turnstile> (l # ls) <=l b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   361
          thus "G \<turnstile> rev (l # ls) <=l rev b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   362
            by (clarsimp simp add: Cons IH sup_loc_length sup_loc_append)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   363
        next
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   364
          assume "G \<turnstile> rev (l # ls) <=l rev b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   365
          hence G: "G \<turnstile> (rev ls @ [l]) <=l (rev list @ [a])"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   366
            by (simp add: Cons)          
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   367
          
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   368
          hence "length (rev ls) = length (rev list)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   369
            by (auto dest: sup_loc_length)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   370
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   371
          from this G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   372
          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
   373
            by (simp add: sup_loc_append)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   374
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   375
          thus "G \<turnstile> (l # ls) <=l b"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   376
            by (simp add: Cons IH)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   377
        qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   378
      qed    
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   379
    }
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   380
    thus "?P (l#ls)" by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   381
  qed
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   382
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   383
  thus ?thesis by blast
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   384
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   385
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   386
9941
fe05af7ec816 renamed atts: rulify to rule_format, elimify to elim_format;
wenzelm
parents: 9906
diff changeset
   387
theorem sup_loc_update [rule_format]:
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   388
  "\<forall> n y. (G \<turnstile> a <=o b) --> n < length y --> (G \<turnstile> x <=l y) --> 
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   389
          (G \<turnstile> x[n := a] <=l y[n := b])" (is "?P x")
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   390
proof (induct x)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   391
  show "?P []" by simp
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   392
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   393
  fix l ls assume IH: "?P ls"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   394
  show "?P (l#ls)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   395
  proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   396
    fix n y
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   397
    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
   398
    with IH
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   399
    show "G \<turnstile> (l # ls)[n := a] <=l y[n := b]"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   400
      by - (cases n, auto simp add: sup_loc_Cons2 list_all2_Cons1)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   401
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   402
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   403
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   404
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   405
theorem sup_state_length [simp]:
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   406
  "G \<turnstile> s2 <=s s1 ==> 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   407
   length (fst s2) = length (fst s1) \<and> length (snd s2) = length (snd s1)"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   408
  by (auto dest: sup_loc_length simp add: sup_state_def);
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   409
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   410
theorem sup_state_append_snd:
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   411
  "length a = length b ==> 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   412
  (G \<turnstile> (i,a@x) <=s (j,b@y)) = ((G \<turnstile> (i,a) <=s (j,b)) \<and> (G \<turnstile> (i,x) <=s (j,y)))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   413
  by (auto simp add: sup_state_def sup_loc_append)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   414
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   415
theorem sup_state_append_fst:
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   416
  "length a = length b ==> 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   417
  (G \<turnstile> (a@x,i) <=s (b@y,j)) = ((G \<turnstile> (a,i) <=s (b,j)) \<and> (G \<turnstile> (x,i) <=s (y,j)))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   418
  by (auto simp add: sup_state_def sup_loc_append)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   419
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   420
theorem sup_state_Cons1:
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   421
  "(G \<turnstile> (x#xt, a) <=s (yt, b)) = 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   422
   (\<exists>y yt'. yt=y#yt' \<and> (G \<turnstile> x \<preceq> y) \<and> (G \<turnstile> (xt,a) <=s (yt',b)))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   423
  by (auto simp add: sup_state_def map_eq_Cons)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   424
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   425
theorem sup_state_Cons2:
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   426
  "(G \<turnstile> (xt, a) <=s (y#yt, b)) = 
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   427
   (\<exists>x xt'. xt=x#xt' \<and> (G \<turnstile> x \<preceq> y) \<and> (G \<turnstile> (xt',a) <=s (yt,b)))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   428
  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
   429
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   430
theorem sup_state_ignore_fst:  
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   431
  "G \<turnstile> (a, x) <=s (b, y) ==> G \<turnstile> (c, x) <=s (c, y)"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   432
  by (simp add: sup_state_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   433
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   434
theorem sup_state_rev_fst:
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   435
  "(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
   436
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   437
  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
   438
  show ?thesis by (simp add: m sup_state_def)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   439
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   440
  
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   441
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   442
lemma sup_state_opt_None_any [iff]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   443
  "(G \<turnstile> None <=' any) = True"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   444
  by (simp add: sup_state_opt_def lift_bottom_def)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   445
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   446
lemma sup_state_opt_any_None [iff]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   447
  "(G \<turnstile> any <=' None) = (any = None)"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   448
  by (simp add: sup_state_opt_def)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   449
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   450
lemma sup_state_opt_Some_Some [iff]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   451
  "(G \<turnstile> (Some a) <=' (Some b)) = (G \<turnstile> a <=s b)"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   452
  by (simp add: sup_state_opt_def del: split_paired_Ex)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   453
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   454
lemma sup_state_opt_any_Some [iff]:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   455
  "(G \<turnstile> (Some a) <=' any) = (\<exists>b. any = Some b \<and> G \<turnstile> a <=s b)"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   456
  by (simp add: sup_state_opt_def)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   457
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   458
lemma sup_state_opt_Some_any:
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   459
  "(G \<turnstile> any <=' (Some b)) = (any = None \<or> (\<exists>a. any = Some a \<and> G \<turnstile> a <=s b))"
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   460
  by (simp add: sup_state_opt_def lift_bottom_Some_any)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   461
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   462
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   463
theorem sup_ty_opt_trans [trans]:
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   464
  "[|G \<turnstile> a <=o b; G \<turnstile> b <=o c|] ==> G \<turnstile> a <=o c"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   465
  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
   466
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   467
theorem sup_loc_trans [trans]:
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   468
  "[|G \<turnstile> a <=l b; G \<turnstile> b <=l c|] ==> G \<turnstile> a <=l c"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   469
proof -
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   470
  assume G: "G \<turnstile> a <=l b" "G \<turnstile> b <=l c"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   471
 
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   472
  hence "\<forall> n. n < length a --> (G \<turnstile> (a!n) <=o (c!n))"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   473
  proof (intro strip)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   474
    fix n 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   475
    assume n: "n < length a"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   476
    with G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   477
    have "G \<turnstile> (a!n) <=o (b!n)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   478
      by - (rule sup_loc_nth)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   479
    also 
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   480
    from n G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   481
    have "G \<turnstile> ... <=o (c!n)"
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   482
      by - (rule sup_loc_nth, auto dest: sup_loc_length)
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   483
    finally
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   484
    show "G \<turnstile> (a!n) <=o (c!n)" .
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   485
  qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   486
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   487
  with G
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   488
  show ?thesis 
9941
fe05af7ec816 renamed atts: rulify to rule_format, elimify to elim_format;
wenzelm
parents: 9906
diff changeset
   489
    by (auto intro!: all_nth_sup_loc [rule_format] dest!: sup_loc_length) 
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   490
qed
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   491
  
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   492
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   493
theorem sup_state_trans [trans]:
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   494
  "[|G \<turnstile> a <=s b; G \<turnstile> b <=s c|] ==> G \<turnstile> a <=s c"
9594
42d11e0a7a8b Convert.thy now in Isar, tuned
kleing
parents: 8119
diff changeset
   495
  by (auto intro: sup_loc_trans simp add: sup_state_def)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   496
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   497
theorem sup_state_opt_trans [trans]:
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9941
diff changeset
   498
  "[|G \<turnstile> a <=' b; G \<turnstile> b <=' c|] ==> G \<turnstile> a <=' c"
9757
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   499
  by (auto intro: lift_bottom_trans sup_state_trans simp add: sup_state_opt_def)
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   500
1024a2d80ac0 functional LBV style, dead code, type safety -> Isar
kleing
parents: 9664
diff changeset
   501
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   502
end