/usr/share/axiom-20170501/src/algebra/FSCINT.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | )abbrev package FSCINT FunctionSpaceComplexIntegration
++ Author: Manuel Bronstein
++ Date Created: 4 February 1988
++ Date Last Updated: 11 June 1993
++ Description:
++ Top-level complex function integration
++ \spadtype{FunctionSpaceComplexIntegration} provides functions for the
++ indefinite integration of complex-valued functions.
FunctionSpaceComplexIntegration(R, F) : SIG == CODE where
R : Join(EuclideanDomain, OrderedSet, CharacteristicZero,
RetractableTo Integer, LinearlyExplicitRingOver Integer)
F : Join(TranscendentalFunctionCategory,
AlgebraicallyClosedFunctionSpace R)
SE ==> Symbol
G ==> Complex R
FG ==> Expression G
IR ==> IntegrationResult F
SIG ==> with
internalIntegrate : (F, SE) -> IR
++ internalIntegrate(f, x) returns the integral of \spad{f(x)dx}
++ where x is viewed as a complex variable.
internalIntegrate0 : (F, SE) -> IR
++ internalIntegrate0 should be a local function, but is conditional.
complexIntegrate : (F, SE) -> F
++ complexIntegrate(f, x) returns the integral of \spad{f(x)dx}
++ where x is viewed as a complex variable.
CODE ==> add
import IntegrationTools(R, F)
import ElementaryIntegration(R, F)
import ElementaryIntegration(G, FG)
import AlgebraicManipulations(R, F)
import AlgebraicManipulations(G, FG)
import TrigonometricManipulations(R, F)
import IntegrationResultToFunction(R, F)
import IntegrationResultFunctions2(FG, F)
import ElementaryFunctionStructurePackage(R, F)
import ElementaryFunctionStructurePackage(G, FG)
import InnerTrigonometricManipulations(R, F, FG)
K2KG: Kernel F -> Kernel FG
K2KG k == retract(tan F2FG first argument k)@Kernel(FG)
complexIntegrate(f, x) ==
removeConstantTerm(complexExpand internalIntegrate(f, x), x)
if R has Join(ConvertibleTo Pattern Integer, PatternMatchable Integer)
and F has Join(LiouvillianFunctionCategory, RetractableTo SE) then
import PatternMatchIntegration(R, F)
internalIntegrate0(f, x) ==
intPatternMatch(f, x, lfintegrate, pmComplexintegrate)
else internalIntegrate0(f, x) == lfintegrate(f, x)
internalIntegrate(f, x) ==
f := distribute(f, x::F)
any?(x1+->has?(operator x1, "rtrig"),
[k for k in tower(g := realElementary(f, x))
| member?(x, variables(k::F))]$List(Kernel F))$List(Kernel F) =>
h := trigs2explogs(F2FG g, [K2KG k for k in tower f
| is?(k, "tan"::SE) or is?(k, "cot"::SE)], [x])
real?(g := FG2F h) =>
internalIntegrate0(rootSimp(rischNormalize(g, x).func), x)
real?(g := FG2F(h := rootSimp(rischNormalize(h, x).func))) =>
internalIntegrate0(g, x)
map(FG2F, lfintegrate(h, x))
internalIntegrate0(rootSimp(rischNormalize(g, x).func), x)
|