39 apply (subgoal_tac "p \<in> current_procs (Execve p f fds # s)") |
26 apply (subgoal_tac "p \<in> current_procs (Execve p f fds # s)") |
40 apply (drule_tac p = p and s = "Execve p f fds # s" in current_proc_has_sp, simp) |
27 apply (drule_tac p = p and s = "Execve p f fds # s" in current_proc_has_sp, simp) |
41 apply (erule exE, simp) |
28 apply (erule exE, simp) |
42 apply (simp add:s2ss_def, rule set_eqI, rule iffI) |
29 apply (simp add:s2ss_def, rule set_eqI, rule iffI) |
43 apply (drule CollectD, (erule exE|erule conjE)+) |
30 apply (drule CollectD, (erule exE|erule conjE)+) |
44 apply (case_tac "obj = O_proc p") |
31 apply (case_tac "obj = D_proc p") |
45 apply (simp add:co2sobj_execve split:if_splits) |
32 apply (simp add:co2sobj_execve split:if_splits) |
46 apply (simp add:co2sobj_execve, rule disjI2) |
33 apply (simp add:co2sobj_execve, rule disjI2) |
47 apply (rule_tac x = obj in exI, case_tac obj, (simp add:alive_simps)+)[1] |
34 apply (rule_tac x = obj in exI, case_tac obj, (simp add:dalive_simps)+)[1] |
48 apply (simp, erule disjE) |
35 apply (simp, erule disjE) |
49 apply (rule_tac x = "O_proc p" in exI, simp) |
36 apply (rule_tac x = "D_proc p" in exI, simp) |
50 apply (erule exE| erule conjE)+ |
37 apply (erule exE| erule conjE)+ |
51 apply (case_tac "x = S_proc sp (O_proc p \<in> tainted s)") |
38 apply (case_tac "x = S_proc sp (O_proc p \<in> tainted s)") |
52 apply (rule_tac x = "O_proc p'" in exI) |
39 apply (rule_tac x = "D_proc p'" in exI) |
53 apply (simp add:alive_execve co2sobj_execve cp2sproc_execve) |
40 apply (simp add:dalive_execve co2sobj_execve cp2sproc_execve) |
54 apply (case_tac "obj = O_proc p", simp) |
41 apply (case_tac "obj = D_proc p", simp, simp add:dalive_execve) |
55 apply (frule co2sobj_execve_alive, simp, simp) |
42 apply (frule_tac obj = obj in co2sobj_execve, simp add:dalive_execve) |
56 apply (frule_tac obj = obj in co2sobj_execve, simp) |
|
57 apply (rule_tac x = obj in exI, simp, simp) |
43 apply (rule_tac x = obj in exI, simp, simp) |
58 |
44 |
59 apply (erule conjE, frule current_proc_has_sp, simp, erule exE, rule impI, simp) |
45 apply (erule conjE, frule current_proc_has_sp, simp, erule exE, rule impI, simp) |
60 apply (subgoal_tac "p \<in> current_procs (Execve p f fds # s)") |
46 apply (subgoal_tac "p \<in> current_procs (Execve p f fds # s)") |
61 apply (drule_tac p = p and s = "Execve p f fds # s" in current_proc_has_sp, simp) |
47 apply (drule_tac p = p and s = "Execve p f fds # s" in current_proc_has_sp, simp) |
62 apply (erule exE, erule conjE, simp) |
48 apply (erule exE, erule conjE, simp) |
63 apply (simp add:s2ss_def, rule set_eqI, rule iffI) |
49 apply (simp add:s2ss_def, rule set_eqI, rule iffI) |
64 apply (drule CollectD, (erule exE|erule conjE)+) |
50 apply (drule CollectD, (erule exE|erule conjE)+) |
65 apply (case_tac "obj = O_proc p", simp) |
51 apply (case_tac "obj = D_proc p", simp) |
66 apply (rule disjI1, simp split:if_splits) |
52 apply (rule disjI1, simp split:if_splits) |
67 apply (simp add:co2sobj_execve, rule disjI2) |
53 apply (simp add:co2sobj_execve, rule disjI2) |
68 apply (rule conjI,rule_tac x = obj in exI, simp add:alive_simps split:t_object.splits) |
54 apply (rule conjI,rule_tac x = obj in exI, simp add:dalive_simps split:t_object.splits) |
69 apply (rule notI, simp, case_tac obj) |
55 apply (rule notI, simp, case_tac obj) |
70 apply (erule_tac x = nat in allE, simp, (simp split:option.splits)+) |
56 apply (erule_tac x = nat in allE, simp, (simp split:option.splits)+) |
71 apply (erule disjE, simp) |
57 apply (erule disjE, simp) |
72 apply (rule_tac x = "O_proc p" in exI, simp) |
58 apply (rule_tac x = "D_proc p" in exI, simp) |
73 apply (erule exE|erule conjE)+ |
59 apply (erule exE|erule conjE)+ |
74 apply (rule_tac x = obj in exI) |
60 apply (rule_tac x = obj in exI, simp add:dalive_execve) |
75 apply (drule_tac obj = obj in co2sobj_execve_alive, simp+) |
61 apply (frule_tac obj = obj in co2sobj_execve, simp add:dalive_execve, simp) |
76 apply (frule_tac obj = obj in co2sobj_execve, simp, simp) |
|
77 apply (rule impI, simp, simp) |
62 apply (rule impI, simp, simp) |
78 done |
63 done |
79 |
|
80 lemma s2ss_clone_alive: |
|
81 "\<lbrakk>co2sobj s obj = Some x; alive s obj; obj \<noteq> O_proc p'; valid (Clone p p' fds # s)\<rbrakk> |
|
82 \<Longrightarrow> alive (Clone p p' fds # s) obj" |
|
83 by (erule co2sobj_some_case, auto simp:alive_clone) |
|
84 |
64 |
85 lemma s2ss_clone: |
65 lemma s2ss_clone: |
86 "valid (Clone p p' fds # s) \<Longrightarrow> s2ss (Clone p p' fds # s) = ( |
66 "valid (Clone p p' fds # s) \<Longrightarrow> s2ss (Clone p p' fds # s) = ( |
87 case (cp2sproc (Clone p p' fds # s) p') of |
67 case (cp2sproc (Clone p p' fds # s) p') of |
88 Some sp \<Rightarrow> s2ss s \<union> {S_proc sp (O_proc p \<in> tainted s)} |
68 Some sp \<Rightarrow> s2ss s \<union> {S_proc sp (O_proc p \<in> tainted s)} |
89 | _ \<Rightarrow> {})" |
69 | _ \<Rightarrow> {})" |
90 apply (frule vd_cons, frule vt_grant_os, split option.splits) |
70 apply (frule vd_cons, frule vt_grant_os, split option.splits) |
91 apply (rule conjI, rule impI, drule current_proc_has_sp', simp, simp) |
71 apply (rule conjI, rule impI, drule current_proc_has_sp', simp, simp) |
92 apply (rule allI, rule impI, simp add:s2ss_def) |
72 apply (rule allI, rule impI, simp add:s2ss_def) |
93 apply (rule set_eqI, rule iffI, drule CollectD, (erule exE|erule conjE)+) |
73 apply (rule set_eqI, rule iffI, drule CollectD, (erule exE|erule conjE)+) |
94 apply (case_tac "obj = O_proc p'", simp) |
74 apply (case_tac "obj = D_proc p'", simp) |
95 apply (case_tac "O_proc p' \<in> tainted s", drule tainted_in_current, simp+) |
75 apply (case_tac "O_proc p' \<in> tainted s", drule tainted_in_current, simp+) |
96 apply (rule disjI1, simp split:if_splits) |
76 apply (rule disjI1, simp split:if_splits) |
97 apply (simp, rule disjI2) |
77 apply (simp, rule disjI2) |
98 apply (frule co2sobj_clone, simp) |
78 apply (frule co2sobj_clone, simp) |
99 apply (rule_tac x = obj in exI, simp add:alive_simps split:t_object.splits) |
79 apply (rule_tac x = obj in exI) |
|
80 apply (simp add:dalive_simps split:t_dobject.splits) |
100 |
81 |
101 apply (simp, erule disjE, simp) |
82 apply (simp, erule disjE, simp) |
102 apply (rule_tac x = "O_proc p'" in exI, simp) |
83 apply (rule_tac x = "D_proc p'" in exI, simp) |
103 apply (rule impI, rule notI, drule tainted_in_current, simp+) |
84 apply (rule impI, rule notI, drule tainted_in_current, simp+) |
104 apply (erule exE| erule conjE)+ |
85 apply (erule exE| erule conjE)+ |
105 apply (case_tac "obj = O_proc p'", simp) |
86 apply (case_tac "obj = D_proc p'", simp) |
106 apply (rule_tac x = obj in exI) |
87 apply (rule_tac x = obj in exI) |
107 apply (frule s2ss_clone_alive, simp+) |
88 apply (frule dalive_clone) |
108 apply (auto simp:co2sobj_clone alive_simps) |
89 apply (case_tac obj) |
|
90 apply (auto simp:co2sobj_clone split:t_dobject.splits simp del:co2sobj.simps) |
109 done |
91 done |
110 |
92 |
111 (* |
93 (* |
112 definition s2ss_shm_no_backup:: "t_state \<Rightarrow> t_process \<Rightarrow> t_static_state" |
94 definition s2ss_shm_no_backup:: "t_state \<Rightarrow> t_process \<Rightarrow> t_static_state" |
113 where |
95 where |
327 |
311 |
328 apply (simp add:update_s2ss_obj_def) |
312 apply (simp add:update_s2ss_obj_def) |
329 apply (tactic {*my_clarify_tac 1*}) |
313 apply (tactic {*my_clarify_tac 1*}) |
330 apply (simp add:s2ss_def) |
314 apply (simp add:s2ss_def) |
331 apply (tactic {*my_seteq_tac 1*}) |
315 apply (tactic {*my_seteq_tac 1*}) |
332 apply (case_tac "obj = O_proc p") |
316 apply (case_tac "obj = D_proc p") |
333 apply (rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
317 apply (rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
334 apply (rule disjI2, simp, rule_tac x = obj in exI) |
318 apply (rule disjI2, simp, rule_tac x = obj in exI) |
335 apply (simp add:co2sobj_ptrace is_file_simps is_dir_simps alive_other split:t_object.splits if_splits) |
319 apply (simp add:co2sobj_ptrace is_file_simps is_dir_simps dalive_other split:t_dobject.splits if_splits) |
336 apply (tactic {*my_setiff_tac 1*}) |
320 apply (tactic {*my_setiff_tac 1*}) |
337 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
321 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
338 apply (tactic {*my_setiff_tac 1*}) |
322 apply (tactic {*my_setiff_tac 1*}) |
339 apply (case_tac "obj = O_proc p") |
323 apply (case_tac "obj = D_proc p") |
340 apply (rule_tac x = obj' in exI) |
324 apply (rule_tac x = obj' in exI) |
341 apply (simp add:co2sobj_ptrace alive_other split:t_object.splits if_splits) |
325 apply (simp add:co2sobj_ptrace dalive_other split:t_dobject.splits if_splits) |
342 apply (auto simp:co2sobj.simps)[1] |
326 apply (auto simp:co2sobj.simps)[1] |
343 apply (rule_tac x = obj in exI, simp add:co2sobj_ptrace alive_other split:t_object.splits) |
327 apply (rule_tac x = obj in exI, simp add:co2sobj_ptrace dalive_other split:t_dobject.splits) |
344 apply (auto simp:co2sobj.simps)[1] |
328 apply (auto simp:co2sobj.simps)[1] |
345 |
329 |
346 apply (rule impI) |
330 apply (rule impI) |
347 apply (simp add:s2ss_def) |
331 apply (simp add:s2ss_def) |
348 apply (tactic {*my_seteq_tac 1*}) |
332 apply (tactic {*my_seteq_tac 1*}) |
349 apply (case_tac "obj = O_proc p") |
333 apply (case_tac "obj = D_proc p") |
350 apply (rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
334 apply (rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
351 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
335 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
352 apply (simp add:co2sobj_ptrace is_file_simps is_dir_simps alive_other split:t_object.splits if_splits) |
336 apply (simp add:co2sobj_ptrace is_file_simps is_dir_simps dalive_other split:t_dobject.splits if_splits) |
353 apply (rule notI, simp) |
337 apply (rule notI, simp) |
354 apply (frule_tac obj = obj in co2sobj_sproc_imp, erule exE, simp) |
338 apply (frule_tac obj = obj in co2sobj_sproc_imp, erule exE, simp) |
355 apply (erule_tac x = obj in allE, simp add:co2sobj_ptrace cp2sproc_other split:option.splits) |
339 apply (erule_tac x = obj in allE, simp add:co2sobj_ptrace cp2sproc_other split:option.splits) |
356 apply (tactic {*my_setiff_tac 1*}) |
340 apply (tactic {*my_setiff_tac 1*}) |
357 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
341 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
358 apply (tactic {*my_setiff_tac 1*}) |
342 apply (tactic {*my_setiff_tac 1*}) |
359 apply (case_tac "obj = O_proc p") |
343 apply (case_tac "obj = D_proc p") |
360 apply (simp add:co2sobj.simps cp2sproc_other) |
344 apply (simp add:co2sobj.simps cp2sproc_other) |
361 apply (rule_tac x = obj in exI, simp add:co2sobj_ptrace alive_other split:t_object.splits) |
345 apply (rule_tac x = obj in exI, simp add:co2sobj_ptrace dalive_other split:t_dobject.splits) |
362 apply (auto simp:co2sobj.simps)[1] |
346 apply (auto simp:co2sobj.simps)[1] |
363 done |
347 done |
364 |
348 |
365 lemma s2ss_ptrace3: |
349 lemma s2ss_ptrace3: |
366 "\<lbrakk>valid (Ptrace p p' # s); (O_proc p' \<in> tainted s) = (O_proc p \<in> tainted s)\<rbrakk> |
350 "\<lbrakk>valid (Ptrace p p' # s); (O_proc p' \<in> tainted s) = (O_proc p \<in> tainted s)\<rbrakk> |
367 \<Longrightarrow> s2ss (Ptrace p p' # s) = s2ss s" |
351 \<Longrightarrow> s2ss (Ptrace p p' # s) = s2ss s" |
368 unfolding s2ss_def |
352 unfolding s2ss_def |
369 apply (frule vd_cons, frule vt_grant_os, rule set_eqI, rule iffI) |
353 apply (frule vd_cons, frule vt_grant_os, rule set_eqI, rule iffI) |
370 apply (erule CollectE, (erule exE|erule conjE)+, rule CollectI) |
354 apply (erule CollectE, (erule exE|erule conjE)+, rule CollectI) |
371 apply (rule_tac x = obj in exI) |
355 apply (rule_tac x = obj in exI) |
372 apply (frule alive_other, simp+) |
356 apply (frule dalive_other, simp+) |
373 apply (frule_tac obj = obj in co2sobj_ptrace, simp) |
357 apply (frule_tac obj = obj in co2sobj_ptrace, simp) |
374 apply (auto split:t_object.splits option.splits if_splits)[1] |
358 apply (auto split:t_dobject.splits option.splits if_splits)[1] |
375 |
359 |
376 apply (tactic {*my_setiff_tac 1*}) |
360 apply (tactic {*my_setiff_tac 1*}) |
377 apply (rule_tac x = obj in exI) |
361 apply (rule_tac x = obj in exI) |
378 apply (frule alive_other, simp+) |
362 apply (frule dalive_other, simp+) |
379 apply (frule_tac obj = obj in co2sobj_ptrace, simp) |
363 apply (frule_tac obj = obj in co2sobj_ptrace, simp) |
380 apply (case_tac "cp2sproc s p'") |
364 apply (case_tac "cp2sproc s p'") |
381 apply (drule current_proc_has_sp', simp, simp) |
365 apply (drule current_proc_has_sp', simp, simp) |
382 apply (case_tac "cp2sproc s p") |
366 apply (case_tac "cp2sproc s p") |
383 apply (drule current_proc_has_sp', simp, simp) |
367 apply (drule current_proc_has_sp', simp, simp) |
384 apply (case_tac "O_proc p' \<in> tainted s") |
368 apply (case_tac "O_proc p' \<in> tainted s") |
385 apply (auto split:t_object.splits option.splits if_splits simp:co2sobj.simps) |
369 apply (auto split:t_dobject.splits option.splits if_splits simp:co2sobj.simps) |
386 done |
370 done |
387 |
371 |
388 lemma s2ss_ptrace: |
372 lemma s2ss_ptrace: |
389 "valid (Ptrace p p' # s) \<Longrightarrow> s2ss (Ptrace p p' # s) = ( |
373 "valid (Ptrace p p' # s) \<Longrightarrow> s2ss (Ptrace p p' # s) = ( |
390 if (O_proc p \<in> tainted s \<and> O_proc p' \<notin> tainted s) |
374 if (O_proc p \<in> tainted s \<and> O_proc p' \<notin> tainted s) |
391 then (case (cp2sproc s p') of |
375 then (case (cp2sproc s p') of |
392 Some sp \<Rightarrow> update_s2ss_obj s (s2ss s) (O_proc p') (S_proc sp False) (S_proc sp True) |
376 Some sp \<Rightarrow> update_s2ss_obj s (s2ss s) (D_proc p') (S_proc sp False) (S_proc sp True) |
393 | _ \<Rightarrow> {}) |
377 | _ \<Rightarrow> {}) |
394 else if (O_proc p' \<in> tainted s \<and> O_proc p \<notin> tainted s) |
378 else if (O_proc p' \<in> tainted s \<and> O_proc p \<notin> tainted s) |
395 then (case (cp2sproc s p) of |
379 then (case (cp2sproc s p) of |
396 Some sp \<Rightarrow> update_s2ss_obj s (s2ss s) (O_proc p) (S_proc sp False) (S_proc sp True) |
380 Some sp \<Rightarrow> update_s2ss_obj s (s2ss s) (D_proc p) (S_proc sp False) (S_proc sp True) |
397 | _ \<Rightarrow> {}) |
381 | _ \<Rightarrow> {}) |
398 else s2ss s )" |
382 else s2ss s )" |
399 apply (case_tac "O_proc p \<in> tainted s \<and> O_proc p' \<notin> tainted s") |
383 apply (case_tac "O_proc p \<in> tainted s \<and> O_proc p' \<notin> tainted s") |
400 apply (drule s2ss_ptrace1, simp, simp, simp split:option.splits) |
384 apply (drule s2ss_ptrace1, simp, simp, simp split:option.splits) |
401 apply (case_tac "O_proc p' \<in> tainted s \<and> O_proc p \<notin> tainted s") |
385 apply (case_tac "O_proc p' \<in> tainted s \<and> O_proc p \<notin> tainted s") |
553 apply (rule impI) |
537 apply (rule impI) |
554 apply (simp add:s2ss_exit') |
538 apply (simp add:s2ss_exit') |
555 apply (rule impI) |
539 apply (rule impI) |
556 apply (tactic {*my_clarify_tac 1*}) |
540 apply (tactic {*my_clarify_tac 1*}) |
557 apply (simp split:option.splits) |
541 apply (simp split:option.splits) |
558 apply (erule_tac x = "O_proc p'" in allE, simp) |
542 apply (erule_tac x = "D_proc p'" in allE, simp) |
559 done |
543 done |
560 |
544 |
561 lemma alive_has_sobj': |
545 lemma dalive_has_sobj': |
562 "\<lbrakk>co2sobj s obj = None; valid s\<rbrakk> \<Longrightarrow> \<not> alive s obj" |
546 "\<lbrakk>co2sobj s obj = None; valid s\<rbrakk> \<Longrightarrow> \<not> dalive s obj" |
563 apply (case_tac obj) |
547 apply (case_tac obj) |
564 apply (auto split:option.splits) |
548 apply (auto split:option.splits) |
565 oops |
549 oops |
566 |
550 |
567 declare co2sobj.simps [simp del] |
551 declare co2sobj.simps [simp del] |
568 |
552 |
569 lemma co2sobj_open_none: |
553 lemma co2sobj_open_none: |
570 "\<lbrakk>valid (Open p f flag fd None # s); alive s obj\<rbrakk> \<Longrightarrow> co2sobj (Open p f flag fd None # s) obj = ( |
554 "\<lbrakk>valid (Open p f flag fd None # s); dalive s obj\<rbrakk> \<Longrightarrow> co2sobj (Open p f flag fd None # s) obj = ( |
571 if (obj = O_proc p) |
555 if (obj = D_proc p) |
572 then (case (cp2sproc (Open p f flag fd None # s) p) of |
556 then (case (cp2sproc (Open p f flag fd None # s) p) of |
573 Some sp \<Rightarrow> Some (S_proc sp (O_proc p \<in> tainted s)) |
557 Some sp \<Rightarrow> Some (S_proc sp (O_proc p \<in> tainted s)) |
574 | _ \<Rightarrow> None) |
558 | _ \<Rightarrow> None) |
575 else co2sobj s obj)" |
559 else co2sobj s obj)" |
576 apply (frule vt_grant_os, frule vd_cons) |
560 apply (frule vt_grant_os, frule vd_cons) |
577 apply (frule_tac obj = obj in co2sobj_open, simp add:alive_open) |
561 apply (frule_tac obj = obj in co2sobj_open, simp add:dalive_open) |
578 apply (auto split:t_object.splits option.splits dest!:current_proc_has_sp') |
562 apply (auto split:t_dobject.splits option.splits dest!:current_proc_has_sp') |
579 done |
563 done |
580 |
564 |
581 lemma co2sobj_open_some: |
565 lemma co2sobj_open_some: |
582 "\<lbrakk>valid (Open p f flag fd (Some i) # s); alive s obj\<rbrakk> \<Longrightarrow> co2sobj (Open p f flag fd (Some i) # s) obj = ( |
566 "\<lbrakk>valid (Open p f flag fd (Some i) # s); dalive s obj\<rbrakk> \<Longrightarrow> co2sobj (Open p f flag fd (Some i) # s) obj = ( |
583 if (obj = O_proc p) |
567 if (obj = D_proc p) |
584 then (case (cp2sproc (Open p f flag fd (Some i) # s) p) of |
568 then (case (cp2sproc (Open p f flag fd (Some i) # s) p) of |
585 Some sp \<Rightarrow> Some (S_proc sp (O_proc p \<in> tainted s)) |
569 Some sp \<Rightarrow> Some (S_proc sp (O_proc p \<in> tainted s)) |
586 | _ \<Rightarrow> None) |
570 | _ \<Rightarrow> None) |
587 else if (obj = O_file f) |
571 else if (obj = D_file f) |
588 then (case (cf2sfile (Open p f flag fd (Some i) # s) f) of |
572 then (case (cf2sfile (Open p f flag fd (Some i) # s) f) of |
589 Some sf \<Rightarrow> Some (S_file {sf} (O_proc p \<in> tainted s)) |
573 Some sf \<Rightarrow> Some (S_file {sf} (O_proc p \<in> tainted s)) |
590 | _ \<Rightarrow> None) |
574 | _ \<Rightarrow> None) |
591 else co2sobj s obj)" |
575 else co2sobj s obj)" |
592 apply (frule vt_grant_os, frule vd_cons) |
576 apply (frule vt_grant_os, frule vd_cons) |
593 apply (frule_tac obj = obj in co2sobj_open, simp add:alive_open) |
577 apply (frule_tac obj = obj in co2sobj_open, simp add:dalive_open) |
594 apply (auto split:t_object.splits option.splits dest!:current_proc_has_sp') |
578 apply (auto split:t_dobject.splits option.splits dest!:current_proc_has_sp') |
595 done |
579 done |
596 |
|
597 lemma alive_co2sobj_some_open_none: |
|
598 "\<lbrakk>co2sobj s obj = Some sobj; alive s obj; valid (Open p f flag fd None # s)\<rbrakk> |
|
599 \<Longrightarrow> alive (Open p f flag fd None # s) obj" |
|
600 by (erule co2sobj_some_caseD, auto simp:alive_simps is_file_simps is_dir_simps) |
|
601 |
|
602 lemma alive_co2sobj_some_open_none': |
|
603 "\<lbrakk>co2sobj (Open p f flag fd None # s) obj = Some sobj; alive (Open p f flag fd None # s) obj; |
|
604 valid (Open p f flag fd None # s)\<rbrakk> \<Longrightarrow> alive s obj" |
|
605 by (erule co2sobj_some_caseD, auto simp:alive_simps is_file_simps is_dir_simps) |
|
606 |
580 |
607 lemma co2sobj_proc_obj: |
581 lemma co2sobj_proc_obj: |
608 "\<lbrakk>co2sobj s obj = Some x; co2sobj s (O_proc p) = Some x\<rbrakk> |
582 "\<lbrakk>co2sobj s obj = Some x; co2sobj s (D_proc p) = Some x\<rbrakk> |
609 \<Longrightarrow> \<exists> p'. obj = O_proc p'" |
583 \<Longrightarrow> \<exists> p'. obj = D_proc p'" |
610 by (case_tac obj, auto simp:co2sobj.simps split:option.splits) |
584 by (case_tac obj, auto simp:co2sobj.simps split:option.splits) |
611 |
585 |
612 lemma s2ss_open_none: |
586 lemma s2ss_open_none: |
613 "valid (Open p f flag fd None # s) \<Longrightarrow> s2ss (Open p f flag fd None # s) = ( |
587 "valid (Open p f flag fd None # s) \<Longrightarrow> s2ss (Open p f flag fd None # s) = ( |
614 case (co2sobj s (O_proc p), co2sobj (Open p f flag fd None # s) (O_proc p)) of |
588 case (co2sobj s (D_proc p), co2sobj (Open p f flag fd None # s) (D_proc p)) of |
615 (Some sp, Some sp') \<Rightarrow> |
589 (Some sp, Some sp') \<Rightarrow> |
616 if (\<exists> p'. p' \<in> current_procs s \<and> p' \<noteq> p \<and> co2sobj s (O_proc p') = Some sp) |
590 if (\<exists> p'. p' \<in> current_procs s \<and> p' \<noteq> p \<and> co2sobj s (D_proc p') = Some sp) |
617 then s2ss s \<union> {sp'} |
591 then s2ss s \<union> {sp'} |
618 else s2ss s - {sp} \<union> {sp'} |
592 else s2ss s - {sp} \<union> {sp'} |
619 | _ \<Rightarrow> {} )" |
593 | _ \<Rightarrow> {} )" |
620 unfolding s2ss_def |
594 unfolding s2ss_def |
621 apply (frule vt_grant_os, frule vd_cons) |
595 apply (frule vt_grant_os, frule vd_cons) |
622 apply (case_tac "co2sobj s (O_proc p)", simp add:co2sobj.simps split:option.splits) |
596 apply (case_tac "co2sobj s (D_proc p)", simp add:co2sobj.simps split:option.splits) |
623 apply (drule current_proc_has_sp', simp, simp) |
597 apply (drule current_proc_has_sp', simp, simp) |
624 apply (case_tac "co2sobj (Open p f flag fd None # s) (O_proc p)") |
598 apply (case_tac "co2sobj (Open p f flag fd None # s) (D_proc p)") |
625 apply (simp add:co2sobj.simps split:option.splits) |
599 apply (simp add:co2sobj.simps split:option.splits) |
626 apply (drule current_proc_has_sp', simp, simp) |
600 apply (drule current_proc_has_sp', simp, simp) |
627 apply (rule set_eqI, rule iffI, erule CollectE, erule exE, erule conjE, simp) |
601 apply (rule set_eqI, rule iffI, erule CollectE, erule exE, erule conjE, simp) |
628 apply (frule_tac obj = obj in alive_co2sobj_some_open_none', simp, simp) |
602 apply (simp add:dalive_open) |
629 apply (rule conjI, rule impI, erule exE, (erule conjE)+) |
603 apply (rule conjI, rule impI, erule exE, (erule conjE)+) |
630 apply (rule Meson.disj_comm, rule disjCI, case_tac "obj = O_proc p", simp) |
604 apply (rule Meson.disj_comm, rule disjCI, case_tac "obj = D_proc p", simp) |
631 apply (rule_tac x = obj in exI, simp add:co2sobj_open_none) |
605 apply (rule_tac x = obj in exI, simp add:co2sobj_open_none dalive_open split:t_dobject.splits) |
632 apply (rule impI) |
606 apply (rule impI) |
633 apply (case_tac "obj = O_proc p", simp) |
607 apply (case_tac "obj = D_proc p", simp) |
634 apply (rule Meson.disj_comm, rule disjCI, rule conjI) |
608 apply (rule Meson.disj_comm, rule disjCI, rule conjI) |
635 apply (rule_tac x = obj in exI, simp add:co2sobj_open_none) |
609 apply (rule_tac x = obj in exI, simp add:co2sobj_open_none split:t_dobject.splits) |
|
610 apply (rule notI) |
636 apply (simp add:co2sobj_open_none split:option.splits) |
611 apply (simp add:co2sobj_open_none split:option.splits) |
637 apply (rule notI) |
612 apply (frule_tac co2sobj_proc_obj, simp, erule exE) |
638 apply (frule co2sobj_proc_obj, simp, erule exE) |
613 apply (erule_tac x = p' in allE, simp split:t_dobject.splits) |
639 apply (erule_tac x = p' in allE, simp) |
|
640 |
614 |
641 apply (simp split:if_splits) |
615 apply (simp split:if_splits) |
642 apply (erule disjE, rule_tac x = "O_proc p" in exI, simp) |
616 apply (erule disjE, rule_tac x = "D_proc p" in exI, simp) |
643 apply (erule exE, erule conjE, case_tac "obj = O_proc p") |
617 apply (erule exE, erule conjE, case_tac "obj = D_proc p") |
644 apply (rule_tac x = "O_proc p'" in exI, simp add:co2sobj_open_none) |
618 apply (rule_tac x = "D_proc p'" in exI, simp add:co2sobj_open_none) |
645 apply (rule_tac x = obj in exI, simp add:co2sobj_open_none alive_co2sobj_some_open_none) |
619 apply (rule_tac x = obj in exI, simp add:co2sobj_open_none dalive_open) |
646 apply (erule disjE, rule_tac x = "O_proc p" in exI, simp) |
620 apply (erule disjE, rule_tac x = "D_proc p" in exI, simp) |
647 apply (erule conjE, erule exE, erule conjE, case_tac "obj = O_proc p") |
621 apply (erule conjE, erule exE, erule conjE, case_tac "obj = D_proc p") |
648 apply (rule_tac x = "O_proc p'" in exI, simp add:co2sobj_open_none) |
622 apply (rule_tac x = "D_proc p'" in exI, simp add:co2sobj_open_none) |
649 apply (rule_tac x = obj in exI, simp add:co2sobj_open_none alive_co2sobj_some_open_none) |
623 apply (rule_tac x = obj in exI, simp add:co2sobj_open_none dalive_open) |
650 done |
624 done |
651 |
|
652 lemma alive_co2sobj_some_open_some: |
|
653 "\<lbrakk>alive s obj; valid (Open p f flag fd (Some i) # s)\<rbrakk> |
|
654 \<Longrightarrow> alive (Open p f flag fd (Some i) # s) obj" |
|
655 by (case_tac obj, auto simp:alive_simps is_file_simps is_dir_simps) |
|
656 |
|
657 lemma alive_co2sobj_some_open_some': |
|
658 "\<lbrakk>co2sobj (Open p f flag fd (Some i) # s) obj = Some sobj; alive (Open p f flag fd (Some i) # s) obj; |
|
659 valid (Open p f flag fd (Some i) # s); obj \<noteq> O_file f\<rbrakk> \<Longrightarrow> alive s obj" |
|
660 by (erule co2sobj_some_caseD, auto simp:alive_simps is_file_simps is_dir_simps) |
|
661 |
625 |
662 lemma s2ss_open_some: |
626 lemma s2ss_open_some: |
663 "valid (Open p f flag fd (Some i) # s) \<Longrightarrow> s2ss (Open p f flag fd (Some i) # s) = ( |
627 "valid (Open p f flag fd (Some i) # s) \<Longrightarrow> s2ss (Open p f flag fd (Some i) # s) = ( |
664 case (co2sobj s (O_proc p), co2sobj (Open p f flag fd (Some i) # s) (O_proc p), |
628 case (co2sobj s (D_proc p), co2sobj (Open p f flag fd (Some i) # s) (D_proc p), |
665 co2sobj (Open p f flag fd (Some i) # s) (O_file f)) of |
629 co2sobj (Open p f flag fd (Some i) # s) (D_file f)) of |
666 (Some sp, Some sp', Some sf) \<Rightarrow> |
630 (Some sp, Some sp', Some sf) \<Rightarrow> |
667 if (\<exists> p'. p' \<in> current_procs s \<and> p' \<noteq> p \<and> co2sobj s (O_proc p') = Some sp) |
631 if (\<exists> p'. p' \<in> current_procs s \<and> p' \<noteq> p \<and> co2sobj s (D_proc p') = Some sp) |
668 then s2ss s \<union> {sp', sf} |
632 then s2ss s \<union> {sp', sf} |
669 else s2ss s - {sp} \<union> {sp', sf} |
633 else s2ss s - {sp} \<union> {sp', sf} |
670 | _ \<Rightarrow> {} )" |
634 | _ \<Rightarrow> {} )" |
671 unfolding s2ss_def |
635 unfolding s2ss_def |
672 apply (frule vt_grant_os, frule vd_cons) |
636 apply (frule vt_grant_os, frule vd_cons) |
673 apply (case_tac "co2sobj s (O_proc p)", simp add:co2sobj.simps split:option.splits) |
637 apply (case_tac "co2sobj s (D_proc p)", simp add:co2sobj.simps split:option.splits) |
674 apply (drule current_proc_has_sp', simp, simp) |
638 apply (drule current_proc_has_sp', simp, simp) |
675 apply (case_tac "co2sobj (Open p f flag fd (Some i) # s) (O_proc p)") |
639 apply (case_tac "co2sobj (Open p f flag fd (Some i) # s) (D_proc p)") |
676 apply (simp add:co2sobj.simps split:option.splits) |
640 apply (simp add:co2sobj.simps split:option.splits) |
677 apply (drule current_proc_has_sp', simp, simp) |
641 apply (drule current_proc_has_sp', simp, simp) |
678 apply (case_tac "co2sobj (Open p f flag fd (Some i) # s) (O_file f)") |
642 apply (case_tac "co2sobj (Open p f flag fd (Some i) # s) (D_file f)") |
679 apply (simp add:co2sobj.simps split:option.splits) |
643 apply (simp add:co2sobj.simps split:option.splits) |
680 apply (clarsimp split del:if_splits) |
644 apply (clarsimp split del:if_splits) |
681 |
645 |
682 apply (rule set_eqI, rule iffI, erule CollectE, erule exE, erule conjE) |
646 apply (rule set_eqI, rule iffI, erule CollectE, erule exE, erule conjE) |
683 apply (split if_splits, rule conjI, rule impI, erule exE, erule conjE, erule conjE) |
647 apply (split if_splits, rule conjI, rule impI, erule exE, erule conjE, erule conjE) |
684 apply (case_tac "obj = O_proc p", simp, case_tac "obj = O_file f", simp) |
648 apply (case_tac "obj = D_proc p", simp, case_tac "obj = D_file f", simp) |
685 apply (rule UnI1, rule CollectI, rule_tac x = obj in exI) |
649 apply (rule UnI1, rule CollectI, rule_tac x = obj in exI) |
686 apply (frule_tac obj = obj in alive_co2sobj_some_open_some', simp+) |
650 apply (simp add:co2sobj_open dalive_open split:t_dobject.splits option.splits) |
687 apply (simp add:co2sobj_open split:t_object.splits) |
651 apply (rule impI, case_tac "obj = D_proc p", simp, case_tac "obj = D_file f", simp) |
688 apply (rule impI, case_tac "obj = O_proc p", simp, case_tac "obj = O_file f", simp) |
|
689 apply (rule UnI1, rule DiffI, rule CollectI, rule_tac x = obj in exI) |
652 apply (rule UnI1, rule DiffI, rule CollectI, rule_tac x = obj in exI) |
690 apply (frule_tac obj = obj in alive_co2sobj_some_open_some', simp+) |
653 apply (simp add:co2sobj_open dalive_open split:t_dobject.splits) |
691 apply (simp add:co2sobj_open split:t_object.splits) |
|
692 apply (frule_tac obj = obj in co2sobj_open_some, simp+) |
654 apply (frule_tac obj = obj in co2sobj_open_some, simp+) |
693 apply (simp add:alive_co2sobj_some_open_some', simp) |
655 apply (simp add:dalive_open) |
694 apply (rule notI) |
656 apply (rule notI, simp) |
695 apply (frule_tac obj = obj and p = p in co2sobj_proc_obj, simp+, erule exE) |
657 apply (frule_tac obj = obj and p = p in co2sobj_proc_obj, simp+, erule exE) |
696 apply (erule_tac x = p' in allE, simp) |
658 apply (erule_tac x = p' in allE, simp) |
697 |
659 |
698 apply (simp split:if_splits, erule disjE) |
660 apply (simp split:if_splits, erule disjE) |
699 apply (rule_tac x = "O_proc p" in exI, simp) |
661 apply (rule_tac x = "D_proc p" in exI, simp) |
700 apply (erule disjE, rule_tac x = "O_file f" in exI, simp add:is_file_simps) |
662 apply (erule disjE, rule_tac x = "D_file f" in exI, simp add:is_file_simps) |
701 apply (erule exE, erule conjE) |
663 apply (erule exE, erule conjE) |
702 apply (case_tac "obj = O_proc p", simp) |
664 apply (case_tac "obj = D_proc p", simp) |
703 apply (rule_tac x = "O_proc p'" in exI, simp add:co2sobj_open_some) |
665 apply (rule_tac x = "D_proc p'" in exI, simp add:co2sobj_open_some) |
704 apply (case_tac "obj = O_file f", simp add:is_file_in_current) |
666 apply (case_tac "obj = D_file f", simp add:is_file_in_current) |
705 apply (rule_tac x = obj in exI, simp add:co2sobj_open_some alive_co2sobj_some_open_some) |
667 apply (rule_tac x = obj in exI, simp add:co2sobj_open_some dalive_open) |
706 apply (erule disjE, rule_tac x = "O_proc p" in exI, simp) |
668 apply (erule disjE, rule_tac x = "D_proc p" in exI, simp) |
707 apply (erule disjE, rule_tac x = "O_file f" in exI, simp add:is_file_simps) |
669 apply (erule disjE, rule_tac x = "D_file f" in exI, simp add:is_file_simps) |
708 apply (erule conjE, erule exE, erule conjE) |
670 apply (erule conjE, erule exE, erule conjE) |
709 apply (case_tac "obj = O_proc p", simp) |
671 apply (case_tac "obj = D_proc p", simp) |
710 apply (case_tac "obj = O_file f", simp add:is_file_in_current) |
672 apply (case_tac "obj = D_file f", simp add:is_file_in_current) |
711 apply (rule_tac x = obj in exI, simp add:co2sobj_open_some alive_co2sobj_some_open_some) |
673 apply (rule_tac x = obj in exI, simp add:co2sobj_open_some dalive_open) |
712 done |
674 done |
713 |
675 |
714 lemma s2ss_open': |
676 lemma s2ss_open': |
715 "valid (Open p f flag fd opt # s) \<Longrightarrow> s2ss (Open p f flag fd opt # s) = ( |
677 "valid (Open p f flag fd opt # s) \<Longrightarrow> s2ss (Open p f flag fd opt # s) = ( |
716 if opt = None |
678 if opt = None |
717 then (case (co2sobj s (O_proc p), co2sobj (Open p f flag fd opt # s) (O_proc p)) of |
679 then (case (co2sobj s (D_proc p), co2sobj (Open p f flag fd opt # s) (D_proc p)) of |
718 (Some sp, Some sp') \<Rightarrow> |
680 (Some sp, Some sp') \<Rightarrow> |
719 if (\<exists> p'. p' \<in> current_procs s \<and> p' \<noteq> p \<and> co2sobj s (O_proc p') = Some sp) |
681 if (\<exists> p'. p' \<in> current_procs s \<and> p' \<noteq> p \<and> co2sobj s (D_proc p') = Some sp) |
720 then s2ss s \<union> {sp'} |
682 then s2ss s \<union> {sp'} |
721 else s2ss s - {sp} \<union> {sp'} |
683 else s2ss s - {sp} \<union> {sp'} |
722 | _ \<Rightarrow> {} ) |
684 | _ \<Rightarrow> {} ) |
723 else (case (co2sobj s (O_proc p), co2sobj (Open p f flag fd opt # s) (O_proc p), |
685 else (case (co2sobj s (D_proc p), co2sobj (Open p f flag fd opt # s) (D_proc p), |
724 co2sobj (Open p f flag fd opt # s) (O_file f)) of |
686 co2sobj (Open p f flag fd opt # s) (D_file f)) of |
725 (Some sp, Some sp', Some sf) \<Rightarrow> |
687 (Some sp, Some sp', Some sf) \<Rightarrow> |
726 if (\<exists> p'. p' \<in> current_procs s \<and> p' \<noteq> p \<and> co2sobj s (O_proc p') = Some sp) |
688 if (\<exists> p'. p' \<in> current_procs s \<and> p' \<noteq> p \<and> co2sobj s (D_proc p') = Some sp) |
727 then s2ss s \<union> {sp', sf} |
689 then s2ss s \<union> {sp', sf} |
728 else s2ss s - {sp} \<union> {sp', sf} |
690 else s2ss s - {sp} \<union> {sp', sf} |
729 | _ \<Rightarrow> {} ) )" |
691 | _ \<Rightarrow> {} ) )" |
730 apply (case_tac opt) |
692 apply (case_tac opt) |
731 apply (simp add:s2ss_open_some s2ss_open_none)+ |
693 apply (simp add:s2ss_open_some s2ss_open_none)+ |
732 done |
694 done |
733 |
695 |
734 lemma co2sobj_proc_eq_some: |
696 lemma co2sobj_proc_eq_some: |
735 "\<lbrakk>co2sobj s (O_proc p) = Some sp; co2sobj s obj = Some sp\<rbrakk> |
697 "\<lbrakk>co2sobj s (D_proc p) = Some sp; co2sobj s obj = Some sp\<rbrakk> |
736 \<Longrightarrow> \<exists> p'. obj = O_proc p'" |
698 \<Longrightarrow> \<exists> p'. obj = D_proc p'" |
737 apply (case_tac obj, case_tac[!] sp) |
699 apply (case_tac obj, case_tac[!] sp) |
738 by (auto simp:co2sobj.simps split:option.splits) |
700 by (auto simp:co2sobj.simps split:option.splits) |
739 |
701 |
740 lemma s2ss_open: |
702 lemma s2ss_open: |
741 "valid (Open p f flag fd opt # s) \<Longrightarrow> |
703 "valid (Open p f flag fd opt # s) \<Longrightarrow> |
742 (case (co2sobj s (O_proc p), co2sobj (Open p f flag fd opt # s) (O_proc p), |
704 (case (co2sobj s (D_proc p), co2sobj (Open p f flag fd opt # s) (D_proc p), |
743 co2sobj (Open p f flag fd opt # s) (O_file f)) of |
705 co2sobj (Open p f flag fd opt # s) (D_file f)) of |
744 (Some sp, Some sp', Some sf) \<Rightarrow> s2ss (Open p f flag fd opt # s) = ( |
706 (Some sp, Some sp', Some sf) \<Rightarrow> s2ss (Open p f flag fd opt # s) = ( |
745 if opt = None |
707 if opt = None |
746 then update_s2ss_obj s (s2ss s) (O_proc p) sp sp' |
708 then update_s2ss_obj s (s2ss s) (D_proc p) sp sp' |
747 else update_s2ss_obj s (s2ss s) (O_proc p) sp sp' \<union> {sf}) |
709 else update_s2ss_obj s (s2ss s) (D_proc p) sp sp' \<union> {sf}) |
748 | _ \<Rightarrow> s2ss (Open p f flag fd opt # s) = {})" |
710 | _ \<Rightarrow> s2ss (Open p f flag fd opt # s) = {})" |
749 apply (frule vt_grant_os, frule vd_cons, clarsimp simp only:os_grant.simps) |
711 apply (frule vt_grant_os, frule vd_cons, clarsimp simp only:os_grant.simps) |
750 apply (case_tac "co2sobj s (O_proc p)") |
712 apply (case_tac "co2sobj s (D_proc p)") |
751 apply (simp add:co2sobj.simps split:option.splits) |
713 apply (simp add:co2sobj.simps split:option.splits) |
752 apply (drule current_proc_has_sp', simp, simp) |
714 apply (drule current_proc_has_sp', simp, simp) |
753 apply (drule current_proc_has_sp', simp, simp) |
715 apply (drule current_proc_has_sp', simp, simp) |
754 apply (case_tac "co2sobj (Open p f flag fd opt # s) (O_proc p)") |
716 apply (case_tac "co2sobj (Open p f flag fd opt # s) (D_proc p)") |
755 apply (simp add:co2sobj.simps split:option.splits) |
717 apply (simp add:co2sobj.simps split:option.splits) |
756 apply (drule current_proc_has_sp', simp, simp) |
718 apply (drule current_proc_has_sp', simp, simp) |
757 apply (drule current_proc_has_sp', simp, simp) |
719 apply (drule current_proc_has_sp', simp, simp) |
758 apply (case_tac "co2sobj (Open p f flag fd opt # s) (O_file f)") |
720 apply (case_tac "co2sobj (Open p f flag fd opt # s) (D_file f)") |
759 apply (simp add:co2sobj.simps split:option.splits) |
721 apply (simp add:co2sobj.simps split:option.splits) |
760 apply (simp split:option.splits add:s2ss_open' update_s2ss_obj_def) |
722 apply (simp split:option.splits add:s2ss_open' update_s2ss_obj_def) |
761 apply (auto) |
723 apply (auto) |
762 apply (erule_tac x = "O_proc p'" in allE, simp) |
724 apply (erule_tac x = "D_proc p'" in allE, simp) |
763 apply (frule_tac obj = obj' in co2sobj_proc_eq_some, simp, erule exE, simp) |
725 apply (frule_tac obj = obj' in co2sobj_proc_eq_some, simp, erule exE, simp) |
764 apply (erule_tac x = "p'" in allE, simp) |
726 apply (erule_tac x = "p'" in allE, simp) |
765 apply (erule_tac x = "O_proc p'" in allE, simp) |
727 apply (erule_tac x = "D_proc p'" in allE, simp) |
766 apply (frule_tac obj = obj' in co2sobj_proc_eq_some, simp, erule exE, simp) |
728 apply (frule_tac obj = obj' in co2sobj_proc_eq_some, simp, erule exE, simp) |
767 apply (erule_tac x = "p'" in allE, simp) |
729 apply (erule_tac x = "p'" in allE, simp) |
768 apply (erule_tac x = "O_proc p'" in allE, simp) |
730 apply (erule_tac x = "D_proc p'" in allE, simp) |
769 apply (frule_tac obj = obj' in co2sobj_proc_eq_some, simp, erule exE, simp) |
731 apply (frule_tac obj = obj' in co2sobj_proc_eq_some, simp, erule exE, simp) |
770 apply (erule_tac x = "p'" in allE, simp) |
732 apply (erule_tac x = "p'" in allE, simp) |
771 done |
733 done |
772 |
734 |
773 lemma s2ss_readfile: |
735 lemma s2ss_readfile: |
774 "valid (ReadFile p fd # s) \<Longrightarrow> s2ss (ReadFile p fd # s) = ( |
736 "valid (ReadFile p fd # s) \<Longrightarrow> s2ss (ReadFile p fd # s) = ( |
775 case (file_of_proc_fd s p fd) of |
737 case (file_of_proc_fd s p fd) of |
776 Some f \<Rightarrow> if (O_file f \<in> tainted s \<and> O_proc p \<notin> tainted s) |
738 Some f \<Rightarrow> if (O_file f \<in> tainted s \<and> O_proc p \<notin> tainted s) |
777 then (case (cp2sproc s p) of |
739 then (case (cp2sproc s p) of |
778 Some sp \<Rightarrow> update_s2ss_obj s (s2ss s) (O_proc p) (S_proc sp False) (S_proc sp True) |
740 Some sp \<Rightarrow> update_s2ss_obj s (s2ss s) (D_proc p) (S_proc sp False) (S_proc sp True) |
779 | _ \<Rightarrow> {}) |
741 | _ \<Rightarrow> {}) |
780 else s2ss s |
742 else s2ss s |
781 | _ \<Rightarrow> {})" |
743 | _ \<Rightarrow> {})" |
782 apply (frule vt_grant_os, frule vd_cons, clarsimp simp only:os_grant.simps) |
744 apply (frule vt_grant_os, frule vd_cons, clarsimp simp only:os_grant.simps) |
783 apply (case_tac "cp2sproc s p") |
745 apply (case_tac "cp2sproc s p") |
843 apply (drule same_inode_files_prop5) |
805 apply (drule same_inode_files_prop5) |
844 apply (erule same_inode_files_prop4, simp) |
806 apply (erule same_inode_files_prop4, simp) |
845 done |
807 done |
846 |
808 |
847 lemma co2sobj_writefile_unchange: |
809 lemma co2sobj_writefile_unchange: |
848 "\<lbrakk>valid (WriteFile p fd # s); alive s obj; file_of_proc_fd s p fd = Some f; |
810 "\<lbrakk>valid (WriteFile p fd # s); dalive s obj; file_of_proc_fd s p fd = Some f; |
849 O_proc p \<in> tainted s \<longrightarrow> O_file f \<in> tainted s\<rbrakk> |
811 O_proc p \<in> tainted s \<longrightarrow> O_file f \<in> tainted s\<rbrakk> |
850 \<Longrightarrow> co2sobj (WriteFile p fd # s) obj = co2sobj s obj" |
812 \<Longrightarrow> co2sobj (WriteFile p fd # s) obj = co2sobj s obj" |
851 apply (frule vd_cons, frule co2sobj_writefile, simp, simp split:t_object.splits if_splits) |
813 apply (frule vd_cons, frule co2sobj_writefile, simp, simp split:t_dobject.splits if_splits) |
852 apply (simp add:co2sobj.simps) |
814 apply (simp add:co2sobj.simps) |
853 apply (case_tac "O_proc p \<in> tainted s") |
815 apply (case_tac "O_proc p \<in> tainted s") |
854 apply (simp add:same_inodes_tainted)+ |
816 apply (simp add:same_inodes_tainted)+ |
855 done |
817 done |
856 |
818 |
857 lemma s2ss_writefile': |
819 lemma s2ss_writefile': |
858 "valid (WriteFile p fd # s) \<Longrightarrow> s2ss (WriteFile p fd # s) = ( |
820 "valid (WriteFile p fd # s) \<Longrightarrow> s2ss (WriteFile p fd # s) = ( |
859 case (file_of_proc_fd s p fd) of |
821 case (file_of_proc_fd s p fd) of |
860 Some f \<Rightarrow> if (O_proc p \<in> tainted s \<and> O_file f \<notin> tainted s) |
822 Some f \<Rightarrow> if (O_proc p \<in> tainted s \<and> O_file f \<notin> tainted s) |
861 then (if (\<exists> f'. f' \<notin> same_inode_files s f \<and> is_file s f' \<and> |
823 then (if (\<exists> f'. f' \<notin> same_inode_files s f \<and> is_file s f' \<and> |
862 co2sobj s (O_file f') = co2sobj s (O_file f)) |
824 co2sobj s (D_file f') = co2sobj s (D_file f)) |
863 then s2ss s \<union> {S_file (cf2sfiles s f) True} |
825 then s2ss s \<union> {S_file (cf2sfiles s f) True} |
864 else s2ss s - {S_file (cf2sfiles s f) False} |
826 else s2ss s - {S_file (cf2sfiles s f) False} |
865 \<union> {S_file (cf2sfiles s f) True}) |
827 \<union> {S_file (cf2sfiles s f) True}) |
866 else s2ss s |
828 else s2ss s |
867 | _ \<Rightarrow> {})" |
829 | _ \<Rightarrow> {})" |
868 apply (frule vd_cons, frule vt_grant_os) |
830 apply (frule vd_cons, frule vt_grant_os) |
869 apply (clarsimp split:option.splits) |
831 apply (clarsimp split:option.splits) |
870 unfolding s2ss_def |
832 unfolding s2ss_def |
871 apply (rule conjI|rule impI|erule exE|erule conjE)+ |
833 apply (rule conjI|rule impI|erule exE|erule conjE)+ |
872 apply (rule set_eqI, rule iffI, erule CollectE, erule exE, erule conjE) |
834 apply (rule set_eqI, rule iffI, erule CollectE, erule exE, erule conjE) |
873 apply (frule_tac obj = obj in co2sobj_writefile, simp add:alive_other) |
835 apply (frule_tac obj = obj in co2sobj_writefile, simp add:dalive_other) |
874 apply (simp split:t_object.splits if_splits) |
836 apply (simp split:t_dobject.splits if_splits) |
875 apply (rule disjI2, rule_tac x= "O_proc nat" in exI, simp) |
837 apply (rule disjI2, rule_tac x= "D_proc nat" in exI, simp) |
876 apply (rule disjI1, simp add:cf2sfiles_prop) |
838 apply (rule disjI1, simp add:cf2sfiles_prop) |
877 apply (rule disjI2, rule_tac x = obj in exI, simp add:is_file_simps) |
839 apply (rule disjI2, rule_tac x = obj in exI, simp add:is_file_simps) |
878 apply (simp add:co2sobj.simps) |
|
879 apply (rule disjI2, rule_tac x = obj in exI, simp add:is_dir_simps) |
840 apply (rule disjI2, rule_tac x = obj in exI, simp add:is_dir_simps) |
880 apply (simp add:co2sobj.simps) |
|
881 apply (simp add:co2sobj.simps) |
|
882 apply (simp add:co2sobj.simps) |
|
883 apply (rule disjI2, rule_tac x = obj in exI, simp) |
841 apply (rule disjI2, rule_tac x = obj in exI, simp) |
884 apply (rule disjI2, rule_tac x = obj in exI, simp) |
|
885 apply (simp add:co2sobj.simps) |
842 apply (simp add:co2sobj.simps) |
886 |
843 |
887 apply (erule disjE) |
844 apply (erule disjE) |
888 apply (rule_tac x = "O_file aa" in exI, simp add:is_file_simps file_of_pfd_is_file) |
845 apply (rule_tac x = "D_file aa" in exI, simp add:is_file_simps file_of_pfd_is_file) |
889 apply (frule_tac obj = "O_file aa" in co2sobj_writefile, simp add:file_of_pfd_is_file) |
846 apply (frule_tac obj = "D_file aa" in co2sobj_writefile, simp add:file_of_pfd_is_file) |
890 apply (simp split:if_splits add:same_inode_files_def file_of_pfd_is_file) |
847 apply (simp split:if_splits add:same_inode_files_def file_of_pfd_is_file) |
891 apply (erule exE, erule conjE, erule conjE) |
848 apply (erule exE, erule conjE, erule conjE) |
892 apply (erule_tac obj = obj in co2sobj_some_caseD) |
849 apply (case_tac obj) |
893 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile) |
850 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile) |
894 apply (case_tac "fa \<in> same_inode_files s aa") |
851 apply (case_tac "list \<in> same_inode_files s aa") |
895 apply (frule_tac f = fa and f' = aa in cf2sfiles_prop, simp) |
852 apply (frule_tac f = list and f' = aa in cf2sfiles_prop, simp) |
896 apply (rule_tac x = "O_file f'" in exI, simp add:co2sobj_writefile is_file_simps) |
853 apply (rule_tac x = "D_file f'" in exI, simp add:co2sobj_writefile is_file_simps) |
897 apply (rule conjI, rule impI, simp add:same_inode_files_prop5) |
854 apply (rule conjI, rule impI, simp add:same_inode_files_prop5) |
898 apply (rule impI, simp add:co2sobj.simps same_inodes_tainted) |
855 apply (rule impI, simp add:co2sobj.simps same_inodes_tainted) |
899 apply (rule_tac x = "O_file fa" in exI, simp add:co2sobj_writefile is_file_simps) |
856 apply (rule_tac x = "D_file list" in exI, simp add:co2sobj_writefile is_file_simps) |
900 apply (rule impI, simp add:same_inode_files_prop5) |
857 apply (rule impI, simp add:same_inode_files_prop5) |
901 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile is_dir_simps) |
858 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile is_dir_simps) |
902 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile) |
859 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile) |
903 |
860 |
904 apply (rule impI, rule impI, simp, rule set_eqI, rule iffI, erule CollectE, (erule conjE|erule exE)+) |
861 apply (rule impI, rule impI, simp, rule set_eqI, rule iffI, erule CollectE, (erule conjE|erule exE)+) |
905 apply (rule CollectI, rule_tac x = obj in exI, simp add:alive_simps) |
862 apply (rule CollectI, rule_tac x = obj in exI, simp add:dalive_simps) |
906 apply (simp add:co2sobj_writefile split:t_object.splits if_splits) |
863 apply (simp add:co2sobj_writefile split:t_dobject.splits if_splits) |
907 apply (simp add:co2sobj.simps same_inodes_tainted) |
864 apply (simp add:co2sobj.simps same_inodes_tainted) |
908 apply (case_tac "O_proc p \<in> tainted s", simp, simp) |
865 apply (case_tac "O_proc p \<in> tainted s", simp, simp) |
909 apply (erule CollectE, (erule conjE|erule exE)+, rule CollectI) |
866 apply (erule CollectE, (erule conjE|erule exE)+, rule CollectI) |
910 apply (rule_tac x = obj in exI) |
867 apply (rule_tac x = obj in exI) |
911 apply (simp add:co2sobj_writefile_unchange alive_simps) |
868 apply (simp add:co2sobj_writefile_unchange dalive_simps) |
912 |
869 |
913 apply (rule impI| rule conjI|erule conjE)+ |
870 apply (rule impI| rule conjI|erule conjE)+ |
914 apply (rule set_eqI, rule iffI, erule CollectE, erule exE, erule conjE) |
871 apply (rule set_eqI, rule iffI, erule CollectE, erule exE, erule conjE) |
915 apply (simp add:alive_simps co2sobj_writefile split:t_object.splits) |
872 apply (simp add:dalive_simps co2sobj_writefile split:t_dobject.splits) |
916 apply (rule disjI2, rule conjI, rule_tac x = obj in exI, simp, |
873 apply (rule disjI2, rule conjI, rule_tac x = obj in exI, simp, |
917 rule notI, simp add:co2sobj.simps split:option.splits) |
874 rule notI, simp add:co2sobj.simps split:option.splits) |
918 apply (simp split:if_splits) |
875 apply (simp split:if_splits) |
919 apply (rule disjI1, simp add:cf2sfiles_prop) |
876 apply (rule disjI1, simp add:cf2sfiles_prop) |
920 apply (rule disjI2, rule conjI, rule_tac x = obj in exI, simp) |
877 apply (rule disjI2, rule conjI, rule_tac x = obj in exI, simp) |
921 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
878 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
922 apply (erule_tac x = list in allE, simp add:same_inode_files_prop5) |
879 apply (erule_tac x = list in allE, simp add:same_inode_files_prop5) |
923 apply (simp add:co2sobj.simps) |
880 apply (simp add:co2sobj.simps) |
|
881 apply (rule disjI2, rule conjI, rule_tac x = obj in exI, simp split:option.splits add:co2sobj.simps) |
|
882 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
924 apply (rule disjI2, rule conjI, rule_tac x = obj in exI, simp, |
883 apply (rule disjI2, rule conjI, rule_tac x = obj in exI, simp, |
925 rule notI, simp add:co2sobj.simps split:option.splits) |
884 rule notI, simp add:co2sobj.simps split:option.splits) |
926 apply (simp add:co2sobj.simps) |
885 apply (simp add:co2sobj.simps) |
927 apply (simp add:co2sobj.simps) |
|
928 apply (simp add:co2sobj.simps) |
|
929 apply (rule disjI2, rule conjI, rule_tac x = obj in exI, simp, |
|
930 rule notI, simp add:co2sobj.simps split:option.splits) |
|
931 apply (rule disjI2, rule conjI, rule_tac x = obj in exI, simp, |
|
932 rule notI, simp add:co2sobj.simps split:option.splits) |
|
933 apply (simp add:co2sobj.simps) |
|
934 apply (erule disjE) |
886 apply (erule disjE) |
935 apply (rule_tac x= "O_file aa" in exI, simp add:co2sobj_writefile alive_simps file_of_pfd_is_file) |
887 apply (rule_tac x= "D_file aa" in exI) |
|
888 apply ( simp add:co2sobj_writefile dalive_simps file_of_pfd_is_file) |
936 apply (rule impI, simp add:same_inode_files_def file_of_pfd_is_file) |
889 apply (rule impI, simp add:same_inode_files_def file_of_pfd_is_file) |
937 apply (erule exE|erule conjE)+ |
890 apply (erule exE|erule conjE)+ |
938 apply (erule co2sobj_some_caseD) |
891 apply (case_tac obj) |
939 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile) |
892 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile) |
940 apply (case_tac "fa \<in> same_inode_files s aa") |
893 apply (case_tac "list \<in> same_inode_files s aa") |
941 apply (frule cf2sfiles_prop, simp, simp add:co2sobj.simps same_inodes_tainted) |
894 apply (frule cf2sfiles_prop, simp, simp add:co2sobj.simps same_inodes_tainted) |
942 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile is_file_simps) |
895 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile is_file_simps) |
943 apply (rule impI, simp add:same_inode_files_prop5) |
896 apply (rule impI, simp add:same_inode_files_prop5) |
944 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile is_dir_simps) |
897 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile is_dir_simps) |
945 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile) |
898 apply (rule_tac x = obj in exI, simp add:co2sobj_writefile) |
|
899 |
946 apply (rule impI, rule impI) |
900 apply (rule impI, rule impI) |
947 |
|
948 apply (rule set_eqI, rule iffI, erule CollectE,erule exE,erule conjE,rule CollectI) |
901 apply (rule set_eqI, rule iffI, erule CollectE,erule exE,erule conjE,rule CollectI) |
949 apply (rule_tac x = obj in exI) |
902 apply (rule_tac x = obj in exI) |
950 apply (simp add:co2sobj_writefile_unchange alive_simps) |
903 apply (simp add:co2sobj_writefile_unchange dalive_simps) |
951 apply (erule CollectE, erule exE, erule conjE) |
904 apply (erule CollectE, erule exE, erule conjE) |
952 apply (rule CollectI, rule_tac x = obj in exI) |
905 apply (rule CollectI, rule_tac x = obj in exI) |
953 apply (simp add:co2sobj_writefile_unchange alive_simps) |
906 apply (simp add:co2sobj_writefile_unchange dalive_simps) |
954 done |
907 done |
955 |
908 |
956 definition update_s2ss_sfile_tainted:: "t_state \<Rightarrow> t_static_state \<Rightarrow> t_file \<Rightarrow> bool \<Rightarrow> t_static_state" |
909 definition update_s2ss_sfile_tainted:: "t_state \<Rightarrow> t_static_state \<Rightarrow> t_file \<Rightarrow> bool \<Rightarrow> t_static_state" |
957 where |
910 where |
958 "update_s2ss_sfile_tainted s ss f tag \<equiv> |
911 "update_s2ss_sfile_tainted s ss f tag \<equiv> |
959 if (\<exists> f'. is_file s f' \<and> f' \<notin> same_inode_files s f \<and> |
912 if (\<exists> f'. is_file s f' \<and> f' \<notin> same_inode_files s f \<and> |
960 co2sobj s (O_file f') = Some (S_file (cf2sfiles s f) False)) |
913 co2sobj s (D_file f') = Some (S_file (cf2sfiles s f) False)) |
961 then ss \<union> {S_file (cf2sfiles s f) True} |
914 then ss \<union> {S_file (cf2sfiles s f) True} |
962 else ss - {S_file (cf2sfiles s f) False} |
915 else ss - {S_file (cf2sfiles s f) False} |
963 \<union> {S_file (cf2sfiles s f) True}" |
916 \<union> {S_file (cf2sfiles s f) True}" |
964 |
917 |
965 lemma s2ss_writefile: |
918 lemma s2ss_writefile: |
1083 |
1034 |
1084 apply (simp add:update_s2ss_obj_def) |
1035 apply (simp add:update_s2ss_obj_def) |
1085 apply (rule conjI|rule impI|erule exE|erule conjE|erule bexE)+ |
1036 apply (rule conjI|rule impI|erule exE|erule conjE|erule bexE)+ |
1086 apply (tactic {*my_seteq_tac 1*}) |
1037 apply (tactic {*my_seteq_tac 1*}) |
1087 apply simp |
1038 apply simp |
1088 apply (case_tac "obj = O_proc p") |
1039 apply (case_tac "obj = D_proc p") |
1089 apply (simp add:co2sobj.simps) |
1040 apply (simp add:co2sobj.simps) |
1090 apply (rule disjI2, rule_tac x = obj in exI) |
1041 apply (rule disjI2, rule_tac x = obj in exI) |
1091 apply (frule_tac obj = obj in co2sobj_closefd, simp add:alive_simps) |
1042 apply (frule_tac obj = obj in co2sobj_closefd, simp add:dalive_simps) |
1092 apply (simp add:alive_simps co2sobj.simps split:t_object.splits if_splits) |
1043 apply (simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits) |
1093 apply (tactic {*my_setiff_tac 1*}) |
1044 apply (tactic {*my_setiff_tac 1*}) |
1094 apply (rule_tac x = "O_proc p" in exI) |
1045 apply (rule_tac x = "D_proc p" in exI) |
1095 apply (simp add:co2sobj.simps) |
1046 apply (simp add:co2sobj.simps) |
1096 apply (tactic {*my_setiff_tac 1*}) |
1047 apply (tactic {*my_setiff_tac 1*}) |
1097 apply (case_tac "obj = O_proc p") |
1048 apply (case_tac "obj = D_proc p") |
1098 apply (rule_tac x = obj' in exI) |
1049 apply (rule_tac x = obj' in exI) |
1099 apply (frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1050 apply (frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1100 apply (simp add:co2sobj.simps) |
1051 apply (simp add:co2sobj.simps) |
1101 apply (case_tac "obj = O_file a") |
1052 apply (case_tac "obj = D_file a") |
1102 apply (rule_tac x = "O_file f'" in exI) |
1053 apply (rule_tac x = "D_file f'" in exI) |
1103 apply (case_tac "f' = a", simp add:same_inode_files_prop9 file_of_pfd_is_file) |
1054 apply (case_tac "f' = a", simp add:same_inode_files_prop9 file_of_pfd_is_file) |
1104 apply (frule_tac obj = "O_file f'" in co2sobj_closefd, simp add:alive_simps) |
1055 apply (frule_tac obj = "D_file f'" in co2sobj_closefd, simp add:dalive_simps) |
1105 apply (simp add:alive_simps co2sobj.simps split:t_object.splits if_splits) |
1056 apply (simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits) |
1106 apply (rule_tac x = obj in exI) |
1057 apply (rule_tac x = obj in exI) |
1107 apply (frule_tac obj = obj in alive_co2sobj_closefd3, simp+) |
1058 apply (frule_tac obj = obj in dalive_co2sobj_closefd3, simp+) |
1108 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1059 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1109 apply (auto simp add:alive_simps co2sobj.simps split:t_object.splits if_splits)[1] |
1060 apply (auto simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits)[1] |
1110 |
1061 |
1111 apply (rule impI)+ |
1062 apply (rule impI)+ |
1112 apply (tactic {*my_seteq_tac 1*}) |
1063 apply (tactic {*my_seteq_tac 1*}) |
1113 apply (case_tac "obj = O_proc p", rule disjI1, simp add:co2sobj.simps) |
1064 apply (case_tac "obj = D_proc p", rule disjI1, simp add:co2sobj.simps) |
1114 apply (rule disjI2) |
1065 apply (rule disjI2) |
1115 apply (case_tac "obj = O_file a", simp add:alive_simps) |
1066 apply (case_tac "obj = D_file a", simp add:dalive_simps) |
1116 apply (rule DiffI, simp) |
1067 apply (rule DiffI, simp) |
1117 apply (rule_tac x = obj in exI) |
1068 apply (rule_tac x = obj in exI) |
1118 apply (frule_tac obj = obj in alive_co2sobj_closefd', simp+) |
1069 apply (frule_tac obj = obj in dalive_co2sobj_closefd', simp+) |
1119 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1070 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1120 apply (simp add:alive_simps co2sobj.simps split:t_object.splits if_splits) |
1071 apply (simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits) |
1121 apply (simp, rule notI, simp, frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1072 apply (simp, rule notI, simp, frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1122 apply (erule_tac x = "O_proc pa" in allE, simp) |
1073 apply (erule_tac x = "D_proc pa" in allE, simp) |
1123 apply (tactic {*my_setiff_tac 1*}) |
1074 apply (tactic {*my_setiff_tac 1*}) |
1124 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps) |
1075 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps) |
1125 apply (tactic {*my_setiff_tac 1*}) |
1076 apply (tactic {*my_setiff_tac 1*}) |
1126 apply (case_tac "obj = O_proc p", simp add:co2sobj.simps) |
1077 apply (case_tac "obj = D_proc p", simp add:co2sobj.simps) |
1127 apply (case_tac "obj = O_file a", rule_tac x = "O_file f'" in exI) |
1078 apply (case_tac "obj = D_file a", rule_tac x = "D_file f'" in exI) |
1128 apply (case_tac "f' = a", simp add:same_inode_files_prop9 file_of_pfd_is_file) |
1079 apply (case_tac "f' = a", simp add:same_inode_files_prop9 file_of_pfd_is_file) |
1129 apply (frule_tac obj = "O_file f'" in co2sobj_closefd, simp add:alive_simps) |
1080 apply (frule_tac obj = "D_file f'" in co2sobj_closefd, simp add:dalive_simps) |
1130 apply (simp add:alive_simps co2sobj.simps split:t_object.splits if_splits) |
1081 apply (simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits) |
1131 apply (rule_tac x = obj in exI) |
1082 apply (rule_tac x = obj in exI) |
1132 apply (frule_tac obj = obj in alive_co2sobj_closefd3, simp+) |
1083 apply (frule_tac obj = obj in dalive_co2sobj_closefd3, simp+) |
1133 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1084 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1134 apply (auto simp add:co2sobj.simps split:t_object.splits if_splits)[1] |
1085 apply (auto simp add:co2sobj.simps split:t_dobject.splits if_splits)[1] |
1135 |
1086 |
1136 apply (rule impI, tactic {*my_seteq_tac 1*}) |
1087 apply (rule impI, tactic {*my_seteq_tac 1*}) |
1137 apply (simp add:update_s2ss_obj_def update_s2ss_sfile_del_def) |
1088 apply (simp add:update_s2ss_obj_def update_s2ss_sfile_del_def) |
1138 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1089 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1139 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1090 apply (case_tac obj) |
1140 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1091 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1141 apply (rule disjI2, rule_tac x = obj in exI) |
1092 apply (rule disjI2, rule_tac x = obj in exI) |
1142 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1093 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1143 apply (case_tac "f = a", simp add:alive_simps) |
1094 apply (case_tac "list = a", simp add:dalive_simps) |
1144 apply (rule disjI2, rule_tac x = obj in exI) |
1095 apply (rule disjI2, rule_tac x = obj in exI) |
1145 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1096 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1146 apply (rule disjI2, rule_tac x = obj in exI) |
1097 apply (rule disjI2, rule_tac x = obj in exI) |
1147 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1098 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1148 apply (rule disjI2, rule_tac x = obj in exI) |
1099 apply (rule disjI2, rule_tac x = obj in exI) |
1149 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1100 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1150 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1101 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1151 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1102 apply (case_tac obj) |
1152 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1103 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1153 apply (rule disjI2, rule disjI2, rule_tac x = obj in exI) |
1104 apply (rule disjI2, rule disjI2, rule_tac x = obj in exI) |
1154 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1105 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1155 apply (auto simp add:co2sobj.simps split:t_object.splits if_splits)[1] |
1106 apply (auto simp add:co2sobj.simps split:t_dobject.splits if_splits)[1] |
1156 apply (case_tac "f = a", simp add:alive_simps) |
1107 apply (case_tac "list = a", simp add:dalive_simps) |
1157 apply (case_tac "f \<in> same_inode_files s a", rule disjI1) |
1108 apply (case_tac "list \<in> same_inode_files s a", rule disjI1) |
1158 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1109 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1159 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1110 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1160 apply (erule bexE, erule conjE) |
1111 apply (erule bexE, erule conjE) |
1161 apply (erule_tac x = f'' in ballE, simp, simp) |
1112 apply (erule_tac x = f'' in ballE, simp, simp) |
1162 apply (rule disjI2, rule disjI2, rule_tac x = obj in exI) |
1113 apply (rule disjI2, rule disjI2, rule_tac x = obj in exI) |
1163 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1114 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1164 apply (rule disjI2, rule disjI2, rule_tac x = obj in exI) |
1115 apply (rule disjI2, rule disjI2, rule_tac x = obj in exI) |
1165 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1116 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1166 apply (rule disjI2, rule disjI2, rule_tac x = obj in exI) |
1117 apply (rule disjI2, rule disjI2, rule_tac x = obj in exI) |
1167 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1118 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1168 apply (rule impI, rule conjI, rule impI) |
1119 apply (rule impI, rule conjI, rule impI) |
1169 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1120 apply (case_tac obj) |
1170 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1121 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1171 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1122 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1172 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1123 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1173 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_file_simps) |
1124 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_file_simps) |
1174 apply (case_tac "f = a", simp add:alive_simps) |
1125 apply (case_tac "list = a", simp add:dalive_simps) |
1175 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1126 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1176 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1127 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1177 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_file_simps) |
1128 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_file_simps) |
1178 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1129 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1179 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1130 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1180 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_dir_simps) |
1131 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_dir_simps) |
1181 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1132 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1182 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1133 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1183 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp) |
1134 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp) |
1184 apply (rule impI) |
1135 apply (rule impI) |
1185 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1136 apply (case_tac obj) |
1186 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1137 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1187 apply (rule disjI2, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1138 apply (rule disjI2, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1188 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1139 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1189 apply (auto simp add:co2sobj.simps split:t_object.splits if_splits)[1] |
1140 apply (auto simp add:co2sobj.simps split:t_dobject.splits if_splits)[1] |
1190 apply (rule notI, simp add:co2sobj_closefd) |
1141 apply (rule notI, simp add:co2sobj_closefd) |
1191 apply (erule_tac x = obj in allE, simp) |
1142 apply (erule_tac x = obj in allE, simp) |
1192 apply (case_tac "f = a", simp add:alive_simps) |
1143 apply (case_tac "list = a", simp add:dalive_simps) |
1193 apply (case_tac "f \<in> same_inode_files s a", rule disjI1) |
1144 apply (case_tac "list \<in> same_inode_files s a", rule disjI1) |
1194 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1145 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1195 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1146 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1196 apply (erule bexE, erule conjE) |
1147 apply (erule bexE, erule conjE) |
1197 apply (erule_tac x = f'' in ballE, simp, simp) |
1148 apply (erule_tac x = f'' in ballE, simp, simp) |
1198 apply (rule disjI2, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1149 apply (rule disjI2, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1199 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1150 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1200 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_file_simps) |
1151 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_file_simps) |
1201 apply (rule disjI2, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1152 apply (rule disjI2, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1202 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1153 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1203 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_dir_simps) |
1154 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp add:is_dir_simps) |
1204 apply (rule disjI2, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1155 apply (rule disjI2, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1205 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1156 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1206 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp) |
1157 apply (rule notI, simp add:co2sobj_closefd, erule_tac x = obj in allE, simp) |
1207 |
1158 |
1208 apply (simp add:update_s2ss_sfile_del_def update_s2ss_obj_def split:if_splits) |
1159 apply (simp add:update_s2ss_sfile_del_def update_s2ss_obj_def split:if_splits) |
1209 apply (erule disjE, rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps) |
1160 apply (erule disjE, rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps) |
1210 apply (erule exE, erule conjE) |
1161 apply (erule exE, erule conjE) |
1211 apply (case_tac "obj = O_proc p") |
1162 apply (case_tac "obj = D_proc p") |
1212 apply (rule_tac x = obj' in exI) |
1163 apply (rule_tac x = obj' in exI) |
1213 apply (frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1164 apply (frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1214 apply (simp add:co2sobj.simps) |
1165 apply (simp add:co2sobj.simps) |
1215 apply (case_tac "obj = O_file a") |
1166 apply (case_tac "obj = D_file a") |
1216 apply (rule_tac x = "O_file f'" in exI) |
1167 apply (rule_tac x = "D_file f'" in exI) |
1217 apply (case_tac "f' = a", simp add:same_inode_files_prop9 file_of_pfd_is_file) |
1168 apply (case_tac "f' = a", simp add:same_inode_files_prop9 file_of_pfd_is_file) |
1218 apply (frule_tac obj = "O_file f'" in co2sobj_closefd, simp add:alive_simps) |
1169 apply (frule_tac obj = "D_file f'" in co2sobj_closefd, simp add:dalive_simps) |
1219 apply (simp add:alive_simps co2sobj.simps split:t_object.splits if_splits) |
1170 apply (simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits) |
1220 apply (rule_tac x = obj in exI) |
1171 apply (rule_tac x = obj in exI) |
1221 apply (frule_tac obj = obj in alive_co2sobj_closefd3, simp+) |
1172 apply (frule_tac obj = obj in dalive_co2sobj_closefd3, simp+) |
1222 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1173 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1223 apply (auto simp add:alive_simps co2sobj.simps split:t_object.splits if_splits)[1] |
1174 apply (auto simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits)[1] |
1224 apply (erule disjE, rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps) |
1175 apply (erule disjE, rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps) |
1225 apply (erule conjE, erule exE, erule conjE) |
1176 apply (erule conjE, erule exE, erule conjE) |
1226 apply (case_tac "obj = O_proc p") |
1177 apply (case_tac "obj = D_proc p") |
1227 apply (simp add:co2sobj.simps) |
1178 apply (simp add:co2sobj.simps) |
1228 apply (case_tac "obj = O_file a") |
1179 apply (case_tac "obj = D_file a") |
1229 apply (rule_tac x = "O_file f'" in exI) |
1180 apply (rule_tac x = "D_file f'" in exI) |
1230 apply (case_tac "f' = a", simp add:same_inode_files_prop9 file_of_pfd_is_file) |
1181 apply (case_tac "f' = a", simp add:same_inode_files_prop9 file_of_pfd_is_file) |
1231 apply (frule_tac obj = "O_file f'" in co2sobj_closefd, simp add:alive_simps) |
1182 apply (frule_tac obj = "D_file f'" in co2sobj_closefd, simp add:dalive_simps) |
1232 apply (simp add:alive_simps co2sobj.simps split:t_object.splits if_splits) |
1183 apply (simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits) |
1233 apply (rule_tac x = obj in exI) |
1184 apply (rule_tac x = obj in exI) |
1234 apply (frule_tac obj = obj in alive_co2sobj_closefd3, simp+) |
1185 apply (frule_tac obj = obj in dalive_co2sobj_closefd3, simp+) |
1235 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1186 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1236 apply (auto simp add:alive_simps co2sobj.simps split:t_object.splits if_splits)[1] |
1187 apply (auto simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits)[1] |
1237 apply (erule disjE) |
1188 apply (erule disjE) |
1238 apply (drule same_inode_files_prop10, simp add:file_of_pfd_is_file, erule exE, erule conjE) |
1189 apply (drule same_inode_files_prop10, simp add:file_of_pfd_is_file, erule exE, erule conjE) |
1239 apply (rule_tac x = "O_file f'a" in exI) |
1190 apply (rule_tac x = "D_file f'a" in exI) |
1240 apply (frule same_inode_files_prop11) |
1191 apply (frule same_inode_files_prop11) |
1241 apply (frule_tac obj = "O_file f'a" in co2sobj_closefd) |
1192 apply (frule_tac obj = "D_file f'a" in co2sobj_closefd) |
1242 apply (simp add:alive_simps)+ |
1193 apply (simp add:dalive_simps)+ |
1243 apply (frule_tac f = "f'a" in is_file_has_sfile', simp, erule exE) |
1194 apply (frule_tac f = "f'a" in is_file_has_sfile', simp, erule exE) |
1244 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted split:if_splits) |
1195 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted split:if_splits) |
1245 apply (rule impI, erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1196 apply (rule impI, erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1246 apply (erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1197 apply (erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1247 apply (erule disjE) |
1198 apply (erule disjE) |
1248 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps) |
1199 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps) |
1249 apply (erule exE, erule conjE) |
1200 apply (erule exE, erule conjE) |
1250 apply (case_tac "obj = O_proc p") |
1201 apply (case_tac "obj = D_proc p") |
1251 apply (rule_tac x = obj' in exI) |
1202 apply (rule_tac x = obj' in exI) |
1252 apply (frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1203 apply (frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1253 apply (simp add:co2sobj.simps) |
1204 apply (simp add:co2sobj.simps) |
1254 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1205 apply (case_tac obj) |
1255 apply (rule_tac x = obj in exI) |
1206 apply (rule_tac x = obj in exI) |
1256 apply (simp add:co2sobj_closefd) |
1207 apply (simp add:co2sobj_closefd) |
1257 apply (case_tac "f \<in> same_inode_files s a") |
1208 apply (case_tac "list \<in> same_inode_files s a") |
1258 apply (rule_tac x = "O_file f'" in exI) |
1209 apply (rule_tac x = "D_file f'" in exI) |
1259 apply (simp add:co2sobj_simps is_file_simps split:if_splits option.splits t_sobject.splits) |
1210 apply (simp add:co2sobj_simps is_file_simps split:if_splits option.splits t_sobject.splits) |
1260 apply (rule conjI, rule notI, simp add:same_inode_files_prop9) |
1211 apply (rule conjI, rule notI, simp add:same_inode_files_prop9) |
1261 apply (rule impI, simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1212 apply (rule impI, simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1262 apply (rule_tac x = obj in exI) |
1213 apply (rule_tac x = obj in exI) |
1263 apply (simp add:co2sobj_closefd is_file_simps) |
1214 apply (simp add:co2sobj_closefd is_file_simps) |
1297 |
1248 |
1298 apply (rule impI, rule conjI, rule impI) |
1249 apply (rule impI, rule conjI, rule impI) |
1299 apply (tactic {*my_seteq_tac 1*}) |
1250 apply (tactic {*my_seteq_tac 1*}) |
1300 apply (simp add:update_s2ss_obj_def update_s2ss_sfile_del_def) |
1251 apply (simp add:update_s2ss_obj_def update_s2ss_sfile_del_def) |
1301 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1252 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1302 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1253 apply (case_tac obj) |
1303 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1254 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1304 apply (rule disjI2, rule_tac x = obj in exI) |
1255 apply (rule disjI2, rule_tac x = obj in exI) |
1305 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1256 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1306 apply (case_tac "f = a", simp add:alive_simps) |
1257 apply (case_tac "list = a", simp add:dalive_simps) |
1307 apply (rule disjI2, rule_tac x = obj in exI) |
1258 apply (rule disjI2, rule_tac x = obj in exI) |
1308 apply (frule_tac obj = obj in co2sobj_closefd, simp, clarsimp simp:alive_simps split:if_splits) |
1259 apply (frule_tac obj = obj in co2sobj_closefd, simp, clarsimp simp:dalive_simps split:if_splits) |
1309 apply (rule disjI2, rule_tac x = obj in exI) |
1260 apply (rule disjI2, rule_tac x = obj in exI) |
1310 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1261 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1311 apply (rule disjI2, rule_tac x = obj in exI) |
1262 apply (rule disjI2, rule_tac x = obj in exI) |
1312 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1263 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1313 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1264 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1314 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1265 apply (case_tac obj) |
1315 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1266 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1316 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1267 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1317 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1268 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1318 apply (auto simp add:co2sobj.simps split:t_object.splits if_splits)[1] |
1269 apply (auto simp add:co2sobj.simps split:t_dobject.splits if_splits)[1] |
1319 apply (rule notI, simp, erule_tac x = "O_proc pa" in allE, simp add:co2sobj_closefd) |
1270 apply (rule notI, simp, erule_tac x = "D_proc nat" in allE, simp add:co2sobj_closefd) |
1320 apply (case_tac "f = a", simp add:alive_simps) |
1271 apply (case_tac "list = a", simp add:dalive_simps) |
1321 apply (case_tac "f \<in> same_inode_files s a", rule disjI2) |
1272 apply (case_tac "list \<in> same_inode_files s a", rule disjI2) |
1322 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1273 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1323 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1274 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1324 apply (erule bexE, erule conjE) |
1275 apply (erule bexE, erule conjE) |
1325 apply (rule conjI, rule_tac x = "O_file f''" in exI) |
1276 apply (rule conjI, rule_tac x = "D_file f''" in exI) |
1326 apply (simp add:same_inode_files_prop11 co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1277 apply (simp add:same_inode_files_prop11 co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1327 apply (rule notI, simp) |
1278 apply (rule notI, simp) |
1328 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1279 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1329 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1280 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1330 apply (rule notI, simp add:co2sobj.simps) |
1281 apply (rule notI, simp add:co2sobj.simps) |
1331 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1282 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1332 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1283 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1333 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1284 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1334 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1285 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1335 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1286 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1336 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1287 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1337 |
1288 |
1338 apply (erule bexE, erule conjE) |
1289 apply (erule bexE, erule conjE) |
1339 apply (simp add:update_s2ss_obj_def split:if_splits) |
1290 apply (simp add:update_s2ss_obj_def split:if_splits) |
1340 apply (erule disjE, rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps) |
1291 apply (erule disjE, rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps) |
1341 apply (erule exE, erule conjE) |
1292 apply (erule exE, erule conjE) |
1342 apply (case_tac "obj = O_proc p") |
1293 apply (case_tac "obj = D_proc p") |
1343 apply (rule_tac x = obj' in exI) |
1294 apply (rule_tac x = obj' in exI) |
1344 apply (frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1295 apply (frule co2sobj_sproc_imp, erule exE, simp add:co2sobj_closefd) |
1345 apply (simp add:co2sobj.simps) |
1296 apply (simp add:co2sobj.simps) |
1346 apply (case_tac "obj = O_file a") |
1297 apply (case_tac "obj = D_file a") |
1347 apply (rule_tac x = "O_file f'" in exI) |
1298 apply (rule_tac x = "D_file f'" in exI) |
1348 apply (frule_tac obj = "O_file f'" in co2sobj_closefd, simp add:alive_simps same_inode_files_prop11) |
1299 apply (frule_tac obj = "D_file f'" in co2sobj_closefd, simp add:dalive_simps same_inode_files_prop11) |
1349 apply (simp add:alive_simps co2sobj.simps split:t_object.splits if_splits) |
1300 apply (simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits) |
1350 apply (rule conjI) |
1301 apply (rule conjI) |
1351 apply (rule impI) |
1302 apply (rule impI) |
1352 apply (rule_tac x = f' in ballE, simp, simp, simp) |
1303 apply (rule_tac x = f' in ballE, simp, simp, simp) |
1353 apply (simp add:same_inode_files_prop11 co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1304 apply (simp add:same_inode_files_prop11 co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1354 apply (rule_tac x = obj in exI) |
1305 apply (rule_tac x = obj in exI) |
1355 apply (frule_tac obj = obj in alive_co2sobj_closefd3, simp+) |
1306 apply (frule_tac obj = obj in dalive_co2sobj_closefd3, simp+) |
1356 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1307 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1357 apply (auto simp add:alive_simps co2sobj.simps split:t_object.splits if_splits)[1] |
1308 apply (auto simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits)[1] |
1358 apply (erule disjE, rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps) |
1309 apply (erule disjE, rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps) |
1359 apply (erule conjE, erule exE, erule conjE) |
1310 apply (erule conjE, erule exE, erule conjE) |
1360 apply (case_tac "obj = O_proc p") |
1311 apply (case_tac "obj = D_proc p") |
1361 apply (simp add:co2sobj.simps) |
1312 apply (simp add:co2sobj.simps) |
1362 apply (case_tac "obj = O_file a") |
1313 apply (case_tac "obj = D_file a") |
1363 apply (rule_tac x = "O_file f'" in exI) |
1314 apply (rule_tac x = "D_file f'" in exI) |
1364 apply (frule_tac obj = "O_file f'" in co2sobj_closefd, simp add:alive_simps same_inode_files_prop11) |
1315 apply (frule_tac obj = "D_file f'" in co2sobj_closefd, simp add:dalive_simps same_inode_files_prop11) |
1365 apply (simp add:alive_simps co2sobj.simps split:t_object.splits if_splits) |
1316 apply (simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits) |
1366 apply (rule conjI) |
1317 apply (rule conjI) |
1367 apply (rule impI) |
1318 apply (rule impI) |
1368 apply (rule_tac x = f' in ballE, simp, simp, simp) |
1319 apply (rule_tac x = f' in ballE, simp, simp, simp) |
1369 apply (simp add:same_inode_files_prop11 co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1320 apply (simp add:same_inode_files_prop11 co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1370 apply (rule_tac x = obj in exI) |
1321 apply (rule_tac x = obj in exI) |
1371 apply (frule_tac obj = obj in alive_co2sobj_closefd3, simp+) |
1322 apply (frule_tac obj = obj in dalive_co2sobj_closefd3, simp+) |
1372 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1323 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1373 apply (auto simp add:alive_simps co2sobj.simps split:t_object.splits if_splits)[1] |
1324 apply (auto simp add:dalive_simps co2sobj.simps split:t_dobject.splits if_splits)[1] |
1374 |
1325 |
1375 apply (rule impI) |
1326 apply (rule impI) |
1376 apply (tactic {*my_seteq_tac 1*}) |
1327 apply (tactic {*my_seteq_tac 1*}) |
1377 apply (simp add:update_s2ss_obj_def update_s2ss_sfile_del_def) |
1328 apply (simp add:update_s2ss_obj_def update_s2ss_sfile_del_def) |
1378 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1329 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1379 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1330 apply (case_tac obj) |
1380 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1331 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1381 apply (rule disjI2, rule_tac x = obj in exI) |
1332 apply (rule disjI2, rule_tac x = obj in exI) |
1382 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1333 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1383 apply (case_tac "f = a", simp add:alive_simps) |
1334 apply (case_tac "list = a", simp add:dalive_simps) |
1384 apply (rule disjI2, rule_tac x = obj in exI) |
1335 apply (rule disjI2, rule_tac x = obj in exI) |
1385 apply (frule_tac obj = obj in co2sobj_closefd, simp, clarsimp simp:alive_simps split:if_splits) |
1336 apply (frule_tac obj = obj in co2sobj_closefd, simp, clarsimp simp:dalive_simps split:if_splits) |
1386 apply (rule disjI2, rule_tac x = obj in exI) |
1337 apply (rule disjI2, rule_tac x = obj in exI) |
1387 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1338 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1388 apply (rule disjI2, rule_tac x = obj in exI) |
1339 apply (rule disjI2, rule_tac x = obj in exI) |
1389 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1340 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1390 apply (frule_tac obj = obj in co2sobj_closefd, simp, rule notI, simp) |
1341 apply (frule_tac obj = obj in co2sobj_closefd, simp, rule notI, simp) |
1391 apply (frule_tac obj = obj in co2sobj_sfile_imp, erule exE, simp add:is_file_simps split:if_splits) |
1342 apply (frule_tac obj = obj in co2sobj_sfile_imp, erule exE, simp add:is_file_simps split:if_splits) |
1392 apply (erule_tac x= f in allE, simp add:co2sobj.simps) |
1343 apply (erule_tac x= f in allE, simp add:co2sobj.simps) |
1393 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1344 apply (rule conjI| rule impI|erule exE|erule conjE)+ |
1394 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1345 apply (case_tac obj) |
1395 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1346 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1396 apply (rule disjI2, rule notI, simp) |
1347 apply (rule disjI2, rule notI, simp) |
1397 apply (rule disjI2, rule conjI, rule disjI2, rule_tac x = obj in exI) |
1348 apply (rule disjI2, rule conjI, rule disjI2, rule_tac x = obj in exI) |
1398 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1349 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1399 apply (auto simp add:co2sobj.simps split:t_object.splits if_splits)[1] |
1350 apply (auto simp add:co2sobj.simps split:t_dobject.splits if_splits)[1] |
1400 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1351 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1401 apply (case_tac "f = a", simp add:alive_simps) |
1352 apply (case_tac "list = a", simp add:dalive_simps) |
1402 apply (case_tac "f \<in> same_inode_files s a", rule disjI1) |
1353 apply (case_tac "list \<in> same_inode_files s a", rule disjI1) |
1403 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1354 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1404 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1355 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1405 apply (erule bexE, erule conjE) |
1356 apply (erule bexE, erule conjE) |
1406 apply (erule_tac x = f'' in ballE, simp, simp) |
1357 apply (erule_tac x = f'' in ballE, simp, simp) |
1407 apply (rule disjI2, rule conjI, rule disjI2, rule_tac x = obj in exI) |
1358 apply (rule disjI2, rule conjI, rule disjI2, rule_tac x = obj in exI) |
1408 apply (simp add:is_file_simps co2sobj_closefd) |
1359 apply (simp add:is_file_simps co2sobj_closefd) |
1409 apply (rule notI, simp add:co2sobj_closefd) |
1360 apply (rule notI, simp add:co2sobj_closefd) |
1410 apply (erule_tac x = f in allE, simp add:is_file_simps co2sobj.simps) |
1361 apply (erule_tac x = list in allE, simp add:is_file_simps co2sobj.simps) |
1411 apply (rule disjI2, rule conjI, rule disjI2, rule_tac x = obj in exI) |
1362 apply (rule disjI2, rule conjI, rule disjI2, rule_tac x = obj in exI) |
1412 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1363 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1413 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1364 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1414 apply (rule disjI2, rule conjI, rule disjI2, rule_tac x = obj in exI) |
1365 apply (rule disjI2, rule conjI, rule disjI2, rule_tac x = obj in exI) |
1415 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1366 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1416 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1367 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1417 apply (rule impI, rule conjI, rule impI) |
1368 apply (rule impI, rule conjI, rule impI) |
1418 |
1369 |
1419 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1370 apply (case_tac obj) |
1420 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1371 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1421 apply (rule notI, simp) |
1372 apply (rule notI, simp) |
1422 apply (rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1373 apply (rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1423 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1374 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1424 apply (auto simp add:co2sobj.simps split:t_object.splits if_splits)[1] |
1375 apply (auto simp add:co2sobj.simps split:t_dobject.splits if_splits)[1] |
1425 apply (erule_tac x = obj in allE, simp add:co2sobj_closefd) |
1376 apply (erule_tac x = obj in allE, simp add:co2sobj_closefd) |
1426 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1377 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1427 apply (case_tac "f = a", simp add:alive_simps) |
1378 apply (case_tac "list = a", simp add:dalive_simps) |
1428 apply (case_tac "f \<in> same_inode_files s a", rule conjI, rule disjI2, rule conjI) |
1379 apply (case_tac "list \<in> same_inode_files s a", rule conjI, rule disjI2, rule conjI) |
1429 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1380 apply (simp add:co2sobj_simps split:if_splits option.splits t_sobject.splits) |
1430 apply (simp add:co2sobj.simps) |
1381 apply (simp add:co2sobj.simps) |
1431 apply (rule notI, simp add:co2sobj.simps) |
1382 apply (rule notI, simp add:co2sobj.simps) |
1432 apply (rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1383 apply (rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1433 apply (simp add:is_file_simps co2sobj_closefd) |
1384 apply (simp add:is_file_simps co2sobj_closefd) |
1434 apply (rule notI, simp add:co2sobj.simps) |
1385 apply (rule notI, simp add:co2sobj.simps) |
1435 apply (rule notI, simp add:co2sobj_closefd) |
1386 apply (rule notI, simp add:co2sobj_closefd) |
1436 apply (erule_tac x = f in allE, simp add:is_file_simps co2sobj.simps) |
1387 apply (erule_tac x = list in allE, simp add:is_file_simps co2sobj.simps) |
1437 apply (rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1388 apply (rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1438 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1389 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1439 apply (rule notI, simp add:co2sobj.simps split:option.splits)+ |
1390 apply (rule notI, simp add:co2sobj.simps split:option.splits)+ |
1440 apply (rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1391 apply (rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1441 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1392 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1442 apply (rule notI, simp add:co2sobj.simps split:option.splits)+ |
1393 apply (rule notI, simp add:co2sobj.simps split:option.splits)+ |
1443 apply (rule impI) |
1394 apply (rule impI) |
1444 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1395 apply (case_tac obj) |
1445 apply (case_tac "pa = p", simp add:co2sobj.simps) |
1396 apply (case_tac "nat = p", simp add:co2sobj.simps) |
1446 apply (rule disjI2, rule notI, simp) |
1397 apply (rule disjI2, rule notI, simp) |
1447 apply (rule disjI2, rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1398 apply (rule disjI2, rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1448 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1399 apply (frule_tac obj = obj in co2sobj_closefd, simp) |
1449 apply (auto simp add:co2sobj.simps split:t_object.splits if_splits)[1] |
1400 apply (auto simp add:co2sobj.simps split:t_dobject.splits if_splits)[1] |
1450 apply (erule_tac x = obj in allE, simp add:co2sobj_closefd) |
1401 apply (erule_tac x = obj in allE, simp add:co2sobj_closefd) |
1451 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1402 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1452 apply (case_tac "f = a", simp add:alive_simps) |
1403 apply (case_tac "list = a", simp add:dalive_simps) |
1453 apply (case_tac "f \<in> same_inode_files s a", rule disjI1) |
1404 apply (case_tac "list \<in> same_inode_files s a", rule disjI1) |
1454 apply (simp add:co2sobj_closefd split:if_splits option.splits t_sobject.splits) |
1405 apply (simp add:co2sobj_closefd split:if_splits option.splits t_sobject.splits) |
1455 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1406 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1456 apply (erule bexE, erule conjE, erule_tac x = "f''" in ballE, simp, simp) |
1407 apply (erule bexE, erule conjE, erule_tac x = "f''" in ballE, simp, simp) |
1457 apply (rule disjI2, rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1408 apply (rule disjI2, rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1458 apply (simp add:is_file_simps co2sobj_closefd) |
1409 apply (simp add:is_file_simps co2sobj_closefd) |
1459 apply (rule notI, simp add:co2sobj.simps) |
1410 apply (rule notI, simp add:co2sobj.simps) |
1460 apply (rule notI, simp add:co2sobj_closefd) |
1411 apply (rule notI, simp add:co2sobj_closefd) |
1461 apply (erule_tac x = f in allE, simp add:is_file_simps co2sobj.simps) |
1412 apply (erule_tac x = list in allE, simp add:is_file_simps co2sobj.simps) |
1462 apply (rule disjI2, rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1413 apply (rule disjI2, rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1463 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1414 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1464 apply (rule notI, simp add:co2sobj.simps split:option.splits)+ |
1415 apply (rule notI, simp add:co2sobj.simps split:option.splits)+ |
1465 apply (rule disjI2, rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1416 apply (rule disjI2, rule conjI, rule disjI2, rule conjI, rule_tac x = obj in exI) |
1466 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:alive_simps) |
1417 apply (frule_tac obj = obj in co2sobj_closefd, simp, simp add:dalive_simps) |
1467 apply (rule notI, simp add:co2sobj.simps split:option.splits)+ |
1418 apply (rule notI, simp add:co2sobj.simps split:option.splits)+ |
1468 |
1419 |
1469 apply (simp add:update_s2ss_sfile_del_def update_s2ss_obj_def split:if_splits) |
1420 apply (simp add:update_s2ss_sfile_del_def update_s2ss_obj_def split:if_splits) |
1470 apply (erule conjE, erule disjE) |
1421 apply (erule conjE, erule disjE) |
1471 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps) |
1422 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps) |
1472 apply (erule exE, erule conjE) |
1423 apply (erule exE, erule conjE) |
1473 apply (case_tac "obj = O_file a", simp add:co2sobj.simps) |
1424 apply (case_tac "obj = D_file a", simp add:co2sobj.simps) |
1474 apply (case_tac "obj = O_proc p") |
1425 apply (case_tac "obj = D_proc p") |
1475 apply (rule_tac x = obj' in exI, frule_tac obj = obj' in co2sobj_sproc_imp, erule exE) |
1426 apply (rule_tac x = obj' in exI, frule_tac obj = obj' in co2sobj_sproc_imp, erule exE) |
1476 apply (frule_tac obj = obj' in alive_co2sobj_closefd3, simp+) |
1427 apply (frule_tac obj = obj' in dalive_co2sobj_closefd3, simp+) |
1477 apply (simp add:co2sobj_closefd) |
1428 apply (simp add:co2sobj_closefd) |
1478 apply (simp add:co2sobj.simps) |
1429 apply (simp add:co2sobj.simps) |
1479 apply (frule_tac obj = obj in alive_co2sobj_closefd3, simp+) |
1430 apply (frule_tac obj = obj in dalive_co2sobj_closefd3, simp+) |
1480 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1431 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1481 apply (auto simp add:co2sobj.simps split:t_object.splits if_splits)[1] |
1432 apply (auto simp add:co2sobj.simps split:t_dobject.splits if_splits)[1] |
1482 apply (erule conjE|erule exE|erule disjE)+ |
1433 apply (erule conjE|erule exE|erule disjE)+ |
1483 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps) |
1434 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps) |
1484 apply (erule conjE, erule exE, erule conjE) |
1435 apply (erule conjE, erule exE, erule conjE) |
1485 apply (case_tac "obj = O_file a", simp add:co2sobj.simps) |
1436 apply (case_tac "obj = D_file a", simp add:co2sobj.simps) |
1486 apply (case_tac "obj = O_proc p") |
1437 apply (case_tac "obj = D_proc p") |
1487 apply (simp add:co2sobj.simps) |
1438 apply (simp add:co2sobj.simps) |
1488 apply (frule_tac obj = obj in alive_co2sobj_closefd3, simp+) |
1439 apply (frule_tac obj = obj in dalive_co2sobj_closefd3, simp+) |
1489 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1440 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1490 apply (auto simp add:co2sobj.simps split:t_object.splits if_splits)[1] |
1441 apply (auto simp add:co2sobj.simps split:t_dobject.splits if_splits)[1] |
1491 apply (erule conjE|erule exE|erule disjE)+ |
1442 apply (erule conjE|erule exE|erule disjE)+ |
1492 apply (drule same_inode_files_prop10, simp add:file_of_pfd_is_file, erule exE, erule conjE) |
1443 apply (drule same_inode_files_prop10, simp add:file_of_pfd_is_file, erule exE, erule conjE) |
1493 apply (rule_tac x = "O_file f'" in exI) |
1444 apply (rule_tac x = "D_file f'" in exI) |
1494 apply (frule same_inode_files_prop11) |
1445 apply (frule same_inode_files_prop11) |
1495 apply (frule_tac obj = "O_file f'" in co2sobj_closefd) |
1446 apply (frule_tac obj = "D_file f'" in co2sobj_closefd) |
1496 apply (simp add:alive_simps)+ |
1447 apply (simp add:dalive_simps)+ |
1497 apply (frule_tac f = "f'" in is_file_has_sfile', simp, erule exE) |
1448 apply (frule_tac f = "f'" in is_file_has_sfile', simp, erule exE) |
1498 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted split:if_splits) |
1449 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted split:if_splits) |
1499 apply (rule impI, erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1450 apply (rule impI, erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1500 apply (erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1451 apply (erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1501 apply (erule conjE, erule disjE) |
1452 apply (erule conjE, erule disjE) |
1502 apply (rule_tac x = "O_proc p" in exI) |
1453 apply (rule_tac x = "D_proc p" in exI) |
1503 apply (simp add:co2sobj.simps) |
1454 apply (simp add:co2sobj.simps) |
1504 apply (erule exE, erule conjE) |
1455 apply (erule exE, erule conjE) |
1505 apply (case_tac "obj = O_proc p") |
1456 apply (case_tac "obj = D_proc p") |
1506 apply (rule_tac x = "obj'" in exI, simp, frule_tac obj = obj' in co2sobj_sproc_imp, erule exE) |
1457 apply (rule_tac x = "obj'" in exI, simp, frule_tac obj = obj' in co2sobj_sproc_imp, erule exE) |
1507 apply (frule_tac obj = obj' in alive_co2sobj_closefd3, simp+) |
1458 apply (frule_tac obj = obj' in dalive_co2sobj_closefd3, simp+) |
1508 apply (simp add:co2sobj_closefd) |
1459 apply (simp add:co2sobj_closefd) |
1509 apply (simp add:co2sobj.simps) |
1460 apply (simp add:co2sobj.simps) |
1510 apply (case_tac "obj = O_file a", simp add:co2sobj.simps) |
1461 apply (case_tac "obj = D_file a", simp add:co2sobj.simps) |
1511 apply (frule_tac obj = obj in alive_co2sobj_closefd3, simp+) |
1462 apply (frule_tac obj = obj in dalive_co2sobj_closefd3, simp+) |
1512 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1463 apply (case_tac obj) |
1513 apply (rule_tac x = obj in exI) |
1464 apply (rule_tac x = obj in exI) |
1514 apply (simp add:co2sobj_closefd) |
1465 apply (simp add:co2sobj_closefd) |
1515 apply (case_tac "f = a", simp add:alive_simps) |
1466 apply (case_tac "list = a", simp add:dalive_simps) |
1516 apply (case_tac "f \<in> same_inode_files s a") |
1467 apply (case_tac "list \<in> same_inode_files s a") |
1517 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1468 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1518 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1469 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1519 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1470 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1520 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1471 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1521 apply (erule disjE) |
1472 apply (erule disjE) |
1522 apply (drule same_inode_files_prop10, simp add:file_of_pfd_is_file, erule exE, erule conjE) |
1473 apply (drule same_inode_files_prop10, simp add:file_of_pfd_is_file, erule exE, erule conjE) |
1523 apply (rule_tac x = "O_file f'" in exI) |
1474 apply (rule_tac x = "D_file f'" in exI) |
1524 apply (frule same_inode_files_prop11) |
1475 apply (frule same_inode_files_prop11) |
1525 apply (frule_tac obj = "O_file f'" in co2sobj_closefd) |
1476 apply (frule_tac obj = "D_file f'" in co2sobj_closefd) |
1526 apply (simp add:alive_simps)+ |
1477 apply (simp add:dalive_simps)+ |
1527 apply (frule_tac f = "f'" in is_file_has_sfile', simp, erule exE) |
1478 apply (frule_tac f = "f'" in is_file_has_sfile', simp, erule exE) |
1528 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted split:if_splits) |
1479 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted split:if_splits) |
1529 apply (rule impI, erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1480 apply (rule impI, erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1530 apply (erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1481 apply (erule bexE, erule conjE, erule_tac x = f'' in ballE, simp, simp) |
1531 apply (erule conjE, erule disjE) |
1482 apply (erule conjE, erule disjE) |
1532 apply (rule_tac x = "O_proc p" in exI) |
1483 apply (rule_tac x = "D_proc p" in exI) |
1533 apply (simp add:co2sobj.simps) |
1484 apply (simp add:co2sobj.simps) |
1534 apply (erule conjE, erule exE, erule conjE) |
1485 apply (erule conjE, erule exE, erule conjE) |
1535 apply (case_tac "obj = O_proc p", simp add:co2sobj.simps) |
1486 apply (case_tac "obj = D_proc p", simp add:co2sobj.simps) |
1536 apply (case_tac "obj = O_file a", simp add:co2sobj.simps) |
1487 apply (case_tac "obj = D_file a", simp add:co2sobj.simps) |
1537 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1488 apply (case_tac obj) |
1538 apply (rule_tac x = obj in exI) |
1489 apply (rule_tac x = obj in exI) |
1539 apply (simp add:co2sobj_closefd) |
1490 apply (simp add:co2sobj_closefd) |
1540 apply (case_tac "f \<in> same_inode_files s a") |
1491 apply (case_tac "list \<in> same_inode_files s a") |
1541 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1492 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1542 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd is_file_simps) |
1493 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd is_file_simps) |
1543 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd is_dir_simps) |
1494 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd is_dir_simps) |
1544 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1495 apply (rule_tac x = obj in exI, simp add:co2sobj_closefd) |
1545 |
1496 |
1605 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ defer |
1556 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ defer |
1606 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ |
1557 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ |
1607 |
1558 |
1608 apply (simp add:s2ss_def) |
1559 apply (simp add:s2ss_def) |
1609 apply (tactic {*my_seteq_tac 1*}) |
1560 apply (tactic {*my_seteq_tac 1*}) |
1610 apply (case_tac "obj = O_file f", simp add:is_file_simps) |
1561 apply (case_tac "obj = D_file f", simp add:is_file_simps) |
1611 apply simp |
1562 apply simp |
1612 apply (rule conjI) |
1563 apply (rule conjI) |
1613 apply (rule_tac x = obj in exI,simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_object.splits) |
1564 apply (rule_tac x = obj in exI,simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_dobject.splits) |
1614 apply (simp add:co2sobj.simps) |
|
1615 apply (simp add:co2sobj.simps) |
|
1616 apply (rule notI, simp, frule_tac obj = obj in co2sobj_sfile_imp, erule exE, simp) |
1565 apply (rule notI, simp, frule_tac obj = obj in co2sobj_sfile_imp, erule exE, simp) |
1617 apply (frule_tac obj = obj in co2sobj_unlink, simp) |
1566 apply (frule_tac obj = obj in co2sobj_unlink, simp) |
1618 apply (erule_tac x = fa in allE, simp add:is_file_simps) |
1567 apply (erule_tac x = fa in allE, simp add:is_file_simps) |
1619 apply (simp add:co2sobj.simps) |
1568 apply (simp add:co2sobj.simps) |
1620 apply (tactic {*my_setiff_tac 1*}) |
1569 apply (tactic {*my_setiff_tac 1*}) |
1621 apply (case_tac "obj = O_file f", simp add:co2sobj.simps) |
1570 apply (case_tac "obj = D_file f", simp add:co2sobj.simps) |
1622 apply (frule_tac alive_co2sobj_unlink, simp, simp) |
1571 apply (frule_tac dalive_co2sobj_unlink, simp, simp) |
1623 apply (frule_tac obj = obj in co2sobj_unlink, simp) |
1572 apply (frule_tac obj = obj in co2sobj_unlink, simp) |
1624 apply (rule_tac x = obj in exI) |
1573 apply (rule_tac x = obj in exI) |
1625 apply (simp add:co2sobj.simps split:t_object.splits if_splits) |
1574 apply (simp add:co2sobj.simps split:t_dobject.splits if_splits) |
1626 |
1575 |
1627 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ defer |
1576 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ defer |
1628 |
1577 |
1629 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ |
1578 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ |
1630 apply (simp add:s2ss_def) |
1579 apply (simp add:s2ss_def) |
1631 apply (tactic {*my_seteq_tac 1*}) |
1580 apply (tactic {*my_seteq_tac 1*}) |
1632 apply (case_tac "obj = O_file f", simp add:alive_simps) |
1581 apply (case_tac "obj = D_file f", simp add:dalive_simps) |
1633 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1582 apply (case_tac obj) |
1634 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1583 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1635 apply (simp add:co2sobj_unlink) |
1584 apply (simp add:co2sobj_unlink) |
1636 apply (case_tac "fa \<in> same_inode_files s f") |
1585 apply (case_tac "list \<in> same_inode_files s f") |
1637 apply (rule disjI1) |
1586 apply (rule disjI1) |
1638 apply (simp add:co2sobj_unlink) |
1587 apply (simp add:co2sobj_unlink) |
1639 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop split:if_splits) |
1588 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop split:if_splits) |
1640 apply (erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1589 apply (erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1641 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1590 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1642 apply (simp add:co2sobj_unlink is_file_simps) |
1591 apply (simp add:co2sobj_unlink is_file_simps) |
1643 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1592 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1644 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1593 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1645 apply (tactic {*my_setiff_tac 1*}) |
1594 apply (tactic {*my_setiff_tac 1*}) |
1646 apply (drule same_inode_files_prop10, simp, erule exE, erule conjE) |
1595 apply (drule same_inode_files_prop10, simp, erule exE, erule conjE) |
1647 apply (rule_tac x = "O_file f'a" in exI, simp add:is_file_simps) |
1596 apply (rule_tac x = "D_file f'a" in exI, simp add:is_file_simps) |
1648 apply (frule_tac obj = "O_file f'a" in co2sobj_unlink, simp add:same_inode_files_prop11 is_file_simps) |
1597 apply (frule_tac obj = "D_file f'a" in co2sobj_unlink, simp add:same_inode_files_prop11 is_file_simps) |
1649 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop |
1598 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop |
1650 is_file_simps same_inode_files_prop11 split:if_splits) |
1599 is_file_simps same_inode_files_prop11 split:if_splits) |
1651 apply (rule impI, erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1600 apply (rule impI, erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1652 apply (erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1601 apply (erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1653 |
1602 |
1654 apply (tactic {*my_setiff_tac 1*}) |
1603 apply (tactic {*my_setiff_tac 1*}) |
1655 apply (case_tac "f' = f", simp add:same_inode_files_prop9) |
1604 apply (case_tac "f' = f", simp add:same_inode_files_prop9) |
1656 apply (case_tac "obj= O_file f") |
1605 apply (case_tac "obj= D_file f") |
1657 apply (rule_tac x = "O_file f'" in exI, simp add:is_file_simps) |
1606 apply (rule_tac x = "D_file f'" in exI, simp add:is_file_simps) |
1658 apply (frule_tac f' = f' in cf2sfiles_unlink, simp add:current_files_simps is_file_in_current) |
1607 apply (frule_tac f' = f' in cf2sfiles_unlink, simp add:current_files_simps is_file_in_current) |
1659 apply (simp add:co2sobj.simps) |
1608 apply (simp add:co2sobj.simps) |
1660 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1609 apply (case_tac obj) |
1661 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1610 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1662 apply (case_tac "fa \<in> same_inode_files s f") |
1611 apply (case_tac "list \<in> same_inode_files s f") |
1663 apply (rule_tac x = "O_file f'" in exI) |
1612 apply (rule_tac x = "D_file f'" in exI) |
1664 apply (frule_tac f' = f' in cf2sfiles_unlink, simp add:current_files_simps is_file_in_current) |
1613 apply (frule_tac f' = f' in cf2sfiles_unlink, simp add:current_files_simps is_file_in_current) |
1665 apply (simp add:co2sobj.simps is_file_simps cf2sfiles_prop same_inodes_tainted) |
1614 apply (simp add:co2sobj.simps is_file_simps cf2sfiles_prop same_inodes_tainted) |
1666 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps) |
1615 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps) |
1667 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1616 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1668 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1617 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1670 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ defer |
1619 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ defer |
1671 |
1620 |
1672 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ |
1621 apply (rule impI|erule conjE|erule exE|rule conjI|erule bexE)+ |
1673 apply (simp add:s2ss_def) |
1622 apply (simp add:s2ss_def) |
1674 apply (tactic {*my_seteq_tac 1*}) |
1623 apply (tactic {*my_seteq_tac 1*}) |
1675 apply (case_tac "obj = O_file f", simp add:alive_simps, simp) |
1624 apply (case_tac "obj = D_file f", simp add:dalive_simps, simp) |
1676 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1625 apply (case_tac obj) |
1677 apply (rule disjI2, rule conjI, simp, rule_tac x = obj in exI) |
1626 apply (rule disjI2, rule conjI, simp, rule_tac x = obj in exI) |
1678 apply (simp add:co2sobj_unlink) |
1627 apply (simp add:co2sobj_unlink) |
1679 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1628 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1680 apply (case_tac "fa \<in> same_inode_files s f") |
1629 apply (case_tac "list \<in> same_inode_files s f") |
1681 apply (rule disjI1) |
1630 apply (rule disjI1) |
1682 apply (simp add:co2sobj_unlink) |
1631 apply (simp add:co2sobj_unlink) |
1683 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop split:if_splits) |
1632 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop split:if_splits) |
1684 apply (erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1633 apply (erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1685 apply (rule disjI2, rule conjI, simp, rule_tac x = obj in exI) |
1634 apply (rule disjI2, rule conjI, simp, rule_tac x = obj in exI) |
1686 apply (simp add:co2sobj_unlink is_file_simps) |
1635 apply (simp add:co2sobj_unlink is_file_simps) |
1687 apply (rule notI, simp add:co2sobj_unlink) |
1636 apply (rule notI, simp add:co2sobj_unlink) |
1688 apply (erule_tac x = fa in allE, simp add:co2sobj.simps is_file_simps) |
1637 apply (erule_tac x = list in allE, simp add:co2sobj.simps is_file_simps) |
1689 apply (rule disjI2, rule conjI, simp, rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1638 apply (rule disjI2, rule conjI, simp, rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1690 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1639 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1691 apply (rule disjI2, rule conjI, simp, rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1640 apply (rule disjI2, rule conjI, simp, rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1692 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1641 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1693 apply (tactic {*my_setiff_tac 1*}) |
1642 apply (tactic {*my_setiff_tac 1*}) |
1694 apply (drule same_inode_files_prop10, simp, erule exE, erule conjE) |
1643 apply (drule same_inode_files_prop10, simp, erule exE, erule conjE) |
1695 apply (rule_tac x = "O_file f'" in exI, simp add:is_file_simps) |
1644 apply (rule_tac x = "D_file f'" in exI, simp add:is_file_simps) |
1696 apply (frule_tac obj = "O_file f'" in co2sobj_unlink, simp add:same_inode_files_prop11 is_file_simps) |
1645 apply (frule_tac obj = "D_file f'" in co2sobj_unlink, simp add:same_inode_files_prop11 is_file_simps) |
1697 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop |
1646 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop |
1698 is_file_simps same_inode_files_prop11 split:if_splits) |
1647 is_file_simps same_inode_files_prop11 split:if_splits) |
1699 apply (rule impI, erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1648 apply (rule impI, erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1700 apply (erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1649 apply (erule bexE, erule_tac x = f'' in ballE, simp, simp) |
1701 apply (tactic {*my_setiff_tac 1*}, simp) |
1650 apply (tactic {*my_setiff_tac 1*}, simp) |
1702 apply (case_tac "obj = O_file f", simp add:co2sobj.simps) |
1651 apply (case_tac "obj = D_file f", simp add:co2sobj.simps) |
1703 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1652 apply (case_tac obj) |
1704 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1653 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1705 apply (case_tac "fa \<in> same_inode_files s f") |
1654 apply (case_tac "list \<in> same_inode_files s f") |
1706 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1655 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1707 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps) |
1656 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps) |
1708 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1657 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1709 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1658 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1710 |
1659 |
1711 apply (rule impI) |
1660 apply (rule impI) |
1712 apply (simp add:s2ss_def) |
1661 apply (simp add:s2ss_def) |
1713 apply (tactic {*my_seteq_tac 1*}) |
1662 apply (tactic {*my_seteq_tac 1*}) |
1714 apply (rule_tac x = obj in exI) |
1663 apply (rule_tac x = obj in exI) |
1715 apply (simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_object.splits) |
1664 apply (simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_dobject.splits) |
1716 apply (simp add:co2sobj.simps) |
1665 apply (tactic {*my_setiff_tac 1*}) |
1717 apply (simp add:co2sobj.simps) |
1666 apply (rule_tac x = obj in exI) |
1718 apply (tactic {*my_setiff_tac 1*}) |
1667 apply (subgoal_tac "dalive (UnLink p f # s) obj") |
1719 apply (rule_tac x = obj in exI) |
1668 apply (auto simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_dobject.splits)[1] |
1720 apply (subgoal_tac "alive (UnLink p f # s) obj") |
1669 apply (auto simp add:co2sobj_unlink dalive_simps split:t_dobject.splits)[1] |
1721 apply (auto simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_object.splits)[1] |
1670 |
1722 apply (auto simp add:co2sobj_unlink alive_simps split:t_object.splits)[1] |
1671 apply (simp add:s2ss_def) |
1723 |
1672 apply (tactic {*my_seteq_tac 1*}) |
1724 apply (simp add:s2ss_def) |
1673 apply (case_tac "obj = D_file f", simp add:dalive_simps) |
1725 apply (tactic {*my_seteq_tac 1*}) |
1674 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_dobject.splits) |
1726 apply (case_tac "obj = O_file f", simp add:alive_simps) |
1675 apply (tactic {*my_setiff_tac 1*}) |
1727 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_object.splits) |
1676 apply (case_tac "obj = D_file f") |
1728 apply (simp add:co2sobj.simps) |
1677 apply (rule_tac x = "D_file f'" in exI) |
1729 apply (simp add:co2sobj.simps) |
1678 apply (auto simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_dobject.splits)[1] |
1730 apply (tactic {*my_setiff_tac 1*}) |
|
1731 apply (case_tac "obj = O_file f") |
|
1732 apply (rule_tac x = "O_file f'" in exI) |
|
1733 apply (auto simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_object.splits)[1] |
|
1734 apply (rule_tac x =obj in exI) |
1679 apply (rule_tac x =obj in exI) |
1735 apply (subgoal_tac "alive (UnLink p f # s) obj") |
1680 apply (subgoal_tac "dalive (UnLink p f # s) obj") |
1736 apply (auto simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_object.splits)[1] |
1681 apply (auto simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_dobject.splits)[1] |
1737 apply (auto simp add:co2sobj_unlink alive_simps split:t_object.splits)[1] |
1682 apply (auto simp add:co2sobj_unlink dalive_simps split:t_dobject.splits)[1] |
1738 |
1683 |
1739 apply (simp add:s2ss_def) |
1684 apply (simp add:s2ss_def) |
1740 apply (tactic {*my_seteq_tac 1*}) |
1685 apply (tactic {*my_seteq_tac 1*}) |
1741 apply (case_tac "obj = O_file f", simp add:alive_simps) |
1686 apply (case_tac "obj = D_file f", simp add:dalive_simps) |
1742 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_object.splits if_splits) |
1687 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_dobject.splits if_splits) |
1743 apply (simp add:co2sobj.simps) |
1688 apply (tactic {*my_setiff_tac 1*}) |
1744 apply (simp add:co2sobj.simps) |
1689 apply (case_tac "obj = D_file f") |
1745 apply (tactic {*my_setiff_tac 1*}) |
1690 apply (rule_tac x = "D_file f'" in exI) |
1746 apply (case_tac "obj = O_file f") |
1691 apply (auto simp add:co2sobj_unlink is_file_simps is_dir_simps same_inode_files_prop9 split:t_dobject.splits)[1] |
1747 apply (rule_tac x = "O_file f'" in exI) |
1692 apply (case_tac obj) |
1748 apply (auto simp add:co2sobj_unlink is_file_simps is_dir_simps same_inode_files_prop9 split:t_object.splits)[1] |
|
1749 apply (erule_tac obj = obj in co2sobj_some_caseD) |
|
1750 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1693 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1751 apply (case_tac "fa \<in> same_inode_files s f") |
1694 apply (case_tac "list \<in> same_inode_files s f") |
1752 apply (rule_tac x = "O_file f'" in exI) |
1695 apply (rule_tac x = "D_file f'" in exI) |
1753 apply (simp add:alive_simps co2sobj.simps) |
1696 apply (simp add:dalive_simps co2sobj.simps) |
1754 apply (rule conjI, rule notI, simp add:same_inode_files_prop9) |
1697 apply (rule conjI, rule notI, simp add:same_inode_files_prop9) |
1755 apply (rule impI, frule_tac f' = f' in cf2sfiles_unlink) |
1698 apply (rule impI, frule_tac f' = f' in cf2sfiles_unlink) |
1756 apply (simp add:current_files_simps is_file_simps is_file_in_current) |
1699 apply (simp add:current_files_simps is_file_simps is_file_in_current) |
1757 apply (simp add:same_inodes_tainted cf2sfiles_prop) |
1700 apply (simp add:same_inodes_tainted cf2sfiles_prop) |
1758 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps) |
1701 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps) |
1759 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1702 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1760 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1703 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1761 |
1704 |
1762 apply (simp add:s2ss_def) |
1705 apply (simp add:s2ss_def) |
1763 apply (tactic {*my_seteq_tac 1*}) |
1706 apply (tactic {*my_seteq_tac 1*}) |
1764 apply (case_tac "obj = O_file f", simp add:alive_simps) |
1707 apply (case_tac "obj = D_file f", simp add:dalive_simps) |
1765 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_object.splits if_splits) |
1708 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps is_dir_simps split:t_dobject.splits if_splits) |
1766 apply (simp add:co2sobj.simps) |
1709 apply (tactic {*my_setiff_tac 1*}) |
1767 apply (simp add:co2sobj.simps) |
1710 apply (case_tac "obj = D_file f") |
1768 apply (tactic {*my_setiff_tac 1*}) |
1711 apply (rule_tac x = "D_file f'" in exI) |
1769 apply (case_tac "obj = O_file f") |
1712 apply (subgoal_tac "dalive (UnLink p f # s) (D_file f')") |
1770 apply (rule_tac x = "O_file f'" in exI) |
|
1771 apply (subgoal_tac "alive (UnLink p f # s) (O_file f')") |
|
1772 apply (frule same_inode_files_prop11, frule_tac f = f' in is_file_has_sfile', simp add:vd_cons, erule exE) |
1713 apply (frule same_inode_files_prop11, frule_tac f = f' in is_file_has_sfile', simp add:vd_cons, erule exE) |
1773 apply (frule_tac obj = "O_file f'" in co2sobj_unlink, simp) |
1714 apply (frule_tac obj = "D_file f'" in co2sobj_unlink, simp) |
1774 apply (simp split:if_splits option.splits add:is_file_simps) |
1715 apply (simp split:if_splits option.splits add:is_file_simps) |
1775 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1716 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1776 apply (auto split:t_sobject.splits)[1] |
1717 apply (auto split:t_sobject.splits)[1] |
1777 apply (simp add:is_file_simps same_inode_files_prop11) |
1718 apply (simp add:is_file_simps same_inode_files_prop11) |
1778 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1719 apply (case_tac obj) |
1779 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1720 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1780 apply (case_tac "fa \<in> same_inode_files s f") |
1721 apply (case_tac "list \<in> same_inode_files s f") |
1781 apply (rule_tac x = "O_file f'" in exI) |
1722 apply (rule_tac x = "D_file f'" in exI) |
1782 apply (subgoal_tac "alive (UnLink p f # s) (O_file f')") |
1723 apply (subgoal_tac "dalive (UnLink p f # s) (D_file f')") |
1783 apply (frule same_inode_files_prop11, frule_tac f = f' in is_file_has_sfile', simp add:vd_cons, erule exE) |
1724 apply (frule same_inode_files_prop11, frule_tac f = f' in is_file_has_sfile', simp add:vd_cons, erule exE) |
1784 apply (frule_tac obj = "O_file f'" in co2sobj_unlink, simp) |
1725 apply (frule_tac obj = "D_file f'" in co2sobj_unlink, simp) |
1785 apply (simp split:if_splits option.splits add:is_file_simps) |
1726 apply (simp split:if_splits option.splits add:is_file_simps) |
1786 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1727 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1787 apply (auto split:t_sobject.splits)[1] |
1728 apply (auto split:t_sobject.splits)[1] |
1788 apply (simp add:is_file_simps same_inode_files_prop11) |
1729 apply (simp add:is_file_simps same_inode_files_prop11) |
1789 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps) |
1730 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_file_simps) |
1790 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1731 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink is_dir_simps) |
1791 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1732 apply (rule_tac x = obj in exI, simp add:co2sobj_unlink) |
1792 done |
1733 done |
1793 |
1734 |
1794 lemma s2ss_rmdir: "valid (Rmdir p f # s) \<Longrightarrow> s2ss (Rmdir p f # s) = ( |
1735 lemma s2ss_rmdir: "valid (Rmdir p f # s) \<Longrightarrow> s2ss (Rmdir p f # s) = ( |
1795 case (co2sobj s (O_dir f)) of |
1736 case (co2sobj s (D_dir f)) of |
1796 Some sdir \<Rightarrow> del_s2ss_obj s (s2ss s) (O_dir f) sdir |
1737 Some sdir \<Rightarrow> del_s2ss_obj s (s2ss s) (D_dir f) sdir |
1797 | _ \<Rightarrow> {})" |
1738 | _ \<Rightarrow> {})" |
1798 apply (frule vd_cons, frule vt_grant_os) |
1739 apply (frule vd_cons, frule vt_grant_os) |
1799 apply (clarsimp simp:dir_is_empty_def) |
1740 apply (clarsimp simp:dir_is_empty_def) |
1800 apply (frule is_dir_has_sdir', simp, erule exE) |
1741 apply (frule is_dir_has_sdir', simp, erule exE) |
1801 apply (simp split:option.splits, rule conjI, rule impI, simp add:co2sobj.simps) |
1742 apply (simp split:option.splits, rule conjI, rule impI, simp add:co2sobj.simps) |
1871 |
1812 |
1872 apply (simp add:update_s2ss_sfile_add_def) |
1813 apply (simp add:update_s2ss_sfile_add_def) |
1873 apply (rule conjI, rule impI, erule exE, erule conjE, erule conjE) |
1814 apply (rule conjI, rule impI, erule exE, erule conjE, erule conjE) |
1874 apply (simp add:s2ss_def) |
1815 apply (simp add:s2ss_def) |
1875 apply (tactic {*my_seteq_tac 1*}) |
1816 apply (tactic {*my_seteq_tac 1*}) |
1876 apply (case_tac "obj = O_file f'") |
1817 apply (case_tac "obj = D_file f'") |
1877 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_linkhard |
1818 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_linkhard |
1878 same_inode_files_linkhard split:if_splits) |
1819 same_inode_files_linkhard split:if_splits) |
1879 apply (case_tac "O_file f' \<in> tainted s") |
1820 apply (case_tac "O_file f' \<in> tainted s") |
1880 apply (drule tainted_in_current, simp, simp add:is_file_in_current alive.simps, simp) |
1821 apply (drule tainted_in_current, simp, simp add:is_file_in_current dalive.simps, simp) |
1881 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1822 apply (case_tac obj) |
1882 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1823 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1883 apply (simp add:co2sobj_linkhard alive_linkhard) |
1824 apply (simp add:co2sobj_linkhard dalive_linkhard) |
1884 apply (case_tac "fa \<in> same_inode_files s f") |
1825 apply (case_tac "list \<in> same_inode_files s f") |
1885 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_linkhard |
1826 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_linkhard |
1886 same_inodes_tainted split:if_splits) |
1827 same_inodes_tainted split:if_splits) |
1887 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_linkhard is_file_simps) |
1828 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_linkhard is_file_simps) |
1888 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_linkhard is_dir_simps) |
1829 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_linkhard is_dir_simps) |
1889 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_linkhard) |
1830 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_linkhard) |
1890 apply (tactic {*my_setiff_tac 1*}) |
1831 apply (tactic {*my_setiff_tac 1*}) |
1891 apply (rule_tac x = "O_file f" in exI) |
1832 apply (rule_tac x = "D_file f" in exI) |
1892 apply (frule_tac obj = "O_file f" in co2sobj_linkhard) |
1833 apply (frule_tac obj = "D_file f" in co2sobj_linkhard) |
1893 apply (simp add:alive_linkhard) |
1834 apply (simp add:dalive_linkhard) |
1894 apply (simp add:alive_linkhard same_inode_files_prop9 split:t_object.splits) |
1835 apply (simp add:dalive_linkhard same_inode_files_prop9 split:t_dobject.splits) |
1895 apply (tactic {*my_setiff_tac 1*}) |
1836 apply (tactic {*my_setiff_tac 1*}) |
1896 apply (case_tac "obj = O_file f'", simp add:alive_linkhard is_file_in_current) |
1837 apply (case_tac "obj = D_file f'", simp add:dalive_linkhard is_file_in_current) |
1897 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1838 apply (case_tac obj) |
1898 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard alive_linkhard) |
1839 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard dalive_linkhard) |
1899 apply (case_tac "fa \<in> same_inode_files s f") |
1840 apply (case_tac "list \<in> same_inode_files s f") |
1900 apply (rule_tac x = "O_file f'a" in exI, simp add:co2sobj_linkhard alive_linkhard) |
1841 apply (rule_tac x = "D_file f'a" in exI, simp add:co2sobj_linkhard dalive_linkhard) |
1901 apply (rule conjI, rule impI, simp add:is_file_in_current) |
1842 apply (rule conjI, rule impI, simp add:is_file_in_current) |
1902 apply (rule impI, simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1843 apply (rule impI, simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1903 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard alive_linkhard) |
1844 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard dalive_linkhard) |
1904 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard alive_linkhard) |
1845 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard dalive_linkhard) |
1905 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard alive_linkhard) |
1846 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard dalive_linkhard) |
1906 |
1847 |
1907 apply (rule impI) |
1848 apply (rule impI) |
1908 apply (simp add:s2ss_def) |
1849 apply (simp add:s2ss_def) |
1909 apply (tactic {*my_seteq_tac 1*}) |
1850 apply (tactic {*my_seteq_tac 1*}) |
1910 apply (case_tac "obj = O_file f'", simp) |
1851 apply (case_tac "obj = D_file f'", simp) |
1911 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_linkhard |
1852 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_linkhard |
1912 same_inode_files_linkhard split:if_splits) |
1853 same_inode_files_linkhard split:if_splits) |
1913 apply (case_tac "O_file f' \<in> tainted s") |
1854 apply (case_tac "O_file f' \<in> tainted s") |
1914 apply (drule tainted_in_current, simp, simp add:is_file_in_current alive.simps, simp) |
1855 apply (drule tainted_in_current, simp, simp add:is_file_in_current dalive.simps, simp) |
1915 apply (erule_tac obj = obj in co2sobj_some_caseD, simp) |
1856 apply (case_tac obj, simp) |
1916 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1857 apply (rule disjI2, rule conjI, rule_tac x = obj in exI) |
1917 apply (simp add:co2sobj_linkhard alive_linkhard) |
1858 apply (simp add:co2sobj_linkhard dalive_linkhard) |
1918 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1859 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1919 apply (case_tac "fa \<in> same_inode_files s f") |
1860 apply (case_tac "list \<in> same_inode_files s f") |
1920 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_linkhard |
1861 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_linkhard |
1921 same_inodes_tainted split:if_splits) |
1862 same_inodes_tainted split:if_splits) |
1922 apply (simp, rule disjI2, rule conjI, rule_tac x = obj in exI, simp add:co2sobj_linkhard is_file_simps) |
1863 apply (simp, rule disjI2, rule conjI, rule_tac x = obj in exI, simp add:co2sobj_linkhard is_file_simps) |
1923 apply (erule_tac x = fa in allE, rule notI) |
1864 apply (erule_tac x = list in allE, rule notI) |
1924 apply (simp add:co2sobj_linkhard is_file_simps) |
1865 apply (simp add:co2sobj_linkhard is_file_simps) |
1925 apply (simp add:co2sobj.simps) |
1866 apply (simp add:co2sobj.simps) |
1926 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI, simp add:co2sobj_linkhard is_dir_simps) |
1867 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI, simp add:co2sobj_linkhard is_dir_simps) |
1927 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1868 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1928 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI, simp add:co2sobj_linkhard) |
1869 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI, simp add:co2sobj_linkhard) |
1929 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1870 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1930 apply (tactic {*my_setiff_tac 1*}) |
1871 apply (tactic {*my_setiff_tac 1*}) |
1931 apply (rule_tac x = "O_file f" in exI) |
1872 apply (rule_tac x = "D_file f" in exI) |
1932 apply (frule_tac obj = "O_file f" in co2sobj_linkhard) |
1873 apply (frule_tac obj = "D_file f" in co2sobj_linkhard) |
1933 apply (simp add:alive_linkhard) |
1874 apply (simp add:dalive_linkhard) |
1934 apply (simp add:alive_linkhard same_inode_files_prop9 split:t_object.splits) |
1875 apply (simp add:dalive_linkhard same_inode_files_prop9 split:t_dobject.splits) |
1935 apply (tactic {*my_setiff_tac 1*}) |
1876 apply (tactic {*my_setiff_tac 1*}) |
1936 apply (case_tac "obj = O_file f'", simp add:alive_linkhard is_file_in_current) |
1877 apply (case_tac "obj = D_file f'", simp add:dalive_linkhard is_file_in_current) |
1937 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1878 apply (case_tac obj) |
1938 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard alive_linkhard) |
1879 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard dalive_linkhard) |
1939 apply (case_tac "fa \<in> same_inode_files s f") |
1880 apply (case_tac "list \<in> same_inode_files s f") |
1940 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1881 apply (simp add:co2sobj.simps cf2sfiles_prop same_inodes_tainted) |
1941 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard alive_linkhard) |
1882 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard dalive_linkhard) |
1942 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard alive_linkhard) |
1883 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard dalive_linkhard) |
1943 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard alive_linkhard) |
1884 apply (rule_tac x = obj in exI, simp add:co2sobj_linkhard dalive_linkhard) |
1944 done |
1885 done |
1945 |
1886 |
1946 lemma same_inode_files_prop12: |
1887 lemma same_inode_files_prop12: |
1947 "is_file s f \<Longrightarrow> f \<in> same_inode_files s f " |
1888 "is_file s f \<Longrightarrow> f \<in> same_inode_files s f " |
1948 by (auto simp:is_file_def same_inode_files_def split:option.splits) |
1889 by (auto simp:is_file_def same_inode_files_def split:option.splits) |
1956 |
1897 |
1957 apply (simp add:update_s2ss_sfile_tainted_def) |
1898 apply (simp add:update_s2ss_sfile_tainted_def) |
1958 apply (rule conjI|rule impI|erule exE|erule conjE)+ |
1899 apply (rule conjI|rule impI|erule exE|erule conjE)+ |
1959 apply (simp add:s2ss_def) |
1900 apply (simp add:s2ss_def) |
1960 apply (tactic {*my_seteq_tac 1*}) |
1901 apply (tactic {*my_seteq_tac 1*}) |
1961 apply (case_tac "obj = O_file f") |
1902 apply (case_tac "obj = D_file f") |
1962 apply (rule disjI1, simp add:co2sobj.simps same_inode_files_prop12 cf2sfiles_other) |
1903 apply (rule disjI1, simp add:co2sobj.simps same_inode_files_prop12 cf2sfiles_other) |
1963 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1904 apply (case_tac obj) |
1964 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_truncate alive_simps) |
1905 apply (rule disjI2, simp, rule_tac x = obj in exI, simp add:co2sobj_truncate dalive_simps) |
1965 apply (case_tac "fa \<in> same_inode_files s f") |
1906 apply (case_tac "list \<in> same_inode_files s f") |
1966 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_prop cf2sfiles_other) |
1907 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_prop cf2sfiles_other) |
1967 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1908 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1968 apply (simp add:co2sobj_truncate is_file_simps) |
1909 apply (simp add:co2sobj_truncate is_file_simps) |
1969 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1910 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1970 apply (simp add:co2sobj_truncate is_dir_simps) |
1911 apply (simp add:co2sobj_truncate is_dir_simps) |
1971 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1912 apply (rule disjI2, simp, rule_tac x = obj in exI) |
1972 apply (simp add:co2sobj_truncate) |
1913 apply (simp add:co2sobj_truncate) |
1973 apply (tactic {*my_setiff_tac 1*}) |
1914 apply (tactic {*my_setiff_tac 1*}) |
1974 apply (rule_tac x = "O_file f" in exI) |
1915 apply (rule_tac x = "D_file f" in exI) |
1975 apply (simp add:co2sobj.simps is_file_simps cf2sfiles_other same_inode_files_prop12) |
1916 apply (simp add:co2sobj.simps is_file_simps cf2sfiles_other same_inode_files_prop12) |
1976 apply (tactic {*my_setiff_tac 1*}) |
1917 apply (tactic {*my_setiff_tac 1*}) |
1977 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1918 apply (case_tac obj) |
1978 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate) |
1919 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate) |
1979 apply (case_tac "fa \<in> same_inode_files s f") |
1920 apply (case_tac "list \<in> same_inode_files s f") |
1980 apply (rule_tac x = "O_file f'" in exI) |
1921 apply (rule_tac x = "D_file f'" in exI) |
1981 apply (auto simp:co2sobj_truncate is_file_simps is_dir_simps split:t_object.splits)[1] |
1922 apply (auto simp:co2sobj_truncate is_file_simps is_dir_simps split:t_dobject.splits)[1] |
1982 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1923 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1983 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate is_file_simps) |
1924 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate is_file_simps) |
1984 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate is_dir_simps) |
1925 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate is_dir_simps) |
1985 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate) |
1926 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate) |
1986 |
1927 |
1987 apply (rule conjI|rule impI|erule exE|erule conjE)+ |
1928 apply (rule conjI|rule impI|erule exE|erule conjE)+ |
1988 apply (simp add:s2ss_def) |
1929 apply (simp add:s2ss_def) |
1989 apply (tactic {*my_seteq_tac 1*}) |
1930 apply (tactic {*my_seteq_tac 1*}) |
1990 apply (case_tac "obj = O_file f") |
1931 apply (case_tac "obj = D_file f") |
1991 apply (rule disjI1, simp add:co2sobj.simps same_inode_files_prop12 cf2sfiles_other) |
1932 apply (rule disjI1, simp add:co2sobj.simps same_inode_files_prop12 cf2sfiles_other) |
1992 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1933 apply (case_tac obj) |
1993 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI, simp add:co2sobj_truncate alive_simps) |
1934 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI, simp add:co2sobj_truncate dalive_simps) |
1994 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1935 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1995 apply (case_tac "fa \<in> same_inode_files s f") |
1936 apply (case_tac "list \<in> same_inode_files s f") |
1996 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_prop cf2sfiles_other) |
1937 apply (rule disjI1, simp add:co2sobj.simps cf2sfiles_prop cf2sfiles_other) |
1997 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
1938 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
1998 apply (simp add:co2sobj_truncate is_file_simps) |
1939 apply (simp add:co2sobj_truncate is_file_simps) |
1999 apply (rule notI, simp add:co2sobj_truncate is_file_simps) |
1940 apply (rule notI, simp add:co2sobj_truncate is_file_simps) |
2000 apply (erule_tac x = fa in allE) |
1941 apply (erule_tac x = list in allE) |
2001 apply (simp add:co2sobj.simps) |
1942 apply (simp add:co2sobj.simps) |
2002 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
1943 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
2003 apply (simp add:co2sobj_truncate is_dir_simps) |
1944 apply (simp add:co2sobj_truncate is_dir_simps) |
2004 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1945 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
2005 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
1946 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
2006 apply (simp add:co2sobj_truncate) |
1947 apply (simp add:co2sobj_truncate) |
2007 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
1948 apply (rule notI, simp add:co2sobj.simps split:option.splits) |
2008 apply (tactic {*my_setiff_tac 1*}) |
1949 apply (tactic {*my_setiff_tac 1*}) |
2009 apply (rule_tac x = "O_file f" in exI) |
1950 apply (rule_tac x = "D_file f" in exI) |
2010 apply (simp add:co2sobj.simps is_file_simps cf2sfiles_other same_inode_files_prop12) |
1951 apply (simp add:co2sobj.simps is_file_simps cf2sfiles_other same_inode_files_prop12) |
2011 apply (tactic {*my_setiff_tac 1*}) |
1952 apply (tactic {*my_setiff_tac 1*}) |
2012 apply (erule_tac obj = obj in co2sobj_some_caseD) |
1953 apply (case_tac obj) |
2013 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate) |
1954 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate) |
2014 apply (case_tac "fa \<in> same_inode_files s f") |
1955 apply (case_tac "list \<in> same_inode_files s f") |
2015 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
1956 apply (simp add:co2sobj.simps same_inodes_tainted cf2sfiles_prop) |
2016 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate is_file_simps) |
1957 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate is_file_simps) |
2017 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate is_dir_simps) |
1958 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate is_dir_simps) |
2018 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate) |
1959 apply (rule_tac x = obj in exI, simp add:co2sobj_truncate) |
2019 |
1960 |
2020 apply (rule impI, simp add:s2ss_def) |
1961 apply (rule impI, simp add:s2ss_def) |
2021 apply (tactic {*my_seteq_tac 1*}) |
1962 apply (tactic {*my_seteq_tac 1*}) |
2022 apply (rule_tac x = obj in exI) |
1963 apply (rule_tac x = obj in exI) |
2023 apply (simp add:alive_simps co2sobj_truncate) |
1964 apply (simp add:dalive_simps co2sobj_truncate) |
2024 apply (simp split:t_object.splits if_splits add:co2sobj.simps) |
1965 apply (simp split:t_dobject.splits if_splits add:co2sobj.simps) |
2025 apply (case_tac "O_proc p \<in> tainted s", simp add:same_inodes_tainted) |
1966 apply (case_tac "O_proc p \<in> tainted s", simp add:same_inodes_tainted) |
2026 apply simp |
1967 apply simp |
2027 apply (tactic {*my_setiff_tac 1*}) |
1968 apply (tactic {*my_setiff_tac 1*}) |
2028 apply (rule_tac x = obj in exI) |
1969 apply (rule_tac x = obj in exI) |
2029 apply (simp add:alive_simps co2sobj_truncate) |
1970 apply (simp add:dalive_simps co2sobj_truncate) |
2030 apply (auto split:t_object.splits if_splits simp:co2sobj.simps same_inodes_tainted) |
1971 apply (auto split:t_dobject.splits if_splits simp:co2sobj.simps same_inodes_tainted) |
2031 done |
1972 done |
2032 |
1973 |
2033 lemma s2ss_createmsgq: "valid (CreateMsgq p q # s) \<Longrightarrow> s2ss (CreateMsgq p q # s) = |
1974 lemma s2ss_createmsgq: "valid (CreateMsgq p q # s) \<Longrightarrow> s2ss (CreateMsgq p q # s) = |
2034 (case (cq2smsgq (CreateMsgq p q # s) q) of |
1975 (case (cq2smsgq (CreateMsgq p q # s) q) of |
2035 Some sq \<Rightarrow> s2ss s \<union> {S_msgq sq} |
1976 Some sq \<Rightarrow> s2ss s \<union> {S_msgq sq} |
2066 |
2005 |
2067 apply (simp add:update_s2ss_obj_def) |
2006 apply (simp add:update_s2ss_obj_def) |
2068 apply (tactic {*my_clarify_tac 1*}) |
2007 apply (tactic {*my_clarify_tac 1*}) |
2069 apply (simp add:s2ss_def) |
2008 apply (simp add:s2ss_def) |
2070 apply (tactic {*my_seteq_tac 1*}) |
2009 apply (tactic {*my_seteq_tac 1*}) |
2071 apply (case_tac "obj = O_msgq q") |
2010 apply (case_tac "obj = D_msgq q") |
2072 apply (rule disjI1, simp add:co2sobj.simps) |
2011 apply (rule disjI1, simp add:co2sobj.simps) |
2073 apply (rule disjI2, simp, rule_tac x = obj in exI) |
2012 apply (rule disjI2, simp, rule_tac x = obj in exI) |
2074 apply (simp add:co2sobj_sendmsg is_file_simps is_dir_simps split:t_object.splits if_splits) |
2013 apply (simp add:co2sobj_sendmsg is_file_simps is_dir_simps split:t_dobject.splits if_splits) |
2075 apply (simp add:co2sobj.simps) |
2014 apply (tactic {*my_setiff_tac 1*}) |
2076 apply (simp add:co2sobj.simps) |
2015 apply (rule_tac x = "D_msgq q" in exI, simp add:co2sobj.simps) |
2077 apply (simp add:co2sobj.simps) |
2016 apply (tactic {*my_setiff_tac 1*}) |
2078 apply (tactic {*my_setiff_tac 1*}) |
2017 apply (case_tac "obj = D_msgq q") |
2079 apply (rule_tac x = "O_msgq q" in exI, simp add:co2sobj.simps) |
|
2080 apply (tactic {*my_setiff_tac 1*}) |
|
2081 apply (case_tac "obj = O_msgq q") |
|
2082 apply (rule_tac x = obj' in exI) |
2018 apply (rule_tac x = obj' in exI) |
2083 apply (simp add:co2sobj_sendmsg alive_sendmsg split:t_object.splits if_splits) |
2019 apply (simp add:co2sobj_sendmsg dalive_sendmsg split:t_dobject.splits if_splits) |
2084 apply (auto simp:co2sobj.simps)[1] |
2020 apply (auto simp:co2sobj.simps)[1] |
2085 apply (rule_tac x = obj in exI, simp add:co2sobj_sendmsg alive_sendmsg split:t_object.splits) |
2021 apply (rule_tac x = obj in exI, simp add:co2sobj_sendmsg dalive_sendmsg split:t_dobject.splits) |
2086 apply (auto simp:co2sobj.simps)[1] |
2022 apply (auto simp:co2sobj.simps)[1] |
2087 |
2023 |
2088 apply (rule impI) |
2024 apply (rule impI) |
2089 apply (simp add:s2ss_def) |
2025 apply (simp add:s2ss_def) |
2090 apply (tactic {*my_seteq_tac 1*}) |
2026 apply (tactic {*my_seteq_tac 1*}) |
2091 apply (case_tac "obj = O_msgq q") |
2027 apply (case_tac "obj = D_msgq q") |
2092 apply (rule disjI1, simp add:co2sobj.simps) |
2028 apply (rule disjI1, simp add:co2sobj.simps) |
2093 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
2029 apply (rule disjI2, simp, rule conjI, rule_tac x = obj in exI) |
2094 apply (simp add:co2sobj_sendmsg is_file_simps is_dir_simps split:t_object.splits if_splits) |
2030 apply (simp add:co2sobj_sendmsg is_file_simps is_dir_simps split:t_dobject.splits if_splits) |
2095 apply (simp add:co2sobj.simps) |
|
2096 apply (simp add:co2sobj.simps) |
|
2097 apply (simp add:co2sobj.simps) |
|
2098 apply (rule notI, simp) |
2031 apply (rule notI, simp) |
2099 apply (frule_tac obj = obj in co2sobj_smsgq_imp, erule exE, simp) |
2032 apply (frule_tac obj = obj in co2sobj_smsgq_imp, erule exE, simp) |
2100 apply (erule_tac x = obj in allE, simp add:co2sobj_sendmsg) |
2033 apply (erule_tac x = obj in allE, simp add:co2sobj_sendmsg) |
2101 apply (tactic {*my_setiff_tac 1*}) |
2034 apply (tactic {*my_setiff_tac 1*}) |
2102 apply (rule_tac x = "O_msgq q" in exI, simp add:co2sobj.simps) |
2035 apply (rule_tac x = "D_msgq q" in exI, simp add:co2sobj.simps) |
2103 apply (tactic {*my_setiff_tac 1*}) |
2036 apply (tactic {*my_setiff_tac 1*}) |
2104 apply (case_tac "obj = O_msgq q") |
2037 apply (case_tac "obj = D_msgq q") |
2105 apply (simp add:co2sobj.simps) |
2038 apply (simp add:co2sobj.simps) |
2106 apply (rule_tac x = obj in exI, simp add:co2sobj_sendmsg alive_sendmsg split:t_object.splits) |
2039 apply (rule_tac x = obj in exI, simp add:co2sobj_sendmsg dalive_sendmsg split:t_dobject.splits) |
2107 apply (auto simp:co2sobj.simps)[1] |
2040 apply (auto simp:co2sobj.simps)[1] |
2108 done |
2041 done |
2109 |
2042 |
2110 lemma alive_co2sobj_removemsgq: |
2043 lemma dalive_co2sobj_removemsgq: |
2111 "\<lbrakk>alive s obj; valid (RemoveMsgq p q # s); co2sobj s obj = Some sobj; obj \<noteq> O_msgq q\<rbrakk> |
2044 "\<lbrakk>dalive s obj; valid (RemoveMsgq p q # s); obj \<noteq> D_msgq q\<rbrakk> |
2112 \<Longrightarrow> alive (RemoveMsgq p q # s) obj" |
2045 \<Longrightarrow> dalive (RemoveMsgq p q # s) obj" |
2113 apply (erule co2sobj_some_caseD) |
2046 apply (case_tac obj) |
2114 apply (auto simp:is_file_simps is_dir_simps) |
2047 apply (auto simp:is_file_simps is_dir_simps) |
2115 done |
2048 done |
2116 |
2049 |
2117 lemma s2ss_removemsgq: "valid (RemoveMsgq p q # s) \<Longrightarrow> s2ss (RemoveMsgq p q # s) = |
2050 lemma s2ss_removemsgq: "valid (RemoveMsgq p q # s) \<Longrightarrow> s2ss (RemoveMsgq p q # s) = |
2118 (case (cq2smsgq s q) of |
2051 (case (cq2smsgq s q) of |
2119 Some sq \<Rightarrow> del_s2ss_obj s (s2ss s) (O_msgq q) (S_msgq sq) |
2052 Some sq \<Rightarrow> del_s2ss_obj s (s2ss s) (D_msgq q) (S_msgq sq) |
2120 | _ \<Rightarrow> {})" |
2053 | _ \<Rightarrow> {})" |
2121 apply (frule vd_cons, frule vt_grant_os, clarsimp) |
2054 apply (frule vd_cons, frule vt_grant_os, clarsimp) |
2122 apply (split option.splits, rule conjI, rule impI) |
2055 apply (split option.splits, rule conjI, rule impI) |
2123 apply (drule current_has_smsgq', simp, simp) |
2056 apply (drule current_has_smsgq', simp, simp) |
2124 apply (rule allI, rule impI) |
2057 apply (rule allI, rule impI) |
2125 |
2058 |
2126 apply (simp add:del_s2ss_obj_def) |
2059 apply (simp add:del_s2ss_obj_def) |
2127 apply (tactic {*my_clarify_tac 1*}) |
2060 apply (tactic {*my_clarify_tac 1*}) |
2128 apply (simp add:s2ss_def) |
2061 apply (simp add:s2ss_def) |
2129 apply (tactic {*my_seteq_tac 1*}) |
2062 apply (tactic {*my_seteq_tac 1*}) |
2130 apply (case_tac "obj = O_msgq q", simp) |
2063 apply (case_tac "obj = D_msgq q", simp) |
2131 apply (rule_tac x = obj in exI) |
2064 apply (rule_tac x = obj in exI) |
2132 apply (simp add:co2sobj_removemsgq alive_simps split:t_object.splits if_splits) |
2065 apply (simp add:co2sobj_removemsgq dalive_simps split:t_dobject.splits if_splits) |
2133 apply (tactic {*my_setiff_tac 1*}) |
2066 apply (tactic {*my_setiff_tac 1*}) |
2134 apply (case_tac "obj = O_msgq q", simp) |
2067 apply (case_tac "obj = D_msgq q", simp) |
2135 apply (rule_tac x = obj' in exI) |
2068 apply (rule_tac x = obj' in exI) |
2136 apply (frule_tac obj = obj' in co2sobj_smsgq_imp, erule exE) |
2069 apply (frule_tac obj = obj' in co2sobj_smsgq_imp, erule exE) |
2137 apply (simp add:co2sobj_removemsgq alive_simps split:t_object.splits if_splits) |
2070 apply (simp add:co2sobj_removemsgq dalive_simps split:t_dobject.splits if_splits) |
2138 apply (simp add:co2sobj.simps) |
2071 apply (simp add:co2sobj.simps) |
2139 apply (rule_tac x = obj in exI) |
2072 apply (rule_tac x = obj in exI) |
2140 apply (simp add:co2sobj_removemsgq alive_co2sobj_removemsgq) |
2073 apply (simp add:co2sobj_removemsgq dalive_co2sobj_removemsgq) |
2141 |
2074 |
2142 apply (rule impI) |
2075 apply (rule impI) |
2143 apply (simp add:s2ss_def) |
2076 apply (simp add:s2ss_def) |
2144 apply (tactic {*my_seteq_tac 1*}) |
2077 apply (tactic {*my_seteq_tac 1*}) |
2145 apply (case_tac "obj = O_msgq q", simp) |
2078 apply (case_tac "obj = D_msgq q", simp) |
2146 apply (simp, rule conjI, rule_tac x = obj in exI) |
2079 apply (simp, rule conjI, rule_tac x = obj in exI) |
2147 apply (simp add:co2sobj_removemsgq alive_simps split:t_object.splits if_splits) |
2080 apply (simp add:co2sobj_removemsgq dalive_simps split:t_dobject.splits if_splits) |
2148 apply (rule notI, simp, frule_tac obj = obj in co2sobj_smsgq_imp, erule exE) |
2081 apply (rule notI, simp, frule_tac obj = obj in co2sobj_smsgq_imp, erule exE) |
2149 apply (erule_tac x = obj in allE, simp add:co2sobj_removemsgq alive_co2sobj_removemsgq) |
2082 apply (erule_tac x = obj in allE, simp add:co2sobj_removemsgq dalive_co2sobj_removemsgq) |
2150 apply (tactic {*my_setiff_tac 1*}) |
2083 apply (tactic {*my_setiff_tac 1*}) |
2151 apply (case_tac "obj = O_msgq q", simp) |
2084 apply (case_tac "obj = D_msgq q", simp) |
2152 apply (simp add:co2sobj.simps) |
2085 apply (simp add:co2sobj.simps) |
2153 apply (rule_tac x = obj in exI) |
2086 apply (rule_tac x = obj in exI) |
2154 apply (simp add:co2sobj_removemsgq alive_co2sobj_removemsgq) |
2087 apply (simp add:co2sobj_removemsgq dalive_co2sobj_removemsgq) |
2155 done |
2088 done |
2156 |
2089 |
2157 declare Product_Type.split_paired_Ex Product_Type.split_paired_All [simp del] |
2090 declare Product_Type.split_paired_Ex Product_Type.split_paired_All [simp del] |
2158 |
2091 |
2159 lemma s2ss_recvmsg: "valid (RecvMsg p q m # s) \<Longrightarrow> s2ss (RecvMsg p q m # s) = ( |
2092 lemma s2ss_recvmsg: "valid (RecvMsg p q m # s) \<Longrightarrow> s2ss (RecvMsg p q m # s) = ( |
2160 case (cq2smsgq s q, cq2smsgq (RecvMsg p q m # s) q, cp2sproc s p) of |
2093 case (cq2smsgq s q, cq2smsgq (RecvMsg p q m # s) q, cp2sproc s p) of |
2161 (Some sq, Some sq', Some sp) \<Rightarrow> if (O_msg q m \<in> tainted s \<and> O_proc p \<notin> tainted s) |
2094 (Some sq, Some sq', Some sp) \<Rightarrow> if (O_msg q m \<in> tainted s \<and> O_proc p \<notin> tainted s) |
2162 then update_s2ss_obj s (update_s2ss_obj s (s2ss s) |
2095 then update_s2ss_obj s (update_s2ss_obj s (s2ss s) |
2163 (O_proc p) (S_proc sp False) (S_proc sp True)) |
2096 (D_proc p) (S_proc sp False) (S_proc sp True)) |
2164 (O_msgq q) (S_msgq sq) (S_msgq sq') |
2097 (D_msgq q) (S_msgq sq) (S_msgq sq') |
2165 else update_s2ss_obj s (s2ss s) (O_msgq q) (S_msgq sq) (S_msgq sq') |
2098 else update_s2ss_obj s (s2ss s) (D_msgq q) (S_msgq sq) (S_msgq sq') |
2166 | _ \<Rightarrow> {})" |
2099 | _ \<Rightarrow> {})" |
2167 apply (frule vt_grant_os, frule vd_cons) |
2100 apply (frule vt_grant_os, frule vd_cons) |
2168 apply (case_tac "cq2smsgq s q") |
2101 apply (case_tac "cq2smsgq s q") |
2169 apply (drule current_has_smsgq', simp, simp) |
2102 apply (drule current_has_smsgq', simp, simp) |
2170 apply (case_tac "cq2smsgq (RecvMsg p q m # s) q") |
2103 apply (case_tac "cq2smsgq (RecvMsg p q m # s) q") |
2176 apply (simp add:update_s2ss_obj_def) |
2109 apply (simp add:update_s2ss_obj_def) |
2177 |
2110 |
2178 apply (tactic {*my_clarify_tac 1*}) |
2111 apply (tactic {*my_clarify_tac 1*}) |
2179 apply (simp add:s2ss_def) |
2112 apply (simp add:s2ss_def) |
2180 apply (tactic {*my_seteq_tac 1*}) |
2113 apply (tactic {*my_seteq_tac 1*}) |
2181 apply (case_tac "obj = O_msgq q") |
2114 apply (case_tac "obj = D_msgq q") |
2182 apply (rule disjI1, simp add:co2sobj.simps) |
2115 apply (rule disjI1, simp add:co2sobj.simps) |
2183 apply (case_tac "obj = O_proc p") |
2116 apply (case_tac "obj = D_proc p") |
2184 apply (rule disjI2, rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
2117 apply (rule disjI2, rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
2185 apply (rule disjI2, rule disjI2, simp) |
2118 apply (rule disjI2, rule disjI2, simp) |
2186 apply (rule_tac x = obj in exI) |
2119 apply (rule_tac x = obj in exI) |
2187 apply (simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits) |
2120 apply (simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits) |
2188 apply (tactic {*my_setiff_tac 1*}) |
2121 apply (tactic {*my_setiff_tac 1*}) |
2189 apply (rule_tac x = "O_msgq q" in exI, simp add:co2sobj.simps) |
2122 apply (rule_tac x = "D_msgq q" in exI, simp add:co2sobj.simps) |
2190 apply (tactic {*my_setiff_tac 1*}) |
2123 apply (tactic {*my_setiff_tac 1*}) |
2191 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
2124 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
2192 apply (tactic {*my_setiff_tac 1*}) |
2125 apply (tactic {*my_setiff_tac 1*}) |
2193 apply (case_tac "obj = O_msgq q") |
2126 apply (case_tac "obj = D_msgq q") |
2194 apply (frule co2sobj_smsgq_imp, erule exE) |
2127 apply (frule co2sobj_smsgq_imp, erule exE) |
2195 apply (rule_tac x = "O_msgq qa" in exI, simp add:alive_recvmsg co2sobj_recvmsg) |
2128 apply (rule_tac x = "D_msgq qa" in exI, simp add:dalive_recvmsg co2sobj_recvmsg) |
2196 apply (simp add:co2sobj.simps) |
2129 apply (simp add:co2sobj.simps) |
2197 apply (case_tac "obj = O_proc p") |
2130 apply (case_tac "obj = D_proc p") |
2198 apply (frule co2sobj_sproc_imp, erule exE) |
2131 apply (frule co2sobj_sproc_imp, erule exE) |
2199 apply (rule_tac x = "O_proc pa" in exI, simp add:alive_recvmsg co2sobj_recvmsg) |
2132 apply (rule_tac x = "D_proc pa" in exI, simp add:dalive_recvmsg co2sobj_recvmsg) |
2200 apply (simp add:co2sobj.simps) |
2133 apply (simp add:co2sobj.simps) |
2201 apply (rule_tac x = obj in exI) |
2134 apply (rule_tac x = obj in exI) |
2202 apply (auto simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits)[1] |
2135 apply (auto simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits)[1] |
2203 apply (simp add:co2sobj.simps) |
|
2204 |
2136 |
2205 apply (tactic {*my_clarify_tac 1*}) |
2137 apply (tactic {*my_clarify_tac 1*}) |
2206 apply (simp add:s2ss_def) |
2138 apply (simp add:s2ss_def) |
2207 apply (tactic {*my_seteq_tac 1*}) |
2139 apply (tactic {*my_seteq_tac 1*}) |
2208 apply (case_tac "obj = O_msgq q") |
2140 apply (case_tac "obj = D_msgq q") |
2209 apply (rule disjI1, simp add:co2sobj.simps) |
2141 apply (rule disjI1, simp add:co2sobj.simps) |
2210 apply (case_tac "obj = O_proc p") |
2142 apply (case_tac "obj = D_proc p") |
2211 apply (rule disjI2, simp add:co2sobj.simps cp2sproc_other) |
2143 apply (rule disjI2, simp add:co2sobj.simps cp2sproc_other) |
2212 apply (rule notI, simp) |
2144 apply (rule notI, simp) |
2213 apply (rule disjI2, simp, rule conjI, rule disjI2) |
2145 apply (rule disjI2, simp, rule conjI, rule disjI2) |
2214 apply (rule_tac x = obj in exI) |
2146 apply (rule_tac x = obj in exI) |
2215 apply (simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits) |
2147 apply (simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits) |
2216 apply (rule notI, simp) |
2148 apply (rule notI, simp) |
2217 apply (frule co2sobj_smsgq_imp, erule exE) |
2149 apply (frule co2sobj_smsgq_imp, erule exE) |
2218 apply (erule_tac x = "O_msgq qa" in allE, simp add:alive_recvmsg co2sobj_recvmsg split:if_splits) |
2150 apply (erule_tac x = "D_msgq qa" in allE, simp add:dalive_recvmsg co2sobj_recvmsg split:if_splits) |
2219 apply (tactic {*my_setiff_tac 1*}) |
2151 apply (tactic {*my_setiff_tac 1*}) |
2220 apply (rule_tac x = "O_msgq q" in exI, simp add:co2sobj.simps) |
2152 apply (rule_tac x = "D_msgq q" in exI, simp add:co2sobj.simps) |
2221 apply (tactic {*my_setiff_tac 1*}, simp, erule disjE) |
2153 apply (tactic {*my_setiff_tac 1*}, simp, erule disjE) |
2222 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
2154 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
2223 apply (erule exE, erule conjE) |
2155 apply (erule exE, erule conjE) |
2224 apply (case_tac "obj = O_msgq q", simp add:co2sobj.simps) |
2156 apply (case_tac "obj = D_msgq q", simp add:co2sobj.simps) |
2225 apply (case_tac "obj = O_proc p") |
2157 apply (case_tac "obj = D_proc p") |
2226 apply (frule_tac co2sobj_sproc_imp, erule exE) |
2158 apply (frule_tac co2sobj_sproc_imp, erule exE) |
2227 apply (rule_tac x = "O_proc pa" in exI, simp add:alive_recvmsg co2sobj_recvmsg) |
2159 apply (rule_tac x = "D_proc pa" in exI, simp add:dalive_recvmsg co2sobj_recvmsg) |
2228 apply (simp add:co2sobj.simps) |
2160 apply (simp add:co2sobj.simps) |
2229 apply (rule_tac x = obj in exI) |
2161 apply (rule_tac x = obj in exI) |
2230 apply (auto simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits)[1] |
2162 apply (auto simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits)[1] |
2231 apply (simp add:co2sobj.simps) |
|
2232 |
2163 |
2233 apply (tactic {*my_clarify_tac 1*}) |
2164 apply (tactic {*my_clarify_tac 1*}) |
2234 apply (simp add:s2ss_def) |
2165 apply (simp add:s2ss_def) |
2235 apply (tactic {*my_seteq_tac 1*}) |
2166 apply (tactic {*my_seteq_tac 1*}) |
2236 apply (case_tac "obj = O_msgq q") |
2167 apply (case_tac "obj = D_msgq q") |
2237 apply (rule disjI1, simp add:co2sobj.simps) |
2168 apply (rule disjI1, simp add:co2sobj.simps) |
2238 apply (case_tac "obj = O_proc p") |
2169 apply (case_tac "obj = D_proc p") |
2239 apply (rule disjI2, rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
2170 apply (rule disjI2, rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
2240 apply (rule disjI2, rule disjI2, simp, rule conjI) |
2171 apply (rule disjI2, rule disjI2, simp, rule conjI) |
2241 apply (rule_tac x = obj in exI) |
2172 apply (rule_tac x = obj in exI) |
2242 apply (simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits) |
2173 apply (simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits) |
2243 apply (rule notI, simp) |
2174 apply (rule notI, simp) |
2244 apply (frule co2sobj_sproc_imp, erule exE) |
2175 apply (frule co2sobj_sproc_imp, erule exE) |
2245 apply (erule_tac x = "O_proc pa" in allE, simp add:co2sobj_recvmsg split:t_object.splits) |
2176 apply (erule_tac x = "D_proc pa" in allE, simp add:co2sobj_recvmsg split:t_dobject.splits) |
2246 apply (tactic {*my_setiff_tac 1*}) |
2177 apply (tactic {*my_setiff_tac 1*}) |
2247 apply (rule_tac x = "O_msgq q" in exI, simp add:co2sobj.simps) |
2178 apply (rule_tac x = "D_msgq q" in exI, simp add:co2sobj.simps) |
2248 apply (tactic {*my_setiff_tac 1*}) |
2179 apply (tactic {*my_setiff_tac 1*}) |
2249 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
2180 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
2250 apply (tactic {*my_setiff_tac 1*}) |
2181 apply (tactic {*my_setiff_tac 1*}) |
2251 apply (case_tac "obj = O_msgq q") |
2182 apply (case_tac "obj = D_msgq q") |
2252 apply (frule co2sobj_smsgq_imp, erule exE) |
2183 apply (frule co2sobj_smsgq_imp, erule exE) |
2253 apply (rule_tac x = "O_msgq qa" in exI, simp add:alive_recvmsg co2sobj_recvmsg) |
2184 apply (rule_tac x = "D_msgq qa" in exI, simp add:dalive_recvmsg co2sobj_recvmsg) |
2254 apply (simp add:co2sobj.simps) |
2185 apply (simp add:co2sobj.simps) |
2255 apply (case_tac "obj = O_proc p") |
2186 apply (case_tac "obj = D_proc p") |
2256 apply (simp add:co2sobj.simps) |
2187 apply (simp add:co2sobj.simps) |
2257 apply (rule_tac x = obj in exI) |
2188 apply (rule_tac x = obj in exI) |
2258 apply (auto simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits)[1] |
2189 apply (auto simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits)[1] |
2259 apply (simp add:co2sobj.simps) |
|
2260 |
2190 |
2261 apply (tactic {*my_clarify_tac 1*}) |
2191 apply (tactic {*my_clarify_tac 1*}) |
2262 apply (simp add:s2ss_def) |
2192 apply (simp add:s2ss_def) |
2263 apply (tactic {*my_seteq_tac 1*}) |
2193 apply (tactic {*my_seteq_tac 1*}) |
2264 apply (case_tac "obj = O_msgq q") |
2194 apply (case_tac "obj = D_msgq q") |
2265 apply (rule disjI1, simp add:co2sobj.simps) |
2195 apply (rule disjI1, simp add:co2sobj.simps) |
2266 apply (case_tac "obj = O_proc p") |
2196 apply (case_tac "obj = D_proc p") |
2267 apply (rule disjI2, simp, rule conjI) |
2197 apply (rule disjI2, simp, rule conjI) |
2268 apply (rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
2198 apply (rule disjI1, simp add:co2sobj.simps cp2sproc_other) |
2269 apply (rule notI, simp add:co2sobj.simps cp2sproc_other) |
2199 apply (rule notI, simp add:co2sobj.simps cp2sproc_other) |
2270 apply (rule disjI2, simp, rule conjI, rule disjI2, rule conjI) |
2200 apply (rule disjI2, simp, rule conjI, rule disjI2, rule conjI) |
2271 apply (rule_tac x = obj in exI) |
2201 apply (rule_tac x = obj in exI) |
2272 apply (simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits) |
2202 apply (simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits) |
2273 apply (rule notI, simp, frule co2sobj_sproc_imp, erule exE) |
2203 apply (rule notI, simp, frule co2sobj_sproc_imp, erule exE) |
2274 apply (erule_tac x = "O_proc pa" in allE, simp add:co2sobj_recvmsg) |
2204 apply (erule_tac x = "D_proc pa" in allE, simp add:co2sobj_recvmsg) |
2275 apply (rule notI, simp, frule co2sobj_smsgq_imp, erule exE) |
2205 apply (rule notI, simp, frule co2sobj_smsgq_imp, erule exE) |
2276 apply (rotate_tac 12, erule_tac x = "O_msgq qa" in allE, simp add:co2sobj_recvmsg) |
2206 apply (rotate_tac 12, erule_tac x = "D_msgq qa" in allE, simp add:co2sobj_recvmsg) |
2277 apply (tactic {*my_setiff_tac 1*}) |
2207 apply (tactic {*my_setiff_tac 1*}) |
2278 apply (rule_tac x = "O_msgq q" in exI, simp add:co2sobj.simps) |
2208 apply (rule_tac x = "D_msgq q" in exI, simp add:co2sobj.simps) |
2279 apply (tactic {*my_setiff_tac 1*}, simp) |
2209 apply (tactic {*my_setiff_tac 1*}, simp) |
2280 apply (tactic {*my_clarify_tac 1*}) |
2210 apply (tactic {*my_clarify_tac 1*}) |
2281 apply (rule_tac x = "O_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
2211 apply (rule_tac x = "D_proc p" in exI, simp add:co2sobj.simps cp2sproc_other) |
2282 apply (tactic {*my_clarify_tac 1*}) |
2212 apply (tactic {*my_clarify_tac 1*}) |
2283 apply (case_tac "obj = O_msgq q") |
2213 apply (case_tac "obj = D_msgq q") |
2284 apply (simp add:co2sobj.simps) |
2214 apply (simp add:co2sobj.simps) |
2285 apply (case_tac "obj = O_proc p") |
2215 apply (case_tac "obj = D_proc p") |
2286 apply (simp add:co2sobj.simps) |
2216 apply (simp add:co2sobj.simps) |
2287 apply (rule_tac x = obj in exI) |
2217 apply (rule_tac x = obj in exI) |
2288 apply (auto simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits)[1] |
2218 apply (auto simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits)[1] |
2289 apply (simp add:co2sobj.simps) |
|
2290 |
2219 |
2291 apply (simp add:update_s2ss_obj_def) |
2220 apply (simp add:update_s2ss_obj_def) |
2292 |
2221 |
2293 apply (tactic {*my_clarify_tac 1*}) |
2222 apply (tactic {*my_clarify_tac 1*}) |
2294 apply (simp add:s2ss_def) |
2223 apply (simp add:s2ss_def) |
2295 apply (tactic {*my_seteq_tac 1*}) |
2224 apply (tactic {*my_seteq_tac 1*}) |
2296 apply (case_tac "obj = O_msgq q") |
2225 apply (case_tac "obj = D_msgq q") |
2297 apply (rule disjI1, simp add:co2sobj.simps) |
2226 apply (rule disjI1, simp add:co2sobj.simps) |
2298 apply (rule disjI2, simp) |
2227 apply (rule disjI2, simp) |
2299 apply (rule_tac x = obj in exI) |
2228 apply (rule_tac x = obj in exI) |
2300 apply (simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits) |
2229 apply (simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits) |
2301 apply (simp add:co2sobj.simps) |
2230 apply (simp add:co2sobj.simps) |
2302 apply (tactic {*my_setiff_tac 1*}) |
2231 apply (tactic {*my_setiff_tac 1*}) |
2303 apply (rule_tac x = "O_msgq q" in exI, simp add:co2sobj.simps) |
2232 apply (rule_tac x = "D_msgq q" in exI, simp add:co2sobj.simps) |
2304 apply (tactic {*my_setiff_tac 1*}) |
2233 apply (tactic {*my_setiff_tac 1*}) |
2305 apply (case_tac "obj = O_msgq q") |
2234 apply (case_tac "obj = D_msgq q") |
2306 apply (frule co2sobj_smsgq_imp, erule exE) |
2235 apply (frule co2sobj_smsgq_imp, erule exE) |
2307 apply (rule_tac x = "O_msgq qa" in exI, simp add:alive_recvmsg co2sobj_recvmsg) |
2236 apply (rule_tac x = "D_msgq qa" in exI, simp add:dalive_recvmsg co2sobj_recvmsg) |
2308 apply (simp add:co2sobj.simps) |
2237 apply (simp add:co2sobj.simps) |
2309 apply (rule_tac x = obj in exI) |
2238 apply (rule_tac x = obj in exI) |
2310 apply (auto simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits)[1] |
2239 apply (auto simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits)[1] |
2311 apply (simp add:co2sobj.simps) |
|
2312 apply (simp add:co2sobj.simps) |
|
2313 apply (simp add:co2sobj.simps) |
2240 apply (simp add:co2sobj.simps) |
2314 |
2241 |
2315 apply (tactic {*my_clarify_tac 1*}) |
2242 apply (tactic {*my_clarify_tac 1*}) |
2316 apply (simp add:s2ss_def) |
2243 apply (simp add:s2ss_def) |
2317 apply (tactic {*my_seteq_tac 1*}) |
2244 apply (tactic {*my_seteq_tac 1*}) |
2318 apply (case_tac "obj = O_msgq q") |
2245 apply (case_tac "obj = D_msgq q") |
2319 apply (rule disjI1, simp add:co2sobj.simps) |
2246 apply (rule disjI1, simp add:co2sobj.simps) |
2320 apply (rule disjI2, simp, rule conjI) |
2247 apply (rule disjI2, simp, rule conjI) |
2321 apply (rule_tac x = obj in exI) |
2248 apply (rule_tac x = obj in exI) |
2322 apply (simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits) |
2249 apply (simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits) |
2323 apply (simp add:co2sobj.simps) |
2250 apply (simp add:co2sobj.simps) |
2324 apply (rule notI, simp) |
2251 apply (rule notI, simp) |
2325 apply (frule co2sobj_smsgq_imp, erule exE, erule_tac x = "O_msgq qa" in allE) |
2252 apply (frule co2sobj_smsgq_imp, erule exE, erule_tac x = "D_msgq qa" in allE) |
2326 apply (simp add:co2sobj_recvmsg) |
2253 apply (simp add:co2sobj_recvmsg) |
2327 apply (tactic {*my_setiff_tac 1*}) |
2254 apply (tactic {*my_setiff_tac 1*}) |
2328 apply (rule_tac x = "O_msgq q" in exI, simp add:co2sobj.simps) |
2255 apply (rule_tac x = "D_msgq q" in exI, simp add:co2sobj.simps) |
2329 apply (tactic {*my_setiff_tac 1*}) |
2256 apply (tactic {*my_setiff_tac 1*}) |
2330 apply (case_tac "obj = O_msgq q") |
2257 apply (case_tac "obj = D_msgq q") |
2331 apply (simp add:co2sobj.simps) |
2258 apply (simp add:co2sobj.simps) |
2332 apply (rule_tac x = obj in exI) |
2259 apply (rule_tac x = obj in exI) |
2333 apply (auto simp add:alive_recvmsg co2sobj_recvmsg split:t_object.splits if_splits)[1] |
2260 apply (auto simp add:dalive_recvmsg co2sobj_recvmsg split:t_dobject.splits if_splits)[1] |
2334 apply (simp add:co2sobj.simps) |
|
2335 apply (simp add:co2sobj.simps) |
|
2336 apply (simp add:co2sobj.simps) |
2261 apply (simp add:co2sobj.simps) |
2337 done |
2262 done |
2338 |
2263 |
2339 end |
2264 end |
2340 |
2265 |