diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet index d66005d..4f02950 100644 --- a/books/bookvol10.3.pamphlet +++ b/books/bookvol10.3.pamphlet @@ -81547,6 +81547,217 @@ Product (A:SetCategory,B:SetCategory) : C == T @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain PROJSP ProjectiveSpace} +<>= +)set break resume +)sys rm -f ProjectiveSpace.output +)spool ProjectiveSpace.output +)set message test on +)set message auto off +)clear all + +--S 1 of 1 +)show ProjectiveSpace +--R ProjectiveSpace(dim: NonNegativeInteger,K: Field) is a domain constructor +--R Abbreviation for ProjectiveSpace is PROJSP +--R This constructor is exposed in this frame. +--R Issue )edit bookvol10.3.pamphlet to see algebra source code for PROJSP +--R +--R------------------------------- Operations -------------------------------- +--R ?=? : (%,%) -> Boolean coerce : List K -> % +--R coerce : % -> List K coerce : % -> OutputForm +--R conjugate : % -> % definingField : % -> K +--R degree : % -> PositiveInteger ?.? : (%,Integer) -> K +--R hash : % -> SingleInteger homogenize : % -> % +--R homogenize : (%,Integer) -> % lastNonNul : % -> Integer +--R lastNonNull : % -> Integer latex : % -> String +--R list : % -> List K orbit : % -> List % +--R pointValue : % -> List K projectivePoint : List K -> % +--R rational? : % -> Boolean setelt : (%,Integer,K) -> K +--R ?~=? : (%,%) -> Boolean +--R conjugate : (%,NonNegativeInteger) -> % +--R orbit : (%,NonNegativeInteger) -> List % +--R rational? : (%,NonNegativeInteger) -> Boolean +--R removeConjugate : List % -> List % +--R removeConjugate : (List %,NonNegativeInteger) -> List % +--R +--E 1 + +)spool +)lisp (bye) +@ +<>= +==================================================================== +ProjectiveSpace examples +==================================================================== + +See Also: +o )show ProjectiveSpace + +@ +\pagehead{ProjectiveSpace}{PROJSP} +\pagepic{ps/v103projectivespace.ps}{PROJSP}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{PROJSP}{?.?} & +\cross{PROJSP}{?=?} & +\cross{PROJSP}{?~=?} & +\cross{PROJSP}{coerce} & +\cross{PROJSP}{conjugate} \\ +\cross{PROJSP}{definingField} & +\cross{PROJSP}{degree} & +\cross{PROJSP}{hash} & +\cross{PROJSP}{homogenize} & +\cross{PROJSP}{lastNonNul} \\ +\cross{PROJSP}{lastNonNull} & +\cross{PROJSP}{latex} & +\cross{PROJSP}{list} & +\cross{PROJSP}{orbit} & +\cross{PROJSP}{orbit} \\ +\cross{PROJSP}{pointValue} & +\cross{PROJSP}{projectivePoint} & +\cross{PROJSP}{rational?} & +\cross{PROJSP}{removeConjugate} & +\cross{PROJSP}{setelt} \\ +\end{tabular} + +<>= +)abbrev domain PROJSP ProjectiveSpace +++ Author: Gaetan Hache +++ Date Created: 17 nov 1992 +++ Date Last Updated: May 2010 by Tim Daly +++ Description: +++ This is part of the PAFF package, related to projective space. +ProjectiveSpace(dim,K):Exports == Implementation where + + NNI ==> NonNegativeInteger + LIST ==> List + + dim:NNI + K:Field + + Exports ==> ProjectiveSpaceCategory(K) + + Implementation ==> List(K) add + + Rep:= List(K) + + coerce(pt:%):OutputForm == + dd:OutputForm:= ":" :: OutputForm + llout:List(OutputForm):=[ hconcat(dd, a::OutputForm) for a in rest pt] + lout:= cons( (first pt)::OutputForm , llout) + out:= hconcat lout + oo:=paren(out) + ee:OutputForm:= degree(pt) :: OutputForm + oo**ee + + definingField(pt)== + K has PseudoAlgebraicClosureOfPerfectFieldCategory => _ + maxTower(pt pretend Rep) + 1$K + + degree(pt)== + K has PseudoAlgebraicClosureOfPerfectFieldCategory => _ + extDegree definingField pt + 1 + + coerce(pt:%):List(K) == pt pretend Rep + + projectivePoint(pt:LIST(K))== + pt :: % + + list(ptt)== + ptt pretend Rep + + pointValue(ptt)== + ptt pretend Rep + + conjugate(p,e)== + lp:Rep:=p + pc:List(K):=[c**e for c in lp] + projectivePoint(pc) + + homogenize(ptt,nV)== + if K has Field then + pt:=list(ptt)$% + zero?(pt.nV) => error "Impossible to homogenize this point" + divPt:=pt.nV + ([(a/divPt) for a in pt]) + else + ptt + + rational?(p,n)== p=conjugate(p,n) + + rational?(p)==rational?(p,characteristic()$K) + + removeConjugate(l)==removeConjugate(l,characteristic()$K) + + removeConjugate(l:LIST(%),n:NNI):LIST(%)== + if K has FiniteFieldCategory then + allconj:LIST(%):=empty() + conjrem:LIST(%):=empty() + for p in l repeat + if ^member?(p,allconj) then + conjrem:=cons(p,conjrem) + allconj:=concat(allconj,orbit(p,n)) + conjrem + else + error "The field is not finite" + + conjugate(p)==conjugate(p,characteristic()$K) + + orbit(p)==orbit(p,characteristic()$K) + + orbit(p,e)== + if K has FiniteFieldCategory then + l:LIST(%):=[p] + np:%:=conjugate(p,e) + flag:=^(np=p)::Boolean + while flag repeat + l:=concat(np,l) + np:=conjugate(np,e) + flag:=not (np=p)::Boolean + l + else + error "Cannot compute the conjugate" + + aa:% = bb:% == + ah:=homogenize(aa) + bh:=homogenize(bb) + ah =$Rep bh + + coerce(pt:LIST(K))== + ^(dim=#pt) => error "Le point n'a pas la bonne dimension" + reduce("and",[zero?(a) for a in pt]) => _ + error "Ce n'est pas un point projectif" + ptt:%:= pt + homogenize ptt + + homogenize(ptt)== + homogenize(ptt,lastNonNull(ptt)) + + nonZero?: K -> Boolean + nonZero?(a)== + not(zero?(a)) + + lastNonNull(ptt)== + pt:=ptt pretend Rep + (dim pretend Integer)+1-_ + (position("nonZero?",(reverse(pt)$LIST(K)))$LIST(K)) + + lastNonNul(pt)==lastNonNull(pt) + +@ +<>= +"PROJSP" [color="#88FF44",href="bookvol10.3.pdf#nameddest=PROJSP"]; +"PACPERC" [color=lightblue,href="bookvol10.2.pdf#nameddest=PACPERC"]; +"FPC" [color=lightblue,href="bookvol10.2.pdf#nameddest=FPC"]; +"PROJSP" -> "PACPERC" +"PROJSP" -> "FPC" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{domain PACOFF PseudoAlgebraicClosureOfFiniteField} <>= )set break resume @@ -124697,6 +124908,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 d9fe6ae..60c4db5 100644 --- a/books/bookvol5.pamphlet +++ b/books/bookvol5.pamphlet @@ -24099,6 +24099,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed. (|PrimeField| . PF) (|PrimitiveArrayFunctions2| . PRIMARR2) (|PrintPackage| . PRINT) + (|ProjectiveSpace| . PROJSP) (|QuadraticForm| . QFORM) (|QuasiComponentPackage| . QCMPACK) (|Quaternion| . QUAT) diff --git a/books/ps/v103projectivespace.ps b/books/ps/v103projectivespace.ps new file mode 100644 index 0000000..76e3fa5 --- /dev/null +++ b/books/ps/v103projectivespace.ps @@ -0,0 +1,313 @@ +%!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 196 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 160 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +% PROJSP +gsave +[ /Rect [ 48 72 116 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=PROJSP) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 116 108 moveto +48 108 lineto +48 72 lineto +116 72 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 116 108 moveto +48 108 lineto +48 72 lineto +116 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +55.5 85.9 moveto 53 (PROJSP) alignedtext +grestore +% PACPERC +gsave +[ /Rect [ 0 0 80 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PACPERC) >> + /Subtype /Link +/ANN pdfmark +0.537 0.247 0.902 nodecolor +newpath 80 36 moveto +0 36 lineto +0 0 lineto +80 0 lineto +closepath fill +1 setlinewidth +filled +0.537 0.247 0.902 nodecolor +newpath 80 36 moveto +0 36 lineto +0 0 lineto +80 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +7.5 13.9 moveto 65 (PACPERC) alignedtext +grestore +% PROJSP->PACPERC +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 71 72 moveto +66 64 61 54 55 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 57.92 43.04 moveto +50 36 lineto +51.8 46.44 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 57.92 43.04 moveto +50 36 lineto +51.8 46.44 lineto +closepath stroke +grestore +% FPC +gsave +[ /Rect [ 98 0 152 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FPC) >> + /Subtype /Link +/ANN pdfmark +0.537 0.247 0.902 nodecolor +newpath 152 36 moveto +98 36 lineto +98 0 lineto +152 0 lineto +closepath fill +1 setlinewidth +filled +0.537 0.247 0.902 nodecolor +newpath 152 36 moveto +98 36 lineto +98 0 lineto +152 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +111.5 13.9 moveto 27 (FPC) alignedtext +grestore +% PROJSP->FPC +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 93 72 moveto +98 64 104 54 109 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 112.2 46.44 moveto +114 36 lineto +106.08 43.04 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 112.2 46.44 moveto +114 36 lineto +106.08 43.04 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 196 152 +end +restore +%%EOF diff --git a/changelog b/changelog index 8769e0a..2b7e61f 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,8 @@ +20100515 tpd src/axiom-website/patches.html 20100515.02.tpd.patch +20100515 tpd src/algebra/Makefile help and test files for PROJSP +20100515 tpd books/bookvol5 expose ProjectiveSpace +20100515 tpd books/bookvol10.3 add ProjectiveSpace +20100515 tpd books/ps/v103projectivespace.ps added 20100515 tpd src/axiom-website/patches.html 20100515.01.tpd.patch 20100515 tpd src/algebra/Makefile help and test files for PRSPCAT 20100515 tpd books/bookvol5 expose ProjectiveSpaceCategory diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index 590fce4..aef592d 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -3656,8 +3656,9 @@ LAYER8=\ ${OUT}/INTHEORY.o ${OUT}/IRREDFFX.o ${OUT}/LFCAT.o ${OUT}/LODOCAT.o \ ${OUT}/LODOCAT-.o ${OUT}/LWORD.o ${OUT}/MATCAT.o ${OUT}/MATCAT-.o \ ${OUT}/MATSTOR.o ${OUT}/ORESUP.o ${OUT}/OREPCTO.o ${OUT}/OREUP.o \ - ${OUT}/PACFFC.o \ + ${OUT}/PACFFC.o \ ${OUT}/PLOT3D.o ${OUT}/PR.o ${OUT}/PREASSOC.o ${OUT}/PRIMARR2.o \ + ${OUT}/PROJSP.o \ ${OUT}/REDORDER.o ${OUT}/SRAGG.o ${OUT}/SRAGG-.o ${OUT}/STREAM.o \ ${OUT}/SYMPOLY.o ${OUT}/TS.o ${OUT}/TUPLE.o ${OUT}/UPSCAT.o \ ${OUT}/UPSCAT-.o ${OUT}/VECTCAT.o ${OUT}/VECTCAT-.o ${OUT}/XDPOLY.o \ @@ -4122,6 +4123,24 @@ LAYER8=\ /*"PRIMARR2" -> {"BASTYPE"; "KOERCE"; "EVALAB"; "IEVALAB"; "ELTAGG"}*/ /*"PRIMARR2" -> {"ELTAB"; "CLAGG"; "KONVERT"; "ORDSET"}*/ +"PROJSP" [color="#88FF44",href="bookvol10.3.pdf#nameddest=PROJSP", + shape=ellipse] +/*"PROJSP" -> {"PRSPCAT"; "SETCATD"; "SETCAT"; "BASTYPE"; "KOERCE"}*/ +/*"PROJSP" -> {"FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"}*/ +/*"PROJSP" -> {"COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"; "FFIELDC"}*/ +/*"PROJSP" -> {"ABELMON"; "ABELSG"; "SGROUP"; "MONOID"; "LMODULE"}*/ +/*"PROJSP" -> {"BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"; "ENTIRER"}*/ +/*"PROJSP" -> {"UFD"; "DIVRING"; "INT"; "LIST"; "ILIST"; "PI"; "NNI"}*/ +"PROJSP" -> "PACPERC" +"PROJSP" -> "FPC" +/*"PROJSP" -> {"CHARNZ"; "FINITE"; "STEP"; "DIFRING"; "LSAGG-"; "STAGG-"}*/ +/*"PROJSP" -> {"ELAGG-"; "FLAGG-"; "URAGG-"; "LNAGG-"; "RCAGG-"; "IXAGG-"}*/ +/*"PROJSP" -> {"CLAGG-"; "HOAGG-"; "ORDSET-"; "AGG-"; "ELTAGG-"; "SETCAT-"}*/ +/*"PROJSP" -> {"BASTYPE-"; "LSAGG"; "STAGG"; "URAGG"; "RCAGG"; "HOAGG"}*/ +/*"PROJSP" -> {"AGG"; "TYPE"; "EVALAB"; "IEVALAB"; "LNAGG"; "IXAGG"}*/ +/*"PROJSP" -> {"ELTAGG"; "ELTAB"; "CLAGG"; "KONVERT"; "FLAGG"; "ORDSET"}*/ +/*"PROJSP" -> {"ELAGG"; "OM"; "BOOLEAN"}*/ + "REDORDER" [color="#FF4488",href="bookvol10.4.pdf#nameddest=REDORDER"] /*"REDORDER" -> {"FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"}*/ /*"REDORDER" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/ @@ -16269,6 +16288,21 @@ ${MID}/PRSPCAT.nrlib/code.o: ${MID}/PRSPCAT.spad | ${INTERPSYS} >${TMP}/trace ; \ fi ) @ +<>= + +PROJSPDEPS = SETCATD PRSPCAT PACPERC + +${MID}/PROJSP.nrlib/code.o: ${MID}/PROJSP.spad + @echo P3 making ${MID}/PROJSP.nrlib/code.o from ${MID}/PROJSP.spad + @ (cd ${MID} ; \ + if [ -z "${NOISE}" ] ; then \ + echo -e ")lib ${PROJSPDEPS} \n )co PROJSP.spad" \ + | ${INTERPSYS} ; \ + else \ + echo -e ")lib ${PROJSPDEPS} \n )co PROJSP.spad" \ + | ${INTERPSYS} >${TMP}/trace ; \ + fi ) +@ \section{Broken Files} These files are Aldor files @@ -17088,6 +17122,7 @@ SPADHELP=\ ${HELP}/Permutation.help \ ${HELP}/Polynomial.help \ ${HELP}/Product.help \ + ${HELP}/ProjectiveSpace.help \ ${HELP}/ProjectiveSpaceCategory.help \ ${HELP}/PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help \ ${HELP}/PseudoAlgebraicClosureOfFiniteField.help \ @@ -17252,6 +17287,7 @@ REGRESS= \ Plot.regress \ Polynomial.regress \ Product.regress \ + ProjectiveSpace.regress \ ProjectiveSpaceCategory.regress \ PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.regress \ PseudoAlgebraicClosureOfFiniteField.regress \ @@ -18533,6 +18569,18 @@ ${HELP}/Product.help: ${BOOKS}/bookvol10.3.pamphlet >${INPUT}/Product.input @echo "Product (PRODUCT)" >>${HELPFILE} +${HELP}/ProjectiveSpace.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7936 create ProjectiveSpace.help from \ + ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"ProjectiveSpace.help" \ + ${BOOKS}/bookvol10.3.pamphlet \ + >${HELP}/ProjectiveSpace.help + @cp ${HELP}/ProjectiveSpace.help ${HELP}/PROJSP.help + @${TANGLE} -R"ProjectiveSpace.input" \ + ${BOOKS}/bookvol10.3.pamphlet \ + >${INPUT}/ProjectiveSpace.input + @echo "ProjectiveSpace (PROJSP)" >>${HELPFILE} + ${HELP}/ProjectiveSpaceCategory.help: ${BOOKS}/bookvol10.2.pamphlet @echo 7937 create ProjectiveSpaceCategory.help from \ ${BOOKS}/bookvol10.2.pamphlet diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 483d56c..0f95e2b 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -2717,5 +2717,7 @@ books/bookvol10.2 add SetCategoryWithDegree
books/bookvolbib Buh05 DLMF Mah05 Sei95 Seixx Sch92 SCC92 WJST90 20100515.01.tpd.patch books/bookvol10.2 add ProjectiveSpaceCategory
+20100515.02.tpd.patch +books/bookvol10.3 add ProjectiveSpace