I am not sure this will answer your question, but perhaps could you use two variables, though is is a bit tedious:
sage: var('x y')
(x, y)
sage: conj(x,y) = (x,-y)
sage: diff(conj)
[ (x, y) |--> 1 (x, y) |--> 0]
[ (x, y) |--> 0 (x, y) |--> -1]
Then you can define i
, d
and dbar
as follows:
sage: i(x,y) = (-y,x)
sage: d = lambda f : 1/2*diff(f,x)-1/2*i(*diff(f,y))
sage: dbar = lambda f : (1/2*diff(f,x)+ 1/2*i(*diff(f,y)))
sage: d(conj)
(x, y) |--> (0, 0)
sage: dbar(conj)
(x, y) |--> (1, 0)
Let us check that sin
is holomorphic:
sage: mysin(x,y) = (real(sin(x+I*y)),imag(sin(x+I*y)))
sage: dbar(mysin)
(x, y) |--> (1/2*sin(-imag_part(y) + real_part(x))*sinh(imag_part(x) + real_part(y))*D[0](imag_part)(x) - 1/2*sin(-imag_part(y) + real_part(x))*sinh(imag_part(x) + real_part(y))*D[0](imag_part)(y) + 1/2*cos(-imag_part(y) + real_part(x))*cosh(imag_part(x) + real_part(y))*D[0](real_part)(x) - 1/2*cos(-imag_part(y) + real_part(x))*cosh(imag_part(x) + real_part(y))*D[0](real_part)(y), 1/2*cos(-imag_part(y) + real_part(x))*cosh(imag_part(x) + real_part(y))*D[0](imag_part)(x) - 1/2*cos(-imag_part(y) + real_part(x))*cosh(imag_part(x) + real_part(y))*D[0](imag_part)(y) - 1/2*sin(-imag_part(y) + real_part(x))*sinh(imag_part(x) + real_part(y))*D[0](real_part)(x) + 1/2*sin(-imag_part(y) + real_part(x))*sinh(imag_part(x) + real_part(y))*D[0](real_part)(y))
sage: dbar(mysin) == (0,0)
False
Hmm, not enough, we have to simplify the expressions first:
sage: dbar(mysin)[0].full_simplify()
(x, y) |--> 0
sage: dbar(mysin)[1].full_simplify()
(x, y) |--> 0
If we try with a non-holomorphic one:
sage: f(x,y) = (x+y, cos(x-y))
sage: dbar(f)[0].full_simplify()
(x, y) |--> -1/2*cos(y)*sin(x) + 1/2*cos(x)*sin(y) + 1/2
sage: dbar(f)[1].full_simplify()
(x, y) |--> -1/2*cos(y)*sin(x) + 1/2*cos(x)*sin(y) + 1/2
Not bad.
But HEY, x
and y
are not assumed to be real, so i should not get 0
here. There is an assumption mechanism that tells Sage that x
and y
are real, but we did not use it here. Well, how to say:
sage: real_part(x).full_simplify()
x
sage: imag_part(x).full_simplify()
0
This is indeed a bug of the ugly Symbolic Ring
, which we turned into a feature ! I let you define d
and dbar
to include full_simplify
in them.