/usr/share/axiom-20170501/src/algebra/INTDIVP.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 | )abbrev package INTDIVP IntersectionDivisorPackage
++ Author: Gaetan Hache
++ Date Created: 17 nov 1992
++ Date Last Updated: May 2010 by Tim Daly
++ Description:
++ The following is part of the PAFF package
IntersectionDivisorPackage(K,symb,PolyRing,E,ProjPt, PCS,Plc,DIVISOR,
InfClsPoint,DesTree,BLMET) : SIG == CODE where
K : Field
symb : List(Symbol)
OV ==> OrderedVariableList(symb)
E : DirectProductCategory(#symb,NonNegativeInteger)
PolyRing : PolynomialCategory(K,E,OV)
ProjPt : ProjectiveSpaceCategory(K)
PCS : LocalPowerSeriesCategory(K)
Plc : PlacesCategory(K,PCS)
DIVISOR : DivisorCategory(Plc)
InfClsPoint : InfinitlyClosePointCategory(K,symb,PolyRing,E,ProjPt,_
PCS,Plc,DIVISOR,BLMET)
DesTree : DesingTreeCategory(InfClsPoint)
BLMET : BlowUpMethodCategory
OF ==> OutputForm
PackPoly ==> PackageForPoly(K,PolyRing,E,#symb)
PPFC1 ==> PolynomialPackageForCurve(K,PolyRing,E,#symb,ProjPt)
ParamPackFC ==> LocalParametrizationOfSimplePointPackage(K,symb,PolyRing,_
E,ProjPt,PCS,Plc)
ParamPack ==> ParametrizationPackage(K,symb,PolyRing,E,ProjPt,PCS,Plc)
RatSingPack ==> ProjectiveAlgebraicSetPackage(K,symb,PolyRing,E,ProjPt)
DesingPack ==> DesingTreePackage(K,symb,PolyRing,E,ProjPt,PCS,Plc,_
DIVISOR,InfClsPoint,DesTree,BLMET)
SIG ==> with
intersectionDivisor : (PolyRing,PolyRing,List DesTree,List ProjPt) -> DIVISOR
++ intersectionDivisor(f,pol,listOfTree) returns the intersection
++ divisor of f with a curve defined by pol. listOfTree must contain
++ all the desingularisation trees of all singular points on the curve
++ defined by pol.
placesOfDegree : (PositiveInteger, PolyRing, List ProjPt) -> Void()
++ placesOfDegree(d, f, pts) compute the places of degree
++ dividing d of the curve f. pts should be the singular points
++ of the curve f. For d > 1 this only works if K has
++ \axiomType{PseudoAlgebraicClosureOfFiniteFieldCategory}.
CODE ==> add
intersectionDivisor(pol,curve,ltr,listOfSingPt)==
intDeg:Integer:= (totalDegree(pol)$PackPoly * _
totalDegree(curve)$PackPoly) pretend Integer
-- compute at places over singular Points
lDivAtSingPt:DIVISOR:=_
reduce("+",[divisorAtDesingTree(pol,tr)$DesingPack for tr in ltr],0)
-- By Bezout Thorem, if all intersection points with mult.
-- have been found then return the divisor
degD:Integer:=degree lDivAtSingPt
degD = intDeg => lDivAtSingPt
setOfFdPlc:List Plc:=foundPlaces()$Plc
plcFrSplPts:List Plc:=[pl for pl in setOfFdPlc | ^leaf?(pl)]
ordAtPlcFrSplPts:List Integer:=_
[order(parametrize(pol,pl)$ParamPack)$PCS for pl in plcFrSplPts]
divAtSplPts:DIVISOR:=_
reduce("+",[o * (pl :: DIVISOR) _
for o in ordAtPlcFrSplPts _
for pl in plcFrSplPts],0)
tDiv:=lDivAtSingPt+divAtSplPts
-- By Bezout Thorem, if all intersection points with mult.
-- have been found then return the divisor
degD:Integer:=degree tDiv
degD = intDeg => tDiv
intPts:List ProjPt:=algebraicSet([pol,curve])$RatSingPack
intPtsNotSing:=setDifference(intPts,listOfSingPt)
intPls:List(Plc):=_
[pointToPlace(pt,curve)$ParamPackFC for pt in intPtsNotSing]
remPlc:=setDifference(intPls , plcFrSplPts)
ordAtPlcRem:List Integer:=_
[order(parametrize(pol,pl)$ParamPack)$PCS for pl in remPlc]
divAtRem:DIVISOR:=_
reduce("+",[o*(pl :: DIVISOR) for o in ordAtPlcRem for pl in remPlc],0)
theDivisor:= lDivAtSingPt + divAtSplPts + divAtRem
degD:Integer:=degree theDivisor
if ^(degD = intDeg) then
print("error while computing the intersection divisor" :: OF )
print("Otherwise the Bezout Theoreme is not true !!!! " :: OF)
print("Of course its the machine that make the mistake !!!!!" :: OF)
theDivisor
placesOfDegree(d, curve, singPts) ==
--Return the number of places of degree i of the functionfield, no
--constant field extension
allPoints: List ProjPt:= rationalPoints(curve, d)$RatSingPack
remindingSimplePts: List ProjPt :=setDifference(allPoints,singPts)
for tpt in remindingSimplePts repeat
pointToPlace(tpt,curve)$ParamPackFC
Void()
|