425 proof (unfold wt_jvm_prog_def) |
425 proof (unfold wt_jvm_prog_def) |
426 |
426 |
427 assume wfprog: |
427 assume wfprog: |
428 "wf_prog (\<lambda>G C (sig,rT,mxs,mxl,b). wt_method G C (snd sig) rT mxs mxl b (Phi C sig)) G" |
428 "wf_prog (\<lambda>G C (sig,rT,mxs,mxl,b). wt_method G C (snd sig) rT mxs mxl b (Phi C sig)) G" |
429 |
429 |
430 thus ?thesis |
430 thus ?thesis (* DvO: braucht ewig :-( *) |
431 proof (simp add: wtl_jvm_prog_def wf_prog_def wf_cdecl_def wf_mdecl_def, auto) |
431 proof (simp add: wtl_jvm_prog_def wf_prog_def wf_cdecl_def wf_mdecl_def, auto) |
432 fix a aa ab b ac ba ad ae af bb |
432 fix a aa ab b ac ba ad ae af bb |
433 assume 1 : "\<forall>(C,sc,fs,ms)\<in>set G. |
433 assume 1 : "\<forall>(C,D,fs,ms)\<in>set G. |
434 Ball (set fs) (wf_fdecl G) \<and> |
434 Ball (set fs) (wf_fdecl G) \<and> unique fs \<and> |
435 unique fs \<and> |
|
436 (\<forall>(sig,rT,mb)\<in>set ms. wf_mhead G sig rT \<and> |
435 (\<forall>(sig,rT,mb)\<in>set ms. wf_mhead G sig rT \<and> |
437 (\<lambda>(mxs,mxl,b). wt_method G C (snd sig) rT mxs mxl b (Phi C sig)) mb) \<and> |
436 (\<lambda>(mxs,mxl,b). wt_method G C (snd sig) rT mxs mxl b (Phi C sig)) mb) \<and> |
438 unique ms \<and> |
437 unique ms \<and> |
439 (case sc of None => C = Object |
438 (C \<noteq> Object \<longrightarrow> |
440 | Some D => |
|
441 is_class G D \<and> |
439 is_class G D \<and> |
442 (D, C) \<notin> (subcls1 G)^* \<and> |
440 (D, C) \<notin> (subcls1 G)^* \<and> |
443 (\<forall>(sig,rT,b)\<in>set ms. |
441 (\<forall>(sig,rT,b)\<in>set ms. |
444 \<forall>D' rT' b'. method (G, D) sig = Some (D', rT', b') --> G\<turnstile>rT\<preceq>rT'))" |
442 \<forall>D' rT' b'. method (G, D) sig = Some (D', rT', b') --> G\<turnstile>rT\<preceq>rT'))" |
445 "(a, aa, ab, b) \<in> set G" |
443 "(a, aa, ab, b) \<in> set G" |
454 assume m: "\<forall>(sig,rT,mb)\<in>set b. wf_mhead G sig rT \<and> |
452 assume m: "\<forall>(sig,rT,mb)\<in>set b. wf_mhead G sig rT \<and> |
455 (\<lambda>(mxs,mxl,b). wt_method G a (snd sig) rT mxs mxl b (Phi a sig)) mb" |
453 (\<lambda>(mxs,mxl,b). wt_method G a (snd sig) rT mxs mxl b (Phi a sig)) mb" |
456 from m b |
454 from m b |
457 show ?thesis |
455 show ?thesis |
458 proof (rule bspec [elim_format], clarsimp) |
456 proof (rule bspec [elim_format], clarsimp) |
459 assume "wt_method G a ba ad ae af bb (Phi a (ac, ba))" |
457 assume "wt_method G a ba ad ae af bb (Phi a (ac, ba))" |
460 with wfprog uG ub b 1 |
458 with wfprog uG ub b 1 |
461 show ?thesis |
459 show ?thesis |
462 by - (rule wtl_method_complete [elim_format], assumption+, |
460 by - (rule wtl_method_complete [elim_format], assumption+, |
463 simp add: make_Cert_def unique_epsilon unique_epsilon') |
461 simp add: make_Cert_def unique_epsilon unique_epsilon') |
464 qed |
462 qed |
|
463 oops |
|
464 (* |
465 qed |
465 qed |
466 qed |
466 qed |
467 qed |
467 qed |
|
468 *) |
468 |
469 |
469 lemmas [simp] = split_paired_Ex |
470 lemmas [simp] = split_paired_Ex |
470 |
471 |
471 end |
472 end |