Zulip Chat Archive
Stream: Is there code for X?
Topic: Behaviour of finrank under morphisms
Heather Macbeth (Aug 22 2021 at 05:50):
Does mathlib have: the finrank of the map of a submodule by a linear map is less than or equal to the finrank of the original submodule? Better, that for a linear equiv, it's an equality (as follows by pairing the inequalities in the two directions)?
import linear_algebra.finite_dimensional
open finite_dimensional
variables {R : Type*} [field R]
variables {V : Type*} [add_comm_group V] [module R V]
variables {W : Type*} [add_comm_group W] [module R W]
example (f : V →ₗ[R] W) (p : submodule R V) : finrank R (p.map f) ≤ finrank R p :=
sorry
example (f : V ≃ₗ[R] W) (p : submodule R V) :
finrank R (p.map (f : V →ₗ[R] W)) = finrank R p :=
sorry
Scott Morrison (Aug 22 2021 at 05:54):
We have this for plain ranks (i.e. without the finiteness assumption).
Scott Morrison (Aug 22 2021 at 05:54):
Heather Macbeth (Aug 22 2021 at 05:57):
Ah -- and I suppose I need finite_dimensional R p
or it's not true.
Heather Macbeth (Aug 22 2021 at 06:03):
Trying to translate the dim_map_le
lemma using finite_dimensional.finrank_eq_dim
but it apparently requires V
and W
to be in the same universe ... any idea how to get around that?
Heather Macbeth (Aug 22 2021 at 06:03):
Something lift
?
Floris van Doorn (Aug 22 2021 at 06:33):
V
and W
don't have to be in the same universe:
import linear_algebra.finite_dimensional
open finite_dimensional
universe variable u
variables {R : Type*} [field R]
variables {V : Type u} [add_comm_group V] [module R V]
variables {W : Type u} [add_comm_group W] [module R W]
example (f : V →ₗ[R] W) (p : submodule R V) [finite_dimensional R p]
[finite_dimensional R (p.map f)] : finrank R (p.map f) ≤ finrank R p :=
begin
rw [← cardinal.nat_cast_le, finrank_eq_dim R p, finrank_eq_dim R (p.map f)],
exact dim_map_le f p
end
EDIT: I'm stupid, I assumed them to be in the same universe, and then forgot that I did.
Floris van Doorn (Aug 22 2021 at 06:34):
If the second example is already proven for rank
, then this will translate it to finrank
example (f : V ≃ₗ[R] W) (p : submodule R V) [finite_dimensional R p]
[finite_dimensional R (p.map (f : V →ₗ[R] W))] :
finrank R (p.map (f : V →ₗ[R] W)) = finrank R p :=
begin
erw [← cardinal.nat_cast_inj, finrank_eq_dim R p,
finrank_eq_dim R (p.map (f : V →ₗ[R] W))],
-- to prove: the result for rank
end
Floris van Doorn (Aug 22 2021 at 06:36):
But yes, a lift will help...
Heather Macbeth (Aug 22 2021 at 06:40):
I was hoping to deduce finite_dimensional R (p.map f)
from finite_dimensional R p
, rather than assuming it explicitly -- any idea how to do that?
Heather Macbeth (Aug 22 2021 at 06:41):
Because from dim_map_le
we get that its dim
is less than or equal to a natural number.
Floris van Doorn (Aug 22 2021 at 06:46):
Heather Macbeth said:
I was hoping to deduce
finite_dimensional R (p.map f)
fromfinite_dimensional R p
, rather than assuming it explicitly -- any idea how to do that?
I didn't look, but I hoped that would be a lemma somewhere. Otherwise, it should probably follow from dim_map_le
.
Floris van Doorn (Aug 22 2021 at 06:50):
If V
and W
are in the same universe:
instance (f : V →ₗ[R] W) (p : submodule R V) [finite_dimensional R p] :
finite_dimensional R (p.map f) :=
begin
unfreezingI { rw [finite_dimensional, is_noetherian.iff_dim_lt_omega] at * },
refine (dim_map_le f p).trans_lt ‹_›
end
Scott Morrison (Aug 22 2021 at 06:51):
Okay, I am working on the universe variable version of dim_map_le
Heather Macbeth (Aug 22 2021 at 06:52):
@Floris van Doorn nice!
Floris van Doorn (Aug 22 2021 at 06:53):
Is this your statement @Scott Morrison ?
universe variables u v
variables {R : Type*} [field R]
variables {V : Type u} [add_comm_group V] [module R V]
variables {W : Type v} [add_comm_group W] [module R W]
variables (f : V →ₗ[R] W) (p : submodule R V)
lemma lift_dim_map_le :
cardinal.lift.{_ u} (module.rank R (p.map f)) ≤ cardinal.lift.{_ v} (module.rank R p) :=
sorry
Scott Morrison (Aug 22 2021 at 06:54):
yes, that's what I was aiming at
Scott Morrison (Aug 22 2021 at 06:54):
it will need a few other lemmas generalised first
Scott Morrison (Aug 22 2021 at 06:57):
We have cardinal.lift_sup_le_lift_sup'
, newly added exactly for this sort of problem.
Floris van Doorn (Aug 22 2021 at 07:02):
Once @Scott Morrison has the lemma above:
import linear_algebra.finite_dimensional
open finite_dimensional module
universe variables u v
variables {R : Type*} [field R]
variables {V : Type u} [add_comm_group V] [module R V]
variables {W : Type v} [add_comm_group W] [module R W]
variables (f : V →ₗ[R] W) (p : submodule R V)
lemma lift_dim_map_le :
cardinal.lift.{v u} (module.rank R (p.map f)) ≤ cardinal.lift.{u v} (module.rank R p) :=
sorry
instance (f : V →ₗ[R] W) (p : submodule R V) [h : finite_dimensional R p] :
finite_dimensional R (p.map f) :=
begin
unfreezingI { rw [finite_dimensional, is_noetherian.iff_dim_lt_omega ] at h ⊢ },
rw [← cardinal.lift_lt.{v u}],
rw [← cardinal.lift_lt.{u v}] at h,
rw [cardinal.lift_omega] at h ⊢,
exact (lift_dim_map_le f p).trans_lt h
end
example (f : V →ₗ[R] W) (p : submodule R V) [finite_dimensional R p] :
finrank R (p.map f) ≤ finrank R p :=
begin
rw [← cardinal.nat_cast_le.{max u v}, ← cardinal.lift_nat_cast.{v u},
← cardinal.lift_nat_cast.{u v}, finrank_eq_dim R p, finrank_eq_dim R (p.map f)],
exact lift_dim_map_le f p
end
Floris van Doorn (Aug 22 2021 at 07:04):
And here is the reduction of the second example
into the corresponding lemma for rank
:
lemma lift_dim_map_eq (f : V ≃ₗ[R] W) (p : submodule R V) :
cardinal.lift.{v u} (module.rank R (p.map (f : V →ₗ[R] W))) =
cardinal.lift.{u v} (module.rank R p) :=
sorry
example (f : V ≃ₗ[R] W) (p : submodule R V) [finite_dimensional R p]
[finite_dimensional R (p.map (f : V →ₗ[R] W))] :
finrank R (p.map (f : V →ₗ[R] W)) = finrank R p :=
begin
rw [← cardinal.nat_cast_inj.{max u v}, ← cardinal.lift_nat_cast.{v u},
← cardinal.lift_nat_cast.{u v}, finrank_eq_dim R p, finrank_eq_dim R (p.map f)],
exact lift_dim_map_eq f p
end
Floris van Doorn (Aug 22 2021 at 07:08):
I'm going to bed now. Good luck with generalizing dim_map_le
!
Scott Morrison (Aug 22 2021 at 07:22):
@Heather Macbeth, lift_dim_map_le
is done. Do you want it as a separate PR, or should I just push it to whatever branch you're working on?
Scott Morrison (Aug 22 2021 at 07:25):
It's on branch#lift_dim_map_le
Heather Macbeth (Aug 22 2021 at 07:31):
A separate PR from you would be great, thank you! (the branch I was working on when I noticed this gap is very preliminary)
Heather Macbeth (Aug 22 2021 at 07:32):
Thank you both very much for wrangling these universes for me.
Scott Morrison (Aug 22 2021 at 07:37):
Scott Morrison (Aug 22 2021 at 07:38):
Universes are such a pain. :-) Happily I'd just recently fought them in this file, so remembered how to do it!
Heather Macbeth (Aug 22 2021 at 07:40):
Yes, they really are!!
Heather Macbeth (Aug 22 2021 at 07:42):
I hope @Floris van Doorn will also PR the proof of the main lemma in the morning -- or Floris I can do it, whatever's easiest for you.
Floris van Doorn (Aug 22 2021 at 22:31):
Heather Macbeth (Aug 22 2021 at 22:36):
Thanks!
Last updated: Dec 20 2023 at 11:08 UTC