This file is indexed.

/usr/share/axiom-20170501/src/algebra/LAZM3PK.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
 97
 98
 99
100
101
102
103
104
105
106
107
108
)abbrev package LAZM3PK LazardSetSolvingPackage
++ Author: Marc Moreno Maza
++ Date Created: 10/02/1998
++ Date Last Updated: 12/16/1998
++ References :
++  [1] D. LAZARD "A new method for solving algebraic systems of 
++      positive dimension" Discr. App. Math. 33:147-160,1991
++  [2] M. MORENO MAZA "A new algorithm for computing triangular
++      decomposition of algebraic varieties" NAG Tech. Rep. 4/98.
++ Description: 
++ A package for solving polynomial systems by means of Lazard triangular
++ sets. This package provides two operations. One for solving in the sense
++ of the regular zeros, and the other for solving in the sense of
++ the Zariski closure. Both produce square-free regular sets. 
++ Moreover, the decompositions do not contain any redundant component.
++ However, only zero-dimensional regular sets are normalized, since
++ normalization may be time consumming in positive dimension.
++ The decomposition process is that of [2].

LazardSetSolvingPackage(R,E,V,P,TS,ST) : SIG == CODE where
  R : GcdDomain
  E : OrderedAbelianMonoidSup
  V : OrderedSet
  P : RecursivePolynomialCategory(R,E,V)
  TS : RegularTriangularSetCategory(R,E,V,P)
  ST : SquareFreeRegularTriangularSetCategory(R,E,V,P)

  N ==> NonNegativeInteger
  Z ==> Integer
  B ==> Boolean
  S ==> String
  K ==> Fraction R
  LP ==> List P
  PWT ==> Record(val : P, tower : TS)
  BWT ==> Record(val : Boolean, tower : TS)
  LpWT ==> Record(val : (List P), tower : TS)
  Split ==> List TS
  polsetpack ==> PolynomialSetUtilitiesPackage(R,E,V,P)
  regsetgcdpack ==> SquareFreeRegularTriangularSetGcdPackage(R,E,V,P,ST)
  quasicomppack ==> SquareFreeQuasiComponentPackage(R,E,V,P,ST)
  normalizpack ==> NormalizationPackage(R,E,V,P,ST)

  SIG ==> with

     normalizeIfCan : ST -> ST
       ++ \axiom{normalizeIfCan(ts)} returns \axiom{ts} in an normalized shape
       ++ if \axiom{ts} is zero-dimensional.

     zeroSetSplit : (LP, B) -> List ST
       ++ \axiom{zeroSetSplit(lp,clos?)} has the same specifications as
       ++ zeroSetSplit(lp,clos?) from RegularTriangularSetCategory.

  CODE ==> add

     convert(st: ST): TS ==
       ts: TS := empty()
       lp: LP := members(st)$ST
       lp := sort(infRittWu?,lp)
       for p in lp repeat
         ts := internalAugment(p,ts)$TS
       ts

     squareFree(ts: TS): List ST ==
       empty? ts => [empty()$ST]
       lp: LP := members(ts)$TS
       lp := sort(infRittWu?,lp)
       newts: ST := empty()$ST
       toSee: List ST := [newts]
       toSave: List ST
       for p in lp repeat
         toSave := []
         while (not empty? toSee) repeat
           us := first toSee; toSee := rest toSee
           lpwt := stoseSquareFreePart(p,us)$regsetgcdpack
           for pwt in lpwt repeat
             newus := internalAugment(pwt.val,pwt.tower)$ST
             toSave := cons(newus,toSave)
         toSee := toSave
       toSave

     normalizeIfCan(ts: ST): ST ==
       empty? ts => ts
       lp: LP := members(ts)$ST
       lp := sort(infRittWu?,lp)
       p: P := first lp
       not univariate?(p)$polsetpack => ts
       lp := rest lp
       newts: ST := empty()$ST
       newts := internalAugment(p,newts)$ST
       while (not empty? lp) repeat
         p := first lp
         lv := variables(p)
         for v in lv repeat
           v = mvar(p) => "leave"
           not algebraic?(v,newts) => return internalAugment(lp,newts)$ST
         lp := rest lp
         p := normalizedAssociate(p,newts)$normalizpack
         newts := internalAugment(p,newts)$ST
       newts

     zeroSetSplit(lp:List(P), clos?:B): List ST ==
       -- if clos? then SOLVE in the closure sense 
       toSee: Split := zeroSetSplit(lp, clos?)$TS
       toSave: List ST := []
       for ts in toSee repeat 
         toSave := concat(squareFree(ts),toSave)
       toSave := removeSuperfluousQuasiComponents(toSave)$quasicomppack
       [normalizeIfCan(ts) for ts in toSave]