Zulip Chat Archive

Stream: Is there code for X?

Topic: IntermediateField.sup_toSubfield


Jz Pan (Jul 23 2024 at 20:21):

We only have docs#IntermediateField.inf_toSubfield. Is IntermediateField.sup_toSubfield correct? I tried and found that rfl can't prove it. Perhaps some arguments are needed.

Thomas Browning (Jul 23 2024 at 21:19):

Does it follow from some combination of le_antisymm and sup_le_iff?

Jz Pan (Jul 23 2024 at 21:56):

Thomas Browning said:

Does it follow from some combination of le_antisymm and sup_le_iff?

I think this approach is a little bit complicated since it needs to use docs#Subfield.toIntermediateField and some others...

Jz Pan (Jul 23 2024 at 22:03):

This works:

import Mathlib.FieldTheory.Adjoin

namespace IntermediateField

@[simp]
theorem sup_toSubfield {F E : Type*} [Field F] [Field E] [Algebra F E] (S T : IntermediateField F E) :
    (S  T).toSubfield = S.toSubfield  T.toSubfield := by
  rw [ S.toSubfield.closure_eq,  T.toSubfield.closure_eq,  Subfield.closure_union]
  change Subfield.closure (Set.range (algebraMap F E)  (S  T)) = Subfield.closure (S  T)
  congr 1
  rw [Set.union_eq_right]
  rintro _ x, rfl
  exact Or.inl (algebraMap_mem S x)

Jz Pan (Jul 23 2024 at 23:32):

PR created as #15088.

Eric Wieser (Jul 24 2024 at 07:35):

Arguably we should redefine sup in the complete lattice instance above to make this true by definition

Jz Pan (Jul 24 2024 at 08:50):

Eric Wieser said:

Arguably we should redefine sup in the complete lattice instance above to make this true by definition

I don't know how to do that. Besides, IntermediateField.sSup_toSubfield and IntermediateField.iSup_toSubfield requires that the set in question is not empty, otherwise they are not equal. So I'm afraid that the lattice structure is different.

Eric Wieser (Jul 24 2024 at 08:53):

You can see how it's done for bot a few lines above. I suggest you only change sup, not sSup.

Jz Pan (Jul 24 2024 at 09:11):

Eric Wieser said:

You can see how it's done for bot a few lines above. I suggest you only change sup, not sSup.

Do you mean this:

instance : CompleteLattice (IntermediateField F E) where
  __ := GaloisInsertion.liftCompleteLattice IntermediateField.gi
  bot :=
    { toSubalgebra := 
      inv_mem' := by rintro x r, rfl; exact r⁻¹, map_inv₀ _ _ }
  bot_le x := (bot_le :   x.toSubalgebra)
  sup S T := (S.toSubfield  T.toSubfield).toIntermediateField fun x  by
    have : S.toSubfield  S.toSubfield  T.toSubfield := le_sup_left
    exact this (algebraMap_mem S x)
  le_sup_left S T := by
    sorry
  le_sup_right S T := by
    sorry
  sup_le a b c := by
    sorry

Unfortunately, it breaks a lot of existing code relying on the old definition of sup :(

Eric Wieser (Jul 24 2024 at 09:38):

Ah sorry, I got confused between toSubfield and toSubalgebra. Maybe my suggestion isn't worthwhile after all, and certainly your PR is an improvement over the status quo

Jz Pan (Jul 28 2024 at 11:23):

Probably Subalgebra->Subring->Subsemiring version should also be added...

Jz Pan (Oct 04 2024 at 16:51):

ping What's the progress on reviewing #15088?

Jz Pan (Oct 15 2024 at 16:21):

ping I got some reviews last week, but there are 3 opening conversations I'm not intended to fix. Any other comments?


Last updated: May 02 2025 at 03:31 UTC