src/HOL/UNITY/ProgressSets.thy
author paulson
Mon, 17 Mar 2003 17:37:48 +0100
changeset 13866 b42d7983a822
parent 13861 0c18f31d901a
child 13870 cf947d1ec5ff
permissions -rw-r--r--
More "progress set" material
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
     1
(*  Title:      HOL/UNITY/ProgressSets
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
     2
    ID:         $Id$
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
     4
    Copyright   2003  University of Cambridge
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
     5
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
     6
Progress Sets.  From 
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
     7
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
     8
    David Meier and Beverly Sanders,
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
     9
    Composing Leads-to Properties
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    10
    Theoretical Computer Science 243:1-2 (2000), 339-361.
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    11
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    12
    David Meier,
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    13
    Progress Properties in Program Refinement and Parallel Composition
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    14
    Swiss Federal Institute of Technology Zurich (1997)
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    15
*)
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    16
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    17
header{*Progress Sets*}
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    18
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    19
theory ProgressSets = Transformers:
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    20
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
    21
subsection {*Complete Lattices and the Operator @{term cl}*}
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
    22
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    23
constdefs
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    24
  lattice :: "'a set set => bool"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    25
   --{*Meier calls them closure sets, but they are just complete lattices*}
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    26
   "lattice L ==
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    27
	 (\<forall>M. M \<subseteq> L --> \<Inter>M \<in> L) & (\<forall>M. M \<subseteq> L --> \<Union>M \<in> L)"
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    28
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    29
  cl :: "['a set set, 'a set] => 'a set"
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    30
   --{*short for ``closure''*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    31
   "cl L r == \<Inter>{x. x\<in>L & r \<subseteq> x}"
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    32
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    33
lemma UNIV_in_lattice: "lattice L ==> UNIV \<in> L"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    34
by (force simp add: lattice_def)
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    35
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    36
lemma empty_in_lattice: "lattice L ==> {} \<in> L"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    37
by (force simp add: lattice_def)
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    38
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    39
lemma Union_in_lattice: "[|M \<subseteq> L; lattice L|] ==> \<Union>M \<in> L"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    40
by (simp add: lattice_def)
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    41
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    42
lemma Inter_in_lattice: "[|M \<subseteq> L; lattice L|] ==> \<Inter>M \<in> L"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    43
by (simp add: lattice_def)
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    44
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    45
lemma UN_in_lattice:
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    46
     "[|lattice L; !!i. i\<in>I ==> r i \<in> L|] ==> (\<Union>i\<in>I. r i) \<in> L"
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    47
apply (simp add: Set.UN_eq) 
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    48
apply (blast intro: Union_in_lattice) 
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    49
done
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    50
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    51
lemma INT_in_lattice:
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    52
     "[|lattice L; !!i. i\<in>I ==> r i \<in> L|] ==> (\<Inter>i\<in>I. r i)  \<in> L"
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    53
apply (simp add: INT_eq) 
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    54
apply (blast intro: Inter_in_lattice) 
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    55
done
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    56
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    57
lemma Un_in_lattice: "[|x\<in>L; y\<in>L; lattice L|] ==> x\<union>y \<in> L"
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    58
apply (simp only: Un_eq_Union) 
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    59
apply (blast intro: Union_in_lattice) 
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    60
done
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    61
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    62
lemma Int_in_lattice: "[|x\<in>L; y\<in>L; lattice L|] ==> x\<inter>y \<in> L"
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    63
apply (simp only: Int_eq_Inter) 
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    64
apply (blast intro: Inter_in_lattice) 
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    65
done
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    66
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    67
lemma lattice_stable: "lattice {X. F \<in> stable X}"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    68
by (simp add: lattice_def stable_def constrains_def, blast)
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    69
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    70
text{*The next three results state that @{term "cl L r"} is the minimal
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    71
 element of @{term L} that includes @{term r}.*}
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    72
lemma cl_in_lattice: "lattice L ==> cl L r \<in> L"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    73
apply (simp add: lattice_def cl_def)
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    74
apply (erule conjE)  
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    75
apply (drule spec, erule mp, blast) 
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    76
done
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    77
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    78
lemma cl_least: "[|c\<in>L; r\<subseteq>c|] ==> cl L r \<subseteq> c" 
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    79
by (force simp add: cl_def)
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    80
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    81
text{*The next three lemmas constitute assertion (4.61)*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    82
lemma cl_mono: "r \<subseteq> r' ==> cl L r \<subseteq> cl L r'"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    83
by (simp add: cl_def, blast)
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    84
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    85
lemma subset_cl: "r \<subseteq> cl L r"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    86
by (simp add: cl_def, blast)
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    87
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    88
lemma cl_UN_subset: "(\<Union>i\<in>I. cl L (r i)) \<subseteq> cl L (\<Union>i\<in>I. r i)"
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    89
by (simp add: cl_def, blast)
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    90
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    91
lemma cl_Un: "lattice L ==> cl L (r\<union>s) = cl L r \<union> cl L s"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    92
apply (rule equalityI) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    93
 prefer 2 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    94
  apply (simp add: cl_def, blast)
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    95
apply (rule cl_least)
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    96
 apply (blast intro: Un_in_lattice cl_in_lattice)
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    97
apply (blast intro: subset_cl [THEN subsetD])  
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
    98
done
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
    99
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   100
lemma cl_UN: "lattice L ==> cl L (\<Union>i\<in>I. r i) = (\<Union>i\<in>I. cl L (r i))"
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   101
apply (rule equalityI) 
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   102
 prefer 2 apply (simp add: cl_def, blast)
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   103
apply (rule cl_least)
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   104
 apply (blast intro: UN_in_lattice cl_in_lattice)
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   105
apply (blast intro: subset_cl [THEN subsetD])  
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   106
done
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   107
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   108
lemma cl_idem [simp]: "cl L (cl L r) = cl L r"
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   109
by (simp add: cl_def, blast)
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   110
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   111
lemma cl_ident: "r\<in>L ==> cl L r = r" 
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   112
by (force simp add: cl_def)
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   113
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   114
text{*Assertion (4.62)*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   115
lemma cl_ident_iff: "lattice L ==> (cl L r = r) = (r\<in>L)" 
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   116
apply (rule iffI) 
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   117
 apply (erule subst)
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   118
 apply (erule cl_in_lattice)  
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   119
apply (erule cl_ident) 
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   120
done
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   121
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   122
lemma cl_subset_in_lattice: "[|cl L r \<subseteq> r; lattice L|] ==> r\<in>L" 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   123
by (simp add: cl_ident_iff [symmetric] equalityI subset_cl)
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   124
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   125
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   126
subsection {*Progress Sets and the Main Lemma*}
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   127
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   128
constdefs 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   129
  closed :: "['a program, 'a set, 'a set,  'a set set] => bool"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   130
   "closed F T B L == \<forall>M. \<forall>act \<in> Acts F. B\<subseteq>M & T\<inter>M \<in> L -->
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   131
                              T \<inter> (B \<union> wp act M) \<in> L"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   132
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   133
  progress_set :: "['a program, 'a set, 'a set] => 'a set set set"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   134
   "progress_set F T B ==
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   135
      {L. F \<in> stable T & lattice L & B \<in> L & T \<in> L & closed F T B L}"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   136
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   137
lemma closedD:
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   138
   "[|closed F T B L; act \<in> Acts F; B\<subseteq>M; T\<inter>M \<in> L|] 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   139
    ==> T \<inter> (B \<union> wp act M) \<in> L"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   140
by (simp add: closed_def) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   141
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   142
text{*Note: the formalization below replaces Meier's @{term q} by @{term B}
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   143
and @{term m} by @{term X}. *}
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   144
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   145
text{*Part of the proof of the claim at the bottom of page 97.  It's
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   146
proved separately because the argument requires a generalization over
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   147
all @{term "act \<in> Acts F"}.*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   148
lemma lattice_awp_lemma:
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   149
  assumes TXC:  "T\<inter>X \<in> C" --{*induction hypothesis in theorem below*}
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   150
      and BsubX:  "B \<subseteq> X"   --{*holds in inductive step*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   151
      and latt: "lattice C"
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   152
      and TC:   "T \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   153
      and BC:   "B \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   154
      and clos: "closed F T B C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   155
    shows "T \<inter> (B \<union> awp F (X \<union> cl C (T\<inter>r))) \<in> C"
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   156
apply (simp del: INT_simps add: awp_def INT_extend_simps) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   157
apply (rule INT_in_lattice [OF latt]) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   158
apply (erule closedD [OF clos]) 
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   159
apply (simp add: subset_trans [OF BsubX Un_upper1]) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   160
apply (subgoal_tac "T \<inter> (X \<union> cl C (T\<inter>r)) = (T\<inter>X) \<union> cl C (T\<inter>r)")
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   161
 prefer 2 apply (blast intro: TC rev_subsetD [OF _ cl_least]) 
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   162
apply (erule ssubst) 
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   163
apply (blast intro: Un_in_lattice latt cl_in_lattice TXC) 
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   164
done
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   165
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   166
text{*Remainder of the proof of the claim at the bottom of page 97.*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   167
lemma lattice_lemma:
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   168
  assumes TXC:  "T\<inter>X \<in> C" --{*induction hypothesis in theorem below*}
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   169
      and BsubX:  "B \<subseteq> X"   --{*holds in inductive step*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   170
      and act:  "act \<in> Acts F"
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   171
      and latt: "lattice C"
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   172
      and TC:   "T \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   173
      and BC:   "B \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   174
      and clos: "closed F T B C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   175
    shows "T \<inter> (wp act X \<inter> awp F (X \<union> cl C (T\<inter>r)) \<union> X) \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   176
apply (subgoal_tac "T \<inter> (B \<union> wp act X) \<in> C")
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   177
 prefer 2 apply (simp add: closedD [OF clos] act BsubX TXC)
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   178
apply (drule Int_in_lattice
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   179
              [OF _ lattice_awp_lemma [OF TXC BsubX latt TC BC clos, of r]
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   180
                    latt])
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   181
apply (subgoal_tac
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   182
	 "T \<inter> (B \<union> wp act X) \<inter> (T \<inter> (B \<union> awp F (X \<union> cl C (T\<inter>r)))) = 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   183
	  T \<inter> (B \<union> wp act X \<inter> awp F (X \<union> cl C (T\<inter>r)))") 
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   184
 prefer 2 apply blast 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   185
apply simp  
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   186
apply (drule Un_in_lattice [OF _ TXC latt])  
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   187
apply (subgoal_tac
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   188
	 "T \<inter> (B \<union> wp act X \<inter> awp F (X \<union> cl C (T\<inter>r))) \<union> T\<inter>X = 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   189
	  T \<inter> (wp act X \<inter> awp F (X \<union> cl C (T\<inter>r)) \<union> X)")
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   190
 apply simp 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   191
apply (blast intro: BsubX [THEN subsetD]) 
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   192
done
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   193
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   194
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   195
text{*Induction step for the main lemma*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   196
lemma progress_induction_step:
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   197
  assumes TXC:  "T\<inter>X \<in> C" --{*induction hypothesis in theorem below*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   198
      and act:  "act \<in> Acts F"
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   199
      and Xwens: "X \<in> wens_set F B"
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   200
      and latt: "lattice C"
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   201
      and  TC:  "T \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   202
      and  BC:  "B \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   203
      and clos: "closed F T B C"
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   204
      and Fstable: "F \<in> stable T"
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   205
  shows "T \<inter> wens F act X \<in> C"
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   206
proof -
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   207
  from Xwens have BsubX: "B \<subseteq> X"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   208
    by (rule wens_set_imp_subset) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   209
  let ?r = "wens F act X"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   210
  have "?r \<subseteq> (wp act X \<inter> awp F (X\<union>?r)) \<union> X"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   211
    by (simp add: wens_unfold [symmetric])
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   212
  then have "T\<inter>?r \<subseteq> T \<inter> ((wp act X \<inter> awp F (X\<union>?r)) \<union> X)"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   213
    by blast
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   214
  then have "T\<inter>?r \<subseteq> T \<inter> ((wp act X \<inter> awp F (T \<inter> (X\<union>?r))) \<union> X)"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   215
    by (simp add: awp_Int_eq Fstable stable_imp_awp_ident, blast) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   216
  then have "T\<inter>?r \<subseteq> T \<inter> ((wp act X \<inter> awp F (X \<union> cl C (T\<inter>?r))) \<union> X)"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   217
    by (blast intro: awp_mono [THEN [2] rev_subsetD] subset_cl [THEN subsetD])
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   218
  then have "cl C (T\<inter>?r) \<subseteq> 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   219
             cl C (T \<inter> ((wp act X \<inter> awp F (X \<union> cl C (T\<inter>?r))) \<union> X))"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   220
    by (rule cl_mono) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   221
  then have "cl C (T\<inter>?r) \<subseteq> 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   222
             T \<inter> ((wp act X \<inter> awp F (X \<union> cl C (T\<inter>?r))) \<union> X)"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   223
    by (simp add: cl_ident lattice_lemma [OF TXC BsubX act latt TC BC clos])
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   224
  then have "cl C (T\<inter>?r) \<subseteq> (wp act X \<inter> awp F (X \<union> cl C (T\<inter>?r))) \<union> X"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   225
    by blast
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   226
  then have "cl C (T\<inter>?r) \<subseteq> ?r"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   227
    by (blast intro!: subset_wens) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   228
  then have cl_subset: "cl C (T\<inter>?r) \<subseteq> T\<inter>?r"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   229
    by (simp add: Int_subset_iff cl_ident TC
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   230
                  subset_trans [OF cl_mono [OF Int_lower1]]) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   231
  show ?thesis
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   232
    by (rule cl_subset_in_lattice [OF cl_subset latt]) 
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   233
qed
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   234
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   235
text{*The Lemma proved on page 96*}
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   236
lemma progress_set_lemma:
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   237
     "[|C \<in> progress_set F T B; r \<in> wens_set F B|] ==> T\<inter>r \<in> C"
13861
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   238
apply (simp add: progress_set_def, clarify) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   239
apply (erule wens_set.induct) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   240
  txt{*Base*}
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   241
  apply (simp add: Int_in_lattice) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   242
 txt{*The difficult @{term wens} case*}
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   243
 apply (simp add: progress_induction_step) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   244
txt{*Disjunctive case*}
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   245
apply (subgoal_tac "(\<Union>U\<in>W. T \<inter> U) \<in> C") 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   246
 apply (simp add: Int_Union) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   247
apply (blast intro: UN_in_lattice) 
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   248
done
0c18f31d901a Proved the main lemma on progress sets
paulson
parents: 13853
diff changeset
   249
13866
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   250
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   251
subsection {*The Progress Set Union Theorem*}
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   252
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   253
lemma closed_mono:
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   254
  assumes BB':  "B \<subseteq> B'"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   255
      and TBwp: "T \<inter> (B \<union> wp act M) \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   256
      and B'C:  "B' \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   257
      and TC:   "T \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   258
      and latt: "lattice C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   259
  shows "T \<inter> (B' \<union> wp act M) \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   260
proof -
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   261
  from TBwp have "(T\<inter>B) \<union> (T \<inter> wp act M) \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   262
    by (simp add: Int_Un_distrib)
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   263
  then have TBBC: "(T\<inter>B') \<union> ((T\<inter>B) \<union> (T \<inter> wp act M)) \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   264
    by (blast intro: Int_in_lattice Un_in_lattice TC B'C latt) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   265
  show ?thesis
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   266
    by (rule eqelem_imp_iff [THEN iffD1, OF _ TBBC], 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   267
        blast intro: BB' [THEN subsetD]) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   268
qed
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   269
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   270
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   271
lemma progress_set_mono:
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   272
    assumes BB':  "B \<subseteq> B'"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   273
    shows
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   274
     "[| B' \<in> C;  C \<in> progress_set F T B|] 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   275
      ==> C \<in> progress_set F T B'"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   276
by (simp add: progress_set_def closed_def closed_mono [OF BB'] 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   277
                 subset_trans [OF BB']) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   278
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   279
theorem progress_set_Union:
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   280
  assumes prog: "C \<in> progress_set F T B"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   281
      and BB':  "B \<subseteq> B'"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   282
      and B'C:  "B' \<in> C"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   283
      and Gco: "!!X. X\<in>C ==> G \<in> X-B co X"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   284
      and leadsTo: "F \<in> A leadsTo B'"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   285
  shows "F\<squnion>G \<in> T\<inter>A leadsTo B'"
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   286
apply (insert prog) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   287
apply (rule leadsTo_Join [OF leadsTo]) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   288
  apply (force simp add: progress_set_def awp_iff_stable [symmetric]) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   289
apply (simp add: awp_iff_constrains)
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   290
apply (drule progress_set_mono [OF BB' B'C]) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   291
apply (blast intro: progress_set_lemma Gco constrains_weaken_L 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   292
                    BB' [THEN subsetD]) 
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   293
done
b42d7983a822 More "progress set" material
paulson
parents: 13861
diff changeset
   294
13853
89131afa9f01 New theory ProgressSets. Definition of closure sets
paulson
parents:
diff changeset
   295
end