This file is indexed.

/usr/share/axiom-20170501/src/algebra/FACUTIL.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
)abbrev package FACUTIL FactoringUtilities
++ Author: Barry Trager
++ Date Created: March 12, 1992
++ Description:
++ This package provides utilities used by the factorizers
++ which operate on polynomials represented as univariate polynomials
++ with multivariate coefficients.

FactoringUtilities(E,OV,R,P) : SIG == CODE where
  E : OrderedAbelianMonoidSup
  OV : OrderedSet
  R : Ring
  P : PolynomialCategory(R,E,OV)

  SUP ==> SparseUnivariatePolynomial
  NNI ==> NonNegativeInteger
  Z   ==> Integer

  SIG ==> with

    completeEval : (SUP P,List OV,List R) -> SUP R
      ++ completeEval(upoly, lvar, lval) evaluates the polynomial upoly
      ++ with each variable in lvar replaced by the corresponding value
      ++ in lval. Substitutions are done for all variables in upoly
      ++ producing a univariate polynomial over R.

    degree : (SUP P,List OV) -> List NNI
      ++ degree(upoly, lvar) returns a list containing the maximum
      ++ degree for each variable in lvar.

    variables : SUP P -> List OV
      ++ variables(upoly) returns the list of variables for the coefficients
      ++ of upoly.

    lowerPolynomial : SUP P -> SUP R
      ++ lowerPolynomial(upoly) converts upoly to be a univariate polynomial
      ++ over R. An error if the coefficients contain variables.

    raisePolynomial : SUP R -> SUP P
      ++ raisePolynomial(rpoly) converts rpoly from a univariate polynomial
      ++ over r to be a univariate polynomial with polynomial coefficients.

    normalDeriv : (SUP P,Z) -> SUP P
      ++ normalDeriv(poly,i) computes the ith derivative of poly divided
      ++ by i!.

    ran : Z -> R
      ++ ran(k) computes a random integer between -k and k as member of R.

  CODE ==> add

     lowerPolynomial(f:SUP P) : SUP R ==
       zero? f => 0$SUP(R)
       monomial(ground leadingCoefficient f, degree f)$SUP(R) +
           lowerPolynomial(reductum f)

     raisePolynomial(u:SUP R) : SUP P ==
       zero? u => 0$SUP(P)
       monomial(leadingCoefficient(u)::P, degree u)$SUP(P) +
           raisePolynomial(reductum u)

     completeEval(f:SUP P,lvar:List OV,lval:List R) : SUP R ==
       zero? f => 0$SUP(R)
       monomial(ground eval(leadingCoefficient f,lvar,lval),degree f)$SUP(R) +
              completeEval(reductum f,lvar,lval)

     degree(f:SUP P,lvar:List OV) : List NNI ==
       coefs := coefficients f
       ldeg:= ["max"/[degree(fc,xx) for fc in coefs] for xx in lvar]

     variables(f:SUP P) : List OV ==
       "setUnion"/[variables cf for cf in coefficients f]

     if R has FiniteFieldCategory then

        ran(k:Z):R == random()$R

     else

        ran(k:Z):R == (random(2*k+1)$Z -k)::R

  -- Compute the normalized m derivative
     normalDeriv(f:SUP P,m:Z) : SUP P==
       (n1:Z:=degree f) < m => 0$SUP(P)
       n1=m => (leadingCoefficient f)::SUP(P)
       k:=binomial(n1,m)
       ris:SUP:=0$SUP(P)
       n:Z:=n1
       while n>= m repeat
         while n1>n repeat
           k:=(k*(n1-m)) quo n1
           n1:=n1-1
         ris:=ris+monomial(k*leadingCoefficient f,(n-m)::NNI)
         f:=reductum f
         n:=degree f
       ris