On 2014-09-13 10:40 AM, "Waldek Hebisch" <[email protected]> wrote:
>
> Bill Page wrote:
> >
> > I made a preliminary change to ElementaryFunctionStructurePackage here:
> >
> >   
> > http://axiom-wiki.newsynthesis.org/SandBoxElementaryFunctionStructurePackage
> >
> > which avoids the  "Hidden constant detected" error.  The main idea is
> > just to avoid differentiating conjugate by replacing it with a dummy
> > placeholder:
> > ...
> > Maybe you see a better way?
>
> I think that this is wrong way.  Namely you take unsound
> default (that is make 'D(conjugate(x), x)' equal to 0)

To my knowledge Wirtinger calculus, which defines D(conjugate(x),x) =
0, is an accepted albeit infrequently taught part of complex analysis
so your comment made me feel a bit irritated.  Perhaps the fact that
you seem to consider it unsound reflects a lack of knowledge or some
unstated prejudice?  The fundamental notion is that x and conjugate(x)
are independent of each other.  Do you think that this is wrong?

> and then try to 'opt out' in places where is causes
> troubles.

I do not want to opt out anywhere.  The problem in EFSTRUC seems to be
that it assumes that f(x) cannot be independent of x which of course
is not true for conjugate..The preliminary change was only intended to
avoid the bug.

I took a look at the code in EFSTRUC more carefully.  Now in an
updated version of

http://axiom-wiki.newsynthesis.org/SandBoxElementaryFunctionStructurePackage

I have the following code:

    -- total Wirtinger derivative allows expressions containing
conjugate to be normalized
    -- Wirtinger derivatives:  wdiff(f,x) and wdiff(f,conjugate(x))
    wdiff(ex:F,z:K):F ==
      
eval(differentiate(eval(ex,[z],[coerce('%conjugate)]),'%conjugate),[kernel('%conjugate)],[z::F])
    totalDifferentiate(f:F,x:SY):F ==
wdiff(f,kernel(x))+wdiff(f,kernels(conjugate(coerce
x)$FunctionalSpecialFunction(R, F))(1) )

For holmorphic functions the "total" Wirtinger derivative (sum of both
Wirtinger derivatives) is equal to the usual derivative since
D(f(x),conjugate(x)) is 0.  For non-holomorphic functions like
conjugate itself, the result is not zero.

The example shows that normalize now normalizes expressions containing
conjugate successfully, but of course more testing is needed.

> IME this leads to long tail of bugs, when
> thing constantly break out in new ways.  Instead,
> 'opt in' when transformations are applied only when known
> safe is much better.  I understand that using unsafe
> transforamations by default may look attractive, because
> they are fequently correct and systems using them looks
> smarter when tested on simple examples (safe system may
> easily miss possibility of applying a transformation).
>

I do not consider this unsafe, though of course there may be still
more places in FriCAS that do not handle conjugate properly by
default.

> Basicaly D(conjugate(x), x) = 0 or even
> 'conjugate(log(x)) = log(conjugate(x))' are too unsafe to
> apply them by default.  Rather they should be done by
> separate functions, which are either explicitely
> requested by user or called when we know that needed
> assumptions are satisfied.
>

I am not aware of any assumptions that are needed.

Bill.

-- 
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to