Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sheaves on manifolds #31703

Open
mjungmath opened this issue Apr 20, 2021 · 56 comments
Open

Sheaves on manifolds #31703

mjungmath opened this issue Apr 20, 2021 · 56 comments

Comments

@mjungmath
Copy link

We implement presheaves and sheaves over manifolds. Parts that can benefit from this implementation are:

  • charts
  • frames
  • vector bundle sections
  • tensor fields
  • scalar fields

We implement mix-in classes for the parents as well as for its elements, endowed with a restriction method and a _domain attribute. We use a qoset (poset) structure to benefit from digraphs which allow efficient relations between the restrictions. See also #31740, #31771 and #31680.

Depends on #31785

CC: @egourgoulhon @tscrim @tobiasdiez @mkoeppe

Component: manifolds

Branch/Commit: public/31703_sheaves @ 865d37d

Issue created by migration from https://trac.sagemath.org/ticket/31703

@mjungmath mjungmath added this to the sage-9.4 milestone Apr 20, 2021
@mjungmath

This comment has been minimized.

@mjungmath
Copy link
Author

comment:2

See #30714 comment:10.

@mjungmath

This comment has been minimized.

@mkoeppe
Copy link
Contributor

mkoeppe commented May 4, 2021

comment:4

Sounds like we should add a functorial construction.

@mjungmath
Copy link
Author

comment:5

Replying to @mkoeppe:

Sounds like we should add a functorial construction.

What do you mean?

@mkoeppe
Copy link
Contributor

mkoeppe commented May 6, 2021

comment:6

... similar to what's happening in sage.categories.homsets

@mjungmath
Copy link
Author

comment:7

I don't see how that might help us. We need something that is already compatible with the sheaf structure in the above classes.

Instead of a mix-in class, we can do that all via the category framework.

@mjungmath
Copy link
Author

comment:8

The problem I see with the category approach is that the implementation will be probably too concrete.

@mjungmath
Copy link
Author

comment:9

I will upload a proposal with category approach and put it under consideration.

@mjungmath
Copy link
Author

Branch: public/31703_sheaves

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 6, 2021

Commit: ff599d4

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 6, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

ff599d4Trac #31703: first attempt using category

@tobiasdiez
Copy link
Contributor

comment:12

Does it make sense to keep track of the target category, i.e. sections of the presheaf over an open subset are objects of this category. Maybe as a generic parameter?

@mjungmath
Copy link
Author

comment:13

Replying to @tobiasdiez:

Does it make sense to keep track of the target category, i.e. sections of the presheaf over an open subset are objects of this category. Maybe as a generic parameter?

What do you mean?

@mjungmath
Copy link
Author

comment:14

But you are right. Strictly speaking, presheaves are families of section sets. The above proposal is very sloppy in that viewpoint. For now, it rather reflects something like the "category of presheaf section sets".

@mjungmath
Copy link
Author

comment:15

I think this whole category approach was non-sense after all...

@tobiasdiez
Copy link
Contributor

comment:16

What I meant is that your sections often have additional structure. For example, if you consider the presheaf $F$ of sections of a bundle of groups, then you can naturally multiply two such sections, i.e there are maps $F(U) \times F(U) \to F(U)$ for every open subset $U$ induced by the group multiplication. For example, the wedge product of differential forms can be described in such a way.

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 15, 2021

Changed commit from ff599d4 to 29b601a

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 15, 2021

Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:

29b601aTrac #31703: first attempt

@mjungmath
Copy link
Author

comment:18

Replying to @tobiasdiez:

What I meant is that your sections often have additional structure. For example, if you consider the presheaf $F$ of sections of a bundle of groups, then you can naturally multiply two such sections, i.e there are maps $F(U) \times F(U) \to F(U)$ for every open subset $U$ induced by the group multiplication. For example, the wedge product of differential forms can be described in such a way.

This behavior will naturally be captured by the corresponding parent of sections.

@mjungmath
Copy link
Author

comment:19

I have uploaded another approach. Feedback is welcome! :)

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 15, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

