diff -r 924ab7a4e7fa -r 271e9818b6f6 simple_selinux/New_obj_prop.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/simple_selinux/New_obj_prop.thy Mon Dec 02 10:52:40 2013 +0800 @@ -0,0 +1,86 @@ +theory New_obj_prop +imports Main Finite_current Flask_type Flask Static +begin + +context tainting_s begin + +lemma nn_notin_aux: "finite s \ \ a \ s. Max s \ a " +apply (erule finite.induct, simp) +apply (rule ballI) +apply (case_tac "aa = a", simp+) +done + +lemma nn_notin: "finite s \ next_nat s \ s" +apply (drule nn_notin_aux) +apply (simp add:next_nat_def) +by (auto) + + +(* lemmas of new created obj *) + +lemma np_notin_curp: "valid \ \ new_proc \ \ current_procs \" using finite_cp +by (simp add:new_proc_def nn_notin) + +lemma np_notin_curp': "\new_proc \ \ current_procs \; valid \\ \ False" +apply (drule np_notin_curp, simp) +done + +lemma ni_notin_curi: "valid \ \ new_inode_num \ \ current_inode_nums \" +apply (drule finite_ci) +by (simp add:new_inode_num_def nn_notin) + +lemma ni_notin_curi': "\new_inode_num \ \ current_inode_nums \; valid \\ \ False" +by (drule ni_notin_curi, simp) + +lemma nm_notin_curm: "valid \ \ new_msgq \ \ current_msgqs \" using finite_cm +by (simp add:new_msgq_def nn_notin) + +lemma nm_notin_curm': "\new_msgq \ \ current_msgqs \; valid \\ \ False" +by (drule nm_notin_curm, simp) + +lemma nfd_notin_curfd: "valid \ \ new_proc_fd \ p \ current_proc_fds \ p" +using finite_cfd[where p = p] +apply (simp add:new_proc_fd_def nn_notin) +done + +lemma nfd_notin_curfd': "\new_proc_fd \ p \ current_proc_fds \ p; valid \\ \ False" +by (drule nfd_notin_curfd[where p = p], simp) + +lemma nim_notin_curim: "valid \ \ new_inode_num \ \ current_inode_nums \" +by (drule finite_ci, simp add:new_inode_num_def nn_notin) + +lemma nim_notin_curim': "\new_inode_num \ \ current_inode_nums \; valid \\ \ False" +by (drule nim_notin_curim, simp) + +lemma len_fname_all: "length (fname_all_a len) = len" +by (induct len, auto simp:fname_all_a.simps) + +lemma ncf_notin_curf: "valid \ \ new_childf f \ \ current_files \" +apply (drule finite_cf) +apply (simp add:new_childf_def next_fname_def all_fname_under_dir_def) +apply (rule notI) +apply (subgoal_tac "(CHR ''a'' # fname_all_a (Max (fname_length_set {fn. fn # f \ current_files \}))) \ {fn. fn # f \ current_files \}") +defer apply simp +apply (subgoal_tac "length (CHR ''a'' # fname_all_a (Max (fname_length_set {fn. fn # f \ current_files \}))) \ fname_length_set {fn. fn # f \ current_files \}") +defer apply (auto simp:fname_length_set_def image_def)[1] +apply (subgoal_tac "finite (fname_length_set {fn. fn # f \ current_files \})") +defer +apply (simp add:fname_length_set_def) +apply (rule finite_imageI) +apply (drule_tac h = "\ f'. case f' of [] \ '''' | fn # pf' \ if (pf' = f) then fn else ''''" in finite_imageI) +apply (rule_tac B = "(list_case [] (\fn pf'. if pf' = f then fn else []) ` current_files \)" in finite_subset) +unfolding image_def +apply (clarsimp split:if_splits) +apply (rule_tac x = "x # f" in bexI, simp+) + +apply (drule_tac s = "(fname_length_set {fn. fn # f \ current_files \})" in nn_notin_aux) +apply (erule_tac x = "length (CHR ''a'' # fname_all_a (Max (fname_length_set {fn. fn # f \ current_files \})))" in ballE) +apply (simp add:len_fname_all, simp) +done + +lemma ncf_parent: "valid \ \ parent (new_childf f \) = Some f" +by (simp add:new_childf_def) + +end + +end