/usr/share/axiom-20170501/src/algebra/BALFACT.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 | )abbrev package BALFACT BalancedFactorisation
++ Author: Manuel Bronstein
++ Date Created: 1 March 1991
++ Date Last Updated: 11 October 1991
++ Description:
++ This package provides balanced factorisations of polynomials.
BalancedFactorisation(R, UP) : SIG == CODE where
R : Join(GcdDomain, CharacteristicZero)
UP : UnivariatePolynomialCategory R
SIG ==> with
balancedFactorisation : (UP, UP) -> Factored UP
++ balancedFactorisation(a, b) returns
++ a factorisation \spad{a = p1^e1 ... pm^em} such that each
++ \spad{pi} is balanced with respect to b.
balancedFactorisation : (UP, List UP) -> Factored UP
++ balancedFactorisation(a, [b1,...,bn]) returns
++ a factorisation \spad{a = p1^e1 ... pm^em} such that each
++ pi is balanced with respect to \spad{[b1,...,bm]}.
CODE ==> add
balSqfr : (UP, Integer, List UP) -> Factored UP
balSqfr1: (UP, Integer, UP) -> Factored UP
balancedFactorisation(a:UP, b:UP) == balancedFactorisation(a, [b])
balSqfr1(a, n, b) ==
g := gcd(a, b)
fa := sqfrFactor((a exquo g)::UP, n)
ground? g => fa
fa * balSqfr1(g, n, (b exquo (g ** order(b, g)))::UP)
balSqfr(a, n, l) ==
b := first l
empty? rest l => balSqfr1(a, n, b)
*/[balSqfr1(f.factor, n, b) for f in factors balSqfr(a,n,rest l)]
balancedFactorisation(a:UP, l:List UP) ==
empty?(ll := select(z1 +-> z1 ^= 0, l)) =>
error "balancedFactorisation: 2nd argument is empty or all 0"
sa := squareFree a
unit(sa) * */[balSqfr(f.factor,f.exponent,ll) for f in factors sa])
|