@@ -485,6 +485,20 @@ theorem extendScalars_adjoin {K : IntermediateField F E} {S : Set E} (h : K ≤
485
485
exact le_antisymm (adjoin.mono F S _ Set.subset_union_right) <| adjoin_le_iff.2 <|
486
486
Set.union_subset h (subset_adjoin F S)
487
487
488
+ theorem adjoin_union {S T : Set E} : adjoin F (S ∪ T) = adjoin F S ⊔ adjoin F T :=
489
+ gc.l_sup
490
+
491
+ theorem restrictScalars_adjoin_eq_sup (K : IntermediateField F E) (S : Set E) :
492
+ restrictScalars F (adjoin K S) = K ⊔ adjoin F S := by
493
+ rw [restrictScalars_adjoin, adjoin_union, adjoin_self]
494
+
495
+ theorem adjoin_iUnion {ι} (f : ι → Set E) : adjoin F (⋃ i, f i) = ⨆ i, adjoin F (f i) :=
496
+ gc.l_iSup
497
+
498
+ theorem iSup_eq_adjoin {ι} (f : ι → IntermediateField F E) :
499
+ ⨆ i, f i = adjoin F (⋃ i, f i : Set E) := by
500
+ simp_rw [adjoin_iUnion, adjoin_self]
501
+
488
502
variable {F} in
489
503
/-- If `E / L / F` and `E / L' / F` are two field extension towers, `L ≃ₐ[F] L'` is an isomorphism
490
504
compatible with `E / L` and `E / L'`, then for any subset `S` of `E`, `L(S)` and `L'(S)` are
@@ -527,13 +541,39 @@ theorem adjoin_eq_top_of_algebra (hS : Algebra.adjoin F S = ⊤) : adjoin F S =
527
541
top_le_iff.mp (hS.symm.trans_le <| algebra_adjoin_le_adjoin F S)
528
542
529
543
@[elab_as_elim]
530
- theorem adjoin_induction {s : Set E} {p : E → Prop } {x} (h : x ∈ adjoin F s) (mem : ∀ x ∈ s, p x)
531
- (algebraMap : ∀ x, p (algebraMap F E x)) (add : ∀ x y, p x → p y → p (x + y))
532
- (neg : ∀ x, p x → p (-x)) (inv : ∀ x, p x → p x⁻¹) (mul : ∀ x y, p x → p y → p (x * y)) :
533
- p x :=
534
- Subfield.closure_induction h
535
- (fun x hx => Or.casesOn hx (fun ⟨x, hx⟩ => hx ▸ algebraMap x) (mem x))
536
- ((_root_.algebraMap F E).map_one ▸ algebraMap 1 ) add neg inv mul
544
+ theorem adjoin_induction {s : Set E} {p : ∀ x ∈ adjoin F s, Prop }
545
+ (mem : ∀ x hx, p x (subset_adjoin _ _ hx))
546
+ (algebraMap : ∀ x, p (algebraMap F E x) (algebraMap_mem _ _))
547
+ (add : ∀ x y hx hy, p x hx → p y hy → p (x + y) (add_mem hx hy))
548
+ (inv : ∀ x hx, p x hx → p x⁻¹ (inv_mem hx))
549
+ (mul : ∀ x y hx hy, p x hx → p y hy → p (x * y) (mul_mem hx hy))
550
+ {x} (h : x ∈ adjoin F s) : p x h :=
551
+ Subfield.closure_induction
552
+ (fun x hx ↦ Or.casesOn hx (fun ⟨x, hx⟩ ↦ hx ▸ algebraMap x) (mem x))
553
+ (by simp_rw [← (_root_.algebraMap F E).map_one]; exact algebraMap 1 ) add
554
+ (fun x _ h ↦ by
555
+ simp_rw [← neg_one_smul F x, Algebra.smul_def]; exact mul _ _ _ _ (algebraMap _) h) inv mul h
556
+
557
+ section
558
+
559
+ variable {K : Type *} [Semiring K] [Algebra F K]
560
+
561
+ theorem adjoin_algHom_ext {s : Set E} ⦃φ₁ φ₂ : adjoin F s →ₐ[F] K⦄
562
+ (h : ∀ x hx, φ₁ ⟨x, subset_adjoin _ _ hx⟩ = φ₂ ⟨x, subset_adjoin _ _ hx⟩) :
563
+ φ₁ = φ₂ :=
564
+ AlgHom.ext fun ⟨x, hx⟩ ↦ adjoin_induction _ h (fun _ ↦ φ₂.commutes _ ▸ φ₁.commutes _)
565
+ (fun _ _ _ _ h₁ h₂ ↦ by convert congr_arg₂ (· + ·) h₁ h₂ <;> rw [← map_add] <;> rfl)
566
+ (fun _ _ ↦ eq_on_inv₀ _ _)
567
+ (fun _ _ _ _ h₁ h₂ ↦ by convert congr_arg₂ (· * ·) h₁ h₂ <;> rw [← map_mul] <;> rfl)
568
+ hx
569
+
570
+ theorem algHom_ext_of_eq_adjoin {S : IntermediateField F E} {s : Set E} (hS : S = adjoin F s)
571
+ ⦃φ₁ φ₂ : S →ₐ[F] K⦄
572
+ (h : ∀ x hx, φ₁ ⟨x, hS.ge (subset_adjoin _ _ hx)⟩ = φ₂ ⟨x, hS.ge (subset_adjoin _ _ hx)⟩) :
573
+ φ₁ = φ₂ := by
574
+ subst hS; exact adjoin_algHom_ext F h
575
+
576
+ end
537
577
538
578
/- Porting note (kmill): this notation is replacing the typeclass-based one I had previously
539
579
written, and it gives true `{x₁, x₂, ..., xₙ}` sets in the `adjoin` term. -/
@@ -1290,16 +1330,32 @@ theorem fg_adjoin_finset (t : Finset E) : (adjoin F (↑t : Set E)).FG :=
1290
1330
theorem fg_def {S : IntermediateField F E} : S.FG ↔ ∃ t : Set E, Set.Finite t ∧ adjoin F t = S :=
1291
1331
Iff.symm Set.exists_finite_iff_finset
1292
1332
1333
+ theorem fg_adjoin_of_finite {t : Set E} (h : Set.Finite t) : (adjoin F t).FG :=
1334
+ fg_def.mpr ⟨t, h, rfl⟩
1335
+
1293
1336
theorem fg_bot : (⊥ : IntermediateField F E).FG :=
1294
1337
-- Porting note: was `⟨∅, adjoin_empty F E⟩`
1295
1338
⟨∅, by simp only [Finset.coe_empty, adjoin_empty]⟩
1296
1339
1297
- theorem fG_of_fG_toSubalgebra (S : IntermediateField F E) (h : S.toSubalgebra.FG) : S.FG := by
1340
+ theorem fg_sup {S T : IntermediateField F E} (hS : S.FG) (hT : T.FG) : (S ⊔ T).FG := by
1341
+ obtain ⟨s, rfl⟩ := hS; obtain ⟨t, rfl⟩ := hT
1342
+ classical rw [← adjoin_union, ← Finset.coe_union]
1343
+ exact fg_adjoin_finset _
1344
+
1345
+ theorem fg_iSup {ι : Sort *} [Finite ι] {S : ι → IntermediateField F E} (h : ∀ i, (S i).FG) :
1346
+ (⨆ i, S i).FG := by
1347
+ choose s hs using h
1348
+ simp_rw [← hs, ← adjoin_iUnion]
1349
+ exact fg_adjoin_of_finite (Set.finite_iUnion fun _ ↦ Finset.finite_toSet _)
1350
+
1351
+ theorem fg_of_fg_toSubalgebra (S : IntermediateField F E) (h : S.toSubalgebra.FG) : S.FG := by
1298
1352
cases' h with t ht
1299
1353
exact ⟨t, (eq_adjoin_of_eq_algebra_adjoin _ _ _ ht.symm).symm⟩
1300
1354
1355
+ @[deprecated (since := "2024-10-28")] alias fG_of_fG_toSubalgebra := fg_of_fg_toSubalgebra
1356
+
1301
1357
theorem fg_of_noetherian (S : IntermediateField F E) [IsNoetherian F E] : S.FG :=
1302
- S.fG_of_fG_toSubalgebra S.toSubalgebra.fg_of_noetherian
1358
+ S.fg_of_fg_toSubalgebra S.toSubalgebra.fg_of_noetherian
1303
1359
1304
1360
theorem induction_on_adjoin_finset (S : Finset E) (P : IntermediateField F E → Prop ) (base : P ⊥)
1305
1361
(ih : ∀ (K : IntermediateField F E), ∀ x ∈ S, P K → P (K⟮x⟯.restrictScalars F)) :
0 commit comments