Zulip Chat Archive

Stream: FLT-regular

Topic: Power basis


Riccardo Brasca (Feb 12 2022 at 12:14):

I've added src/ready_for_mathlib/discriminant/power_basis.lean that contains some statements about power_basis that we need. I will not have time to work on it today, but if someone wants to play with it I don't have any objections.

It has the minimal assumptions to write the statements, but in such generality it is probably false, feel free to add any reasonable assumption you want (the main example is A = ℤ, R = ℚ and S = cyclotomic_field p ℚ).

Riccardo Brasca (Feb 23 2022 at 16:23):

After some days working on the LTE I am back to this. Does anyone see a quick way of constructing the following?

def of_mem_adjon {x : L} {B : power_basis K L} (hs : B.gen  adjoin K ({x} : set L)) :
  power_basis K L :=

Anne Baanen (Feb 23 2022 at 16:24):

I assume you want of_mem_adjoin.gen = x?

Riccardo Brasca (Feb 23 2022 at 16:27):

Ahah, yes, of course :D

Anne Baanen (Feb 23 2022 at 16:28):

Otherwise I would just get away with returning B :)

Anne Baanen (Feb 23 2022 at 16:41):

Ok, I'll try and see if I can prove it

Eric Rodriguez (Feb 23 2022 at 16:42):

Isn't this basically the lemma we discussed earlier Anne? Except with the assumption slightly different

Eric Rodriguez (Feb 23 2022 at 16:42):

I thought we could get around it here riccardo, using the power basis for primitive roots - what do you need it for?

Eric Rodriguez (Feb 23 2022 at 16:43):

I was hoping to eventually prove it in the annihilating polynomial version (someone is just PRing that into mathlib right now)

Riccardo Brasca (Feb 23 2022 at 16:47):

I need the power basis given by ζ - 1...

Riccardo Brasca (Feb 23 2022 at 16:47):

It's nothing especially difficult, my question is only if this is more or less already done somewhere

Riccardo Brasca (Feb 23 2022 at 17:00):

import ring_theory.power_basis
import ring_theory.algebraic
import ring_theory.adjoin.power_basis

universes u v z

variables {R : Type z} {S : Type v} [comm_ring R] [comm_ring S] [algebra R S]
variables {K : Type u} {L : Type v} [field K] [field L] [algebra K L] (B : power_basis K L)

open algebra polynomial

namespace power_basis

lemma adjoin_gen_eq_top (B : power_basis R S) : adjoin R ({B.gen} : set S) =  :=
begin
  rw [ to_submodule_eq_top, _root_.eq_top_iff,  B.basis.span_eq, submodule.span_le],
  rintros x i, rfl⟩,
  rw [B.basis_eq_pow i],
  exact subalgebra.pow_mem _ (subset_adjoin (set.mem_singleton _)) _,
end

lemma adjoin_eq_top_of_gen_mem (B : power_basis R S) {x : S} (hx : B.gen  adjoin R ({x} : set S)) :
  adjoin R ({x} : set S) =  :=
begin
  rw [_root_.eq_top_iff,  adjoin_gen_eq_top B],
  refine adjoin_le _,
  simp [hx],
end

/-- The power basis given by `x` if `B.gen ∈ adjoin K {x}`. -/
noncomputable def of_mem_adjon {x : L} (hx : B.gen  adjoin K ({x} : set L)) :
  power_basis K L :=
by { letI := B.finite_dimensional, exact (adjoin.power_basis $
  algebra.is_integral_of_finite K L x).map ((subalgebra.equiv_of_eq _ _ $
  adjoin_eq_top_of_gen_mem B hx).trans top_equiv) }

lemma of_mem_adjon_gen {x : L} (hs : B.gen  adjoin K ({x} : set L)) :
  (B.of_mem_adjon hs).gen = x := rfl

end power_basis

Anne Baanen (Feb 23 2022 at 17:02):

That was exactly my plan too, got distracted by planning dinner :)

Riccardo Brasca (Feb 23 2022 at 17:10):

I find slightly annoying that I had to use both docs#subalgebra.equiv_of_eq and docs#algebra.top_equiv, but I guess this is life.

