Skip to content

Commit 591bab0

Browse files
committed
feat(FieldTheory/IntermediateField): add Subfield.extendScalars (#15148)
... which can be viewed as an inverse to `IntermediateField.toSubfield`. This is similar to `IntermediateField.extendScalars`.  
1 parent 12ecba7 commit 591bab0

File tree

1 file changed

+67
-2
lines changed

1 file changed

+67
-2
lines changed

Mathlib/FieldTheory/IntermediateField.lean

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -603,13 +603,68 @@ end RestrictScalars
603603
/-- This was formerly an instance called `lift2_alg`, but an instance above already provides it. -/
604604
example {F : IntermediateField K L} {E : IntermediateField F L} : Algebra K E := by infer_instance
605605

606+
end Tower
607+
608+
end IntermediateField
609+
606610
section ExtendScalars
607611

612+
namespace Subfield
613+
614+
variable {F E E' : Subfield L} (h : F ≤ E) (h' : F ≤ E') {x : L}
615+
616+
/-- If `F ≤ E` are two subfields of `L`, then `E` is also an intermediate field of
617+
`L / F`. It can be viewed as an inverse to `IntermediateField.toSubfield`. -/
618+
def extendScalars : IntermediateField F L := E.toIntermediateField fun ⟨_, hf⟩ ↦ h hf
619+
620+
@[simp]
621+
theorem coe_extendScalars : (extendScalars h : Set L) = (E : Set L) := rfl
622+
623+
@[simp]
624+
theorem extendScalars_toSubfield : (extendScalars h).toSubfield = E := SetLike.coe_injective rfl
625+
626+
@[simp]
627+
theorem mem_extendScalars : x ∈ extendScalars h ↔ x ∈ E := Iff.rfl
628+
629+
theorem extendScalars_le_extendScalars_iff : extendScalars h ≤ extendScalars h' ↔ E ≤ E' := Iff.rfl
630+
631+
theorem extendScalars_le_iff (E' : IntermediateField F L) :
632+
extendScalars h ≤ E' ↔ E ≤ E'.toSubfield := Iff.rfl
633+
634+
theorem le_extendScalars_iff (E' : IntermediateField F L) :
635+
E' ≤ extendScalars h ↔ E'.toSubfield ≤ E := Iff.rfl
636+
637+
variable (F)
638+
639+
/-- `Subfield.extendScalars.orderIso` bundles `Subfield.extendScalars`
640+
into an order isomorphism from
641+
`{ E : Subfield L // F ≤ E }` to `IntermediateField F L`. Its inverse is
642+
`IntermediateField.toSubfield`. -/
643+
@[simps]
644+
def extendScalars.orderIso :
645+
{ E : Subfield L // F ≤ E } ≃o IntermediateField F L where
646+
toFun E := extendScalars E.2
647+
invFun E := ⟨E.toSubfield, fun x hx ↦ E.algebraMap_mem ⟨x, hx⟩⟩
648+
left_inv E := rfl
649+
right_inv E := rfl
650+
map_rel_iff' {E E'} := by
651+
simp only [Equiv.coe_fn_mk]
652+
exact extendScalars_le_extendScalars_iff _ _
653+
654+
theorem extendScalars_injective :
655+
Function.Injective fun E : { E : Subfield L // F ≤ E } ↦ extendScalars E.2 :=
656+
(extendScalars.orderIso F).injective
657+
658+
end Subfield
659+
660+
namespace IntermediateField
661+
608662
variable {F E E' : IntermediateField K L} (h : F ≤ E) (h' : F ≤ E') {x : L}
609663

610664
/-- If `F ≤ E` are two intermediate fields of `L / K`, then `E` is also an intermediate field of
611665
`L / F`. It can be viewed as an inverse to `IntermediateField.restrictScalars`. -/
612-
def extendScalars : IntermediateField F L := E.toSubfield.toIntermediateField fun ⟨_, hf⟩ ↦ h hf
666+
def extendScalars : IntermediateField F L :=
667+
Subfield.extendScalars (show F.toSubfield ≤ E.toSubfield from h)
613668

614669
@[simp]
615670
theorem coe_extendScalars : (extendScalars h : Set L) = (E : Set L) := rfl
@@ -634,9 +689,11 @@ theorem le_extendScalars_iff (E' : IntermediateField F L) :
634689

635690
variable (F)
636691

637-
/-- `IntermediateField.extendScalars` is an order isomorphism from
692+
/-- `IntermediateField.extendScalars.orderIso` bundles `IntermediateField.extendScalars`
693+
into an order isomorphism from
638694
`{ E : IntermediateField K L // F ≤ E }` to `IntermediateField F L`. Its inverse is
639695
`IntermediateField.restrictScalars`. -/
696+
@[simps]
640697
def extendScalars.orderIso : { E : IntermediateField K L // F ≤ E } ≃o IntermediateField F L where
641698
toFun E := extendScalars E.2
642699
invFun E := ⟨E.restrictScalars K, fun x hx ↦ E.algebraMap_mem ⟨x, hx⟩⟩
@@ -650,8 +707,16 @@ theorem extendScalars_injective :
650707
Function.Injective fun E : { E : IntermediateField K L // F ≤ E } ↦ extendScalars E.2 :=
651708
(extendScalars.orderIso F).injective
652709

710+
end IntermediateField
711+
653712
end ExtendScalars
654713

714+
namespace IntermediateField
715+
716+
variable {S}
717+
718+
section Tower
719+
655720
section Restrict
656721

657722
variable {F E : IntermediateField K L} (h : F ≤ E)

0 commit comments

Comments
 (0)