This file is indexed.

/usr/share/axiom-20170501/src/algebra/CRAPACK.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
)abbrev package CRAPACK CRApackage
++ Description:
++ This package has no documentation

CRApackage(R) : SIG == CODE where
  R : EuclideanDomain

  SIG ==> with

    modTree : (R,List R) -> List R
      ++ modTree(r,l) \undocumented{}

    chineseRemainder : (List R, List R) -> R
      ++ chineseRemainder(lv,lm) returns a value \axiom{v} such that, if
      ++ x is \axiom{lv.i} modulo \axiom{lm.i} for all \axiom{i}, then
      ++ x is \axiom{v} modulo \axiom{lm(1)*lm(2)*...*lm(n)}.

    chineseRemainder : (List List R, List R) -> List R
      ++ chineseRemainder(llv,lm) returns a list of values, each of which
      ++ corresponds to the Chinese remainder of the associated element of
      ++ \axiom{llv} and axiom{lm}.  This is more efficient than applying
      ++ chineseRemainder several times.

    multiEuclideanTree : (List R, R) -> List R
      ++ multiEuclideanTree(l,r) \undocumented{}

  CODE ==> add

    BB:=BalancedBinaryTree(R)
    x:BB

    -- Definition for modular reduction mapping with several moduli
    modTree(a,lm) ==
      t := balancedBinaryTree(#lm, 0$R)
      setleaves_!(t,lm)
      mapUp_!(t,"*")
      leaves mapDown_!(t, a, "rem")

    chineseRemainder(lv:List(R), lm:List(R)):R ==
      #lm ^= #lv => error "lists of moduli and values not of same length"
      x := balancedBinaryTree(#lm, 0$R)
      x := setleaves_!(x, lm)
      mapUp_!(x,"*")
      y := balancedBinaryTree(#lm, 1$R)
      y := mapUp_!(copy y,x,(a,b,c,d)+->a*d + b*c)
      (u := extendedEuclidean(value y, value x,1)) case "failed" =>
        error "moduli not relatively prime"
      inv := u . coef1
      linv := modTree(inv, lm)
      l := [(u*v) rem m for v in lv for u in linv for m in lm]
      y := setleaves_!(y,l)
      value(mapUp_!(y, x, (a,b,c,d)+->a*d + b*c)) rem value(x)

    chineseRemainder(llv:List List(R), lm:List(R)):List(R) ==
      x := balancedBinaryTree(#lm, 0$R)
      x := setleaves_!(x, lm)
      mapUp_!(x,"*")
      y := balancedBinaryTree(#lm, 1$R)
      y := mapUp_!(copy y,x,(a,b,c,d)+->a*d + b*c)
      (u := extendedEuclidean(value y, value x,1)) case "failed" =>
        error "moduli not relatively prime"
      inv := u . coef1
      linv := modTree(inv, lm)
      retVal:List(R) := []
      for lv in llv repeat
        l := [(u3*v) rem m for v in lv for u3 in linv for m in lm]
        y := setleaves!(y,l)
        retVal := 
          cons(value(mapUp!(y, x, (a,b,c,d)+->a*d+b*c)) rem value(x),retVal)
      reverse retVal

    extEuclidean: (R, R, R) -> List R
    extEuclidean(a, b, c) ==
      u := extendedEuclidean(a, b, c)
      u case "failed" => error [c, " not spanned by ", a, " and ",b]
      [u.coef2, u.coef1]

    multiEuclideanTree(fl, rhs) ==
      x := balancedBinaryTree(#fl, rhs)
      x := setleaves_!(x, fl)
      mapUp_!(x,"*")
      leaves mapDown_!(x, rhs, extEuclidean)