diff -r 8d2d68c8c051 -r 95c9af7483b1 src/HOL/Algebra/Generated_Fields.thy --- a/src/HOL/Algebra/Generated_Fields.thy Wed Nov 13 15:14:48 2024 +0100 +++ b/src/HOL/Algebra/Generated_Fields.thy Wed Nov 13 20:10:34 2024 +0100 @@ -121,56 +121,56 @@ and "I \ K" shows "generate_field (R\carrier := K\) I \ generate_field (R\carrier := H\) I" proof - {fix J assume J_def : "subfield J R" "I \ J" - have "generate_field (R \ carrier := J \) I \ J" - using field.mono_generate_field[of "(R\carrier := J\)" I J] subfield_iff(2)[OF J_def(1)] - field.generate_field_in_carrier[of "R\carrier := J\"] field_axioms J_def - by auto} - note incl_HK = this - {fix x have "x \ generate_field (R\carrier := K\) I \ x \ generate_field (R\carrier := H\) I" - proof (induction rule : generate_field.induct) - case one - have "\\<^bsub>R\carrier := H\\<^esub> \ \\<^bsub>R\carrier := K\\<^esub> = \\<^bsub>R\carrier := H\\<^esub>" by simp - moreover have "\\<^bsub>R\carrier := H\\<^esub> \ \\<^bsub>R\carrier := K\\<^esub> = \\<^bsub>R\carrier := K\\<^esub>" by simp - ultimately show ?case using assms generate_field.one by metis - next - case (incl h) thus ?case using generate_field.incl by force - next - case (a_inv h) - note hyp = this - have "a_inv (R\carrier := K\) h = a_inv R h" - using assms group.m_inv_consistent[of "add_monoid R" K] a_comm_group incl_HK[of K] hyp - subring.axioms(1)[OF subfieldE(1)[OF assms(2)]] - unfolding comm_group_def a_inv_def by auto - moreover have "a_inv (R\carrier := H\) h = a_inv R h" - using assms group.m_inv_consistent[of "add_monoid R" H] a_comm_group incl_HK[of H] hyp - subring.axioms(1)[OF subfieldE(1)[OF assms(1)]] - unfolding comm_group_def a_inv_def by auto - ultimately show ?case using generate_field.a_inv a_inv.IH by fastforce - next - case (m_inv h) - note hyp = this - have h_K : "h \ (K - {\})" using incl_HK[OF assms(2) assms(4)] hyp by auto - hence "m_inv (R\carrier := K\) h = m_inv R h" - using field.m_inv_mult_of[OF subfield_iff(2)[OF assms(2)]] - group.m_inv_consistent[of "mult_of R" "K - {\}"] field_mult_group units_of_inv - subgroup_mult_of subfieldE[OF assms(2)] unfolding mult_of_def apply simp - by (metis h_K mult_of_def mult_of_is_Units subgroup.mem_carrier units_of_carrier assms(2)) - moreover have h_H : "h \ (H - {\})" using incl_HK[OF assms(1) assms(3)] hyp by auto - hence "m_inv (R\carrier := H\) h = m_inv R h" - using field.m_inv_mult_of[OF subfield_iff(2)[OF assms(1)]] - group.m_inv_consistent[of "mult_of R" "H - {\}"] field_mult_group - subgroup_mult_of[OF assms(1)] unfolding mult_of_def apply simp - by (metis h_H field_Units m_inv_mult_of mult_of_is_Units subgroup.mem_carrier units_of_def) - ultimately show ?case using generate_field.m_inv m_inv.IH h_H by fastforce - next - case (eng_add h1 h2) - thus ?case using incl_HK assms generate_field.eng_add by force - next - case (eng_mult h1 h2) - thus ?case using generate_field.eng_mult by force - qed} - thus "\x. x \ generate_field (R\carrier := K\) I \ x \ generate_field (R\carrier := H\) I" + have incl_HK: "generate_field (R \ carrier := J \) I \ J" + if J_def : "subfield J R" "I \ J" for J + using field.mono_generate_field[of "(R\carrier := J\)" I J] subfield_iff(2)[OF J_def(1)] + field.generate_field_in_carrier[of "R\carrier := J\"] field_axioms J_def + by auto + + fix x + have "x \ generate_field (R\carrier := K\) I \ x \ generate_field (R\carrier := H\) I" + proof (induction rule : generate_field.induct) + case one + have "\\<^bsub>R\carrier := H\\<^esub> \ \\<^bsub>R\carrier := K\\<^esub> = \\<^bsub>R\carrier := H\\<^esub>" by simp + moreover have "\\<^bsub>R\carrier := H\\<^esub> \ \\<^bsub>R\carrier := K\\<^esub> = \\<^bsub>R\carrier := K\\<^esub>" by simp + ultimately show ?case using assms generate_field.one by metis + next + case (incl h) + thus ?case using generate_field.incl by force + next + case (a_inv h) + have "a_inv (R\carrier := K\) h = a_inv R h" + using assms group.m_inv_consistent[of "add_monoid R" K] a_comm_group incl_HK[of K] a_inv + subring.axioms(1)[OF subfieldE(1)[OF assms(2)]] + unfolding comm_group_def a_inv_def by auto + moreover have "a_inv (R\carrier := H\) h = a_inv R h" + using assms group.m_inv_consistent[of "add_monoid R" H] a_comm_group incl_HK[of H] a_inv + subring.axioms(1)[OF subfieldE(1)[OF assms(1)]] + unfolding comm_group_def a_inv_def by auto + ultimately show ?case using generate_field.a_inv a_inv.IH by fastforce + next + case (m_inv h) + have h_K : "h \ (K - {\})" using incl_HK[OF assms(2) assms(4)] m_inv by auto + hence "m_inv (R\carrier := K\) h = m_inv R h" + using field.m_inv_mult_of[OF subfield_iff(2)[OF assms(2)]] + group.m_inv_consistent[of "mult_of R" "K - {\}"] field_mult_group units_of_inv + subgroup_mult_of subfieldE[OF assms(2)] unfolding mult_of_def apply simp + by (metis h_K mult_of_def mult_of_is_Units subgroup.mem_carrier units_of_carrier assms(2)) + moreover have h_H : "h \ (H - {\})" using incl_HK[OF assms(1) assms(3)] m_inv by auto + hence "m_inv (R\carrier := H\) h = m_inv R h" + using field.m_inv_mult_of[OF subfield_iff(2)[OF assms(1)]] + group.m_inv_consistent[of "mult_of R" "H - {\}"] field_mult_group + subgroup_mult_of[OF assms(1)] unfolding mult_of_def apply simp + by (metis h_H field_Units m_inv_mult_of mult_of_is_Units subgroup.mem_carrier units_of_def) + ultimately show ?case using generate_field.m_inv m_inv.IH h_H by fastforce + next + case (eng_add h1 h2) + thus ?case using incl_HK assms generate_field.eng_add by force + next + case (eng_mult h1 h2) + thus ?case using generate_field.eng_mult by force + qed + thus "x \ generate_field (R\carrier := K\) I \ x \ generate_field (R\carrier := H\) I" by auto qed