Zulip Chat Archive

Stream: maths

Topic: Instances for is_R_or_C


Heather Macbeth (Dec 20 2020 at 22:38):

I learned the other day that typeclass inference finds the complete_space and proper_space instances for finite-dimensional normed spaces over both and by typeclass inference.

Sebastien Gouezel said:

Over the reals, it's already registered as an instance.

example {E : Type*} [normed_group E] [normed_space  E] [finite_dimensional  E] :
  complete_space E := by apply_instance

(through docs#finite_dimensional.proper_real). It also applies over the complexes as all the instances to see a complex vector space as a real vector space are already there:

example {E : Type*} [normed_group E] [normed_space  E] [finite_dimensional  E] :
  complete_space E := by apply_instance

question 1: It should be safe to register

variables {𝕜 : Type*} [is_R_or_C 𝕜]

instance {E : Type*} [normed_group E] [normed_space 𝕜 E] [finite_dimensional 𝕜 E] : complete_space E := ...

right? Since complete_space is Prop-valued, so there is no concern about duplicate instances. Same for proper_space.

question 2: Assuming it's safe, how do I do fill in the proof, since the proofs for and are a little different? Does is_R_or_C allow me to split into cases? @Frédéric Dupuis

Frédéric Dupuis (Dec 20 2020 at 23:38):

Yes, we definitely want the instance for is_R_or_C, otherwise we can't use it to prove results for both and that require complete_space. The challenge is going to be to make sure that this instance is defeq with the existing ones in both cases.

Heather Macbeth (Dec 20 2020 at 23:38):

But in this case it shouldn't matter about being defeq, right? Because complete_space is Prop-valued, no data.

Frédéric Dupuis (Dec 20 2020 at 23:39):

Ah, right!

Frédéric Dupuis (Dec 20 2020 at 23:39):

Do you know where those two instances are defined?

Heather Macbeth (Dec 20 2020 at 23:39):

So how do I prove this? :). Can I break into cases somehow?

Heather Macbeth (Dec 20 2020 at 23:40):

Frédéric Dupuis said:

Do you know where those two instances are defined?

Taking proper first (since complete is deduced from that), it's just docs#finite_dimensional.proper_real.

Frédéric Dupuis (Dec 20 2020 at 23:40):

There's one of the axioms of is_R_or_C that can effectively be used to break into cases, but it won't be type equality.

Heather Macbeth (Dec 20 2020 at 23:41):

Using, for C, that a finite-dimensional space over C is also finite-dimensional over R.

Frédéric Dupuis (Dec 20 2020 at 23:42):

Ah, then we should be able to do this as well without needing to break in into cases.

Heather Macbeth (Dec 20 2020 at 23:43):

(the latter is docs#finite_dimensional.complex_to_real apparently)

Frédéric Dupuis (Dec 20 2020 at 23:44):

For instance this sort of trick is used here: https://leanprover-community.github.io/mathlib_docs/analysis/normed_space/inner_product.html#exists_norm_eq_infi_of_complete_subspace

Heather Macbeth (Dec 20 2020 at 23:44):

Great, thank you!

Heather Macbeth (Dec 21 2020 at 00:06):

OK, I can do this:

import analysis.normed_space.finite_dimension
import data.complex.is_R_or_C

variables {𝕜 : Type*} [is_R_or_C 𝕜]
variables {E : Type*} [normed_group E] [normed_space 𝕜 E]

instance finite_dimensional.is_R_or_C_to_real : finite_dimensional  𝕜 := sorry

instance finite_dimensional.proper_is_R_or_C [finite_dimensional 𝕜 E] : proper_space E :=
begin
  letI : normed_space  E := restrict_scalars.normed_space  𝕜 E,
  letI : is_scalar_tower  𝕜 E := restrict_scalars.is_scalar_tower _ _ _,
  letI : finite_dimensional  E := finite_dimensional.trans  𝕜 E,
  apply_instance
end

but how do I fill in the sorry? We don't seem to have that is_R_or_C is finite-dimensional over , and presumably this instance, though safe to add to the library, will have a proof involving breaking into cases.

Frédéric Dupuis (Dec 21 2020 at 00:16):

Hmm... good question!

Heather Macbeth (Dec 21 2020 at 00:40):

I could probably prove it directly from docs#is_R_or_C.re_add_im_ax, would that be a hack?

Frédéric Dupuis (Dec 21 2020 at 00:52):

I wouldn't say it's a hack, I think that's how it should be done!

Frédéric Dupuis (Dec 21 2020 at 00:53):

I think this together with finite_dimensional.iff_fg (and probably a lot of fiddling around...) will do the trick.

Heather Macbeth (Dec 21 2020 at 05:35):

#5466


Last updated: Dec 20 2023 at 11:08 UTC