no_shm_selinux/Delete_prop.thy
author chunhan
Thu, 19 Dec 2013 10:05:13 +0800
changeset 79 c09fcbcdb871
parent 77 6f7b9039715f
child 88 e832378a2ff2
permissions -rw-r--r--
fixed bug in flags_of_proc_fd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
77
chunhan
parents:
diff changeset
     1
theory Delete_prop
chunhan
parents:
diff changeset
     2
imports Main Flask Flask_type Init_prop Alive_prop Current_files_prop
chunhan
parents:
diff changeset
     3
begin
chunhan
parents:
diff changeset
     4
chunhan
parents:
diff changeset
     5
context flask begin
chunhan
parents:
diff changeset
     6
chunhan
parents:
diff changeset
     7
lemma died_cons_I: "died obj s \<Longrightarrow> died obj (e # s)"
chunhan
parents:
diff changeset
     8
by (case_tac e, auto)
chunhan
parents:
diff changeset
     9
chunhan
parents:
diff changeset
    10
lemma not_died_cons_D: "\<not> died obj (e # s) \<Longrightarrow> \<not> died obj s" 
chunhan
parents:
diff changeset
    11
by (auto dest:died_cons_I)
chunhan
parents:
diff changeset
    12
chunhan
parents:
diff changeset
    13
lemma cons_app_simp_aux:
chunhan
parents:
diff changeset
    14
  "(a # b) @ c = a # (b @ c)" by auto
chunhan
parents:
diff changeset
    15
chunhan
parents:
diff changeset
    16
lemma not_died_app_I:
chunhan
parents:
diff changeset
    17
  "died obj s \<Longrightarrow> died obj (s' @ s)"
chunhan
parents:
diff changeset
    18
