Current_files_prop.thy
changeset 7 f27882976251
parent 6 8779d321cc2e
child 9 87fdf2de0ffa
equal deleted inserted replaced
6:8779d321cc2e 7:f27882976251
   213         apply (auto simp:dir_is_empty_def current_files_def is_dir_def split:option.splits)
   213         apply (auto simp:dir_is_empty_def current_files_def is_dir_def split:option.splits)
   214         by (erule_tac x = f' in allE, simp add:noJ_Anc parent_is_ancen, drule parent_is_parent, simp+)
   214         by (erule_tac x = f' in allE, simp add:noJ_Anc parent_is_ancen, drule parent_is_parent, simp+)
   215 
   215 
   216       have "\<forall> f. f \<in> files_hung_by_del (a # \<tau>) \<longrightarrow> inum_of_file (a # \<tau>) f \<noteq> None"
   216       have "\<forall> f. f \<in> files_hung_by_del (a # \<tau>) \<longrightarrow> inum_of_file (a # \<tau>) f \<noteq> None"
   217         apply (clarify, case_tac a) using os fin
   217         apply (clarify, case_tac a) using os fin
   218         apply (auto simp:files_hung_by_del.simps inum_of_file.simps os_grant.simps current_files_def 
   218         apply (auto simp:files_hung_by_del.simps inum_of_file.simps os_grant.simps current_files_def is_file_def 
   219                    split:if_splits option.splits)
   219                    split:if_splits option.splits)
   220         done
   220         done
   221       moreover 
   221       moreover 
   222       have "\<forall>f pf im. parent f = Some pf \<and> inum_of_file (a # \<tau>) f = Some im \<longrightarrow> inum_of_file (a # \<tau>) pf \<noteq> None" 
   222       have "\<forall>f pf im. parent f = Some pf \<and> inum_of_file (a # \<tau>) f = Some im \<longrightarrow> inum_of_file (a # \<tau>) pf \<noteq> None" 
   223         apply (clarify, case_tac a)
   223         apply (clarify, case_tac a)
   224         using vt os pin'
   224         using vt os pin'
   225         apply (auto simp:os_grant.simps current_files_def inum_of_file.simps split:if_splits option.splits)
   225         apply (auto simp:os_grant.simps current_files_def inum_of_file.simps is_file_def is_dir_def 
       
   226                    split:if_splits option.splits t_inode_tag.splits)
   226         apply (drule_tac f = pf and f' = f in hns', simp, simp, simp)
   227         apply (drule_tac f = pf and f' = f in hns', simp, simp, simp)
   227         apply (drule_tac f = list and f' = f in fns', simp, simp, simp)
   228         apply (rule_tac f = list and f' = f in fns', simp add:is_file_def, simp, simp)
   228         apply (drule_tac f = list and f' = f in dns', simp, simp, simp)
   229         apply (rule_tac f = list and f' = f in dns', simp add:is_dir_def, simp, simp)
   229         done
   230         done
   230       moreover have "\<forall>f f' im. is_file (a # \<tau>) f \<and> parent f' = Some f \<and> inum_of_file (a # \<tau>) f' = Some im \<longrightarrow> False"
   231       moreover have "\<forall>f f' im. is_file (a # \<tau>) f \<and> parent f' = Some f \<and> inum_of_file (a # \<tau>) f' = Some im \<longrightarrow> False"
   231         apply (clarify, case_tac a)    
   232         apply (clarify, case_tac a)    
   232         using vt os fns''
   233         using vt os fns'' cons
   233         apply (auto simp:os_grant.simps current_files_def inum_of_file.simps itag_of_inum.simps 
   234         apply (auto simp:os_grant.simps current_files_def inum_of_file.simps itag_of_inum.simps 
   234                          is_file_def is_dir_def 
   235                          is_file_def is_dir_def 
   235                     dest:ios's_im_in_cim iof's_im_in_cim
   236                     dest:ios's_im_in_cim iof's_im_in_cim
   236                    split:if_splits option.splits t_inode_tag.splits t_socket_type.splits)
   237                    split:if_splits option.splits t_inode_tag.splits t_socket_type.splits) 
       
   238         apply (rule_tac im = a and f = f and f' = f' in fns'', simp+)
   237         apply (drule_tac f = f' and pf = list in pin', simp, simp)
   239         apply (drule_tac f = f' and pf = list in pin', simp, simp)
   238         apply (drule_tac f = f' and pf = list2 in pin', simp, simp)
   240         apply (drule_tac f = f' and pf = list2 in pin', simp, simp)
   239         done
   241         done
   240       moreover have "\<forall>f f' im. f \<in> files_hung_by_del (a # \<tau>) \<and> inum_of_file (a # \<tau>) f' = Some im \<and> 
   242       moreover have "\<forall>f f' im. f \<in> files_hung_by_del (a # \<tau>) \<and> inum_of_file (a # \<tau>) f' = Some im \<and> 
   241                                parent f' = Some f \<longrightarrow> False"
   243                                parent f' = Some f \<longrightarrow> False"
   368 
   370 
   369 lemma file_of_pfd_imp_inode_aux: "\<forall> p f. file_of_proc_fd \<tau> p fd = Some f \<and> valid \<tau> \<longrightarrow> inum_of_file \<tau> f \<noteq> None" 
   371 lemma file_of_pfd_imp_inode_aux: "\<forall> p f. file_of_proc_fd \<tau> p fd = Some f \<and> valid \<tau> \<longrightarrow> inum_of_file \<tau> f \<noteq> None" 
   370 apply (induct \<tau>)
   372 apply (induct \<tau>)
   371 apply (clarsimp simp add:file_of_proc_fd.simps inum_of_file.simps init_filefd_prop1 init_file_has_inum)
   373 apply (clarsimp simp add:file_of_proc_fd.simps inum_of_file.simps init_filefd_prop1 init_file_has_inum)
   372 apply ((rule_tac allI|rule_tac impI|erule_tac conjE)+, frule vd_cons, frule vt_grant_os, case_tac a)
   374 apply ((rule_tac allI|rule_tac impI|erule_tac conjE)+, frule vd_cons, frule vt_grant_os, case_tac a)
   373 apply (auto simp:inum_of_file.simps file_of_proc_fd.simps os_grant.simps current_files_def 
   375 apply (auto simp:inum_of_file.simps file_of_proc_fd.simps os_grant.simps current_files_def is_file_def
   374            split:if_splits option.splits)
   376            split:if_splits option.splits)
   375 apply (simp add:pfdof_simp3)+
   377 apply (simp add:pfdof_simp3)+
   376 apply (simp add:proc_fd_of_file_def)+  
   378 apply (simp add:proc_fd_of_file_def)+  
   377 done
   379 done
   378 
   380 
   494 by (auto simp:current_files_def inum_of_file.simps split:option.splits)
   496 by (auto simp:current_files_def inum_of_file.simps split:option.splits)
   495 
   497 
   496 lemma current_files_linkhard: 
   498 lemma current_files_linkhard: 
   497   "valid (LinkHard p f\<^isub>1 f\<^isub>2 # \<tau>) \<Longrightarrow> current_files (LinkHard p f\<^isub>1 f\<^isub>2 # \<tau>) = insert f\<^isub>2 (current_files \<tau>)"
   499   "valid (LinkHard p f\<^isub>1 f\<^isub>2 # \<tau>) \<Longrightarrow> current_files (LinkHard p f\<^isub>1 f\<^isub>2 # \<tau>) = insert f\<^isub>2 (current_files \<tau>)"
   498 apply (frule vt_grant_os, frule vd_cons)
   500 apply (frule vt_grant_os, frule vd_cons)
   499 by (auto simp:current_files_def inum_of_file.simps os_grant.simps split:option.splits)
   501 by (auto simp:current_files_def inum_of_file.simps os_grant.simps is_file_def split:option.splits)
   500 
   502 
   501 (*
   503 (*
   502 lemma rename_renaming_decom:
   504 lemma rename_renaming_decom:
   503   "\<lbrakk>f\<^isub>3 \<preceq> file_after_rename f\<^isub>2 f\<^isub>3 f; Rename p f\<^isub>2 f\<^isub>3 # valid \<tau>; f \<in> current_files \<tau>\<rbrakk> \<Longrightarrow> f\<^isub>2 \<preceq> f"
   505   "\<lbrakk>f\<^isub>3 \<preceq> file_after_rename f\<^isub>2 f\<^isub>3 f; Rename p f\<^isub>2 f\<^isub>3 # valid \<tau>; f \<in> current_files \<tau>\<rbrakk> \<Longrightarrow> f\<^isub>2 \<preceq> f"
   504 apply (case_tac "f\<^isub>2 \<preceq> f", simp)
   506 apply (case_tac "f\<^isub>2 \<preceq> f", simp)