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