apply (induct s', simp)
chunhan
parents:
diff changeset
    19
by (simp add:cons_app_simp_aux died_cons_I)
chunhan
parents:
diff changeset
    20
chunhan
parents:
diff changeset
    21
lemma not_died_app_D:
chunhan
parents:
diff changeset
    22
  "\<not> died obj (s' @ s) \<Longrightarrow> \<not> died obj s"
chunhan
parents:
diff changeset
    23
apply (rule notI)
chunhan
parents:
diff changeset
    24
by (simp add:not_died_app_I)
chunhan
parents:
diff changeset
    25
chunhan
parents:
diff changeset
    26
lemma not_died_init_file:
chunhan
parents:
diff changeset
    27
  "\<lbrakk>\<not> died (O_file f) s; valid s; is_init_file f\<rbrakk> \<Longrightarrow> is_file s f"
chunhan
parents:
diff changeset
    28
apply (induct s, simp add:is_file_nil)
chunhan
parents:
diff changeset
    29
apply (frule vd_cons, frule vt_grant_os)
chunhan
parents:
diff changeset
    30
apply (case_tac a) prefer 6 apply (case_tac option)
chunhan
parents:
diff changeset
    31
apply (auto simp:is_file_simps split:option.splits)
chunhan
parents:
diff changeset
    32
done
chunhan
parents:
diff changeset
    33
chunhan
parents:
diff changeset
    34
lemma not_died_init_dir:
chunhan
parents:
diff changeset
    35
  "\<lbrakk>\<not> died (O_dir f) s; valid s; is_init_dir f\<rbrakk> \<Longrightarrow> is_dir s f"
chunhan
parents:
diff changeset
    36
apply (induct s, simp add:is_dir_nil)
chunhan
parents:
diff changeset
    37
apply (frule vd_cons, frule vt_grant_os)
chunhan
parents:
diff changeset
    38
apply (case_tac a) prefer 6 apply (case_tac option)
chunhan
parents:
diff changeset
    39
apply (auto simp:is_dir_simps split:option.splits)
chunhan
parents:
diff changeset
    40
done
chunhan
parents:
diff changeset
    41
chunhan
parents:
diff changeset
    42
lemma not_died_init_proc:
chunhan
parents:
diff changeset
    43
  "\<lbrakk>\<not> died (O_proc p) s; p \<in> init_procs\<rbrakk> \<Longrightarrow> p \<in> current_procs s"
chunhan
parents:
diff changeset
    44
apply (induct s, simp)
chunhan
parents:
diff changeset
    45
by (case_tac a, auto)
chunhan
parents:
diff changeset
    46
chunhan
parents:
diff changeset
    47
lemma current_fd_imp_current_proc:
chunhan
parents:
diff changeset
    48
  "\<lbrakk>fd \<in> current_proc_fds s p; valid s\<rbrakk> \<Longrightarrow> p \<in> current_procs s"
chunhan
parents:
diff changeset
    49
apply (induct s)
chunhan
parents:
diff changeset
    50
apply (simp add:init_fds_of_proc_prop1)
chunhan
parents:
diff changeset
    51
apply (frule vd_cons, drule vt_grant_os, case_tac a)
chunhan
parents:
diff changeset
    52
by (auto split:if_splits option.splits)
chunhan
parents:
diff changeset
    53
chunhan
parents:
diff changeset
    54
lemma not_died_init_fd_aux:
chunhan
parents:
diff changeset
    55
  "\<lbrakk>\<not> died (O_fd p fd) s; valid s; fd \<in> init_fds_of_proc p\<rbrakk> 
chunhan
parents:
diff changeset
    56
   \<Longrightarrow> fd \<in> current_proc_fds s p \<and> \<not> died (O_proc p) s"
chunhan
parents:
diff changeset
    57
apply (induct s arbitrary: p, simp)
chunhan
parents:
diff changeset
    58
apply (frule vd_cons, drule vt_grant_os)
chunhan
parents:
diff changeset
    59
apply (case_tac a, auto dest:current_fd_imp_current_proc)
chunhan
parents:
diff changeset
    60
done
chunhan
parents:
diff changeset
    61
chunhan
parents:
diff changeset
    62
lemma not_died_init_fd2:
chunhan
parents:
diff changeset
    63
  "\<lbrakk>\<not> died (O_fd p fd) s; fd \<in> init_fds_of_proc p; valid s\<rbrakk> \<Longrightarrow> \<not> died (O_proc p) s"
chunhan
parents:
diff changeset
    64
by (auto dest:not_died_init_fd_aux)
chunhan
parents:
diff changeset
    65
chunhan
parents:
diff changeset
    66
lemma not_died_init_fd1:
chunhan
parents:
diff changeset
    67
  "\<lbrakk>\<not> died (O_fd p fd) s; valid s; fd \<in> init_fds_of_proc p\<rbrakk> \<Longrightarrow> fd \<in> current_proc_fds s p"
chunhan
parents:
diff changeset
    68
by (auto dest:not_died_init_fd_aux)
chunhan
parents:
diff changeset
    69
chunhan
parents:
diff changeset
    70
lemma not_died_init_tcp_aux:
chunhan
parents:
diff changeset
    71
  "\<lbrakk>\<not> died (O_tcp_sock (p,fd)) s; valid s; is_init_tcp_sock (p,fd)\<rbrakk> 
chunhan
parents:
diff changeset
    72
   \<Longrightarrow> is_tcp_sock s (p,fd) \<and> \<not> died (O_proc p) s"
chunhan
parents:
diff changeset
    73
apply (induct s arbitrary:p, simp add:is_tcp_sock_nil)
chunhan
parents:
diff changeset
    74
apply (frule vd_cons, frule vt_grant_os)
chunhan
parents:
diff changeset
    75
apply (case_tac a) prefer 6 apply (case_tac option)
chunhan
parents:
diff changeset
    76
by (auto simp:is_tcp_sock_simps split:option.splits t_socket_type.splits 
chunhan
parents:
diff changeset
    77
         dest:is_tcp_sock_imp_curernt_proc)
chunhan
parents:
diff changeset
    78
chunhan
parents:
diff changeset
    79
lemma not_died_init_tcp1:
chunhan
parents:
diff changeset
    80
  "\<lbrakk>\<not> died (O_tcp_sock (p,fd)) s; valid s; is_init_tcp_sock (p,fd)\<rbrakk> 
chunhan
parents:
diff changeset
    81
   \<Longrightarrow> is_tcp_sock s (p,fd)"
chunhan
parents:
diff changeset
    82
by (auto dest:not_died_init_tcp_aux)
chunhan
parents:
diff changeset
    83
chunhan
parents:
diff changeset
    84
lemma not_died_init_tcp2:
chunhan
parents:
diff changeset
    85
  "\<lbrakk>\<not> died (O_tcp_sock (p,fd)) s; valid s; is_init_tcp_sock (p,fd)\<rbrakk> 
chunhan
parents:
diff changeset
    86
   \<Longrightarrow> \<not> died (O_proc p) s"
chunhan
parents:
diff changeset
    87
by (auto dest:not_died_init_tcp_aux)
chunhan
parents:
diff changeset
    88
chunhan
parents:
diff changeset
    89
lemma not_died_init_udp_aux:
chunhan
parents:
diff changeset
    90
  "\<lbrakk>\<not> died (O_udp_sock (p,fd)) s; valid s; is_init_udp_sock (p,fd)\<rbrakk> 
chunhan
parents:
diff changeset
    91
   \<Longrightarrow> is_udp_sock s (p,fd) \<and> \<not> died (O_proc p) s"
chunhan
parents:
diff changeset
    92
apply (induct s arbitrary:p, simp add:is_udp_sock_nil)
chunhan
parents:
diff changeset
    93
apply (frule vd_cons, frule vt_grant_os)
chunhan
parents:
diff changeset
    94
apply (case_tac a) prefer 6 apply (case_tac option)
chunhan
parents:
diff changeset
    95
by (auto simp:is_udp_sock_simps split:option.splits t_socket_type.splits 
chunhan
parents:
diff changeset
    96
         dest:is_udp_sock_imp_curernt_proc)
chunhan
parents:
diff changeset
    97
chunhan
parents:
diff changeset
    98
lemma not_died_init_udp1:
chunhan
parents:
diff changeset
    99
  "\<lbrakk>\<not> died (O_udp_sock (p,fd)) s; valid s; is_init_udp_sock (p,fd)\<rbrakk> 
chunhan
parents:
diff changeset
   100
   \<Longrightarrow> is_udp_sock s (p,fd)"
chunhan
parents:
diff changeset
   101
by (auto dest:not_died_init_udp_aux)
chunhan
parents:
diff changeset
   102
chunhan
parents:
diff changeset
   103
lemma not_died_init_udp2:
chunhan
parents:
diff changeset
   104
  "\<lbrakk>\<not> died (O_udp_sock (p,fd)) s; valid s; is_init_udp_sock (p,fd)\<rbrakk> 
chunhan
parents:
diff changeset
   105
   \<Longrightarrow> \<not> died (O_proc p) s"
chunhan
parents:
diff changeset
   106
by (auto dest:not_died_init_udp_aux)
chunhan
parents:
diff changeset
   107
chunhan
parents:
diff changeset
   108
(*
chunhan
parents:
diff changeset
   109
lemma not_died_init_shm:
chunhan
parents:
diff changeset
   110
  "\<lbrakk>\<not> died (O_shm h) s; h \<in> init_shms\<rbrakk> \<Longrightarrow> h \<in> current_shms s"
chunhan
parents:
diff changeset
   111
apply (induct s, simp)
chunhan
parents:
diff changeset
   112
by (case_tac a, auto)
chunhan
parents:
diff changeset
   113
*)
chunhan
parents:
diff changeset
   114
chunhan
parents:
diff changeset
   115
lemma not_died_init_msgq:
chunhan
parents:
diff changeset
   116
  "\<lbrakk>\<not> died (O_msgq q) s; q \<in> init_msgqs\<rbrakk> \<Longrightarrow> q \<in> current_msgqs s"
chunhan
parents:
diff changeset
   117
apply (induct s, simp)
chunhan
parents:
diff changeset
   118
by (case_tac a, auto)
chunhan
parents:
diff changeset
   119
chunhan
parents:
diff changeset
   120
lemma current_msg_imp_current_msgq:
chunhan
parents:
diff changeset
   121
  "\<lbrakk>m \<in> set (msgs_of_queue s q); valid s\<rbrakk> \<Longrightarrow> q \<in> current_msgqs s"
chunhan
parents:
diff changeset
   122
apply (induct s)
chunhan
parents:
diff changeset
   123
apply (simp add:init_msgs_valid)
chunhan
parents:
diff changeset
   124
apply (frule vd_cons, drule vt_grant_os)
chunhan
parents:
diff changeset
   125
apply (case_tac a, auto split:if_splits)
chunhan
parents:
diff changeset
   126
done
chunhan
parents:
diff changeset
   127
chunhan
parents:
diff changeset
   128
lemma not_died_init_msg:
chunhan
parents:
diff changeset
   129
  "\<lbrakk>\<not> died (O_msg q m) s; valid s; m \<in> set (init_msgs_of_queue q)\<rbrakk> \<Longrightarrow> m \<in> set (msgs_of_queue s q)"
chunhan
parents:
diff changeset
   130
apply (induct s, simp)
chunhan
parents:
diff changeset
   131
apply (frule vd_cons, frule vt_grant_os)
chunhan
parents:
diff changeset
   132
apply (case_tac a, auto dest:current_msg_imp_current_msgq)
chunhan
parents:
diff changeset
   133
apply (case_tac "msgs_of_queue s q", simp+)
chunhan
parents:
diff changeset
   134
done
chunhan
parents:
diff changeset
   135
chunhan
parents:
diff changeset
   136
lemma not_died_imp_alive: (* init_alive obj;  *)
chunhan
parents:
diff changeset
   137
  "\<lbrakk>\<not> died obj s;  valid s; init_alive obj\<rbrakk> \<Longrightarrow> alive s obj"
chunhan
parents:
diff changeset
   138
apply (case_tac obj)
chunhan
parents:
diff changeset
   139
apply (auto dest!: not_died_init_file not_died_init_dir not_died_init_proc
chunhan
parents:
diff changeset
   140
  not_died_init_msg not_died_init_fd1 not_died_init_tcp1 not_died_init_udp1 (* not_died_init_shm *)
chunhan
parents:
diff changeset
   141
  not_died_init_msgq 
chunhan
parents:
diff changeset
   142
           intro:is_file_in_current is_dir_in_current is_tcp_in_current is_udp_in_current
chunhan
parents:
diff changeset
   143
  current_msg_imp_current_msgq)
chunhan
parents:
diff changeset
   144
done
chunhan
parents:
diff changeset
   145
chunhan
parents:
diff changeset
   146
lemma not_died_cur_file_app:
chunhan
parents:
diff changeset
   147
  "\<lbrakk>\<not> died (O_file f) (s' @ s); valid (s' @ s); is_file s f\<rbrakk> \<Longrightarrow> is_file (s' @ s) f"
chunhan
parents:
diff changeset
   148
apply (induct s', simp, simp add:cons_app_simp_aux)
chunhan
parents:
diff changeset
   149
apply (frule vd_cons, frule vt_grant_os, simp)
chunhan
parents:
diff changeset
   150
apply (case_tac a) prefer 6 apply (case_tac option)
chunhan
parents:
diff changeset
   151
apply (auto simp:is_file_simps split:option.splits)
chunhan
parents:
diff changeset
   152
done
chunhan
parents:
diff changeset
   153
chunhan
parents:
diff changeset
   154
lemma not_died_cur_dir_app:
chunhan
parents:
diff changeset
   155
  "\<lbrakk>\<not> died (O_dir f) (s' @ s); valid (s' @ s); is_dir s f\<rbrakk> \<Longrightarrow> is_dir (s' @ s) f"
chunhan
parents:
diff changeset
   156
apply (induct s', simp, simp add:cons_app_simp_aux)
chunhan
parents:
diff changeset
   157
apply (frule vd_cons, frule vt_grant_os, simp)
chunhan
parents:
diff changeset
   158
apply (case_tac a) prefer 6 apply (case_tac option)
chunhan
parents:
diff changeset
   159
apply (auto simp:is_dir_simps split:option.splits)
chunhan
parents:
diff changeset
   160
done
chunhan
parents:
diff changeset
   161
chunhan
parents:
diff changeset
   162
lemma not_died_cur_proc_app:
chunhan
parents:
diff changeset
   163
  "\<lbrakk>\<not> died (O_proc p) (s' @ s); p \<in> current_procs s\<rbrakk> \<Longrightarrow> p \<in> current_procs (s' @ s)"
chunhan
parents:
diff changeset
   164
apply (induct s', simp, simp add:cons_app_simp_aux)
chunhan
parents:
diff changeset
   165
by (case_tac a, auto)
chunhan
parents:
diff changeset
   166
chunhan
parents:
diff changeset
   167
lemma not_died_cur_fd_app:
chunhan
parents:
diff changeset
   168
  "\<lbrakk>\<not> died (O_fd p fd) (s' @ s); valid (s' @ s); fd \<in> current_proc_fds s p\<rbrakk> 
chunhan
parents:
diff changeset
   169
   \<Longrightarrow> fd \<in> current_proc_fds (s' @ s) p"
chunhan
parents:
diff changeset
   170
apply (induct s' arbitrary: p, simp, simp add:cons_app_simp_aux)
chunhan
parents:
diff changeset
   171
apply (frule vd_cons, drule vt_grant_os)
chunhan
parents:
diff changeset
   172
apply (case_tac a, auto dest:current_fd_imp_current_proc)
chunhan
parents:
diff changeset
   173
done
chunhan
parents:
diff changeset
   174
chunhan
parents:
diff changeset
   175
lemma not_died_cur_tcp_app:
chunhan
parents:
diff changeset
   176
  "\<lbrakk>\<not> died (O_tcp_sock (p,fd)) (s' @ s); valid (s' @ s); is_tcp_sock s (p,fd)\<rbrakk> 
chunhan
parents:
diff changeset
   177
   \<Longrightarrow> is_tcp_sock (s' @ s) (p,fd)"
chunhan
parents:
diff changeset
   178
apply (induct s' arbitrary:p, simp, simp add:cons_app_simp_aux)
chunhan
parents:
diff changeset
   179
apply (frule vd_cons, frule vt_grant_os)
chunhan
parents:
diff changeset
   180
apply (case_tac a) prefer 6 apply (case_tac option)
chunhan
parents:
diff changeset
   181
by (auto simp:is_tcp_sock_simps split:option.splits t_socket_type.splits 
chunhan
parents:
diff changeset
   182
         dest:is_tcp_sock_imp_curernt_proc)
chunhan
parents:
diff changeset
   183
chunhan
parents:
diff changeset
   184
lemma not_died_cur_udp_app:
chunhan
parents:
diff changeset
   185
  "\<lbrakk>\<not> died (O_udp_sock (p,fd)) (s' @ s); valid (s' @ s); is_udp_sock s (p,fd)\<rbrakk> 
chunhan
parents:
diff changeset
   186
   \<Longrightarrow> is_udp_sock (s' @ s) (p,fd)"
chunhan
parents:
diff changeset
   187
apply (induct s' arbitrary:p, simp, simp add:cons_app_simp_aux)
chunhan
parents:
diff changeset
   188
apply (frule vd_cons, frule vt_grant_os)
chunhan
parents:
diff changeset
   189
apply (case_tac a) prefer 6 apply (case_tac option)
chunhan
parents:
diff changeset
   190
by (auto simp:is_udp_sock_simps split:option.splits t_socket_type.splits 
chunhan
parents:
diff changeset
   191
         dest:is_udp_sock_imp_curernt_proc)
chunhan
parents:
diff changeset
   192
chunhan
parents:
diff changeset
   193
(*
chunhan
parents:
diff changeset
   194
lemma not_died_cur_shm_app:
chunhan
parents:
diff changeset
   195
  "\<lbrakk>\<not> died (O_shm h) (s' @ s); h \<in> current_shms s\<rbrakk> \<Longrightarrow> h \<in> current_shms (s' @ s)"
chunhan
parents:
diff changeset
   196
apply (induct s', simp, simp add:cons_app_simp_aux)
chunhan
parents:
diff changeset
   197
by (case_tac a, auto)
chunhan
parents:
diff changeset
   198
*)
chunhan
parents:
diff changeset
   199
chunhan
parents:
diff changeset
   200
lemma not_died_cur_msgq_app:
chunhan
parents:
diff changeset
   201
  "\<lbrakk>\<not> died (O_msgq q) (s' @ s); q \<in> current_msgqs s\<rbrakk> \<Longrightarrow> q \<in> current_msgqs (s' @ s)"
chunhan
parents:
diff changeset
   202
apply (induct s', simp, simp add:cons_app_simp_aux)
chunhan
parents:
diff changeset
   203
by (case_tac a, auto)
chunhan
parents:
diff changeset
   204
chunhan
parents:
diff changeset
   205
lemma not_died_cur_msg_app:
chunhan
parents:
diff changeset
   206
  "\<lbrakk>\<not> died (O_msg q m) (s' @ s); valid (s' @ s); m \<in> set (msgs_of_queue s q)\<rbrakk> 
chunhan
parents:
diff changeset
   207
   \<Longrightarrow> m \<in> set (msgs_of_queue (s' @ s) q)"
chunhan
parents:
diff changeset
   208
apply (induct s', simp, simp add:cons_app_simp_aux)
chunhan
parents:
diff changeset
   209
apply (frule vd_cons, frule vt_grant_os)
chunhan
parents:
diff changeset
   210
apply (case_tac a, auto dest:current_msg_imp_current_msgq)
chunhan
parents:
diff changeset
   211
apply (case_tac "msgs_of_queue (s' @ s) q", simp+)
chunhan
parents:
diff changeset
   212
done
chunhan
parents:
diff changeset
   213
chunhan
parents:
diff changeset
   214
lemma not_died_imp_alive_app:
chunhan
parents:
diff changeset
   215
  "\<lbrakk>\<not> died obj (s' @ s); valid (s' @ s); alive s obj\<rbrakk> \<Longrightarrow> alive (s' @ s) obj"
chunhan
parents:
diff changeset
   216
apply (case_tac obj)
chunhan
parents:
diff changeset
   217
apply (auto dest!: not_died_cur_file_app not_died_cur_dir_app
chunhan
parents:
diff changeset
   218
  not_died_cur_proc_app not_died_cur_fd_app not_died_cur_tcp_app not_died_cur_msg_app
chunhan
parents:
diff changeset
   219
  not_died_cur_udp_app  (* not_died_cur_shm_app *) not_died_cur_msgq_app
chunhan
parents:
diff changeset
   220
           intro:is_file_in_current is_dir_in_current is_tcp_in_current is_udp_in_current 
chunhan
parents:
diff changeset
   221
  current_msg_imp_current_msgq)
chunhan
parents:
diff changeset
   222
done
chunhan
parents:
diff changeset
   223
chunhan
parents:
diff changeset
   224
lemma not_died_imp_alive_cons:
chunhan
parents:
diff changeset
   225
  "\<lbrakk>\<not> died obj (e # s); valid (e # s); alive s obj\<rbrakk> \<Longrightarrow> alive (e # s) obj"
chunhan
parents:
diff changeset
   226
using not_died_imp_alive_app[where s = s and s' = "[e]" and obj = obj] 
chunhan
parents:
diff changeset
   227
by auto
chunhan
parents:
diff changeset
   228
chunhan
parents:
diff changeset
   229
end
chunhan
parents:
diff changeset
   230
chunhan
parents:
diff changeset
   231
context tainting begin
chunhan
parents:
diff changeset
   232
chunhan
parents:
diff changeset
   233
lemma deleted_died:
chunhan
parents:
diff changeset
   234
  "appropriate obj \<Longrightarrow> died obj s = (deleted obj s \<or> exited obj s)"
chunhan
parents:
diff changeset
   235
apply (induct s)
chunhan
parents:
diff changeset
   236
apply (simp, case_tac obj, simp+)
chunhan
parents:
diff changeset
   237
apply (case_tac a, case_tac [!] obj, auto)
chunhan
parents:
diff changeset
   238
done
chunhan
parents:
diff changeset
   239
chunhan
parents:
diff changeset
   240
end
chunhan
parents:
diff changeset
   241
chunhan
parents:
diff changeset
   242
(*
chunhan
parents:
diff changeset
   243
chunhan
parents:
diff changeset
   244
lemma nodel_imp_un_died:
chunhan
parents:
diff changeset
   245
  "no_del_event s \<Longrightarrow> \<not> died obj s"
chunhan
parents:
diff changeset
   246
by (induct s, simp, case_tac a,auto)
chunhan
parents:
diff changeset
   247
chunhan
parents:
diff changeset
   248
lemma nodel_exists_remains:
chunhan
parents:
diff changeset
   249
  "\<lbrakk>no_del_event (s'@s); exists s obj\<rbrakk> \<Longrightarrow> exists (s'@s) obj"
chunhan
parents:
diff changeset
   250
apply (drule_tac obj = obj in nodel_imp_un_died)
chunhan
parents:
diff changeset
   251
by (simp add:not_died_imp_exists')
chunhan
parents:
diff changeset
   252
chunhan
parents:
diff changeset
   253
lemma nodel_imp_exists:
chunhan
parents:
diff changeset
   254
  "\<lbrakk>no_del_event s; exists [] obj\<rbrakk> \<Longrightarrow> exists s obj"
chunhan
parents:
diff changeset
   255
apply (drule_tac obj = obj in nodel_imp_un_died)
chunhan
parents:
diff changeset
   256
by (simp add:not_died_imp_exists)
chunhan
parents:
diff changeset
   257
chunhan
parents:
diff changeset
   258
lemma no_del_event_cons_D:
chunhan
parents:
diff changeset
   259
  "no_del_event (e # s) \<Longrightarrow> no_del_event s"
chunhan
parents:
diff changeset
   260
by (case_tac e, auto)
chunhan
parents:
diff changeset
   261
*)
chunhan
parents:
diff changeset
   262
chunhan
parents:
diff changeset
   263
end