diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet index 21b8a2b..68efdfc 100644 --- a/books/bookvol10.3.pamphlet +++ b/books/bookvol10.3.pamphlet @@ -80616,7 +80616,7 @@ o )show Product \cross{PRODUCT}{?$<=$?} & \cross{PRODUCT}{?$>$?} & \cross{PRODUCT}{?$>=$?} \\ -\cross{PRODUCT}{?\^{}?} &&&& +\cross{PRODUCT}{?\^{}?} &&& \end{tabular} <>= @@ -80728,8 +80728,545 @@ Product (A:SetCategory,B:SetCategory) : C == T "PRODUCT" -> "OAMONS" @ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain PACOFF PseudoAlgebraicClosureOfFiniteField} +<>= +)set break resume +)sys rm -f PseudoAlgebraicClosureOfFiniteField.output +)spool PseudoAlgebraicClosureOfFiniteField.output +)set message test on +)set message auto off +)clear all + +--S 1 of 1 +)show PseudoAlgebraicClosureOfFiniteField +--R PseudoAlgebraicClosureOfFiniteField K: FiniteFieldCategory is a domain constructor +--R Abbreviation for PseudoAlgebraicClosureOfFiniteField is PACOFF +--R This constructor is exposed in this frame. +--R Issue )edit bookvol10.3.pamphlet to see algebra source code for PACOFF +--R +--R------------------------------- Operations -------------------------------- +--R ?*? : (%,K) -> % ?*? : (K,%) -> % +--R ?*? : (Fraction Integer,%) -> % ?*? : (%,Fraction Integer) -> % +--R ?*? : (%,%) -> % ?*? : (Integer,%) -> % +--R ?*? : (PositiveInteger,%) -> % ?**? : (%,Integer) -> % +--R ?**? : (%,PositiveInteger) -> % ?+? : (%,%) -> % +--R ?-? : (%,%) -> % -? : % -> % +--R ?/? : (%,K) -> % ?/? : (%,%) -> % +--R ?=? : (%,%) -> Boolean D : % -> % +--R D : (%,NonNegativeInteger) -> % 1 : () -> % +--R 0 : () -> % ?^? : (%,Integer) -> % +--R ?^? : (%,PositiveInteger) -> % algebraic? : % -> Boolean +--R associates? : (%,%) -> Boolean charthRoot : % -> % +--R coerce : K -> % coerce : Fraction Integer -> % +--R coerce : % -> % coerce : Integer -> % +--R coerce : % -> OutputForm conjugate : % -> % +--R createPrimitiveElement : () -> % differentiate : % -> % +--R dimension : () -> CardinalNumber extDegree : % -> PositiveInteger +--R factor : % -> Factored % fullOutput : % -> OutputForm +--R gcd : List % -> % gcd : (%,%) -> % +--R ground? : % -> Boolean hash : % -> SingleInteger +--R inGroundField? : % -> Boolean index : PositiveInteger -> % +--R init : () -> % inv : % -> % +--R latex : % -> String lcm : List % -> % +--R lcm : (%,%) -> % lookup : % -> PositiveInteger +--R maxTower : List % -> % one? : % -> Boolean +--R order : % -> PositiveInteger previousTower : % -> % +--R prime? : % -> Boolean primeFrobenius : % -> % +--R primitive? : % -> Boolean primitiveElement : () -> % +--R ?quo? : (%,%) -> % random : () -> % +--R recip : % -> Union(%,"failed") ?rem? : (%,%) -> % +--R retract : % -> K sample : () -> % +--R setTower! : % -> Void size : () -> NonNegativeInteger +--R sizeLess? : (%,%) -> Boolean squareFree : % -> Factored % +--R squareFreePart : % -> % transcendent? : % -> Boolean +--R unit? : % -> Boolean unitCanonical : % -> % +--R vectorise : (%,%) -> Vector % zero? : % -> Boolean +--R ?~=? : (%,%) -> Boolean +--R ?*? : (NonNegativeInteger,%) -> % +--R ?**? : (%,NonNegativeInteger) -> % +--R Frobenius : % -> % if K has FINITE +--R Frobenius : (%,NonNegativeInteger) -> % if K has FINITE +--R ?^? : (%,NonNegativeInteger) -> % +--R characteristic : () -> NonNegativeInteger +--R charthRoot : % -> Union(%,"failed") +--R conditionP : Matrix % -> Union(Vector %,"failed") +--R definingPolynomial : () -> SparseUnivariatePolynomial % +--R definingPolynomial : % -> SparseUnivariatePolynomial % +--R degree : % -> OnePointCompletion PositiveInteger +--R differentiate : (%,NonNegativeInteger) -> % +--R discreteLog : % -> NonNegativeInteger +--R discreteLog : (%,%) -> Union(NonNegativeInteger,"failed") +--R distinguishedRootsOf : (SparseUnivariatePolynomial %,%) -> List % +--R divide : (%,%) -> Record(quotient: %,remainder: %) +--R euclideanSize : % -> NonNegativeInteger +--R expressIdealMember : (List %,%) -> Union(List %,"failed") +--R exquo : (%,%) -> Union(%,"failed") +--R extendedEuclidean : (%,%,%) -> Union(Record(coef1: %,coef2: %),"failed") +--R extendedEuclidean : (%,%) -> Record(coef1: %,coef2: %,generator: %) +--R extensionDegree : () -> OnePointCompletion PositiveInteger +--R factorsOfCyclicGroupSize : () -> List Record(factor: Integer,exponent: Integer) +--R gcdPolynomial : (SparseUnivariatePolynomial %,SparseUnivariatePolynomial %) -> SparseUnivariatePolynomial % +--R lift : % -> SparseUnivariatePolynomial % +--R lift : (%,%) -> SparseUnivariatePolynomial % +--R multiEuclidean : (List %,%) -> Union(List %,"failed") +--R newElement : (SparseUnivariatePolynomial %,%,Symbol) -> % +--R newElement : (SparseUnivariatePolynomial %,Symbol) -> % +--R nextItem : % -> Union(%,"failed") +--R order : % -> OnePointCompletion PositiveInteger +--R primeFrobenius : (%,NonNegativeInteger) -> % +--R principalIdeal : List % -> Record(coef: List %,generator: %) +--R reduce : SparseUnivariatePolynomial % -> % +--R representationType : () -> Union("prime",polynomial,normal,cyclic) +--R retractIfCan : % -> Union(K,"failed") +--R subtractIfCan : (%,%) -> Union(%,"failed") +--R tableForDiscreteLogarithm : Integer -> Table(PositiveInteger,NonNegativeInteger) +--R transcendenceDegree : () -> NonNegativeInteger +--R unitNormal : % -> Record(unit: %,canonical: %,associate: %) +--R +--E 1 + +)spool +)lisp (bye) + +@ +<>= +==================================================================== +PseudoAlgebraicClosureOfFiniteField examples +==================================================================== + +See Also: +o )show PseudoAlgebraicClosureOfFiniteField + +@ +\pagehead{PseudoAlgebraicClosureOfFiniteField}{PACOFF} +\pagepic{ps/v103pseudoalgebraicclosureoffinitefield.ps}{PACOFF}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{PACOFF}{0} & +\cross{PACOFF}{1} & +\cross{PACOFF}{-?} \\ +\cross{PACOFF}{?**?} & +\cross{PACOFF}{?*?} & +\cross{PACOFF}{?+?} \\ +\cross{PACOFF}{?-?} & +\cross{PACOFF}{?/?} & +\cross{PACOFF}{?=?} \\ +\cross{PACOFF}{?\^{}?} & +\cross{PACOFF}{?\~{}=?} & +\cross{PACOFF}{?quo?} \\ +\cross{PACOFF}{?rem?} & +\cross{PACOFF}{D} & +\cross{PACOFF}{algebraic?} \\ +\cross{PACOFF}{associates?} & +\cross{PACOFF}{characteristic} & +\cross{PACOFF}{charthRoot} \\ +\cross{PACOFF}{coerce} & +\cross{PACOFF}{conditionP} & +\cross{PACOFF}{conjugate} \\ +\cross{PACOFF}{createPrimitiveElement} & +\cross{PACOFF}{definingPolynomial} & +\cross{PACOFF}{degree} \\ +\cross{PACOFF}{differentiate} & +\cross{PACOFF}{dimension} & +\cross{PACOFF}{discreteLog} \\ +\cross{PACOFF}{distinguishedRootsOf} & +\cross{PACOFF}{divide} & +\cross{PACOFF}{euclideanSize} \\ +\cross{PACOFF}{expressIdealMember} & +\cross{PACOFF}{exquo} & +\cross{PACOFF}{extDegree} \\ +\cross{PACOFF}{extendedEuclidean} & +\cross{PACOFF}{extensionDegree} & +\cross{PACOFF}{factor} \\ +\cross{PACOFF}{factorsOfCyclicGroupSize} & +\cross{PACOFF}{Frobenius} & +\cross{PACOFF}{fullOutput} \\ +\cross{PACOFF}{gcd} & +\cross{PACOFF}{gcdPolynomial} & +\cross{PACOFF}{ground?} \\ +\cross{PACOFF}{hash} & +\cross{PACOFF}{inGroundField?} & +\cross{PACOFF}{index} \\ +\cross{PACOFF}{init} & +\cross{PACOFF}{inv} & +\cross{PACOFF}{latex} \\ +\cross{PACOFF}{lcm} & +\cross{PACOFF}{lift} & +\cross{PACOFF}{lookup} \\ +\cross{PACOFF}{maxTower} & +\cross{PACOFF}{multiEuclidean} & +\cross{PACOFF}{newElement} \\ +\cross{PACOFF}{nextItem} & +\cross{PACOFF}{one?} & +\cross{PACOFF}{order} \\ +\cross{PACOFF}{previousTower} & +\cross{PACOFF}{prime?} & +\cross{PACOFF}{primeFrobenius} \\ +\cross{PACOFF}{primitive?} & +\cross{PACOFF}{primitiveElement} & +\cross{PACOFF}{principalIdeal} \\ +\cross{PACOFF}{random} & +\cross{PACOFF}{recip} & +\cross{PACOFF}{reduce} \\ +\cross{PACOFF}{representationType} & +\cross{PACOFF}{retract} & +\cross{PACOFF}{retractIfCan} \\ +\cross{PACOFF}{sample} & +\cross{PACOFF}{setTower!} & +\cross{PACOFF}{size} \\ +\cross{PACOFF}{sizeLess?} & +\cross{PACOFF}{squareFree} & +\cross{PACOFF}{squareFreePart} \\ +\cross{PACOFF}{subtractIfCan} & +\cross{PACOFF}{tableForDiscreteLogarithm} & +\cross{PACOFF}{transcendenceDegree} \\ +\cross{PACOFF}{transcendent?} & +\cross{PACOFF}{unit?} & +\cross{PACOFF}{unitCanonical} \\ +\cross{PACOFF}{unitNormal} & +\cross{PACOFF}{vectorise} & +\cross{PACOFF}{zero?} +\end{tabular} + +<>= +)abbrev domain PACOFF PseudoAlgebraicClosureOfFiniteField +++ Authors: Gaetan Hache +++ Date Created: june 1996 +++ Date Last Updated: May 2010 by Tim Daly +++ Description: +++ This domain implement dynamic extension using the simple notion of +++ tower extensions. A tower extension T of the ground field K is any +++ sequence of field extension (T : K_0, K_1, ..., K_i...,K_n) where K_0 = K +++ and for i =1,2,...,n, K_i is an extension of K_{i-1} of degree > 1 and +++ defined by an irreducible polynomial p(Z) in K_{i-1}. +++ Two towers (T_1: K_01, K_11,...,K_i1,...,K_n1) +++ and (T_2: K_02, K_12,...,K_i2,...,K_n2) are said to be related +++ if T_1 <= T_2 (or T_1 >= T_2), that is if K_i1 = K_i2 for i=1,2,...,n1 +++ (or i=1,2,...,n2). Any algebraic operations defined for several elements +++ are only defined if all of the concerned elements are comming from +++ a set of related tour extensions. +PseudoAlgebraicClosureOfFiniteField(K):Exports == Implementation where + K:FiniteFieldCategory + + INT ==> Integer + NNI ==> NonNegativeInteger + SUP ==> SparseUnivariatePolynomial + BOOLEAN ==> Boolean + PI ==> PositiveInteger + FFFACTSE ==> FiniteFieldFactorizationWithSizeParseBySideEffect + + recRep ==> Record(recEl:SUP(%),_ + recTower:SUP(%),_ + recDeg:PI,_ + recPrevTower:%,_ + recName:Symbol) + + Exports == Join(PseudoAlgebraicClosureOfFiniteFieldCategory,_ + ExtensionField(K)) with + + fullOutput: % -> OutputForm + + Implementation == add + Rep := Union(recRep,K) + + -- signature of local function + replaceRecEl: (%,SUP(%)) -> % + down: % -> % + localRandom: % -> % + repPolynomial : % -> SUP(%) + + replaceRecEl(a,el)== + a case K => a + aa:=copy a + aa.recEl := el + aa + + -- local variable + localTower :% := 1$K + + localSize :NNI := size()$K + -- implemetation of exported function + + degree(a)== + da:PositiveInteger:= extDegree a + coerce(da@PositiveInteger)$OnePointCompletion(PositiveInteger) + + repPolynomial(a)== + a case K => error "Is in ground field" + (a pretend recRep).recEl + + inv(a)== + a case K => inv(a)$K + aRecEl:= repPolynomial a + aDefPoly:= definingPolynomial a + aInv := extendedEuclidean( aRecEl , aDefPoly, 1 ) + aInv case "failed" => error "PACOFF : division by zero" + down replaceRecEl( a , aInv.coef1 ) + + a:% ** n:PositiveInteger == + zero?(a) => 0 + expt( a , n )$RepeatedSquaring(%) + + a:% ** n:NonNegativeInteger == + zero?(a) and zero?(n) => error " --- 0^0 not defined " + zero?(n) => 1$% + a ** ( n pretend PositiveInteger ) + + a:% ** n:Integer == + n < 0 => inv( a ** ( (-n) pretend PositiveInteger) ) + a ** ( n pretend NonNegativeInteger ) + + unitNormal(a)== + zero? a => [1,0,1] + [a,1,inv a] + + ground?(a)== a case K + + vectorise(a,lev)== + da:=extDegree a + dlev:=extDegree lev + dlev < da => _ + error "Cannot vectorise at a lower level than the element to vectorise" + lev case K => [a] + pa:SUP(%) + na:% + ^(da = dlev) => + pa:= monomial(a,0)$SUP(%) + na:= replaceRecEl(lev,pa) + vectorise(na,lev)$% + + prevLev:=previousTower(lev) + a case K => _ + error "At this point a is not suppose to be in K, big error" + aEl:=(a pretend recRep).recEl + daEl:=degree(definingPolynomial a)$SUP(%) + lv:=[vectorise(c,prevLev)$% for c in entries(vectorise(aEl,daEl)$SUP(%))] + concat lv + + size == localSize + + setTower!(a) == + localTower:=a + localSize:=(size()$K)**extDegree(a) + void() + + localRandom(a) == + --return a random element at the extension of a + a case K => random()$K + subF:=previousTower(a) + d:=degree(a.recTower)-1 + pol:=reduce("+",[monomial(localRandom(subF),i)$SUP(%) for i in 0..d]) + down replaceRecEl(a,pol) + + a:% + b:% == + (a case K) and (b case K) => a +$K b + extDegree(a) > extDegree(b) => b + a + res1:SUP(%) + res2:% + if extDegree(a) = extDegree(b) then + res1:= b.recEl +$SUP(%) a.recEl + res2:= replaceRecEl(b,res1) + else + res1:= b.recEl +$SUP(%) monomial(a,0)$SUP(%) + res2:= replaceRecEl(b,res1) + down(res2) + + a:% * b:% == + (a case K) and (b case K) => a *$K b + extDegree(a) > extDegree(b) => b * a + res1:SUP(%) + res2:% + if extDegree(a) = extDegree(b) then + res1:= b.recEl *$SUP(%) a.recEl rem b.recTower + res2:= replaceRecEl(b,res1) + else + res1:= b.recEl *$SUP(%) monomial(a,0)$SUP(%) + res2:= replaceRecEl(b,res1) + down(res2) + + distinguishedRootsOf(polyZero,ee) == + setTower!(ee) + zero?(polyZero) => error "to lazy to give you all the roots of 0 !!!" + factorf: Factored SUP % := factor(polyZero)$FFFACTSE(%,SUP(%)) + listFact:List SUP % := [pol.fctr for pol in factorList(factorf)] + listOfZeros:List(%):=empty() + for p in listFact repeat + root:=newElement(p, new(D::Symbol)$Symbol) + listOfZeros:List(%):=concat([ root ], listOfZeros) + listOfZeros + + random== + localRandom(localTower) + + extDegOfGrdField:PI := + i: PI := 1 + while characteristic()$K ** i < size()$K repeat + i:= i + 1 + i + + charthRoot(a : %): % == + --return a**(1/chararcteristic ) + a case K => charthRoot(retract a)$K + b:NNI := extDegree(a) * extDegOfGrdField + j := subtractIfCan(b,1) + if (j case "failed") then b:= 0 + else b:= j + c:= (characteristic()$K) ** b + a**c + + conjugate(a)== + a ** size()$K + + 1 == 1$K + + 0 == 0$K + + newElement(pol:SUP(%),subF:%,inName:Symbol): % == + -- pol is an irreducible polynomial over the field extension + -- given by subF. + -- The output of this function is a root of pol. + dp:=degree pol + one?(dp) => + listCoef:=coefficients(pol) + one?(#listCoef) => 0 + - last(listCoef) / first(listCoef) + ground?(pol) => error "Cannot create a new element with a constant" + d:PI := (dp pretend PI) * extDegree(subF) + [monomial(1$%,1),pol,d,subF,inName] :: Rep + + newElement(poll:SUP(%),inName:Symbol)== + newElement(poll,localTower,inName) + + maxTower(la)== + --return an element from the list la which is in the largest + --extension of the ground field + --PRECONDITION: all elements in same tower, else no meaning? + m:=reduce("max",[extDegree(a) for a in la]) + first [b for b in la | extDegree(b)=m] + + --Field operations + + a:% / b:% == a * inv(b) + + a:K * b:%== + (a :: %) * b + + b:% * a:K == a*b + + a:% - b:% == + a + (-b) + + a:% * b:Fraction(Integer) == + bn:=numer b + bd:=denom b + ebn:%:= bn * 1$% + ebd:%:= bd * 1$% + a * ebn * inv(ebd) + + -a:% == + a case K => -$K a + [-$SUP(%) (a pretend recRep).recEl,_ + (a pretend recRep).recTower,_ + (a pretend recRep).recDeg,_ + (a pretend recRep).recPrevTower,_ + (a pretend recRep).recName ] + + n:INT * a:% == + one?(n) => a + zero?(a) or zero?(n) => 0 + (n < 0) => - ((-n)*a) + mm:PositiveInteger:=(n pretend PositiveInteger) + double(mm,a)$RepeatedDoubling(%) + + bb:% = aa:% == + b:=down bb + a:=down aa + ^( extDegree(b) =$NNI extDegree(a) ) => false + (b case K) => ( (retract a) =$K (retract b) ) + rda := a :: recRep + rdb := b :: recRep + not (rda.recTower =$SUP(%) rdb.recTower) => false + rdb.recEl =$SUP(%) rda.recEl + + zero?(a:%) == + da:=down a -- just to be sure !!! + ^(da case K) => false + zero?(da)$K + + one?(a:%) == + da:= down a -- just to be sure !!! + ^(da case K) => false + one?(da)$K + + --Coerce Functions + + coerce(a:K) == a + retractIfCan(a)== + a case K => a + "failed" + + coerce(a:%):OutputForm == + a case K => (retract a)::OutputForm + outputForm((a pretend recRep).recEl,_ + ((a pretend recRep).recName)::OutputForm) $SUP(%) + fullOutput(a:%):OutputForm== + a case K => (retract a)::OutputForm + (a pretend recRep)::OutputForm + + definingPolynomial(a:%): SUP % == + a case K => 1 + (a pretend recRep).recTower + + extDegree(a:%): PI == + a case K => 1 + (a pretend recRep).recDeg + + previousTower(a:%):% == + a case K => error "No previous extension for ground field element" + (a pretend recRep).recPrevTower + + name(a:%):Symbol == + a case K => error "No name for ground field element" + (a pretend recRep).recName + + -- function related to the ground field + + lookup(a:%)== + aa:=down a + ^(aa case K) => _ + error "From NonGlobalDynamicExtensionOfFiniteField fnc Lookup: Cannot take i-dex" + lookup(retract aa)$K + + index(i)==(index(i)$K) + + fromPrimeField? == characteristic()$K = size()$K + + representationType == representationType()$K + + characteristic == characteristic()$K + + -- implementation of local functions + + down(a:%) == + a case K => a + aa:=(a pretend recRep) + elel := aa.recEl + ^ground?(elel) => a + gel:%:=ground(elel) + down(gel) + +@ + +<>= +"PACOFF" [color="#88FF44",href="bookvol10.3.pdf#nameddest=PRODUCT"] +"ALIST" [color="#88FF44",href="bookvol10.3.pdf#nameddest=ALIST"] +"PACOFF" -> "ALIST" + +@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{domain PACRAT PseudoAlgebraicClosureOfRationalNumber} <>= @@ -80839,6 +81376,75 @@ o )show PseudoAlgebraicClosureOfRationalNumber {\bf Exports:}\\ \begin{tabular}{lllll} \cross{PACRAT}{0} & +\cross{PACRAT}{0} & +\cross{PACRAT}{1} & +\cross{PACRAT}{-?} & +\cross{PACRAT}{?**?} \\ +\cross{PACRAT}{?*?} & +\cross{PACRAT}{?+?} & +\cross{PACRAT}{?-?} & +\cross{PACRAT}{?/?} \\ +\cross{PACRAT}{?=?} & +\cross{PACRAT}{?\^{}?} & +\cross{PACRAT}{?\~{}=?} & +\cross{PACRAT}{?quo?} \\ +\cross{PACRAT}{?rem?} & +\cross{PACRAT}{algebraic?} & +\cross{PACRAT}{associates?} & +\cross{PACRAT}{characteristic} \\ +\cross{PACRAT}{charthRoot} & +\cross{PACRAT}{coerce} & +\cross{PACRAT}{conjugate} & +\cross{PACRAT}{definingPolynomial} \\ +\cross{PACRAT}{degree} & +\cross{PACRAT}{dimension} & +\cross{PACRAT}{discreteLog} & +\cross{PACRAT}{distinguishedRootsOf} \\ +\cross{PACRAT}{divide} & +\cross{PACRAT}{euclideanSize} & +\cross{PACRAT}{expressIdealMember} & +\cross{PACRAT}{exquo} \\ +\cross{PACRAT}{extDegree} & +\cross{PACRAT}{extendedEuclidean} & +\cross{PACRAT}{extensionDegree} & +\cross{PACRAT}{factor} \\ +\cross{PACRAT}{Frobenius} & +\cross{PACRAT}{fullOutput} & +\cross{PACRAT}{gcd} & +\cross{PACRAT}{gcdPolynomial} \\ +\cross{PACRAT}{ground?} & +\cross{PACRAT}{hash} & +\cross{PACRAT}{inGroundField?} & +\cross{PACRAT}{inv} \\ +\cross{PACRAT}{latex} & +\cross{PACRAT}{lcm} & +\cross{PACRAT}{lift} & +\cross{PACRAT}{maxTower} \\ +\cross{PACRAT}{multiEuclidean} & +\cross{PACRAT}{newElement} & +\cross{PACRAT}{one?} & +\cross{PACRAT}{order} \\ +\cross{PACRAT}{previousTower} & +\cross{PACRAT}{prime?} & +\cross{PACRAT}{primeFrobenius} & +\cross{PACRAT}{principalIdeal} \\ +\cross{PACRAT}{recip} & +\cross{PACRAT}{reduce} & +\cross{PACRAT}{retract} & +\cross{PACRAT}{retractIfCan} \\ +\cross{PACRAT}{sample} & +\cross{PACRAT}{setTower!} & +\cross{PACRAT}{sizeLess?} & +\cross{PACRAT}{squareFree} \\ +\cross{PACRAT}{squareFreePart} & +\cross{PACRAT}{subtractIfCan} & +\cross{PACRAT}{transcendenceDegree} & +\cross{PACRAT}{transcendent?} \\ +\cross{PACRAT}{unit?} & +\cross{PACRAT}{unitCanonical} & +\cross{PACRAT}{unitNormal} & +\cross{PACRAT}{vectorise} \\ +\cross{PACRAT}{zero?} &&& \end{tabular} <>= @@ -81133,9 +81739,6 @@ PseudoAlgebraicClosureOfRationalNumber:Exports == Implementation where "PACRAT" -> "ALIST" @ - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter Q} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -123273,6 +123876,7 @@ Note that this code is not included in the generated catdef.spad file. <> <> <> +<> <> <> diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet index 76dd014..77487bc 100644 --- a/books/bookvol5.pamphlet +++ b/books/bookvol5.pamphlet @@ -24470,6 +24470,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed. (|PrimitiveFunctionCategory| . PRIMCAT) (|PrincipalIdealDomain| . PID) (|PriorityQueueAggregate| . PRQAGG) + (|PseudoAlgebraicClosureOfFiniteField| . PACOFF) (|PseudoAlgebraicClosureOfFiniteFieldCategory| . PACFFC) (|PseudoAlgebraicClosureOfPerfectFieldCategory| . PACPERC) (|PseudoAlgebraicClosureOfRationalNumber| . PACRAT) diff --git a/books/ps/v103pseudoalgebraicclosureoffinitefield.ps b/books/ps/v103pseudoalgebraicclosureoffinitefield.ps new file mode 100644 index 0000000..26af7aa --- /dev/null +++ b/books/ps/v103pseudoalgebraicclosureoffinitefield.ps @@ -0,0 +1,268 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Graphviz version 2.20.2 (Mon Mar 30 10:09:11 UTC 2009) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 116 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 80 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +% PACOFF +gsave +[ /Rect [ 0 72 72 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=PRODUCT) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 72 108 moveto +0 108 lineto +0 72 lineto +72 72 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 72 108 moveto +0 108 lineto +0 72 lineto +72 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +8 85.9 moveto 56 (PACOFF) alignedtext +grestore +% ALIST +gsave +[ /Rect [ 8 0 64 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=ALIST) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 64 36 moveto +8 36 lineto +8 0 lineto +64 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 64 36 moveto +8 36 lineto +8 0 lineto +64 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +15.5 13.9 moveto 41 (ALIST) alignedtext +grestore +% PACOFF->ALIST +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 36 72 moveto +36 64 36 55 36 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 39.5 46 moveto +36 36 lineto +32.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 39.5 46 moveto +36 36 lineto +32.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 116 152 +end +restore +%%EOF diff --git a/changelog b/changelog index 5b51908..b17de15 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,8 @@ +20100509 tpd src/axiom-website/patches.html 20100509.02.tpd.patch +20100509 tpd src/algebra/Makefile test and document PACOFF +20100509 tpd books/bookvol5 expose PseudoAlgebraicClosureOfFiniteField +20100509 tpd books/bookvol10.3 add PseudoAlgebraicClosureOfFiniteField +20100509 tpd books/ps/v103pseudoalgebraicclosureoffinitefield.ps added 20100509 tpd src/axiom-website/patches.html 20100509.01.tpd.patch 20100509 tpd src/algebra/Makefile document and test PACRAT 20100509 tpd books/bookvol5 expose PseudoAlgebraicClosureOfRationalNumber diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index 08e33de..2eb7dcd 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -9946,7 +9946,7 @@ LAYER16=\ ${OUT}/NAGS.o ${OUT}/NAGSP.o ${OUT}/NREP.o ${OUT}/NUMFMT.o \ ${OUT}/OC.o ${OUT}/OC-.o ${OUT}/ODEPACK.o ${OUT}/ODERAT.o \ ${OUT}/OMERR.o ${OUT}/OMERRK.o ${OUT}/OPTPACK.o ${OUT}/OSI.o \ - ${OUT}/OVAR.o ${OUT}/PACRAT.o \ + ${OUT}/OVAR.o ${OUT}/PACOFF.o ${OUT}/PACRAT.o \ ${OUT}/PATTERN.o ${OUT}/PMKERNEL.o ${OUT}/PMSYM.o \ ${OUT}/POLY.o ${OUT}/PRIMELT.o ${OUT}/QALGSET2.o ${OUT}/QEQUAT.o \ ${OUT}/QUATCAT.o ${OUT}/QUATCAT-.o ${OUT}/RECLOS.o ${OUT}/REP1.o \ @@ -11377,8 +11377,30 @@ LAYER16=\ /*"OVAR" -> {"STRING"; "CHAR"; "SINT"; "OUTFORM"; "PRIMARR"; "A1AGG-"}*/ /*"OVAR" -> {"ISTRING"; "SRAGG-"; "FLAGG-"; "LNAGG-"; "NNI"; "PI"}*/ +"PACOFF" [color="#88FF44",href="bookvol10.3.pdf#nameddest=PACOFF"] +/*"PACOFF" -> {"PACFFC"; "FFIELDC"; "FPC"; "FIELD"; "EUCDOM"; "PID"}*/ +/*"PACOFF" -> {"GCDDOM"; "INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"}*/ +/*"PACOFF" -> {"CABMON"; "ABELMON"; "ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"}*/ +/*"PACOFF" -> {"SGROUP"; "MONOID"; "LMODULE"; "BMODULE"; "RMODULE"}*/ +/*"PACOFF" -> {"ALGEBRA"; "MODULE"; "ENTIRER"; "UFD"; "DIVRING"; "CHARNZ"}*/ +/*"PACOFF" -> {"FINITE"; "STEP"; "DIFRING"; "PACPERC"; "XF"; "RETRACT"}*/ +/*"PACOFF" -> {"VSPACE"; "CHARZ"; "ORDSET"; "NNI"; "INT"; "PI"; "VECTOR"}*/ +/*"PACOFF" -> {"IVECTOR"; "IARRAY1"; "VECTCAT-"; "A1AGG-"; "FLAGG-"}*/ +/*"PACOFF" -> {"LNAGG-"; "IXAGG-"; "CLAGG-"; "HOAGG-"; "ORDSET-"; "AGG-"}*/ +/*"PACOFF" -> {"ELTAGG-"; "SETCAT-"; "BASTYPE-"; "MONOID-"; "ABELMON-"}*/ +/*"PACOFF" -> {"SGROUP-"; "SINT"; "LSAGG"; "STAGG"; "URAGG"; "RCAGG"}*/ +/*"PACOFF" -> {"HOAGG"; "AGG"; "TYPE"; "EVALAB"; "IEVALAB"; "LNAGG"; "IXAGG"}*/ +/*"PACOFF" -> {"ELTAGG"; "ELTAB"; "CLAGG"; "KONVERT"; "FLAGG"; "ELAGG"; "OM"}*/ +/*"PACOFF" -> {"LIST"; "ILIST"; "LSAGG-"; "STAGG-"; "ELAGG-"; "URAGG-"}*/ +/*"PACOFF" -> {"RCAGG-"; "UPOLYC"; "POLYCAT"; "PDRING"; "FAMR"; "AMR"}*/ +/*"PACOFF" -> {"FRETRCT"; "FLINEXP"; "LINEXP"; "PATMAB"; "PFECAT"; "DIFEXT"}*/ +/*"PACOFF" -> {"SYMBOL"; "REF"}* +"PACOFF" -> "ALIST" +/*"PACOFF" -> {"STRING"; "CHAR"; "OUTFORM"; "PRIMARR"; "ISTRING"; "SRAGG-"}*/ +/*"PACOFF" -> {"INS"; "OINTDOM"; "ORDRING"; "OAGROUP"; "OCAMON"; "OAMON"}*/ +/*"PACOFF" -> {"OASGP"; "CFCAT"; "REAL"; "BOOLEAN"; "OAMONS"}*/ + "PACRAT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=PACRAT"] -/*"PACRAT" -> { /*"PACRAT" -> {"PACRATC"; "PACPERC"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"}*/ /*"PACRAT" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"}*/ /*"PACRAT" -> {"ABELMON"; "ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE" "SGROUP"}*/ @@ -15963,6 +15985,21 @@ ${MID}/PACRAT.nrlib/code.o: ${MID}/PACRAT.spad | ${INTERPSYS} >${TMP}/trace ; \ fi ) @ +<>= + +PACOFFDEPS = PACPERC PACFFC FFFACTSE + +${MID}/PACOFF.nrlib/code.o: ${MID}/PACOFF.spad + @echo P3 making ${MID}/PACOFF.nrlib/code.o from ${MID}/PACOFF.spad + @ (cd ${MID} ; \ + if [ -z "${NOISE}" ] ; then \ + echo -e ")lib ${PACOFFDEPS} \n )co PACOFF.spad" \ + | ${INTERPSYS} ; \ + else \ + echo -e ")lib ${PACOFFDEPS} \n )co PACOFF.spad" \ + | ${INTERPSYS} >${TMP}/trace ; \ + fi ) +@ \section{Broken Files} These files are Aldor files @@ -16774,6 +16811,7 @@ SPADHELP=\ ${HELP}/Permutation.help \ ${HELP}/Polynomial.help \ ${HELP}/Product.help \ + ${HELP}/PseudoAlgebraicClosureOfFiniteField.help \ ${HELP}/PseudoAlgebraicClosureOfFiniteFieldCategory.help \ ${HELP}/PseudoAlgebraicClosureOfPerfectFieldCategory.help \ ${HELP}/PseudoAlgebraicClosureOfRationalNumber.help \ @@ -16924,6 +16962,7 @@ REGRESS= \ Plot.regress \ Polynomial.regress \ Product.regress \ + PseudoAlgebraicClosureOfFiniteField.regress \ PseudoAlgebraicClosureOfFiniteFieldCategory.regress \ PseudoAlgebraicClosureOfPerfectFieldCategory.regress \ PseudoAlgebraicClosureOfRationalNumber.regress \ @@ -18128,9 +18167,24 @@ ${HELP}/PseudoAlgebraicClosureOfPerfectFieldCategory.help: \ @echo "PseudoAlgebraicClosureOfPerfectFieldCategory (PACPERC)" \ >>${HELPFILE} +${HELP}/PseudoAlgebraicClosureOfFiniteField.help: \ + ${BOOKS}/bookvol10.3.pamphlet + @echo 7938 create PseudoAlgebraicClosureOfFiniteField.help \ + from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"PseudoAlgebraicClosureOfFiniteField.help" \ + ${BOOKS}/bookvol10.3.pamphlet \ + >${HELP}/PseudoAlgebraicClosureOfFiniteField.help + @cp ${HELP}/PseudoAlgebraicClosureOfFiniteField.help \ + ${HELP}/PACOFF.help + @${TANGLE} -R"PseudoAlgebraicClosureOfFiniteField.input" \ + ${BOOKS}/bookvol10.3.pamphlet \ + >${INPUT}/PseudoAlgebraicClosureOfFiniteField.input + @echo "PseudoAlgebraicClosureOfFiniteField (PACOFF)" \ + >>${HELPFILE} + ${HELP}/PseudoAlgebraicClosureOfRationalNumber.help: \ ${BOOKS}/bookvol10.3.pamphlet - @echo 7938 create PseudoAlgebraicClosureOfRationalNumber.help \ + @echo 7939 create PseudoAlgebraicClosureOfRationalNumber.help \ from ${BOOKS}/bookvol10.3.pamphlet @${TANGLE} -R"PseudoAlgebraicClosureOfRationalNumber.help" \ ${BOOKS}/bookvol10.3.pamphlet \ @@ -18145,7 +18199,7 @@ ${HELP}/PseudoAlgebraicClosureOfRationalNumber.help: \ ${HELP}/PseudoAlgebraicClosureOfRationalNumberCategory.help: \ ${BOOKS}/bookvol10.2.pamphlet - @echo 7939 create PseudoAlgebraicClosureOfRationalNumberCategory.help \ + @echo 7940 create PseudoAlgebraicClosureOfRationalNumberCategory.help \ from ${BOOKS}/bookvol10.2.pamphlet @${TANGLE} -R"PseudoAlgebraicClosureOfRationalNumberCategory.help" \ ${BOOKS}/bookvol10.2.pamphlet \ @@ -18159,7 +18213,7 @@ ${HELP}/PseudoAlgebraicClosureOfRationalNumberCategory.help: \ >>${HELPFILE} ${HELP}/Quaternion.help: ${BOOKS}/bookvol10.3.pamphlet - @echo 7940 create Quaternion.help from ${BOOKS}/bookvol10.3.pamphlet + @echo 7941 create Quaternion.help from ${BOOKS}/bookvol10.3.pamphlet @${TANGLE} -R"Quaternion.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/Quaternion.help @cp ${HELP}/Quaternion.help ${HELP}/QUAT.help diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 197cd9e..26f0d32 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -2677,5 +2677,7 @@ books/bookvol10.3 document and test Interval
books/bookvol10.2 fix PseudoAlgebraicClosureOfPerfectFieldCategory
20100509.01.tpd.patch books/bookvol10.3 add PseudoAlgebraicClosureOfRationalNumber
+20100509.02.tpd.patch +books/bookvol10.3 add PseudoAlgebraicClosureOfFiniteField