src/HOL/IOA/Solve.thy
changeset 62390 842917225d56
parent 60754 02924903a6fd
child 63167 0909deb8059b
equal deleted inserted replaced
62380:29800666e526 62390:842917225d56
   104     add: executions_def is_execution_fragment_def par_def starts_of_def
   104     add: executions_def is_execution_fragment_def par_def starts_of_def
   105     trans_of_def filter_oseq_def
   105     trans_of_def filter_oseq_def
   106     split add: option.split)
   106     split add: option.split)
   107   done
   107   done
   108 
   108 
   109 declare split_if [split del] if_weak_cong [cong del]
   109 declare if_split [split del] if_weak_cong [cong del]
   110 
   110 
   111 (*Composition of possibility-mappings *)
   111 (*Composition of possibility-mappings *)
   112 lemma fxg_is_weak_pmap_of_product_IOA: 
   112 lemma fxg_is_weak_pmap_of_product_IOA: 
   113      "[| is_weak_pmap f C1 A1;  
   113      "[| is_weak_pmap f C1 A1;  
   114          externals(asig_of(A1))=externals(asig_of(C1)); 
   114          externals(asig_of(A1))=externals(asig_of(C1)); 
   124   apply (rule allI)+
   124   apply (rule allI)+
   125   apply (rule imp_conj_lemma)
   125   apply (rule imp_conj_lemma)
   126   apply (simp (no_asm) add: externals_of_par_extra)
   126   apply (simp (no_asm) add: externals_of_par_extra)
   127   apply (simp (no_asm) add: par_def)
   127   apply (simp (no_asm) add: par_def)
   128   apply (simp add: trans_of_def)
   128   apply (simp add: trans_of_def)
   129   apply (simplesubst split_if)
   129   apply (simplesubst if_split)
   130   apply (rule conjI)
   130   apply (rule conjI)
   131   apply (rule impI)
   131   apply (rule impI)
   132   apply (erule disjE)
   132   apply (erule disjE)
   133 (* case 1      a:e(A1) | a:e(A2) *)
   133 (* case 1      a:e(A1) | a:e(A2) *)
   134   apply (simp add: comp1_reachable comp2_reachable ext_is_act)
   134   apply (simp add: comp1_reachable comp2_reachable ext_is_act)
   141   apply (rule impI)
   141   apply (rule impI)
   142   apply (subgoal_tac "a~:externals (asig_of (A1)) & a~:externals (asig_of (A2))")
   142   apply (subgoal_tac "a~:externals (asig_of (A1)) & a~:externals (asig_of (A2))")
   143 (* delete auxiliary subgoal *)
   143 (* delete auxiliary subgoal *)
   144   prefer 2
   144   prefer 2
   145   apply force
   145   apply force
   146   apply (simp (no_asm) add: conj_disj_distribR cong add: conj_cong split add: split_if)
   146   apply (simp (no_asm) add: conj_disj_distribR cong add: conj_cong split add: if_split)
   147   apply (tactic {*
   147   apply (tactic {*
   148     REPEAT((resolve_tac @{context} [conjI, impI] 1 ORELSE eresolve_tac @{context} [conjE] 1) THEN
   148     REPEAT((resolve_tac @{context} [conjI, impI] 1 ORELSE eresolve_tac @{context} [conjE] 1) THEN
   149       asm_full_simp_tac(@{context} addsimps [@{thm comp1_reachable}, @{thm comp2_reachable}]) 1) *})
   149       asm_full_simp_tac(@{context} addsimps [@{thm comp1_reachable}, @{thm comp2_reachable}]) 1) *})
   150   done
   150   done
   151 
   151 
   170   apply (rule allI)+
   170   apply (rule allI)+
   171   apply (rule imp_conj_lemma)
   171   apply (rule imp_conj_lemma)
   172   apply (simp (no_asm) add: rename_def)
   172   apply (simp (no_asm) add: rename_def)
   173   apply (simp add: externals_def asig_inputs_def asig_outputs_def asig_of_def trans_of_def)
   173   apply (simp add: externals_def asig_inputs_def asig_outputs_def asig_of_def trans_of_def)
   174   apply safe
   174   apply safe
   175   apply (simplesubst split_if)
   175   apply (simplesubst if_split)
   176   apply (rule conjI)
   176   apply (rule conjI)
   177   apply (rule impI)
   177   apply (rule impI)
   178   apply (erule disjE)
   178   apply (erule disjE)
   179   apply (erule exE)
   179   apply (erule exE)
   180   apply (erule conjE)
   180   apply (erule conjE)
   202   apply (erule conjE)
   202   apply (erule conjE)
   203   apply (cut_tac C = "C" and g = "g" and s = "s" in reachable_rename_ioa)
   203   apply (cut_tac C = "C" and g = "g" and s = "s" in reachable_rename_ioa)
   204   apply auto
   204   apply auto
   205   done
   205   done
   206 
   206 
   207 declare split_if [split] if_weak_cong [cong]
   207 declare if_split [split] if_weak_cong [cong]
   208 
   208 
   209 end
   209 end