Zulip Chat Archive
Stream: Is there code for X?
Topic: ring.inverse is continuous
Eric Wieser (Mar 28 2022 at 19:15):
Is this true? Do we have it somewhere with stronger assumptions?
example {R} [monoid_with_zero R] [topological_space R] [has_continuous_mul R] :
continuous_on (λ A : R, ring.inverse A) {A : R | is_unit A} := by library_search
Heather Macbeth (Mar 28 2022 at 19:15):
It's true for the group of units of a complete normed ring.
Patrick Massot (Mar 28 2022 at 19:16):
docs#normed_ring.inverse_continuous_at
Heather Macbeth (Mar 28 2022 at 19:17):
Note also that units R
is given a topology in docs#units.topological_space, but it's not always the same as the subspace topology from R
Heather Macbeth (Mar 28 2022 at 19:19):
(Instead, it's precisely the topology which also makes inversion continuous.)
Heather Macbeth (Mar 28 2022 at 19:20):
Eric Wieser (Mar 28 2022 at 19:21):
I guess it's also true in a topological field too?
Heather Macbeth (Mar 28 2022 at 19:24):
It would be worth stating both the ring.inverse
lemma and the fact is_open_map (coe : units k → k)
for a topological field.
Heather Macbeth (Mar 28 2022 at 19:24):
By analogy with docs#normed_ring.inverse_continuous_at and docs#units.is_open_map_coe
Eric Wieser (Mar 28 2022 at 19:25):
I ask because I was trying to show that the matrix inverse is continuous around the units
Eric Wieser (Mar 28 2022 at 19:25):
And I'm not sure what assumptions I should be taking
Eric Wieser (Mar 28 2022 at 19:26):
It sounds like I need multiple copies of the lemma for the topological_field vs normed_ring cases?
Heather Macbeth (Mar 28 2022 at 19:26):
You can apply it to the normed ring of square matrices over a normed field directly.
Eric Wieser (Mar 28 2022 at 19:27):
Matrices aren't (yet) a normed ring
Eric Wieser (Mar 28 2022 at 19:27):
(in mathlib)
Heather Macbeth (Mar 28 2022 at 19:28):
I think establishing that instance will be by far the fastest way to prove that fact.
Eric Wieser (Mar 28 2022 at 19:28):
I'm already 90% of the way there
Eric Wieser (Mar 28 2022 at 19:28):
It's the pesky ring.inverse A.det
that's left
Heather Macbeth (Mar 28 2022 at 19:29):
But the abstract proof is also the "right" one -- eg it's what I've used before to prove that the "inversion" map on endomorphisms is continuous.
Eric Wieser (Mar 28 2022 at 19:29):
Besides, going this way fills out missing API
Heather Macbeth (Mar 28 2022 at 19:30):
Why do you need this? Is it maybe a fact about endomorphisms in disguise?
Eric Wieser (Mar 28 2022 at 19:34):
Oh, I'm sure it is a statement about endomorphisms in disguise
Eric Wieser (Mar 28 2022 at 19:35):
I was trying to state https://en.wikipedia.org/wiki/Jacobi%27s_formula, and just filling out various API
Heather Macbeth (Mar 28 2022 at 19:36):
Yes, this is a fact about endomorphisms!
Eric Wieser (Mar 28 2022 at 19:38):
Last time I tried that translation, I got stumped by trying to translate matrix.adjugate
to endomorphisms
Eric Wieser (Mar 28 2022 at 19:42):
Eric Wieser said:
I'm already 90% of the way there
#13009 is the PR.
Heather Macbeth (Mar 28 2022 at 19:44):
Eric Wieser said:
Last time I tried that translation, I got stumped by trying to translate
matrix.adjugate
to endomorphisms
If is your endomorphism, and has dimension , then the adjugate is the induced map between exterior powers .
Eric Wieser (Mar 28 2022 at 19:45):
Maybe I need to pick back up my tensor powers PR that got stalled on fin nonsense
Eric Wieser (Mar 28 2022 at 19:46):
Although I guess (exterior_algebra.\io R M).range ^ (n - 1)
could work there
Heather Macbeth (Mar 28 2022 at 20:44):
@Eric Wieser
import analysis.normed_space.units
import analysis.normed_space.pi_Lp
noncomputable theory
open_locale nnreal
section
variables (𝕜 : Type*) [uniform_space 𝕜]
variables (n : Type*) [fintype n] [decidable_eq n] (m : Type*) [fintype m] [decidable_eq m]
-- should add this instance
instance : uniform_space (matrix n m 𝕜) := Pi.uniform_space (λ i, m → 𝕜)
instance [complete_space 𝕜] : complete_space (matrix n m 𝕜) := Pi.complete (λ i, m → 𝕜)
end
variables (𝕜 : Type*) [normed_field 𝕜]
variables (n : Type*) [fintype n] [decidable_eq n] (m : Type*) [fintype m] [decidable_eq m]
-- check that `L∞-L∞` normed group definition matches the standard uniform space instance.
example : (matrix.normed_group : normed_group (matrix n m 𝕜)).to_uniform_space
= matrix.uniform_space 𝕜 n m :=
rfl
/-- The `L1-L∞` norm on matrices. -/
def matrix.normed_group' : normed_group (matrix n m 𝕜) :=
@pi.normed_group n (λ i, pi_Lp 1 (λ j, 𝕜)) _ (λ i, pi_Lp.normed_group 1 (λ j, 𝕜))
-- check that `L1-L∞` normed group definition matches the standard uniform space instance.
example : (matrix.normed_group' 𝕜 n m).to_uniform_space = matrix.uniform_space 𝕜 n m := rfl
/-- Matrices are a normed ring wrt the `L1-to-L∞` norm. -/
def matrix.normed_ring : normed_ring (matrix n n 𝕜) :=
{ norm_mul := sorry,
.. matrix.ring,
.. matrix.normed_group' 𝕜 n n }
variables [complete_space 𝕜]
example (A : units (matrix n n 𝕜)) : continuous_at ring.inverse (A : matrix n n 𝕜) :=
begin
convert @normed_ring.inverse_continuous_at (matrix n n 𝕜) (matrix.normed_ring 𝕜 n) _ A,
-- apparently unrelated diamond:
-- `pi.monoid_with_zero = semiring.to_monoid_with_zero (matrix n n 𝕜)`
end
Eric Wieser (Mar 28 2022 at 20:46):
That's a real diamond, it's telling you that you've mixed up elementwise and matrix multiplication somehow
Eric Wieser (Mar 28 2022 at 20:46):
I can't see where though
Heather Macbeth (Mar 28 2022 at 20:51):
Ah, indeed. This works:
example (A : units (matrix n n 𝕜)) : continuous_at ring.inverse (id A : matrix n n 𝕜) :=
@normed_ring.inverse_continuous_at (matrix n n 𝕜) (matrix.normed_ring 𝕜 n) _ A
Heather Macbeth (Mar 28 2022 at 20:52):
The cast from units (matrix n n 𝕜)
to matrix n n 𝕜
went too far and turned it just to n → n → 𝕜
.
Eric Wieser (Mar 28 2022 at 21:04):
That coercion behavior has been causing trouble in some of the modular forms PRs too
Eric Wieser (Mar 28 2022 at 21:04):
I think lean inserts a coe_fn
too eagerly?
Eric Wieser (Apr 15 2022 at 10:00):
@Heather Macbeth, is there any reason to pick the L1-to-L∞
norm over say the operator norm or the frobenius norm? Do you have a feel for which will be easiest to show submulltiplicity of?
Eric Wieser (Apr 19 2022 at 14:40):
Answer: Yes, the L1-to-L∞
norm imposes much weaker typeclass requirements than the frobenius norm!
I've PR'd a proof of your norm_mul := sorry
in #13518
Last updated: Dec 20 2023 at 11:08 UTC