This could result in the following tables.
In module B:
differentiability_witness @A.foo {
jvp: @B.foo_jvp
vjp: @B.foo_vjp
}
In module C:
differentiability_witness @A.foo {
jvp: @C.foo_jvp
vjp: @C.foo_vjp
}
And in the differentiation transform we can always look up differentiability_witness
tables in the current module, then in imported modules if it doesn't exist. This also makes us able to get rid of the [differentiable jvp @... vjp @...]
attribute on SIL function declarations because it's not as powerful as lookup tables.