2829 assumes carr: "a \<in> carrier G" "b \<in> carrier G" |
2829 assumes carr: "a \<in> carrier G" "b \<in> carrier G" |
2830 shows "\<exists>x\<in>carrier G. x = somegcd G a b" |
2830 shows "\<exists>x\<in>carrier G. x = somegcd G a b" |
2831 proof - |
2831 proof - |
2832 interpret weak_lower_semilattice "division_rel G" by simp |
2832 interpret weak_lower_semilattice "division_rel G" by simp |
2833 show ?thesis |
2833 show ?thesis |
2834 apply (simp add: somegcd_meet[OF carr]) |
2834 by (metis carr(1) carr(2) gcd_closed) |
2835 apply (rule meet_closed[simplified], fact+) |
|
2836 done |
|
2837 qed |
2835 qed |
2838 |
2836 |
2839 lemma (in gcd_condition_monoid) gcd_divides_l: |
2837 lemma (in gcd_condition_monoid) gcd_divides_l: |
2840 assumes carr: "a \<in> carrier G" "b \<in> carrier G" |
2838 assumes carr: "a \<in> carrier G" "b \<in> carrier G" |
2841 shows "(somegcd G a b) divides a" |
2839 shows "(somegcd G a b) divides a" |
2842 proof - |
2840 proof - |
2843 interpret weak_lower_semilattice "division_rel G" by simp |
2841 interpret weak_lower_semilattice "division_rel G" by simp |
2844 show ?thesis |
2842 show ?thesis |
2845 apply (simp add: somegcd_meet[OF carr]) |
2843 by (metis carr(1) carr(2) gcd_isgcd isgcd_def) |
2846 apply (rule meet_left[simplified], fact+) |
|
2847 done |
|
2848 qed |
2844 qed |
2849 |
2845 |
2850 lemma (in gcd_condition_monoid) gcd_divides_r: |
2846 lemma (in gcd_condition_monoid) gcd_divides_r: |
2851 assumes carr: "a \<in> carrier G" "b \<in> carrier G" |
2847 assumes carr: "a \<in> carrier G" "b \<in> carrier G" |
2852 shows "(somegcd G a b) divides b" |
2848 shows "(somegcd G a b) divides b" |
2853 proof - |
2849 proof - |
2854 interpret weak_lower_semilattice "division_rel G" by simp |
2850 interpret weak_lower_semilattice "division_rel G" by simp |
2855 show ?thesis |
2851 show ?thesis |
2856 apply (simp add: somegcd_meet[OF carr]) |
2852 by (metis carr gcd_isgcd isgcd_def) |
2857 apply (rule meet_right[simplified], fact+) |
|
2858 done |
|
2859 qed |
2853 qed |
2860 |
2854 |
2861 lemma (in gcd_condition_monoid) gcd_divides: |
2855 lemma (in gcd_condition_monoid) gcd_divides: |
2862 assumes sub: "z divides x" "z divides y" |
2856 assumes sub: "z divides x" "z divides y" |
2863 and L: "x \<in> carrier G" "y \<in> carrier G" "z \<in> carrier G" |
2857 and L: "x \<in> carrier G" "y \<in> carrier G" "z \<in> carrier G" |
2864 shows "z divides (somegcd G x y)" |
2858 shows "z divides (somegcd G x y)" |
2865 proof - |
2859 proof - |
2866 interpret weak_lower_semilattice "division_rel G" by simp |
2860 interpret weak_lower_semilattice "division_rel G" by simp |
2867 show ?thesis |
2861 show ?thesis |
2868 apply (simp add: somegcd_meet L) |
2862 by (metis gcd_isgcd isgcd_def assms) |
2869 apply (rule meet_le[simplified], fact+) |
|
2870 done |
|
2871 qed |
2863 qed |
2872 |
2864 |
2873 lemma (in gcd_condition_monoid) gcd_cong_l: |
2865 lemma (in gcd_condition_monoid) gcd_cong_l: |
2874 assumes xx': "x \<sim> x'" |
2866 assumes xx': "x \<sim> x'" |
2875 and carr: "x \<in> carrier G" "x' \<in> carrier G" "y \<in> carrier G" |
2867 and carr: "x \<in> carrier G" "x' \<in> carrier G" "y \<in> carrier G" |
3407 using setparts afs' |
3399 using setparts afs' |
3408 by (fast intro: nth_mem[OF len] elim: wfactorsE, simp+) |
3400 by (fast intro: nth_mem[OF len] elim: wfactorsE, simp+) |
3409 |
3401 |
3410 from aa2carr carr aa1fs aa2fs |
3402 from aa2carr carr aa1fs aa2fs |
3411 have "wfactors G (as'!i # drop (Suc i) as') (as'!i \<otimes> aa_2)" |
3403 have "wfactors G (as'!i # drop (Suc i) as') (as'!i \<otimes> aa_2)" |
3412 apply (intro wfactors_mult_single) |
3404 by (metis irrasi wfactors_mult_single) |
3413 apply (rule wfactorsE[OF afs'], fast intro: nth_mem[OF len]) |
|
3414 apply (fast intro: nth_mem[OF len]) |
|
3415 apply fast |
|
3416 apply fast |
|
3417 apply assumption |
|
3418 done |
|
3419 with len carr aa1carr aa2carr aa1fs |
3405 with len carr aa1carr aa2carr aa1fs |
3420 have v2: "wfactors G (take i as' @ as'!i # drop (Suc i) as') (aa_1 \<otimes> (as'!i \<otimes> aa_2))" |
3406 have v2: "wfactors G (take i as' @ as'!i # drop (Suc i) as') (aa_1 \<otimes> (as'!i \<otimes> aa_2))" |
3421 apply (intro wfactors_mult) |
3407 apply (intro wfactors_mult) |
3422 apply fast |
3408 apply fast |
3423 apply (simp, (fast intro: nth_mem[OF len])?)+ |
3409 apply (simp, (fast intro: nth_mem[OF len])?)+ |
3427 have as': "as' = (take i as' @ as'!i # drop (Suc i) as')" |
3413 have as': "as' = (take i as' @ as'!i # drop (Suc i) as')" |
3428 by (simp add: drop_Suc_conv_tl) |
3414 by (simp add: drop_Suc_conv_tl) |
3429 with carr |
3415 with carr |
3430 have eer: "essentially_equal G (take i as' @ as'!i # drop (Suc i) as') as'" |
3416 have eer: "essentially_equal G (take i as' @ as'!i # drop (Suc i) as') as'" |
3431 by simp |
3417 by simp |
3432 |
|
3433 with v2 afs' carr aa1carr aa2carr nth_mem[OF len] |
3418 with v2 afs' carr aa1carr aa2carr nth_mem[OF len] |
3434 have "aa_1 \<otimes> (as'!i \<otimes> aa_2) \<sim> a" |
3419 have "aa_1 \<otimes> (as'!i \<otimes> aa_2) \<sim> a" |
3435 apply (intro ee_wfactorsD[of "take i as' @ as'!i # drop (Suc i) as'" "as'"]) |
3420 by (metis as' ee_wfactorsD m_closed) |
3436 apply fast+ |
|
3437 apply (simp, fast) |
|
3438 done |
|
3439 then |
3421 then |
3440 have t1: "as'!i \<otimes> (aa_1 \<otimes> aa_2) \<sim> a" |
3422 have t1: "as'!i \<otimes> (aa_1 \<otimes> aa_2) \<sim> a" |
3441 apply (simp add: m_assoc[symmetric]) |
3423 by (metis aa1carr aa2carr asicarr m_lcomm) |
3442 apply (simp add: m_comm) |
|
3443 done |
|
3444 from carr asiah |
3424 from carr asiah |
3445 have "ah \<otimes> (aa_1 \<otimes> aa_2) \<sim> as'!i \<otimes> (aa_1 \<otimes> aa_2)" |
3425 have "ah \<otimes> (aa_1 \<otimes> aa_2) \<sim> as'!i \<otimes> (aa_1 \<otimes> aa_2)" |
3446 apply (intro mult_cong_l) |
3426 by (metis associated_sym m_closed mult_cong_l) |
3447 apply (fast intro: associated_sym, simp+) |
|
3448 done |
|
3449 also note t1 |
3427 also note t1 |
3450 finally |
3428 finally |
3451 have "ah \<otimes> (aa_1 \<otimes> aa_2) \<sim> a" by simp |
3429 have "ah \<otimes> (aa_1 \<otimes> aa_2) \<sim> a" by simp |
3452 |
3430 |
3453 with carr aa1carr aa2carr a'carr nth_mem[OF len] |
3431 with carr aa1carr aa2carr a'carr nth_mem[OF len] |
3528 have "\<exists>as. set as \<subseteq> carrier G \<and> wfactors G as a" by (intro wfactors_exist, simp) |
3506 have "\<exists>as. set as \<subseteq> carrier G \<and> wfactors G as a" by (intro wfactors_exist, simp) |
3529 from this obtain as |
3507 from this obtain as |
3530 where ascarr[simp]: "set as \<subseteq> carrier G" |
3508 where ascarr[simp]: "set as \<subseteq> carrier G" |
3531 and afs: "wfactors G as a" |
3509 and afs: "wfactors G as a" |
3532 by (auto simp del: carr) |
3510 by (auto simp del: carr) |
3533 |
|
3534 have "ALL as'. set as' \<subseteq> carrier G \<and> wfactors G as' a \<longrightarrow> length as = length as'" |
3511 have "ALL as'. set as' \<subseteq> carrier G \<and> wfactors G as' a \<longrightarrow> length as = length as'" |
3535 by (metis afs ascarr assms ee_length wfactors_unique) |
3512 by (metis afs ascarr assms ee_length wfactors_unique) |
3536 thus "EX c. ALL as'. set as' \<subseteq> carrier G \<and> wfactors G as' a \<longrightarrow> c = length as'" .. |
3513 thus "EX c. ALL as'. set as' \<subseteq> carrier G \<and> wfactors G as' a \<longrightarrow> c = length as'" .. |
3537 qed |
3514 qed |
3538 |
3515 |
3547 by auto |
3524 by auto |
3548 have ac: "ac = factorcount G a" |
3525 have ac: "ac = factorcount G a" |
3549 apply (simp add: factorcount_def) |
3526 apply (simp add: factorcount_def) |
3550 apply (rule theI2) |
3527 apply (rule theI2) |
3551 apply (rule alen) |
3528 apply (rule alen) |
3552 apply (elim allE[of _ "as"], rule allE[OF alen, of "as"], simp add: ascarr afs) |
3529 apply (metis afs alen ascarr)+ |
3553 apply (elim allE[of _ "as"], rule allE[OF alen, of "as"], simp add: ascarr afs) |
|
3554 done |
3530 done |
3555 |
3531 |
3556 from ascarr afs have "ac = length as" by (iprover intro: alen[rule_format]) |
3532 from ascarr afs have "ac = length as" by (iprover intro: alen[rule_format]) |
3557 with ac show ?thesis by simp |
3533 with ac show ?thesis by simp |
3558 qed |
3534 qed |