7e2a6f5Trac #31703: add sheaves

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 15, 2021

Changed commit from 29b601a to 7e2a6f5

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 15, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

939700cTrac #31703: add some examples

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 15, 2021

Changed commit from 7e2a6f5 to 939700c

@mjungmath
Copy link
Author

comment:22

This should reveal some more of the idea.

@mjungmath
Copy link
Author

comment:31

Do we really want to use restriction graphs an extension graphs as dictionaries, or is there a better solution available?

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Changed commit from 2c9c72b to a884da1

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

a884da1Trac #31703: turn sheaves into functors + provide helper methods instead of concrete implementation

@mjungmath
Copy link
Author

comment:33

@Matthias: Is that what you had in mind when speaking of functorial properties?

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Changed commit from a884da1 to 80eba04

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

80eba04Trac #31703: make copy, copy_from, set_restriction etc. entirely abstract

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Changed commit from 80eba04 to d4b1d33

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

a5e0956Trac #31703: set_restriction is presheaf property
d4b1d33Trac #31703: update restriction graph for restrict method

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Changed commit from d4b1d33 to b91fc16

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

b91fc16Trac #31703: semi-concrete implementation of set_restriction

@mjungmath
Copy link
Author

Dependencies: #31785

@mkoeppe
Copy link
Contributor

mkoeppe commented May 24, 2021

comment:38

Perhaps instead of passing a lambda function to Presheaf, define subclasses such as ScalarFieldAlgebraPresheaf. Then you can replace the method scalar_field_algebra with an attribute that is an instance of this class.

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

6f9081dTrac #31703: contravariant nature of functor
865d37dTrac #31703: add a bit of documentation

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 24, 2021

Changed commit from b91fc16 to 865d37d

@mjungmath
Copy link
Author

comment:40

Replying to @mkoeppe:

Perhaps instead of passing a lambda function to Presheaf, define subclasses such as ScalarFieldAlgebraPresheaf. Then you can replace the method scalar_field_algebra with an attribute that is an instance of this class.

Things might still work fine with scalar fields. But as soon as we have tensor fields, things get more complicated. For example tensor field modules must be constructed via the manifold's method tensor_field_module because the result depends on whether the manifold is parallelizable or not, and those finished constructions must be communicated back to the manifold again.

@mjungmath
Copy link
Author

comment:41

Replying to @mkoeppe:

Perhaps instead of passing a lambda function to Presheaf, define subclasses such as ScalarFieldAlgebraPresheaf. Then you can replace the method scalar_field_algebra with an attribute that is an instance of this class.

Replying to @mjungmath:

Things might still work fine with scalar fields. But as soon as we have tensor fields, things get more complicated. For example tensor field modules must be constructed via the manifold's method tensor_field_module because the result depends on whether the manifold is parallelizable or not, and those finished constructions must be communicated back to the manifold again.

Travis, Eric, what do you think about that?

@egourgoulhon
Copy link
Member

comment:42

Replying to @mjungmath:

Travis, Eric, what do you think about that?

First of all, I think it's a good idea to introduce sheaves. Regarding the lambda function in Presheaf, I agree with Michael's argument. Do you plan to re-implement some scalar field features, in particular the handling of restrictions, in this ticket?

@mkoeppe
Copy link
Contributor

mkoeppe commented Jun 11, 2021

comment:43

See also sage.schemes.toric.variety for another place where sheaves already appear in Sage

@mkoeppe mkoeppe modified the milestones: sage-9.4, sage-9.5 Jul 19, 2021
@mjungmath
Copy link
Author

comment:45

I could use some opinion. Also in which direction this ticket shall now develop. Some foundations are already laid.

@mkoeppe mkoeppe modified the milestones: sage-9.5, sage-9.6 Dec 14, 2021
@mkoeppe mkoeppe modified the milestones: sage-9.6, sage-9.7 Mar 5, 2022
@mkoeppe mkoeppe modified the milestones: sage-9.7, sage-9.8 Aug 31, 2022
@mkoeppe mkoeppe removed this from the sage-9.8 milestone Jan 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants