odlgroup / odl

Operator Discretization Library https://odlgroup.github.io/odl/
Mozilla Public License 2.0
370 stars 105 forks source link

Remove "not a Hilbert space" restriction? #793

Open kohr-h opened 7 years ago

kohr-h commented 7 years ago

We currently disable inner products and adjoints when the space exponent is not equal to 2. However, both can be interpreted in a generalized sense in Banach spaces.

In fact, when dealing with Lebesgue spaces, the formal definitions of these quantities are most of the time identical with the Hilbert space variants. And it can be very useful e.g. in optimization when these concepts can be applied "without thinking" to more general spaces.

There are basically 3 of ways to deal with this:

  1. Be strict with the terms and disallow "abuse" for more general cases (current approach)
  2. Be less strict and allow combinations of Lebesgue spaces with mutually conjugate exponents in inner products, and allow adjoints on the conjugate exponent variants of domain and range.
  3. Allow anything.

Here's how I think about this: (1) feels like an arbitrary and very limiting restriction IMO, without a compelling reason. (2) is still mathematically sane but requires a bit more code - in particular something like a dual_space property would be needed for that. But we also have tangent_bundle so I don't think that would be a big deal to add. (3) is the lazy approach, and that might bite us in the long run if things really stop making sense.

Opinions?

adler-j commented 7 years ago

Well 2 is obviously the way to go, but it adds quite some complexity if users want to add a new norm etc, then they also have to somehow be able to provide the dual norm. With that said, adding it would be trivial, and adding "dual space" would i.m.o. make perfect sense.

A minor addition is that we should make all "obvious" identifications, i.e. the dual space of a hilbert space is itself, and the dual of the dual is (in most cases anyway) the space itself. Perhaps we also need a "is_reflexive" flag.

kohr-h commented 7 years ago

A minor addition is that we should make all "obvious" identifications, i.e. the dual space of a hilbert space is itself, and the dual of the dual is (in most cases anyway) the space itself. Perhaps we also need a "is_reflexive" flag.

We should make obvious identifications, right. Regarding reflexivity, I'm not sure what to do ideally. Can we ever represent the part of the bidual that is not contained in the original space? Like, functionals of functionals? That would really require a whole new machinery without really adding much.

I could as well imagine taking the easy way out here by always assuming that X.dual_space.dual_space == X and writing this bold assumption down somewhere. The bidual is always a superset, so we miss only stuff we can't properly represent anyway.

The only current "broken" case would be L^1 / L^\infty, but here somebody would have to tell me how to represent the space of finitely additive, finite, signed and absolutely continuous measures on Omega equipped with the total variation norm, which apparently is the dual space of L^\infty(Omega).