Dual differential operator

Let X —> S be a morphism of schemes. Let E and F be quasi-coherent O_X modules. Let D : E —> F be a finite order differential operator on X/S. This means that there exists an integer n and an O_X-linear map

D’ : p_{n, 2, *}(p_{n, 1}^*E) —> F

such that D is given by the composition of D’ with the nonlinear map E —> p_{n, 2, *}(p_{n, 1}^*E). Here p_{n, i} : Delta_n —> X are the two projections of the nth infinitesimal neighbourhood of the diagonal X —> X x_S X. (Unfortunately, this description of finite order differential operators is currently missing from the Stacks project.)

OK, let omega_{X/S} be a quasi-coherent O_X-module (we’ll see later the properties we require of this module). Set E* = SheafHom(E, omega_{X/S}) and similarly for F. When does there exist a dual differential operator

D* : F* —> E* ?

The purpose of this blog post is to analyze what we need about S, X, omega_{X/S}, F, and E in order to get D*.

Suppose we have F = (F*)*. Then we can think of D’ as a map

D’ : p_{n, 2, *}(p_{n, 1}^*E) —> (F*)*

which is the same thing as a map

p_{n, 2, *}(p_{n, 1}^*E ⊗ p_{n, 2}^*(F*)) —> omega_{X/S}

which is the same thing as a map

p_{n, 1}^*E ⊗ p_{n, 2}^*(F*) —> p_{n, 2}^!omega_{X/S}

by duality. If we have an isomorphism p_{n, 2}^!omega_{X/S} = p_{n, 1}^!omega_{X/S} then applying the automorphism of X x_S X which switches the factors and going backwards we see that this is the same thing as a differential operator D* of the form desired.

What did we use in the above? We need

  1. F = (F*)*,
  2. p_{n, i} : Delta_n —> X are finite morphisms,
  3. p_{n, 2}^!omega_{X/S} = p_{n, 1}^!omega_{X/S} where p_{n, 2}^! is the functor used in duality for a finite morphism.

The first condition holds for example if F is finite locally free and O_X = SheafHom(omega_{X/S}, omega_{X/S}). The second condition holds if X —> S is of finite type. The third condition really does pin down omega_{X/S} a lot more.

If S is Noetherian, F and E are finite locally free, and X —> S is a separated, flat morphism of finite type whose fibres are Cohen-Macaulay and equidimensional of a given dimension d, then we can take omega_{X/S} the usual relative dualizing sheaf and we have enough theory in the Stacks project to get the third condition above.

But there is another way to think about the condition p_{n, 2}^!omega_{X/S} = p_{n, 1}^!omega_{X/S}. Namely, considering finite order differential operators D : O_X —> omega_{X/S} and arguing as above one sees that giving a (symmetric) isomorphism p_{n, 2}^!omega_{X/S} = p_{n, 1}^!omega_{X/S} is the same thing as a rule D ↦ D* which defines an involution on the sheaf of finite order differential operators D : O_X —> omega_{X/S} such that

  1. (f D)* = D* \circ f
  2. (D \circ f)* = f D*

where f denotes a local section of O_X.

When X —> S is smooth of relative dimension d and we take omega_{X/S} = Omega^d_{X/S}, we can explicitly construct the rule D ↦ D*. For example if we have local coordinates x_1, …, x_d on X/S and we use the trivialization of Omega^d_{X/S} given by d(x_1) ∧ … ∧ d(x_d) then we take the algebra involution on differential operators sending a function to itself and sending ∂/∂x_i to – ∂/∂x_i. Of course in this case we can also explicitly describe the rule going from D : E —> F to D* : F* —> E* we obtain from this.

The second case works without appealing to any theory of duality.

Worked through your comments

Thanks to everybody who contributed! We’re getting close to 500 people who have contributed comments or mathematics! Amazing!

The comments aren’t part of the Stacks project, so the discussion in the comments can be a bit more relaxed and loose than in the actual text; double checking your comment makes sense and can be parsed by others before you post is always a good idea.

I would appreciate people helping out, even and maybe especially, in small ways. Let me stress this: start with small things and see if you can get the maintainer (that’s me) to accept your contribution. For example, if you find a typo, then you can edit the latex file yourselves and send it in. The instructions are here. Just do one or a few typos at a time. You can add an omitted proof as a slightly larger project. Things that make it easier for me to accept contributions: (a) your edits use roughly the same coding style which you can easily deduce by looking around in the latex files, (b) the amount of detail given in a proof is roughly similar to what happens in nearby lemmas, and (c) you make a pull request on github (examples of pull requests).

Of course, if you find a mathematical error, I’d like to know immediately and in that case I encourage you to leave a comment on the website (so everybody can see what’s going on). It is very helpful if you precisely indicate where the error lies and thoughts you might have had on how to fix or work around the problem.

Thanks!