Riccardo Brasca (Feb 12 2022 at 12:14):

I've added src/ready_for_mathlib/discriminant/power_basis.lean that contains some statements about power_basis that we need. I will not have time to work on it today, but if someone wants to play with it I don't have any objections.

It has the minimal assumptions to write the statements, but in such generality it is probably false, feel free to add any reasonable assumption you want (the main example is A = ℤ, R = ℚ and S = cyclotomic_field p ℚ).

Riccardo Brasca (Feb 23 2022 at 16:23):

After some days working on the LTE I am back to this. Does anyone see a quick way of constructing the following?

def of_mem_adjon {x : L} {B : power_basis K L} (hs : B.gen  adjoin K ({x} : set L)) :
  power_basis K L :=

Anne Baanen (Feb 23 2022 at 16:24):

I assume you want of_mem_adjoin.gen = x?

Riccardo Brasca (Feb 23 2022 at 16:27):

Ahah, yes, of course :D

Anne Baanen (Feb 23 2022 at 16:28):

Otherwise I would just get away with returning B :)

Anne Baanen (Feb 23 2022 at 16:41):

Ok, I'll try and see if I can prove it

Eric Rodriguez (Feb 23 2022 at 16:42):

Isn't this basically the lemma we discussed earlier Anne? Except with the assumption slightly different

Eric Rodriguez (Feb 23 2022 at 16:42):

I thought we could get around it here riccardo, using the power basis for primitive roots - what do you need it for?

Eric Rodriguez (Feb 23 2022 at 16:43):

I was hoping to eventually prove it in the annihilating polynomial version (someone is just PRing that into mathlib right now)

Riccardo Brasca (Feb 23 2022 at 16:47):

I need the power basis given by ζ - 1...

Riccardo Brasca (Feb 23 2022 at 16:47):

It's nothing especially difficult, my question is only if this is more or less already done somewhere

Riccardo Brasca (Feb 23 2022 at 17:00):

import ring_theory.power_basis
import ring_theory.algebraic
import ring_theory.adjoin.power_basis

universes u v z

variables {R : Type z} {S : Type v} [comm_ring R] [comm_ring S] [algebra R S]
variables {K : Type u} {L : Type v} [field K] [field L] [algebra K L] (B : power_basis K L)

open algebra polynomial

namespace power_basis

lemma adjoin_gen_eq_top (B : power_basis R S) : adjoin R ({B.gen} : set S) =  :=
begin
  rw [ to_submodule_eq_top, _root_.eq_top_iff,  B.basis.span_eq, submodule.span_le],
  rintros x i, rfl⟩,
  rw [B.basis_eq_pow i],
  exact subalgebra.pow_mem _ (subset_adjoin (set.mem_singleton _)) _,
end

lemma adjoin_eq_top_of_gen_mem (B : power_basis R S) {x : S} (hx : B.gen  adjoin R ({x} : set S)) :
  adjoin R ({x} : set S) =  :=
begin
  rw [_root_.eq_top_iff,  adjoin_gen_eq_top B],
  refine adjoin_le _,
  simp [hx],
end

/-- The power basis given by `x` if `B.gen ∈ adjoin K {x}`. -/
noncomputable def of_mem_adjon {x : L} (hx : B.gen  adjoin K ({x} : set L)) :
  power_basis K L :=
by { letI := B.finite_dimensional, exact (adjoin.power_basis $
  algebra.is_integral_of_finite K L x).map ((subalgebra.equiv_of_eq _ _ $
  adjoin_eq_top_of_gen_mem B hx).trans top_equiv) }

lemma of_mem_adjon_gen {x : L} (hs : B.gen  adjoin K ({x} : set L)) :
  (B.of_mem_adjon hs).gen = x := rfl

end power_basis

Anne Baanen (Feb 23 2022 at 17:02):

That was exactly my plan too, got distracted by planning dinner :)

Riccardo Brasca (Feb 23 2022 at 17:10):

I find slightly annoying that I had to use both docs#subalgebra.equiv_of_eq and docs#algebra.top_equiv, but I guess this is life.


Last updated: Dec 20 2023 at 11:08 UTC