os muldif
Toshio Oshima
August 28, 2024

Contents
1

List of Functions
1.1 Functions related to diﬀerential operators . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1
Fundamental functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2
Fractional calculus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.3
Some operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Useful functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1
Extended function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2
Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.3
Polynomials and rational functions . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.4
Functions with real/complex variables . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.5
Lists and vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.6
Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.7
Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.8
Permutations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.9
TEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.10Lines and curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.11
Drawing curves and graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.12
Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.13
Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
3
3
4
7
7
7
8
8
9
9
9
9
9
9
9
9
9
9

2

Risa/Asir
2.1 Risa/Asir and os muldif.rr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1
Install os muldif.rr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11
11
12

3

Functions
14
3.1 Functions related to diﬀerential operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.1
Fundamental functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.2
Fractional calculus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.3
Some operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3.2 Useful functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.1
Extended function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.2
Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3.2.3
Polynomials and rational functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3.2.4
Functions with real/complex variables . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.2.5
Lists and vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.2.6
Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

1

3.2.7
Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.2.8
Permutations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.2.9
TEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.2.10Lines and curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.11
Drawing curves and graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.12
Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.12.1
Make tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.12.2
Make tables and matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.12.3
Mathematical tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.12.4
Table of score distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.12.5
Tayler’s expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.12.6
Slide scale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.13
Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.2.14
Supplement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.2.14.1
Input matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.2.14.2
Plane ﬁgure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.2.14.3
Function by list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.2.14.4
Analyze functions with values in real/complex numbers . . . . . . . . . . . . . 119
3.2.14.5
Data by table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.2.14.6
Finite sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.3 Functions in the original library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.4 Functions in the contributed library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Index

121

2

os_muldif.rr for Risa/Asir
A library for computing (ordinary/partial) diﬀerential operators
by Toshio Oshima
This note is a product of an on-going project translating the manual os_muldif.pdf of a library os_muldif.rr of Risa\Asir into English. Currently this note contains only a small part of
os_muldif.pdf related to the functions which analyze linear ordinary diﬀerential equations withpolynomial coeﬃcients.
The explanation of the functions without a short explanation starting with ”::” is not yet translated.
The number at the head of the name of a function coincides with the one in os_muldif.pdf. The number
skipped in this note corresponds to a function which is not yet explained in this note.

1 List of Functions
1.1 Functions related to diﬀerential operators
The following functions are in a module and we call the functions by putting os_md. at the head suchas os_md.muldo().
1.1.1 Fundamental functions
1. muldo(p1 ,p2 ,[x,∂x ]|lim=n) or muldo(p1 ,p2 ,x|lim=n)muldo(p1 ,p2 ,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .]|lim=n):: Returns the product of （a matrix of）ordinary (partial) diﬀerential operators whose coeﬃcientsare rational functions (or elementary functions) (⇐ [∂x , x] = 1)
2. caldo([p1 ,p2 ,. . .],[x,∂x ]|mono=f ) or caldo([p1 ,p2 ,. . .],[[x1 ,∂x1 ],. . .]|mono=f ):: Returns the sum of products of diﬀerential operators
3. muledo(p1 ,p2 ,[x,∂x ]) or muledo(p1 ,p2 ,x):: Returns the product (matrices) of diﬀerential operators of Euler type (⇐ [∂x , x] = x)
4. transpdo(p,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .],[[y1 ,∂y1 ],[y2 ,∂y2 ],. . .]|ex=1,inv=f )∑:: Transformation of diﬀerential operator p by xi 7→ yi = yi (x), ∂xj 7→ ∂yj = cj (x) + ν ajν (x)∂xν
5. translpdo(p,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .],mat)∑:: Transforms a diﬀerential operator p by the coordinate transformation xi 7→ j (mat)ij xj
6. transppow([[x1 ,∂x1 ],. . .,[xn ,∂xn ]],m):: Coordinate transformations by products of powers of coordinates
7. appldo(p,r,[x,∂x ]|Pfaff=1) or appldo(p,r,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .]):: Applies a (matrix of) diﬀerential operator to a (matrix of) rational function or elementaryfunction or a Pfaﬃan system
8. adj(p,[x,∂x ]) or adj(p,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .]):: Returns the formal adjoint of a (matrix of) diﬀerential operator p
9. psymbol(p,,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .]):: principal symbol of diﬀerential operator
10. sftpexp(p,[x,∂x ],q,r) or sftpexp(p,[[x1 ,∂x1 ],. . .],q,r]):: Returns q −r ◦ p ◦ q r
11. appledo(p,r,[x,∂x ]):: Applies a diﬀerential operator of Euler type to a rational function
12. divdo(p1 ,p2 ,[x,∂x ]|rev=1):: Calculates divisions of ordinary diﬀerential operators
13. mygcd(p1 ,p2 ,[x, ∂x ]|rev=1,dviout=n) or mygcd(p1 ,p2 ,[x]|rev=1,dviout=n)
mygcd(p1 ,p2 ,x|dviout=n), mygcd(p1 ,p2 ,0|dviout=n)3

:: GCD of ordinary diﬀerential operators (or polynomials of x or positive integers) p1 and p2
14. mylcm(p1 ,p2 ,[x, ∂x ]|rev=1) or mylcm(p1 ,p2 ,[x]|rev=1)
mylcm(p1 ,p2 ,x), mylcm(p1 ,p2 ,0):: LCM of ordinary diﬀerential operators (or polynomials of x or positive integers) p1 and p2
15. m1div(m,n,[x,∂x ]) or m1div(m,n,[x]) or m1div(m,n,x):: Returns R = [R[0], R[1]] such that m = R[1](∂x − n) + R[0] (or m = R[1](x − n) + R[0]) for asquare matrix m of diﬀerential operators with coeﬃcients in rational functions (or polynomials ofx)
16. qdo(p1 ,p2 ,[x,∂x ]):: Returns the list [q1 , q2 ] of diﬀerential operators satisfying q1 p2 u = 0 and q2 p2 u = u for adiﬀerential equation p1 u = 0
17. mdivisor(m,[x,∂]|trans=1,step=1,dviout=t)
mdivisor(m,x|trans=1,step=1,dviout=t), mdivisor(m,0|trans=1,step=1,dviout=t):: Elementary divisors of a matrix of ordinary diﬀerential operators/polynomials with coeﬃcientsin rational functions/integers
18. sqrtdo(p,[x,∂x ]) ?
19. toeul(p,[x,∂x ],n):: Expresses a (Fuchsian) diﬀerential operator p in Euler type at x = n
20. fromeul(p,[x,px ],n):: Transforms the diﬀerential operator p of Euler type into normal form (the above inverse)
21. expat(p,[x,∂x ],n):: Returns characteristic exponents of a diﬀerential operator p at a regular singular point x = n
22. sftexp(p,[x,∂x ],n,r):: Returns (x − n)−r ◦ p ◦ (x − n)r
23. fractrans(p,[x,∂x ],n0 ,n1 ,n2 ):: Transforms p by the linear fractional transformation of x with (n0 , n1 , n2 ) 7→ (0, 1, ∞)24. chkexp(p,[x, ∂x ],n,r,m):: Returns condition so that p has the exponent [r](m) at x = n
25. soldif(p,[x, ∂x ],n,q,m)26. okuboetos(p, [x, ∂x ]| diag=[c1 , c2 , . . . ]):: Transforms a single ODE of Okubo type to 1st order Okubo system
27. stoe(p,[x, dx],m):: Converts a ﬁrst order system of ODE to a single ODE
28. etos(p,[x, dx],m):: Converts a single ODE to a ﬁrst order system of ODE
29. dform(ℓ, x|dif=1)∑∑:: Calculates diﬀerential 1-formℓ[i][0]d(ℓ[i][1]) or 2-formℓ[i][0]d(ℓ[i][1]) ∧ d(ℓ[i][2]) with variables x[0], x[1], . . .. Option dif=1 means external derivative of 1-form
30. solpokubo(p,[x, ∂x ],n):: Returns eigenvalues and eigenpolynomials of a single ODE of Okubo type
31. getSSE(p,[x,y,. . . ]|get=s):: Get singularities, rank,... of holonomic systems deﬁned by the ideal p etc.
1.1.2 Fractional calculus
The functions in this section realize the results of [O3]，[O5], [O7], [O9] and [O10].
32. laplace(p,[x, ∂x ]) or laplace(p,[[x1 , ∂x1 ],[x2 , ∂x2 ], . . . ]):: (partial) Laplace transform of a diﬀerential operator p
33. laplace1(p,[x, ∂x ]) or laplace1(p,[[x1 , ∂x1 ],[x2 , ∂x2 ], . . . ]):: Inverse of (partial) Laplace transform of a diﬀerential operator p
4

34. mc(p,[x, ∂x ],r):: Middle convolution mcr (p) of a diﬀerential operator p
35. mce(p,[x, ∂x ],n,r):: Transformation p into (∂x − n)−r ◦ p ◦ (∂x − n)r
36. rede(p,[x, ∂x ]) or rede(p,[[x1 , ∂x1 ],[x2 , ∂x2 ], . . . ]):: Reduced representative of a diﬀerential operator p
37. ad(p,[x, ∂x ],f ):: Transform of a diﬀerential operator p deﬁned by ∂x → ∂x − f
38. add(p,[x, ∂x ],f ):: Addition of a diﬀerential operator p deﬁned the map ∂x → ∂x − f , namely, rede(ad())
39. vadd(p,[x, ∂x ],[[c0 , r0 ],[c1 , r1 ], . . . ])∑rj x j:: Versal addition add(p,[x, ∂x ], j≥0 ∏j (1−c
)
ν x)
ν=0
40. addl(p,[x, ∂x ],f ):: laplace1(add(laplace()))
41. cotr(p,[x, ∂x ],f ):: Transform of a diﬀerential operator p deﬁned by x 7→ f (x)42. rcotr(p,[x, ∂x ],f ):: Reduced representative of the transformation P deﬁned by x 7→ f (x)43. s2sp(p|num=1,std=k,short=1):: Converts a list of lists of numbers to and from its expression using a list of strings
44. s2csp(p|n=f ):: Converts expressions of a spectral type with unramiﬁed irregular singularities
45. chkspt(m|mat=1,dumb=1) or chkspt(m|opt=t,dumb=1) or fspt(m,t):: Checks a tuple of partitions m (spectral type) or a generalized Riemann scheme（GRS）andreturns [pts, ord, idx, f uchs, rod, redsp, f spt]
opt="sp", "basic", "construct", "strip", "short", "long", "sort", "idx"
46. spgen(n|eq=1,str=1,std=f ,pt=[k, ℓ],sp=m,basic=1):: Gets rigid tuples of partitions with the rank ≤ n (or the orbit of a given tuple)
If n ≤ 0, fundamental tuples with the index of the rigidity n are obtained.
47. sproot(p,t|dviout=1,only=k,sym=t,null=1):: Returns informations of the root corresponding to a spectral type t="base", "length", "type","part", "pair", "pairs", sp
48. spbasic(k,d|str=1,pt=[k,ℓ):: Returns the list of fundamental spectral types with rank d whose index of rigidity equals k
49. sp2grs(m,a,ℓ|mat=1):: Generates generalized Riemann scheme with a given spectral type
50. ssubgrs (m, ℓ)
51. mcgrs(m,[r1 , r2 , . . . , rn ]|mat=1,slm=[[k1 ,k2 ,. . .],m0 ]):: Applies middle convolutions and additions successively to a generalized Riemann scheme or asum of residue matrices
52. mcop(p,[r1 , r2 , . . . , rn ],[x, x1 , x2 , . . . ]):: Applies middle convolutions and additions successively to a (partial) diﬀerential operator p
53. redgrs(m|mat=1):: Returns 1-step reduction of generalized Riemann scheme of Fuchsian diﬀerential equation
54. getbygrs(m,t|perm=ℓ,var=v,pt=[p1 , . . . ],mat=1) or
getbygrs(m,[t,s1 , s2 , . . . ]|perm=ℓ,var=v,pt=[p1 , . . . ],mat=1):: Analyzes Fuchsian ODE deﬁned by generalized Riemann scheme (GRS) （GRS may be given ina short form or a spectral type)
t ="reduction", "construct", "connection", "operator", "series", "TeX", "Fuchs",5

"basic", "", "All", "irreducible", "recurrence"s ="TeX", "dviout", "keep", "simplify", "short", "general", "operator","irreducible", "sft", "top0", "x1", "x2"
ℓ is a permutation or transposition of singular points（cf. mperm()），var are variables of exponents（cf. sp2grs()）, p1 , . . . are position of singular points (except for ∞).
55. spslm(m,[k1 ,k2 ,. . .]):: Gets a semilocal monodromy of a rigid linear ordinary diﬀerential equation
56. shiftop(ℓ, s|zero=1,raw=k,all=t,dviout=1):: Gets the shift operator of rigid ODE with a spectral type ℓ corresponding to a shifts
57. shiftPfaff(a,b,g,x,[µ1 ,µ2 ]):: Transformation of an adjacent relation of Pfaﬃan systems under a middle convolution
58. conf1sp(m|x2= ± 1,conf=0):: Conﬂuence (Poincare rank 1) of a diﬀerential operator with spectral type m
59. pf2kz(m|all=1):: Converts a Pfaﬃan system m of n variables to a KZ system of n + 2 variables
60. confexp([[c0 ,f0 ],[c1 ,f1 ],...,[cm , fm ]]) confexp([[f1 ,. . .,fn ],[c1 ,. . .,cm ]]|sym=k]):: Conﬂuence of characteristic exponents
61. mcvm(n|var=x,z=1,get=g) mcvm([n1 ,n2 , . . .]|var=[a,b, . . . ],z=1,get=g)mcvm([r,k,i,j]|e=1,var=[a,b, . . . ]):: Middle convolution of versal unfolding
62. anal2sp(m,l):: Analyzes simultaneous spectral exponents m
63. mc2grs(g,r|top=0,dviout=k,div=ℓ,fig=s):: Transformation of simultaneous spectral exponents of KZ equation of 5 points in P1
64. newKZmat(k,l|raw=f ,base=1,ext=1)
65. midKZ(l,b|raw=1,skip=m,kill=f ,dviout=1):: diagonalization of residue matrices of KZ equation
66. mcfamily(i,j,[m1 , . . .],ℓ|mult=1,max=1,fix=[p1 , . . .],verb=1)h:: middle convolution of a family of commuting sets
67. mcset(x,k,ℓ):: middle convolution of a set
68. m2mc(ℓ,[a0 ,ay ,a1 ,c]|swap=1,small=1,simplify=0,MC=1)m2mc(ℓ,s|small=1,simplify=0,int=0,swap=t):: Addition+middle convolution of Pfaﬃan systemd(x−y)d(y−1)
du = (A0 dx+ A1 d(x−1)+ B0 dyx + Ay x−yx−1
y + B1 y−1 )u with respect to x-variable(ℓ = [A0 , Ay , A1 , B0 , B1 ]).
When ℓ is a spectral type or a Riemann scheme, s ="GRC", "GRSC", "extend", "Pfaff", "sp","pairs", "irreducible", "All", "swap" in the latter case69. mcmgrs(g,r|dviout=k):: Transform of simultaneous spectral exponents g of a KZ equation of several (≥ 5) points in P1
70. mmc(l,[µ,a1 ,...,an ]|full=1,homog=1,mult=f ):: Addition and middle convolution of ODE of Schlesinger type and a KZ equation
71. kzext([a1 , a2 , . . . , am ]|perm=σ):: extend to full KZ residue matrices
72. linfrac01(ℓ|over=1):: List of linear fractional transformations of x = 0, 1, ∞, y, z, . . . (ℓ = [x, y] etc.)
73. lft01(ℓ, t|tr=τ ):: Linear fractional transformations of ℓ = [x,y] or ℓ = [x,y1 ,y2 ,. . .,yq ]6

1.1.3 Some operators
74. okubo3e([p0,1 , . . . , p0,m ],[p1,1 , . . . , p1,n ],[p2,1 , . . . , p2,m+n |opt=1])
75. fuchs3e([p0,1 , . . . , p0,n ],[p1,1 , . . . , p1,n ],[p2,1 , . . . , p2,n ])76. ghg([p1,1 , p1,2 , ..., p1,m ],[p2,1 , p2,2 , ..., p2,n ]):: diﬀerential operator satisﬁed by generalized hypergeometric function m Fn (p1 ; p2 ; x)(cf. seriesHG())
77. ghg2([a1 , a2 , . . . , b],[a01 , a02 , . . . , b0 ]|raw=1,all=1,symbol=1,var=v):: generalized hypergeometric equation of many variablse
78. even4e([p1,1 , p1,2 , p1,3 , p1,4 ],[p2,1 , p2,2 ]):: Even family of order 4 (Rigid)
79. odd5e([p1,1 , p1,2 , p1,3 , p1,4 , p1,5 ],[p2,1 , p2,2 ]):: Odd family of order 5 (Rigid)
80. rigid211([p0,1 , p0,2 ],[p1,1 , p1,2 ],[q0 , q1 ]):: Type 211,211,211
81. extra6e([p1,1 , p1,2 , p1,3 , p1,4 , p1,5 , p1,6 ],[p2,1 , p2,2 ]):: Extra case (Rigid)
82. eofamily([p0,1 , p0,2 ],[p1,1 ],[p2,1 , . . . , p2,n ]):: Even/odd family (obsolete)
83. ev4s(p1 ,p2 ,p3 ,p4 ,p5 ):: Rigid restriction of Heckman-Opdam’s hypergeometric equation of type (BC2 , BC1 )84. b2e(p1 ,p2 ,p3 ,p4 ,p5 ):: Non-rigid restriction of Heckman-Opdam’s hypergeometric equation of type (BC2 , A1 )85. heun([a, b, c, d, e],p,r|):: Heun’s equation. r is an accessory parameter

1.2 Useful functions
The following functions are in a module and we call the functions by putting os_md. at the headsuch as os_md.myhelp().
1.2.1 Extended function
86. myhelp(h):: Displays the manual of os_muldif.rr
87. chkfun(f ,s):: Checks whether f (= a string) is deﬁned and load(s) if it is not
88. isMs():: Checks whether the operating system is Microsoft Windows
89. isyes(p|set=ℓ):: Deﬁnes a function returning 0 or 1
90. isall(f ,m):: Returns 0 if m contains an element satisfying f (p) = 0 and 1 otherwise
91. ptype(p,ℓ):: Returns type() regarding ℓ as the variable or ℓ as the list of variables
92. getline(Id|Max=m,CR=[r1 ,r2 ,..],LF=[l1 ,l2 ,...]):: An extension of get line()
93. keyin(s):: Shows s and waits a line input from keyboard and returns it
94. showbyshell(s)7

:: Executes s by shell and show the standard output in Risa/Asir
95. getbyshell(s):: Executes s by shell and puts the standard output to a ﬁle96. fcat(f ,s|exe=1):: Outputs s in a ﬁle f
97. makev([ℓ1 ,ℓ2 , . . . ]|num=1):: Makes a variable combining ℓ1 , ℓ2 . . .
98. shortv(p,[v1 ,v2 , . . .]|top=w):: Changes the variables v1 , . . . with indices contained in p into valiables with one letter
99. makenewv(ℓ|var=v,num=n):: Generates a new variable which is not used in ℓ100. isvar(p):: Is p a variable?
101. varargs(p|all=t):: Returns elementary functions and variables in p
102. pfargs(p,x|level=t):: Returns all functions and variables containing variable x
103. isdif(p):: Returns a list of the pairs of variable and its derivatives
104. mysubst(r,[v1 ,r1 ]|inv=1) mysubst(r,[[v1 ,r1 ], . . . ]|inv=1)
mysubst(r,[ℓ1 ,ℓ2 ]|lpair=1,inv=1):: Same as subst(r,v1 ,r1 , . . . ). Useful if r is complicated and r is a rational form
105. myswap(p,[x1 ,x2 ,. . .,xn ]):: Cyclic permutation (x1 , x2 , . . . , xn ) of a (list of) rational form(s)106. substnum(l,s,t|depth=d):: Substitution of elements of a list or a vector
107. mulsubst(r,[[p1,0 , p1,1 ],[p2,0 , p2,1 ], . . . ]|inv=1)
mulsubst(r,[ℓ0 ,ℓ1 ,...]|lpair=1,generate=k,short=1)
mulsubst(r,[ℓ0 ,ℓ1 ]|conj=f ) mulsubst(r,[ℓ0 ,ℓ1 ]|dform=1):: Simultaneous substitutions
108. fmult(f ,m,ℓ,n| · · · ):: Returns mlength(l) by mi 7→ mi+1 = f (mi ,ℓ[i],n[0], n[1], . . . | · · · ) (m0 = m)
109. mtransbys(f ,m,ℓ| · · · ):: Extends a function f (x) of scalar x to a function of a list, vector or matrix
110. mmulbys(f ,m,n,ℓ| · · · ):: Extends a pair of arguments of f to a a pair of matrices
111. cmpsimple(p,q|comp=t):: Copmares the simplicities of p and q
112. simplify(p,ℓ,t|var=[x1 , x2 , . . . ]):: Simpliﬁes p by using linear relations indicated by ℓ113. getel(m,i):: Returns m[i] if m is a list/vector/matrix and i is non-negative integer
114. evalred(r|opt=[[s1 ,t1 ],[s2 ,t2 ]...]):: Replaces sin(0), cos(0), exp(0) by 0, 1, 1 etc
1.2.2 Numbers
1.2.3 Polynomials and rational functions
202. fctrtos(r|var=ℓ,rev=1,dic=1,TeX=f ,dviout=1,lim=n,small=1,pages=1,add=s):: Transforms a rational function r to factorized strings

81.2.4 Functions with real/complex variables
1.2.5 Lists and vectors
1.2.6 Matrices
1.2.7 Strings
1.2.8 Permutations
1.2.9 TEX
386. show(p|opt=ℓ,raw=1):: Displays p by using TEX in a plausible format
387. dviout(p|clear=1,keep=1,delete=t,fctr=1,mult=1,subst=[s0, s1],eq=k,title=s):: Displays p
388. dviout0(ℓ) or dviout0([ℓ1 , ℓ2 , . . . ]) or dviout0(ℓ|opt=s):: Fundamental operations to display equations using TEX
363. ltotex(l|opt=s,pre="string",cr="cr",small=1,lim=ℓ,var=v):: Transforms a list to plausible TEX source which represents GRS or a table or a list etc.
1.2.10 Lines and curves
1.2.11 Drawing curves and graphs
1.2.12 Applications
1.2.13 Environments
466. Canvas:: Default size of the canvas of Risa/Asir467. AMSTeX:: TEX means AMSLATEX if this value equals 1
468. TeXEq:: Default display style of LATEX (dviout0(3) shows it)
469. TeXLim:: Maximal width referred to divide a long equations into lines by LATEX
470. TeXPages: Threshold value of the numbers of lines for a page in a display style of TEX (cf. fctrtos())
471. TikZ:: Flag using XY-pic or TikZ in TEX
472. XYPrec:: Number of ﬁgures after the decimal point in the expression of coordinates for graphic display
473. XYcm:: Unit is cm even in XY-pic
474. XYLim:: Maximal number of coordinates for a line in a source of XY-pic or TikZ
475. DVIOUTH:: A program to show explanations of functions indicated by myhelp()
476. DIROUT:: Directory where the source ﬁle of LATEX is put (it should be writable)
477. DVIOUTA:: Pathname of a program which compiles a source risaout.tex of LATEX under AMSTEX anddisplays it
478. DVIOUTB:: Pathname of a program which compiles a source risaout10.tex (or risaout10.tex) of LATEX
under AMSTEX and displays it. We can choose this setting or DVIOUTA in Risa/Asir479. DVIOUTL
Pathname of a program which compiles a source risaout0.tex of LATEX and displays it
9480. .muldif:: os_muldif.rr reads this ﬁle when it starts up
481. risatex.bat:: Program compiling the LATEX ﬁle which os_muldif.rr outputs and displaying it on a screen

102 Risa/Asir
Risa/Asir Risa/Asir is an open source general computer algebra system. Kobe distribution is being
developed by OpenXM committers. The original Risa/Asir is developed at Fujitsu Labs LTD.
The Kobe distribution works on Windows (32bit, 64bit），UNIX and MAC OS X and can be obtainedfrom
http://www.math.kobe-u.ac.jp/Asir/asir.html

2.1 Risa/Asir and os muldif.rr
We should remark that the calculations of rational functions by Risa/Asir may give diﬀerent resuls
from what we have expected. In particular. they happen for calculations of polynomials or diﬀerential
operators with coeﬃcient rational functions and matrices whose entries are rational functions. Here we
give some examples:[0] 2/x-1/x+1/x-1/x;(x^3)/(x^4)[1] x/(x+y)+y/(x+y);(x^2+2*y*x+y^2)/(x^2+2*y*x+y^2)[2] x/y*y/x;(y*x)/(y*x)[3] 1/(1/x);(x)/(1)[4] deg((a/b)*x^2,x);0[5] diff((1/a)*x+1/b,x);(b^2*a)/(b^2*a^2)[6] diff((x+1)^(-3),x);(-3*x^2-6*x-3)/(x^6+6*x^5+15*x^4+20*x^3+15*x^2+6*x+1)[7] A = newmat(2,2,[[a,0],[0,1/a]]);[ a 0 ][ 0 (1)/(a) ][8] det(A);internal error (SEGV)
return to toplevel[9] coef(x+1/a,1,x);0
The library os_muldif.rr [O6] was ﬁrst developped to avoid these inconvenient calculations and it isexpected to give more reasonable results.
In this note some explanation of current functions in os_muldif.rr is given but it may be tentativeand may be changed in future.
• If the command which("os_muldif.rr") shows the path to os_muldif.rr, os muldif.rr can beloaded.
If the path is not shown, put os_muldif.rr in the load path of Risa/Asir (cf. ctrl("loadpath").
11

It is usually in ./lib/asir-contrib where names.rr etc.ẽxist. It is under ./lib/ where there arelibraries of Risa/Asir. Note that the command which("names.rr") after stating up Risa/Asirshows the place. Then os_muldif.rr is loaded by the command load("os_muldif.rr")$ and we
can use the functions in os_muldif.rr.
• Risa/Asir loads os_muldif.rr as a module, we should put os_md. at the head of the name of afunction to call a function.
• If load("names.rr") is performed (a package of Risa/Asir may perform this command at thestart up), then os_muldif.rr can output results by TEX source which enables us to easily readand understand the results.
If there is a path to dviout (a previewer of TEX) in Windows, the results can be shown by dviout.
By a certain setting it is also possible under other environment according to its TEX system andthe way to handle it. Namely a DIV ﬁle or a PDF ﬁle is created by the TEX system and it can bedisplayed on a screen.
• chkfun(1,0) shows Version of Risa/Asir.
Some of the characteristic functions of os_muldif,rr are dviout()，show(), ltotex(), fctrtos(),
mtotex(), myhelp(), xy2graph(), mtoupper(), mdivisor(), getbygrs(), shiftop(), m2mc()，
mc2grs(), scale() etc.
2.1.1 Install os muldif.rr• If os_muldif.rr exists in the load path of Risa/Asir which is shown by the commandctrl("loadpath"), the library os_muldif.rr is loaded by the command[0] load("os_muldif.rr")$
Loaded muldif Ver. 00140330 (Toshio Oshima)
and the functions deﬁned by os_muldif.rr can be used.
• The function in os_muldif.rr is called by putting os_md. at the head of the name of the function.
In the following os_md. is omitted except for examples.
• If a line
import("os_muldif.rr")$is added in the ﬁle .asirrc which exists in the directory indicated by get rootdir(), thenos_muldif.rr is automatically loaded when Risa/Asir starts up. An example of .asirrc is
import("contrib-setord.rr")$
import("gr")$
import("primdec")$
import("katsura")$import("bfct")$
import("names.rr")$
import("oxrfc103.rr")$
import("os_muldif.rr")$end$• We can omit the head os_md. for functions which are frequently used by deﬁning new corresponding
functions. For example we prepare a ﬁle mydef.rr written as
def cat(X){return os_md.mycat(X|option_list=getopt());}

12def myhelp(X){return os_md.myhelp(X|option_list=getopt());}
def show(X){return os_md.show(X|option_list=getopt());}
・・・

cat("mydef:\n cat, myhelp, show,...")$and put it in the loadpath of Risa/Asir and write a line
import("mydef.rr")$
in .asirrc.
• A certain setting is necessary so that os_muldif.rr directly shows its results on the display screen
using TEX if TEX is installed. The setting depends on the operating system and a command tocompile a TEX source ﬁle and show a dvi ﬁle or PDF ﬂe on a display screen. See risatex.bat
and related subjects.
• The function myhelp("fn") in os_muldif.rr can show the explanation of a given function
fn in a certain environment. See DVIOUTH and related explanation. Put os_muldif.dvi and
os_muldif.pdf in get rootdir()/help. Then if dviout works under Microsoft Windows, thesetting of DVIOUTH may not be necessary.

13

3 Functions
3.1 Functions related to diﬀerential operators
The following functions are in a module and we call the functions by putting os_md. at the head suchas os_md.muldo().
3.1.1 Fundamental functions
1. muldo(p1 ,p2 ,[x,∂x ]|lim=n) or muldo(p1 ,p2 ,x|lim=n)muldo(p1 ,p2 ,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .]|lim=n) or muldo(p1 ,p2 ,[[x1 ],x2 ,. . .]|lim=n):: Returns the product of ordinary (partial) diﬀerential operators whose coeﬃcients are rational
functions (or elementary functions) (⇐ [∂x , x] = 1)
• Rational functions are quotients of polynomials with coeﬃcients in rational numbers (or complex numbers whose real and imaginary parts are rational numbers （cf. Type of numbers）．
• If ∂x is standard dx, [x,∂x ] may be x in short.
This is same for other following functions.
• If p is a partial diﬀerential operators, the third parameter can be [[x],[y,v],z] for example.
This is understood [[x,dx],[y,v],[z,dz]] adding d but the ﬁrst element of the list should
ne a list. Namely [[x,dx],[y,dy]] can be [[x],y] but [x,y] is understood p as an ordinary
diﬀerential operator.
Other following function the similar short expressions are allowed.
• p2 can be a vector of a matrix and in this case p1 may be a matrix.
• If x and xi are 0, then the product is a usual product.
• Diﬀerential operators of inﬁnite order such as exp(∂) or ∂ −1 are allowed. (But they are notallowed for appldo() etc. If the calculation is not ﬁnite, then the calculation will be ignored
after a ﬁnite terms).
• Using the Leibniz formula, the order of diﬀerentiations are calculated up to 100 by default
bue the number 100 is changed by the option parameter lim=n, which is only possible when
p1 and p2 are scalars.
For example, muldo(dx^(-1),1/x,x) and muldo(exp(dx),1/x,x) have inﬁnite terms.
∂∂, dy = ∂y)Examples with [dx, x] = 1, [dy, y] = 1 are as follows （⇐ dx = ∂x[0] os_md.muldo((1+x)*dx+1, (1-x)*dx+1, [x,dx]);(-x^2+1)*dx^2+(-x+1)*dx+1[1] os_md.muldo(x*dx+1/(x-a),a*dx+1/x,x);((a*x^3-a^2*x^2)*dx^2+x^2*dx-x+a+1)/(x^2-a*x)[2] os_md.muldo((a+y)*dy, (b-y)*dy, y);(-y^2+(-a+b)*y+b*a)*dy^2+(-y-a)*dy[3] os_md.muldo((a+y)*dy, (b-y)*dy, [0,dy]);(-y^2+(-a+b)*y+b*a)*dy^2[4] os_md.muldo(dx+dy, x*dx+y*dy, [[x],y]);x*dx^2+((x+y)*dy+1)*dx+y*dy^2+dy[5] os_md.muldo(dx+dy,sin(x+y),[[x],y]);sin(x+y)*dy+sin(x+y)*dx+2*cos(x+y)[6] os_md.muldo(exp(dx),(x-1)^4,x);exp(dx)*x^4[7] subst(@@,exp(dx),1);14

x^4[8] os_md.muldo(x*dx^(-1),dx/x,x);Over 100 derivations!
(x^100*dx^{100}+x^99*dx^99+2*x^98*dx^98+.........)/(x^100*dx^100)[9] os_md.muldo(dx^(-1),dx/x,x|lim=5);Over 5 derivations!
(x^5*dx^5+x^4*dx^4+2*x^3*dx^3+6*x^2*dx^2+24*x*dx+120)/(x^5*dx^5)[10] os_md.muldo(x*exp(dx),1/x,x|lim=5);Over 5 derivations!
(exp(dx)*x^5-exp(dx)*x^4+exp(dx)*x^3-exp(dx)*x^2+exp(dx)*x-exp(dx))/(x^5)[11] deval(os_md.muldo(exp(dx),exp(x),x]);Over 100 derivations!
2.71828*exp(1*dx)*exp(1*x)[0] means

(

) (
)
d
d2
d
d
+ 1 ◦ (1 − x) dx+ 1 = (1 − x2 ) dx
(1 + x) dx
2 + (1 − x) dx + 1

In [6], [8], [9], [10], [11] the results are understood by arranging them in sums of products
or quotients of functions and diﬀerentials as in the usual expression. Namely[6] means
d

d

2

3

4 dx
d
d
1 d
1
= x4 (1 + dx
+ 21 dx
e dx ◦ (x−1)
4 = x e2 + 3! dx3 + · · · )and [8] means( d )−1 1 d
d −1
d −2
◦ x dx = 1 + x1 ( dxx dx
) + x22 ( dx
) + ···and [10] means
2

d

3

d
1 d
1 d
xe dx ◦ x1 = (1 − x1 + x12 − x13 + x14 − x15 )(1 + dx
+ 2!
dx2 + 3! dx3 + · · · )[11] corresponds todde dx ◦ ex = ex+1 e dx
2. caldo([p1 ,p2 ,. . .],[x,∂x ]|mono=f ) or caldo([p1 ,p2 ,. . .],[[x1 ,∂x1 ],. . .]|mono=f ):: Returns the sum of products of diﬀerential operators
Returns p1 + p2 + · · · if pj are (partial) diﬀerential operators.
If pj are a list [pj,1 , . . .] of diﬀerential operators, then• pj = pj,1 pj,2 · · · are products of diﬀerential operators.
m• Moreover if pj,ν is [qj,ν , mj,ν ], pj,ν = qj,νj,ν . Here mj,ν should be non-negative integer.
• If pj,ν is [qj,ν ,[mj,ν,1 , . . . ,], pj,ν = (qj,ν + sj,ν,1 )(qj,ν + sj,ν,2 ) · · · .
[0] os_md.caldo([[dx-x,[dx+x,2]],y],x);dx^3+x*dx^2+(-x^2+3)*dx-x^3+x+y
3. muledo(p1 ,p2 ,[x,∂x ]) or muledo(p1 ,p2 ,x):: Returns the product of diﬀerential operators of Euler type (⇐ [∂x , x] = x)p2 can be a matrix of vector and in this case p1 can be a matrix.
d[dx, x] = x ⇐ dx = x dx.
[0] os_md.muledo((1+x)*dx+1, (1-x)*dx+1, x);(-x^2+1)*dx^2+(-x+1)*dx+1

15

4. transpdo(p,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .],[[y1 ,∂y1 ],[y2 ,∂y2 ],. . .]|ex=1,inv=f )∑:: Transformation of diﬀerential operator p by xi 7→ yi = yi (x), ∂xj 7→ ∂yj = cj (x) + ν ajν (x)∂xν
• yi , ∂yj are rational functions and diﬀerential operators• [xi , ∂xi ] may be written by xi (⇐ ∂xi = dxi ).
• If length of the 3-rd list is shorter than the length of the 2-nd list, then the identity maps areadded to the last of the 2-nd list.
• p can be a list or vector or matrix of diﬀerential operators.
• If the transformation corresponds to a birational transformation of coordinates, then thesecond list can be the list [y1 ,y2 , . . .] with the same length as the ﬁrst list. ∂y1 , ∂y2 , . . . are
calculated.
– inv=1 : Returns an inverse transformation– inv=2 : Returns [∂y1 ,∂y2 ,...].
– inv=3 : Returns [∂y1 ,∂y2 ,...] corresponding to the inverse transformation.
• If the 3-rd parameter of this function is an invertible matrix m = (mi,j ) of integers or thecorresponding list of lists, then the transformation is deﬁned by the coordinate transformationtransppow():m∏m
xj i,j .
xi 7→
j=1[0] os_md.transpdo(x^2*dx^2,x,[[1/x,-x^2*dx]]);x^2*dx^2+2*x*dx[1] os_md.transpdo(x*dx+y*dy,[[x],y],[x+y,x-y]);os_md.transpdo(x*dx+y*dy,[[x],y],[[x+y,(dx+dy)/2],[x-y,(dx-dy)/2]]);y*dy+x*dx[2] os_md.transpdo(4*dx^2,[[x,dx],[y,dy]],[x+y,x-y]);dy^2+2*dx*dy+dx^2[3] os_md.transpdo(x*dx+y*dy,[[x],y],[x+y,x-y]|inv=2);[1/2*dy+1/2*dx,-1/2*dy+1/2*dx][4] os_md.transpdo(x*dx,x,[1/x]);-x*dx[5] os_md.transpdo(x*dx,x,[-dx+1/x,x]|ex=1);-x*dx• In [0], [1] abbreviated form of [[x1 ,∂x1 ],[x2 ,∂x2 ],. . .] is used (cf. muldo()).
• In [0] and [1] the coordinate transformation x 7→ x1 and (x, y) 7→ (x+y, x−y) are considered.
∂
∂ 1 ∂
∂
d
∂
∂
d
7→ − x12 dx
and ( ∂x, ∂y) 7→ ( 12 ∂x+ 12 ∂y, 2 ∂x − 12 ∂y) are
In these cases the transformations dx
indicated but we may shortly indicate them as in [2].
• We may indicated the transformation which induces an isomorphism of the ring of diﬀerentialddoperators such as (x, dx) 7→ (x, dx+ c).
• ex=1 : Returns a transformation of p deﬁned by (xi , ∂xi ) 7→ (Si (x, ∂), Ti (x, ∂)) which induces
an isomorphism of the ring of diﬀerential operators. Here [Ti (x, ∂), Sj (x, ∂)] = δi,j and p is apolynomial of (x, ∂).
dd[5] considers a transformation deﬁned by (x, dx) 7→ (− dx+ x1 , x).
5. translpdo(p,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .],mat)∑:: Transforms a diﬀerential operator p by the coordinate transformation xi 7→ j (mat)ij xj[xi ,∂xi ] may be an abbreviated form xi (⇐ ∂xi = dxi ).
[0] M=mat([1,1],[1,-1]);[ 1 1 ]
16

[ 1 -1 ][1] os_md.translpdo(4*dx^2,[[x,dx],[y,dy]],M);dy^2+2*dx*dy+dx^2
6. transppow([[x1 ,∂x1 ],. . .,[xn ,∂xn ]],m):: Coordinate transformations by products of powers of coordinates
Returns the transformation of [[x1 ,∂x1 ],. . .,[xn ,∂xn ]] byr the map
xi 7→

n
∏

m

xj i,j(j = 1, . . . , n)j=1[0] os_md.transppow([x,y],[[1,1],[0,-1]]);[[x,(y*dy+x*dx)/(x)],[(x)/(y),(-y^2*dy)/(x)]][1] os_md.transppow([x,y],[[1,1],[0,1]]);[[x,(-y*dy+x*dx)/(x)],[y*x,(dy)/(x)]]7. appldo(p,r,[x,∂x ]|Pfaff=1) or appldo(p,r,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .]):: Applies a (matrix of) diﬀerential operator to a (matrix of) rational function or elementaryfunction or a Pfaﬃan systemr can be a vector or a matrix. In this case p can be a matrix.
d• Pfaff=1 : For dudx = r(x)u, s(x) satisfying p(x, dx )u = s(x)u is returned (p, r is a matrix or ascalar).
[0] os_md.appldo(x*dx^2-2*dx, a*x^3+b*x^2, x);-2*b*x[1] os_md.appldo(x*dx^2+2*dx, x+y/x, x);2[2] V=newvect(2,[x/y,y/x]);[ (x)/(y) (y)/(x) ][3] os_md.appldo(x*dx+1,V,x);[ (2*x)/(y) 0 ][4] P=newmat(2,2,[[x*dx+1,x/y],[0,x*dx]]);[ x*dx+1 (x)/(y) ][ 0 x*dx ][5] os_md.appldo(P,V,x);[ (2*x+y)/(y) (-y)/(x) ][6] os_md.appldo(ddx,P,dx);[ x 0 ]
[ 0 x ]
[7] A=newmat(2,2,[[cos(x+y),-sin(x+y)],[sin(x+y),cos(x+y)]]);[ cos(x+y) -sin(x+y) ][ sin(x+y) cos(x+y) ][8] os_md.appldo(dx^2,A,x);[ -cos(x+y) sin(x+y) ][ -sin(x+y) -cos(x+y) ][9] V=[lambda1,lambda2];C0=newmat(2,2,[V,V]);[10] C=os_md.diagm(2,[1/x,1/(x-1)])*(C0+os_md.diagm(2,[mu]));[11] P=os_md.diagm(2,[1,dx])*C0;17

[12] U=os_md.appldo(P,C,[x,dx]|Pfaff=1);[13] V=os_md.myinv(U);In the above we have the matrices U and V of rational functions which satisﬁes
u = U v and( λ −1)1(1 − x)λ2−µ λ1
λ2−µ−1 xv = V u for u0 = ∂ x (1 − x) (Gauss hypergeometric function), v = ∂.
xλ1 (1 − x)λ2 −1
8. adj(p,[x,∂x ]) or adj(p,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .]):: Returns the formal adjoint of a (matrix of) diﬀerential operator p[0] os_md.adj(x*dx^2+x^3*dx+1,x);x*dx^2+(-x^3+2)*dx-3*x^2+1
9. psymbol(p,,[[x1 ,∂x1 ],[x2 ,∂x2 ],. . .]):: principal symbol of diﬀerential operator
微分作用素 p の主表象を返す（cf. ghg2()）．
10. sftpexp(p,[x,∂x ],q,r) or sftpexp(p,[[x1 ,∂x1 ],. . .],q,r]):: Returns q −r ◦ p ◦ q r
Here q and r are rational function and r is a parameter.
[0] os_md.sftpexp(dx*dy,[[x,dx],[y,dy]],exp(x-y),a);(dx+a)*dy-a*dx-a^2[1] os_md.sftpexp(dx*dy,[[x,dx],[y,dy]],x-y,a);((x^2-2*y*x+y^2)*dx+a*x-a*y)*dy+(-a*x+a*y)*dx-a^2+a[2] os_md.show(@@);(x − y)2 ∂x ∂y − a(x − y)∂x + a(x − y)∂y − a(a − 1)
11. appledo(p,r,[x,∂x ]):: Applies a diﬀerential operator of Euler type to a rational function[0] os_md.appledo(dx^2,x^2+y/x,x);(4*x^3+y)/(x)12. divdo(p1 ,p2 ,[x,∂x ]|rev=1):: Calculates divisions of ordinary diﬀerential operators• Returns [q, r, m]⇒ m ∗ p1 = q ∗ p2 + r (ord m = 0, ord r < ord p2 )• If rev=1 is indicatedp1 ∗ m = p2 ∗ q + r (ord m = 0, ord r < ord p2 )[0] R=os_md.divdo(dx^2, x*dx+1, x);[x*dx-2,2,x^2][1] os_md.muldo(R[0],x*dx+1,x)+R[1];x^2*dx^2[2] R=os_md.divdo(dx^2,x*dx+1,x|rev=1);[x*dx+2,0,x^2][3] os_md.muldo(x*dx+1,R[0],x)+R[1];x^2*dx^2+4*x*dx+2[4] os_md.muldo(dx^2,R[2],x);x^2*dx^2+4*x*dx+2
13. mygcd(p1 ,p2 ,[x, ∂x ]|rev=1,dviout=n) or mygcd(p1 ,p2 ,[x]|rev=1,dviout=n)18

mygcd(p1 ,p2 ,x|dviout=n), mygcd(p1 ,p2 ,0|dviout=n):: GCD of ordinary diﬀerential operators (or polynomials of x or positive integers) p1 and p2• Let R be the result of the function. Then GCD equals
R[0] =() R[1] ∗ p1 + R[2] ∗ p2 .
R[1] R[2]R[3] ∗ p1 + R[4] ∗ p2 = 0 is valid and the matrix
is invertible.
R[3] R[4]Moreover R[3] ∗ p1 = −R[4] ∗ p2 is LCM of p1 and p2 ,• rev=1 : The order of the products are inverted in the above.
• The calculation uses euclidean algorithm algorithm. If the size of p1 and p2 are same, p1 isﬁrst divided by p2 .
• dviout=0 : All steps in the euclidean algorithm returned as a list of lists.
In the case of integers, each list consists of pair of integers and the pair of quotient andreminder. The ﬁrst list contains [p1 ,p2 ].
In the case of polynomials or diﬀerential operators, each list consists of a pair of polynomials
or diﬀerential operators, a pairs of quotient and reminder and a scalar to be multiplied (thelist returned by divdo()).
• dviout=1 : the euclidean algorithm is displayed using TEX.
• dviout=2 : the euclidean algorithm is displayed using matrices and TEX.
• dviout=-1,-2 : returns the TEX source of the above.
[0] P = os_md.muldo(x*dx+1,x*dx+1,x);x^2*dx^2+3*x*dx+1[1] Q = os_md.muldo(dx-1,x*dx+1,x);x*dx^2+(-x+2)*dx-1[2] os_md.mygcd(P,Q,[x]);[x*dx+1,(1)/(x+1),(-x)/(x+1),((-x-1)*dx+x+2)/(x+1),((x^2+x)*dx+x+2)/(x+1)][3] os_md.mygcd(P,Q,[dx]);[1,0,(1)/(x*dx^2+(-x+2)*dx-1),1,(-x^2*dx^2-3*x*dx-1)/(x*dx^2+(-x+2)*dx-1)][4] os_md.mygcd(234,111,0);[3,-9,19,37,-78][5] os_md.mygcd(234,111,0|dviout=0);[[234,111],[2,12],[9,3],[4,0]][6] os_md.mygcd(234,111,0|dviout=1);
234 = 2 × 111 + 12
111 = 9 × 12 + 3
12 = 4 × 3[7] os_md.mygcd(234,111,0|dviout=-1);
234&=2\times111+12\allowdisplaybreaks\\
111&=9\times12+3\allowdisplaybreaks\\
12&=4\times3[8] os_md.mygcd(234,111,0|dviout=2)$
(

234
111

)

(
=
(
=

2 1
1 0
2 1
1 0

)(
)(

111
12

)

9 1
1 0

19

)(

) (
)( )
12
19 2
12
=
3
9 1
3

(
=

)( ) (
)( )
4 1
3
78 19
3
=
,
1 0
0
37 9
0
)(
)
19
234
−78
111

19 2
9 1

( ) (
3
−9
=
0
37

)(

[9] os_md.mygcd(P,Q,[x,dx]|dviout=2)$x2 ∂ 2 + 3x∂ + 1 = (x)(x∂ 2 − (x − 2)∂ − 1) + (x(x + 1)∂ + (x + 1))(x2 + 2x + 1)(x∂ 2 − (x − 2)∂ − 1) = ((x + 1)∂ − (x + 2))(x(x + 1)∂ + (x + 1))[10] os_md.mygcd(P,Q,[x,dx]|dviout=2);
(

)
)(
x 1
x∂ 2 − (x − 2)∂ − 1
1 0
x(x + 1)∂ + (x + 1)
(
)( 1
)(
)
x+2
1
x 1
x(x + 1)∂ + (x + 1)
x+1 ∂ − (x+1)2
=
1 0
0
1
0
(
)(
)
x
1
∂ + (x+1)2 x
x(x + 1)∂ + (x + 1)
= x+1
x+2
1
0
1
x+1 ∂ − (x+1)2()()
x∂ + 1 xx∂ + 1
=
,
∂−1 1
0
(
)(
(
)
)
1
x
− (x+1)2x∂ + 1x2 ∂ 2 + 3x∂ + 1(x+1)2
=
1
x+2
x
x+2
0
x∂ 2 − (x − 2)∂ − 1− x+1∂ + (x+1)2
x+1 ∂ + (x+1)2

x2 ∂ 2 + 3x∂ + 1
x∂ 2 − (x − 2)∂ − 1

)

(

=

14. mylcm(p1 ,p2 ,[x, ∂x ]|rev=1) or mylcm(p1 ,p2 ,[x]|rev=1)
mylcm(p1 ,p2 ,x), mylcm(p1 ,p2 ,0):: LCM of ordinary diﬀerential operators (or polynomials of x or positive integers) p1 and p2[0] P=os_md.mylcm((2-x)*dx-1,x*dx+1,[x,dx]);(x^2-2*x)*dx^2+(4*x-4)*dx+2[1] os_md.appldo(P,a/x+b/(2-x),[x,dx]);0[2] Q=os_md.mylcm((2-x)*dx-1,x*dx+1,x);(x^2-2*x)*dx^2+(2*x-2)*dx+1[3] fctr(Q);[[1,1],[x*dx+1,1],[(x-2)*dx+1,1]]
15. m1div(m,n,[x,∂x ]) or m1div(m,n,[x]) or m1div(m,n,x):: Returns R = [R[0], R[1]] such that m = R[1](∂x − n) + R[0] (or m = R[1](x − n) + R[0]) for asquare matrix m of diﬀerential operators with coeﬃcients in rational functions (or polynomials ofx).
Here R[0] does not contain diﬀerentiation (ro x).
16. qdo(p1 ,p2 ,[x,∂x ]):: Returns the list [q1 , q2 ] of diﬀerential operators satisfying q1 p2 u = 0 and q2 p2 u = u for adiﬀerential equation p1 u = 0
The diﬀerential operators q1 and q2 satisfy the following.
qp2 u = 0 ⇒ ∃r such that q = rq1
qp2 u = u ⇒ ∃r such that q = q2 + rq1 and ord q２ ≤ ord q[0] P=os_md.ghg([a,b],[c]);20

(-x^2+x)*dx^2+((-a-b-1)*x+c)*dx-b*a[1] os_md.qdo(P,dx,x);[(x^2-x)*dx^2+((a+b+3)*x-c-1)*dx+(b+1)*a+b+1,((-x^2+x)*dx+(-a-b-1)*x+c)/(b*a)]
17. mdivisor(m,[x,∂]|trans=1,step=1,dviout=t)
mdivisor(m,x|trans=1,step=1,dviout=t), mdivisor(m,0|trans=1,step=1,dviout=t):: Elementary divisors of a matrix of ordinary diﬀerential operators/polynomials with coeﬃcientsin rational functions/integers• The algorithm in the case of a matrix of ordinary diﬀerential operators is given by [O3,Lemma 1.10].
• step=1 : Gives intermediate process with fundamental transformations for lines and columns• trans=1 : Returns a list of the elementary divisors, the matrix for a transformation of lines
acting from the left, that of columns acting from the right.
• trans=2 : Returns the list with the above 3 elements + the inverse of the matrix transforming
lines + the inverse of the matrix transforming columns• m is invertible ⇔ the elementary divisors are [1, 1, . . .]. In this case R[1] is the inverse. HereR is returned with the option trans=1 and R[2] is th identity matrix.
• dviout=1 : Displays the intermediate steps by using TEX で表示.
• dviout=-1 : Returns the above TEX source.
• dviout=2 : Displays the intermediate steps and the matrices deﬁning the transformations• dviout=-2 : Returns the above TEX source.
• dviout=3 : Returns the result of elementary transformations and the matrices deﬁning thetransformations ans their inverses (corresponding to trans=2).
• dviout=-3 : Returns the above TEX source.
• unim() gives problems for exercises of calculations of elementary divisors and diagonarizationsof matrices.
[0] A=os_md.s2m("12-1,2-22,-121");[ 1 2 -1 ][ 2 -2 2 ][ -1 2 1 ][1] os_md.mdivisor(os_md.mgen(3,0,[x],0)-A,x);[1,x-2,x^2+2*x-8][2] os_md.mdivisor(os_md.mgen(3,0,[x],0)-A,x|step=1);
1: start[ x-1 -2 1 ][ -2 x+2 -2 ][ 1 -2 x-1 ]1: (1,2) -> (1,1)[ -2 x-1 1 ][ x+2 -2 -2 ][ -2 1 x-1 ]1: unit[ 1 -1/2*x+1/2 -1/2 ][ 0 1/2*x^2+1/2*x-3 1/2*x-1 ][ 0 -x+2 x-2 ]2: start21

[ 1/2*x^2+1/2*x-3 1/2*x-1 ][ -x+2 x-2 ]2: (1,2) -> (1,1)[ 1/2*x-1 1/2*x^2+1/2*x-3 ][ x-2 -x+2 ][ 2 0 ]*
[ -4 2 ]2: line 1 & 2[ x-2 x^2+x-6 ][ 0 -2*x^2-4*x+16 ]*[ 1 -x-3 ][ 0 1 ]
2: column 1 & 2[ x-2 0 ][ 0 -2*x^2-4*x+16 ]3: start[ -2*x-8 ][1,x-2,x^2+2*x-8][3] os_md.mdivisor(os_md.mgen(2,0,[dx],0),[x,dx]|step=1);
1: start[ dx 0 ][ 0 dx ]1: column 1 += col2*x[ dx 0 ][ x*dx+1 dx ][ -x 1 ]*[ x*dx+2 -dx ]1: line 1 & 2[ 1 dx ][ 0 -dx^2 ]1: unit[ 1 dx ][ 0 -dx^2 ]2: start[ -dx^2 ][[1,dx^2],[4] os_md.mdivisor(os_md.mgen(2,0,[dx],0),[x,dx]|trans=2);[[1,dx^2],[ -x 1 ][ -x*dx-2 dx ],[ 1 -dx ][ x -x*dx+1 ],[ dx -1 ][ x*dx+1 -x ],[ -x*dx dx ][ -x 1 ]][5] os_md.mdivisor(os_md.mgen(2,0,[dx],0),[x,dx]|dviout=2);

22



∂ 0 1 0
 0 ∂ 0 1
1 0

0 1
C1 + = C2 × (x)


∂
0 1 0
x∂ + 1 ∂ 0 1
→

1
0
x
1
(
)( )
−x
1
L1
x∂ + 2 −∂
L2


1
∂
−x
1
 0 −∂ 2 x∂ + 2 −∂ 
→

1
0
x
1
Cj − = C1 × ◦ (j > 1)


1
0
−x
1
2
0
−∂
x∂ + 2 −∂ 
→

1
−∂
x −x∂ + 1
L2 ← (−1) × L2


1
0
−x
1
2
0
∂
−x∂ − 2 ∂ 
→

1
−∂
x −x∂ + 1
As a result,
(
) (
)(
)(
1 0
−x
1
∂ 0
1
=
−x∂ − 2 ∂
0 ∂
x
0 ∂2
(
)−1 (
)
−x
1
∂
−1
=
,
−x∂ − 2 ∂x∂ + 1 −x
(
)−1 (
)
1
−∂
−x∂ ∂
=
.
x −x∂ + 1
−x 1

)
−∂
,
−x∂ + 1

The matrices deﬁning the transformations are obtained by mygcd().
The elements of the matrix m belong one of the following Euclidean rings Q.
(1) The ring of integers(2) The polynomial ring of one variable whose coeﬃcients are rational functions/numbers(3) The ring of ordinary diﬀerential operators whose coeﬃcients are rational functions
We use the following algorithm.
（a）If A = (Ai,j ) is a zero matrix, we return [0].
（b）We move the non-zero minimal (i, j) element of A to the (1, 1) element by permutations of lines

and columns of A ((i, j) is chosen to be minimal by the lexicographic order). Here “minimal”
means with respect to absolute value in (1) or degree in (2) or rank in (3).
（c）If there exists a non-zero element Ai,1 with i > 1, we get C ∈ GL(2, S) such that the second( 1,1 )
element of C A
Ai,1 vanishes (the second element of Cv vanishes (← euclidean algorithm). Here
we can choose C so that the coeﬃcients of elements of the matrix are polynomials in the cases(2) and (3). Then we apply C to the ﬁrst and the i-th line of A and go to (b).
（d）If Ai,1 = 0 for i > 1 and there exists a non-zero A1,j with j > 1, we gets C ∈ GL(2, S) suchthat the second element of (A1,1 , A1,j )C vanishes. Then we apply C to the ﬁrst column andthe j-th column of A and go to (b).
23

- Hereafter we assume A1,1 6= 0 and Ai,1 = A1,j = 0 for i > 1 and j > 1.
（e）If the number of lines of A or the number of columns of A is 1, we return [A1,1 ].

– Otherwise –（f）If A1,1 is invertible, we replace A1,1 by 1 and go to (g) ii).

— In the case (1) or (2) —（g）We check the existence of the element Ai,j which is not divided by A1,1 .

i) If the above element Ai,j exists, we add the j-th column to the ﬁrst column. Then if i 6= 2,
we swap 2-nd line and the i-th line. Then go to (b).
ii) If all the elements of A can be divided by A1,1 , we denote the matrix excluding the 1-st line000
and 1-st column of A by A0 and call this function replacing A by A−1
1,1 A . If we get [R1 , R2 , . . .]00
by this call, we return [A1,1 RA , A1,1 R2 , . . . , A1,1 ].
— In the case (3) —（h）We choose a nonzero Ai,j with i > 1 and j > 1 (the minimal (i, j) in the lexicographic order).
We moreover choose a non-negative integer k such that SAi,j xk + SA1,1 6⊂ SA1,1 . Here wenote that 0 ≤ k < the rank of A1,1 . Then we change Aν,1 by Aν,1 + Aν,j xk for ν = 1, 2, . . .
and go to (b).
step=1 : the meaning of the comment displayed above a matrix is as follows.
• The ﬁrst number id the depth of the nesting of called mdivisor(). If the depth increases by
1, the size of the matrices decreases by 1 (cf. (f), (g) ii)).
• start : The original matrix when this function is called.
• (a,b) -> (1,1) : Swaps the a-th line and the ﬁrst line and moreover the b-column and theﬁrst column and moves the (a,b) element to the (1,1) element (cf. (b)).
• line 1 & a : Multiplies the ﬁrst line and the a-th line by a matrix in GL(2, S) from the left
and changes the (a,1) element to 0. (cf. (c)).
• column 1 & b : Multiplies the ﬁrst column and the b-th column by a matrix in GL(2, S) fromthe right and changes the (1,b) element to 0. (cf. (d)).
• unit : (1,1) : The (1, 1) element is invertible (cf. (f)).
• column 1 += col b, line 2<->a : Adds the b-th column to the ﬁrst column and swaps 2-ndline and the a-th line (cf. (g) i)).
• column 1 += col b*x^k : Adds the column obtained by multiplying the b-column by x^kfrom the right to the ﬁrst column (cf. (h)).
In TEX Li represents the i-th line and Cj represents the j-th column. For example,
)( )
(
L3
1 2
L5
3 4
(
means that the 3-rd line and the 5-th line are multiplied by

1 2
3 4

[6] os_md.mdivisor(mat([3,5,7],[5,3,3]),0|dviout=2)
3 5 7 1 0
5 3 3 0 1
1 0 00 1 0
0 0 1
(
)( )
2 −1
L1
−5 3
L2

24

)
from the left.



1
7
11
2 −1
0 −16 −26 −5 3 


0
0
→ 1

0

1
0
0
0
1
Cj − = C1 × ◦ (j > 1)


1
0
0
2 −1
0 −16 −26 −5 3 → 1 −7 −11

0

1
0
0
0
1
(
)
−5 −13(C2 C3)
3
8


1 0
0
2 −1
0 2
0
−5 3 
3→ 1 20 −5 −13
0 3
8As a result,
(
) (
)(
1 0 0
2 −1
3 5
=
0 2 0
−5 3
5 3
(

)−1 (
)
2 −1
3 1
=
,
−5 3
5 2
(
)−1 (
1 2
3
1 7
0 −5 −13= 0 −8
0 3
8
0 3

7
3

) (1
0
0

2
−5
3

)
3
−13 ,
8

)
11
−13 .
5

[7] os_md.mdivisor(mat([dx,0,0],[0,dx,0],[0,0,dx]),[x,dx]|dviout=3)
(

)
(
)
1 0 0
∂ 0 0
0 1 0 = P 0 ∂ 0 Q,
0 0 ∂0 0 ∂3

 
−1
1 2
−x
1
0
∂
−x2 ∂ 2 − 4x∂ − 2
2 x ∂ + 2x
− 12 x2 ∂ − 2x  = x∂ + 1 −x3 ∂ 2 − 4x2 ∂ − 2x 12 x3 ∂ + 2x2  ,P =  − 12 x∂ − 1 21 ∂22−1−x∂ − 3∂ ∂−x2 ∂ 2 − 6x∂ − 6
0
∂
2
 

−1
1 2 3
2
2
−x∂
∂
0
1 −x ∂ − 2x
2 x ∂ + x∂ − ∂Q = x −x3 ∂ − x2 12 x3 ∂ 3 + 12 x2 ∂ 2 − x∂ + 1 = − 12 x∂ 2 − ∂ 12 ∂ 2 − 12 x2 ∂ 2 − 2x∂  .
−x
1
−x2
0
1
− 12 ∂ 2[8] A=mat([2,-2,-2],[0,1,-1],[0,0,2])$[9] os_md.mdivisor(os_md.mgen(3,0,[x],0)-A,x|dviout=2)$
x − 2

 0
 0

 1

0
0
C1 ↔ C2

2
x−1
0
0
1
0

2
1 0 0
10 1 0
x − 2 0 0 1


0

0
1

25

 2
x−2
2
1 0 0
01
0 1 0
x − 1
 0
0
x
−
2
0
0 1

→
 0

1
0


1
0
0
0
0
1
1
L1 ← ( ) × L1

 2
1
1
1
0 0
1
2 (x − 2)2x − 10
10 1 0 00x − 2 0 0 1
→

1
0

 0

 1
0
0
0
0
1
Li − = ◦ × L1 (i > 1)


1
1
1
1
0 0
2 (x − 2)20 − 1 (x − 2)(x − 1) −(x − 2) − 1 (x − 1) 1 0
2
2



0
x−2
0
0 1
→ 0

1
0

0

1
0
0
0
0
1
Cj − = C1 × ◦ (j > 1)


1
1
0
0
0 0
2
1
1
0 − 2 (x − 2)(x − 1) −(x − 2) − 2 (x − 1) 1 0


0
0
x−2
0
0 1
→

1
0
0

1

1
− 2 (x − 2)−1
001
L2 ↔ L3, C2 ↔ C3


1
1
0
0
0 0
2
0
x−2
0
0
0 1


0 −(x − 2) − 21 (x − 2)(x − 1) − 12 (x − 1) 1 0
→

0
1
0

1

1
−1
− 2 (x − 2)
0
1
0
(
)( )
1 0
L2
1 1
L3


1
1
0
0
0 0
2
0 x − 2
0
0
0 1


0
0
− 12 (x − 2)(x − 1) − 12 (x − 1) 1 1
→

0
1
0

1

1
−1
− 2 (x − 2)0
10L3 ← (−2) × L3


1
1
0
0
0
0
2
0 x − 2
0
0
0
1


0
(x − 2)(x − 1) x − 1 −2 −2
0
→

0
1
0

1
1

−1
− 2 (x − 2)0
10
As a result,

26

(
)  1
x−2
0
0
0
0
2
0
x−2
0
= 0
0
1
0
0
(x − 2)(x − 1)
x − 1 −2 −2
−1 

1
2
0
0
0
0
2
 0
0
1  = x − 1 −1 − 12  ,x − 1 −2 −2
0
1
0

−1 

1
0 0
1
(x − 2) 1 1
2
1 −1 − 1 (x − 2) = 
00 1 .
2
0 1
0
1
0 0
(

1
0
0


2
x−1
0

)
0
2
1
1
x−2
0

0
−1
1


1
− 21 (x − 2)
0

18. sqrtdo(p,[x,∂x ]) ?
19. toeul(p,[x,∂x ],n):: Expresses a (Fuchsian) diﬀerential operator p in Euler type at x = n
Transforms p by the coordinate transformation x 7→ x + n and replaces x∂x by ∂x and changes it
so that the coeﬃcients are polynomials
If n is the string "infty", transforms p by the coordinate transformation x 7→ x + n and replacesx∂x by ∂x and multiplies it by a suitable power of x.
[0] os_md.toeul(os_md.ghg([a,b],[c]), x, 0);(-x+1)*dx^2+((-a-b)*x+c-1)*dx-b*a*x[1] os_md.toeul(os_md.ghg([a,b],[c]), x, "infty");(x-1)*dx^2+((-c+1)*x+a+b)*dx-b*a
20. fromeul(p,[x,px ],n):: Transforms the diﬀerential operator p of Euler type into normal form (the above inverse)
Multiplies by a power of x − n so that the coeﬃcient does not vanish at x = n.
[0] os_md.fromeul(dx,x,1);dx[1] os_md.fromeul(dx-a,x,1);(x-1)*dx-a
21. expat(p,[x,∂x ],n):: Returns characteristic exponents of a diﬀerential operator p at a regular singular point x = n• n may be a string "infty" (which means n = ∞).
• If p is Fuchsian and n is "?", the exponents at all singular points are obtained.
• See (76) for ghg() in the following. It is the operator deﬁne Gauss hypergeometric equation.
[0] os_md.expat(os_md.ghg([a,b,c],[d,e]), x, 0);[-d+1,-e+1,0][1] os_md.expat(os_md.ghg([a,b,c],[d,e]), x, 1);[-a-b-c+d+e,1,0][2] os_md.expat(os_md.ghg([a,b,c],[d,e]), x, 2);[1,2,0][3] os_md.expat(os_md.ghg([a,b,c],[d,e]), x, "infty");[a,b,c][4] os_md.expat(os_md.ghg([a,b,c],[d,e]), x, "?");[[0,[-d+1,-e+1,0]],[1,[-a-b-c+d+e,1,0]],[infty,[a,b,c]]]22. sftexp(p,[x,∂x ],n,r)27

:: Returns (x − n)−r ◦ p ◦ (x − n)r
Here [∂x , r] = 0 should valid.
[0] P=os_md.ghg([a,b],[c]);(-x^2+x)*dx^2+((-a-b-1)*x+c)*dx-b*a[1] os_md.sftexp(P,x,0,1-c);(-x^2+x)*dx^2+((-a-b+2*c-3)*x-c+2)*dx+(-b+c-1)*a+(c-1)*b-c^2+2*c-1[2] Q=os_md.sftexp(P,x,"infty",b);(-x^3+x^2)*dx^2+((-a+b-1)*x^2+(-2*b+c)*x)*dx+b^2+(-c+1)*b[3] os_md.expat(Q,x,"infty");[a-b,0]23. fractrans(p,[x,∂x ],n0 ,n1 ,n2 ):: Transforms p by the linear fractional transformation of x with (n0 , n1 , n2 ) 7→ (0, 1, ∞)[0] os_md.fractrans(os_md.ghg([a,b],[c]),x,1,0,"infty");(-x^2+x)*dx^2+((-a-b-1)*x+a+b-c+1)*dx-b*a[1] P=os_md.fractrans(os_md.ghg([a,b],[c]),x,"infty",1,0);(x^3-x^2)*dx^2+((-c+2)*x^2+(a+b-1)*x)*dx-b*a[2] os_md.expat(P,x,1);[-a-b+c,0][3] os_md.expat(P,x,0);[a,b]
24. chkexp(p,[x, ∂x ],n,r,m):: Returns condition so that p has the exponent [r](m) at x = n[0] os_md.chkexp(os_md.ghg([a,b],[c]),x,0,0,1);[][1] os_md.chkexp(os_md.ghg([a,b],[c]),x,"infty",0,2);[a+b-1,-b*a][2] os_md.chkexp(os_md.ghg([a,b],[c]),x,"infty",0,1);[-b*a]
25. soldif(p,[x, ∂x ],n,q,m)26. okuboetos(p, [x, ∂x ]| diag=[c1 , c2 , . . . ]):: Transforms a single ODE of Okubo type to 1st order Okubo system
The ODE P u = 0 of order m with polynomial coeﬃcients is of Okubo type if the degree of thecoeﬃcients of the n-th derivatives are of degree at most n (n = 0, . . . , m).
• Returns [[a0 , . . . , am−1 ], B, T ]• diag=[c0 , c1 , . . . ] : indicates the diﬀerentt order from [a0 , . . . , am−1 ].
• A single Fuchsian ODE is changed to a Fuchsian ODE of Okubo type by several transformations of p 7→ p ∗ ∂x + p0 .
(x − ai )u0i =m−1∑

Bij uj

j=0

ui =

m−1
∑

Ti,j u(j) .

j=0

28

(i = 0, . . . , m − 1),[0] P = os_md.ghg([a,b],[c]);(-x^2+x)*dx^2+((-a-b-1)*x+c)*dx-b*a[1] R = os_md.okuboetos(P,x)$[2] R[0];[ 0 1 ]
[3] R[1];[ -c+1 1 ][ (-b+c-1)*a+(c-1)*b-c^2+2*c-1 -a-b+c-1 ][4] R[2];[ 1 0 ]
[ c-1 x ][5] det(R[1]);b*a[6] os_md.fctrtos(R[1][1][0]);-(b-c+1)*(a-c+1)[7] R = os_md.okuboetos(P,x|diag=[1,0])$[8] R[0];[ 1 0 ]
[9] R[1];[ -a-b+c 1 ][ (-b+c)*a+c*b-c^2 -c ][10] R[2];[ 1 0 ]
[ a+b-c x-1 ]]These meanu = F (a, b, c; x),
) (
)
u0
u
=
,
u1
(c − 1)u + xu0)( 0 ) (
u0
1−c
=
x−1
−(b − c + 1)(a − c + 1)
u01
(

(

x

In particular

)( )
u0
1
.
−a − b + c − 1
u1

)
( ) (
v0
u
,
=
x
c−1
0
v1
a−c+1 u + a−c+1 u)( 0) (
)( )
(
v0
v0
1−c
a−c+1
x
=
,
−(b − c + 1) −a − b + c − 1
x−1
v10
v1
(
)
(
)
1−c a−c+10000−b + c − 1 −a − b + c − 1
dv
=
v+
v
dx
x
x−1
27. stoe(p,[x, dx],m):: Converts a ﬁrst order system of ODE to a single ODE∑• Returns the equation satisﬁed by um for the system u0i = j≥0 pij (x)uj . Here p is a matrix
with elements in rational functions.
• If m is a list [m1 , m2 ], then the expression of um2 in terms of um2 is returned, namely, theoperator applying to um2 to get um1 .
v=

29• If m is negative, it implies [−m, 0].
• See baseODE() for non-linear ODE.
[0] A=newmat(2,2,[[(-c+1)/(x),(a-c+1)/(x)],[(-b+c-1)/(x-1),(-a-b+c-1)/(x-1)]]);[ (-c+1)/(x) (a-c+1)/(x) ][ (-b+c-1)/(x-1) (-a-b+c-1)/(x-1) ][1] os_md.stoe(A,x,0);(x^2-x)*dx^2+((a+b+1)*x-c)*dx+b*a[2] T=os_md.mgen(4,0,[x,x-1,x,x-1],0);[ x 0 0 0 ][ 0 x-1 0 0 ][ 0 0 x 0 ][ 0 0 0 x-1 ][3] A=newmat(4,4,[[a1,1],[a21,a2,1],[a31,a32,a3,1],[a41,a42,a43,a4]]);[ a1 1 0 0 ][ a21 a2 1 0 ][ a31 a32 a3 1 ][ a41 a42 a43 a4 ][4] C=os_md.myinv(T)*A;[ (a1)/(x) (1)/(x) 0 0 ][ (a21)/(x-1) (a2)/(x-1) (1)/(x-1) 0 ][ (a31)/(x) (a32)/(x) (a3)/(x) (1)/(x) ][ (a41)/(x-1) (a42)/(x-1) (a43)/(x-1) (a4)/(x-1) ][5] P=os_md.stoe(C,x,0)$[6] os_md.expat(P,x,"?");[[0,[a3+1,a1,1,0]],[1,[a4+2,a2+1,1,0]],[infty,[dx^4+(a4+a3+a1+a2)*dx^3+(-a21-a32-a43+(a3+a1+a2)*a4+(a1+a2)*a3+a2*a1)*dx^2+((-a4-a3)*a21+(-a4-a1)*a32+(-a1-a2)*a43+a31+a42+((a1+a2)*a3+a2*a1)*a4+
a2*a1*a3)*dx+(a43-a3*a4)*a21-a1*a4*a32-a41-a2*a1*a43+a4*a31+a1*a42+a2*a1*a3*a4]]][7] os_md.mperm(A,[0,2,1,3],1);[ a1 0 1 0 ][ a31 a3 a32 1 ][ a21 1 a2 0 ][ a41 a43 a42 a4 ][8] Q=E[2][1][0]-os_md.polbyroot([1,4],dx|var=a);(-a21-a32-a43)*dx^2+((-a4-a3)*a21+(-a4-a1)*a32+(-a1-a2)*a43+a31+a42)*dx+(a43-a3*a4)*a21-a1*a4*a32-a41-a2*a1*a43+a4*a31+a1*a42
28. etos(p,[x, dx],m):: Converts a single ODE to a ﬁrst order system of ODE Converts a single equation P u = 0 of theorder n to a ﬁrst-order system ũ0 = Aũ and returns A.
• m is a matrix with elements in rational functions. Let mij be the (i, j)-element of m. Then∑the system is ui =mij u(j) .
• m = 1 means that m is the identity matrix.
• If m is a list with length n, then m is identiﬁed with the diagonal matrix whose diagonal
elements are given by m,30

[0] P=(-x^2+x)*dx^2+((-a-b-1)*x+c)*dx-a*b$[1] M=os_md.etos(P,x,[1,x]);[ 0 1 ][ (-b*a)/(x-1) ((-a-b-1)*x+c)/(x^2-x) ][2] os_md.pfrac(M,x|dviout=1);
) (
)
(
0
0
0 1
0 0
−ba −(a + b − c + 1)+xx−1
29. dform(ℓ, x|dif=1)∑∑:: Calculates diﬀerential 1-formℓ[i][0]d(ℓ[i][1]) or 2-formℓ[i][0]d(ℓ[i][1]) ∧ d(ℓ[i][2]) with variables x[0], x[1], . . .. Option dif=1 means external derivative of 1-form• ℓ[i][j] can be matrices• dif=1 : exterior derivative of diﬀerential 1-form[0] os_md.dform([[a*y,x/y],[b*x,y/x]],[x,y]);[(a*x-b*y)/(x),x],[(-a*x+b*y)/(y),y]][1] os_md.dform([[a*y,x/y,x],[b*x,y/x,y]],[x,y]);[[(a*x^2-b*y^2)/(y*x),x,y]][2] os_md.dform([[x-y,y],[x-y+1,x]],[x,y]|dif=1);[[2,x,y]]Yhe above means−ax+byay · d( xy ) + bx · d( xy ) = ax−bydy
x dx +
y−byax · d( xy ) ∧ dx + bx · d( xy ) ∧ dy = ax xy
dx ∧ dy()
d (x − y)dy + (x − y − 1)dx = 2dx ∧ dy2

2

30. solpokubo(p,[x, ∂x ],n):: Returns eigenvalues and eigenpolynomials of a single ODE of Okubo type
Here the diﬀerential operatormddp = am (x) dx
m + · · · + a1 (x) dx + a0 (x)with polynomial coeﬃcients is of Okubo type when deg x am (x) = m and degx aν (x) ≤ ν forν = 0, . . . , m − 1.
[0] P=x*(1-x)*dx^2+(c-a*x)*dx;(-x^2+x)*dx^2+(-a*x+c)*dx[1] os_md.solpokuboe(P,[x,dx],1);[a*x-c,-a][2] os_md.solpokuboe(P,[x,dx],2);[(a^2+3*a+2)*x^2+((-2*c-2)*a-2*c-2)*x+c^2+c,-2*a-2][3] os_md.fctrtos(@@[0]|var=x);(a+1)*(a+2)*x^2-2*(c+1)*(a+1)*x+c*(c+1)
31. getSSE(p,[x,y,. . . ]|get=s):: Get singularities, rank,... of holonomic systems deﬁned by the ideal p etc.
• p is an ideal of a Weyl algebra given by a list
• Singurarities of the equation31

• get="rank" : rank of the equation if it is holonomic• get="gr" : Groebner base• get="top" : top terms of the Groebner base• get=symbol : symbol ideal• get="base" : base of the quotiend by the ideal[0] F2=os_md.ghg2([a,b,c],[[0,d],[0,e],[]]); /* Appell’s F_2 */[(-y*x*dx-a*y)*dy+(-x^2+x)*dx^2+((-a-c-1)*x-d+1)*dx-c*a,(-y^2+y)*dy^2+(-y*x*dx+(-b-c-1)*y-e+1)*dy-b*x*dx-c*b][1] os_md.getSSE(F2,[x,y]);[y,y-1,x,x-1,x+y-1]/* singularities */[2] os_md.getSSE(F2,[x,y]|get="rank");
4[3] os_md.getSSE(F2,[x,y]|get="base");[dy^2,dx,dy,1][4] os_md.getSSE(F2,[x,y]|get="top");[dx*dy,dx^2,dy^3][5] os_md.getSSE(F2,[x,y]|get="symbol");[(-y^2+y)*dy^2-y*x*dx*dy,(-y^2+y)*dy^2+(x^2-x)*dx^2,((y^2-y)*x+y^3-2*y^2+y)*dy^3,(y^2-y)*dy^3+(-y^2+y)*dx*dy^2][13366] os_md.getSSE(F2,[x,y]|get="gr");[(-y^2+y)*dy^2+(-y*x*dx+(-b-c-1)*y-e+1)*dy-b*x*dx-c*b,...
[6] F21=os_md.ghg2([[a,aa],[b,bb],[c,cc]],[[0,d,dd],[0,e,ee],[f]])$[7] os_md.getSSE(F21,[x,y]);[y,y-1,x,x-1,x+y,x+y-1][8] os_md.getSSE(F21,[x,y]|get="rank");
14[9] os_md.getSSE(os_md.ghg2([1,1,2],[2,2,1]|symbol=1),[x,y]);[y,y-1,x,x-1,x+y,x+y-1][10] os_md.getSSE(os_md.ghg2([2,2,1],[1,1,2]|symbol=1),[x,y]);[y,y-1,x,x-1,x+y,(y-1)*x-y][11] os_md.getSSE(os_md.ghg2([0,0,2],[2,2,0]|symbol=1),[x,y]);[y,x,x^2+(-2*y-2)*x+y^2-2*y+1][12] os_md.getSSE(os_md.ghg2([1,1,2],[3,3,0]|symbol=1),[x,y]);[y,y-1,x,x-1,x^2+(-2*y-2)*x+y^2-2*y+1][13] os_md.getSSE(os_md.ghg2([1,1,3],[3,3,1]|symbol=1),[x,y]);[y,y-1,x,x-1,x-y,x^2+(-2*y-2)*x+y^2-2*y+1][14] os_md.getSSE(os_md.ghg2([2,2,4],[4,4,2]|symbol=1),[x,y]);[y,y-1,x,x-1,x-y,x^2+(-2*y-2)*x+y^2-2*y+1][15] os_md.getSSE(os_md.ghg2([2,2,4],[4,4,2]|symbol=1),[x,y]|get="rank");
28[16] os_md.getSSE(os_md.ghg2([0,0,3],[3,3,0]|symbol=1),[x,y]);[y,x,x^3+(3*y-3)*x^2+(3*y^2+21*y+3)*x+y^3-3*y^2+3*y-1][17] os_md.getSSE(os_md.ghg2([1,1,4],[4,4,1]|symbol=1),[x,y]);[y,y-1,x,x-1,x+y,x^3+(3*y-3)*x^2+(3*y^2+21*y+3)*x+y^3-3*y^2+3*y-1]32

[18] os_md.getSSE(os_md.ghg2([0,0,4],[4,4,0]|symbol=1),[x,y]);[y,x,x^4+(-4*y-4)*x^3+(6*y^2-124*y+6)*x^2+(-4*y^3-124*y^2-124*y-4)*x+y^4-4*y^3+6*y^2-4*y+1][19] os_md.getSSE(os_md.ghg2([1,1,1,1],[2,2,2,0]|symbol=1),[x,y,z]);[z,z-1,y,y-1,y+z-1,x,x-1,x+z-1,x+y-1,x+y+z-1][20] os_md.getSSE(os_md.ghg2([1,1,1,2],[2,2,2,1]|symbol=1),[x,y,z]);[z,z-1,y,y-1,y+z,y+z-1,x,x-1,x+z,x+z-1,x+y,x+y-1,x+y+z,x+y+z-1][21] os_md.getSSE(os_md.ghg2([1,1,1,2],[2,2,2,1]|symbol=1),[x,y,z]|get="rank");15
3.1.2 Fractional calculus
The functions in this section realize the results of [O3]，[O5], [O7], [O9] and [O10].
32. laplace(p,[x, ∂x ])laplace(p,[[x1 , ∂x1 ],[x2 , ∂x2 ], . . . ]):: (partial) Laplace transform of a diﬀerential operator p(x, ∂x ) 7→ (−∂x , x)[0] os_md.laplace(x^2*dx+1,x);x*dx^2+2*dx+1
33. laplace1(p,[x, ∂x ])laplace1(p,[[x1 , ∂x1 ],[x2 , ∂x2 ], . . . ]):: Inverse of (partial) Laplace transform of a diﬀerential operator p(x, ∂x ) 7→ (∂x , −x)[0] os_md.laplace1(x^2*dx+1,x);-x*dx^2-2*dx+1
34. mc(p,[x, ∂x ],r):: Middle convolution mcr (p) of a diﬀerential operator p[0] P=os_md.mc(x*(1-x)*dx-a-b*x,x,r);(x^2-x)*dx^2+((-2*r+b+2)*x+r+a-1)*dx+r^2+(-b-1)*r+b[1] os_md.expat(P,x,"?");[[0,[r+a,0]],[1,[r-a-b,0]],[infty,[-r+b,-r+1]]]
35. mce(p,[x, ∂x ],n,r):: Transformation p into (∂x − n)−r ◦ p ◦ (∂x − n)r and returns corresponding diﬀerential operator
Here n should commute with ∂x . If n = 0, this corresponds to the middle convolution mcr (p).
36. rede(p,[x, ∂x ])rede(p,[[x1 , ∂x1 ],[x2 , ∂x2 ], . . . ]):: Reduced representative of a diﬀerential operator p[0] os_md.rede(x*(y^2-1)*dx+(y+1)/x*dy,[[x],y]);dy+(y-1)*x^2*dx
37. ad(p,[x, ∂x ],f ):: Transform of a diﬀerential operator p deﬁned by ∂x → ∂x − f
38. add(p,[x, ∂x ],f ):: Addition of a diﬀerential operator p deﬁned the map ∂x → ∂x − f , namely, rede(ad())[0] os_md.add(dx^2+x,x,1/x^2);33

x^4*dx^2-2*x^2*dx+x^5+2*x+1
39. vadd(p,[x, ∂x ],[[c0 , r0 ],[c1 , r1 ], . . . ])∑rj x j:: Versal addition add(p,[x, ∂x ], j≥0 ∏j (1−c
)
ν x)
ν=0
40. addl(p,[x, ∂x ],f ):: laplace1(add(laplace()))[0] os_md.add(x,x,a/(x-c));-x*dx+c*x-a-1
41. cotr(p,[x, ∂x ],f ):: Transform of a diﬀerential operator p deﬁned by x 7→ f (x)42. rcotr(p,[x, ∂x ],f ):: Reduced representative of the transformation P deﬁned by x 7→ f (x)43. s2sp(p|num=1,std=k,short=1):: Converts a list of lists of numbers to and from its expression using a list of strings• 10, 11, 12, . . . , 35 are written by a,b,c,...,z, respectively. A negative number and ^ and afractional number is allowed.
• ^ means the repetition of a same number (does not mean a power)• a number larger than 9 can be expressed with ”(” and ”)” but its nesting is not allowed.
• num=1 : a,b,c,... is not used for the return but use ”(” and ”)”.
• For the parameters p, 36, 37, . . . , 60 may be expressed by A, B, . . . , Z.
• The element in p which is not a rational number is expressed by a string with < >.
• std=k : the spectral types are arranged with the numbers according to the multiplicities at
each singular points ns and the singular points are arranged in the lexicographic orderk = 1 : started from smaller onesk = −1 : started from larger ones
• short=1 : if the same number repeats more that 3 times, the expression with ^* is used. In
this case the option std=k is also allowed.
[0] os_md.s2sp("121,22,211");[[1,2,1],[2,2],[2,1,1]][1] os_md.s2sp(@@);
121,22,211[2] os_md.s2sp("5^2,541,1^a");[[5,5],[5,4,1],[1,1,1,1,1,1,1,1,1,1]][3] os_md.s2sp("2-3a,1^9");[[2,-3,10],[1,1,1,1,1,1,1,1,1]][4] newmat(4,4,os_md.s2sp("1,01,001,0001"));[ 1 0 0 0 ][ 0 1 0 0 ][ 0 0 1 0 ][ 0 0 0 1 ][5] S=os_md.s2sp("1(-15)a-b,fg-7/(80)");[[1,-15,10,-11],[15,16,-7/80]][6] os_md.s2sp(S);1(-15)a(-11),fg(-7/80)[7] os_md.s2sp(S|num=1);34

1(-15)(10)(-11),(15)(16)(-7/80)[8] os_md.s2sp([[1,2],[a-b,2.5]]);12,<a-b><2.5>[9] os_md.s2sp(@@);[[1,2],[a-b,2.5]][10] os_md.s2sp(os_md.s2sp("32,2111,41,23"|std=1));
2111,32,32,41[11] os_md.s2sp(os_md.s2sp("32,2111,41,23"|std=-1));
41,32,32,2111[12] os_md.s2sp("111111,33,222"|short=1,std=-1);
33,222,1^6
44. s2csp(p|n=f ):: Converts expressions of a spectral type with unramiﬁed irregular singularities• A spectral type with conﬂuent singularities is a list of singularities at each singular points• Spectral type of an irregular singular point is nested lists of multiplicities according to thelevels of irregularities• A spectral type with unramiﬁed irregular singularities is expressed a string according to its
versal unfolding (cf. [O10]).
• n = 1 : Supports an expression with ”(” and ”)” (cf. [Hiroe-Kawakami-Nakamura-Sakai]).
• n = −1 : Supports the above expression both for input and output.
[0] L=os_md.s2csp("111,21,111");[[1,1,1],[2,1],[1,1,1]][1] os_md.s2csp(L);111,21,111[2] L=os_md.s2csp("111|21,111");[[[2,[1,1]],[1,[1]]],[1,1,1]][3] os_md.s2csp(L);111|21,111[4] os_md.s2csp(L|n=1);(1 1) (1),1 1 1[5] L=os_md.s2csp("111|111,21");[[[1,[1]],[1,[1]],[1,[1]]],[2,1]][6] os_md.s2csp(L);
111|111,21[7] os_md.s2csp(L|n=1);(1) (1) (1),2 1[8] L=os_md.s2csp("111|111|21");[[[2,[[1,[1]],[1,[1]]]],[1,[[1,[1]]]]]][9] os_md.s2csp(L);
111|111|21[10] os_md.s2csp(L|n=1);((1) (1)) ((1))[11] os_md.s2csp("((1)(1))((1))"|n=1);
111|111|2135

[12] os_md.s2csp("(1)(1)(1),21"|n=-1);[[[1],[1],[1]],[2,1]][13] os_md.s2csp( [[[1],[1],[1]],[2,1]]|n=-1);(1) (1) (1),2 1
45. chkspt(m|mat=1,dumb=1) or chkspt(m|opt=t,dumb=1) or fspt(m,t):: Checks a tuple of partitions m (spectral type) or a generalized Riemann scheme（GRS）andreturns [pts, ord, idx, f uchs, rod, redsp, f spt]
pts
: number of singular points
ord: rankidx: index of rigidity
f uchs : Fuchs relationrod: rank reduced by one-step reduction
redsp : the positions of exponents at singular points speciﬁed by one-step reduction
f spt : corresponding basic spectral typem can be indicated by an element of the root lattice of Kac-Moody root space (cf. sproot()).
m = [n, [n0,1 , n0,2 . . . . ], [n1,1 , n1,2 , . . . ], . . . , ],mj,ν = nj,ν−1 − nj,ν(j ≥ 0, ν ≥ 1, nj,0 := n)• mat=1 : Schleginger type
• dumb=1 : stop showing errors• return : −1 means the tuple is not correct, 0 means that the spectral type is not realizable• opt="sp" or 0: return spectral type of the given GRS• opt="basic" or 1: chkspt(m) : return f spt (return 0 if m is not realizable)• opt="construct" or 2: return the construction from the basic spectral type (return 0 if m is
not realizable)• opt="strip" or 3: delete the exponents with the multiplicity 0 from the generalized Riemannscheme or the spectral type• opt="short" or 4: give GRS in a short form
• opt="long" or 5: give GRS in a normal form
• opt="sort" or 6: return a sorted spectral type at each singular point• opt="root" or 7: return the construction by Kac-Moody Weyl group
The returned list has 3 elements which are base spectral type, given spectral type and the listof reﬂections. The reﬂection has 3 elements, namely, the value of inner product, the branch
and the position in the star-shaped Dynkin diagram which speciﬁed the root in the Dynkin
diagram.
• opt="idx" : return index of rigidity• opt="kac" : return the expression in Kac-Moody root system
The short form means that the exponents with free multiplicity are given the values without themultiplicity.
[0] os_md.chkspt([[1,2,1],[2,2],[1,1,1,1]]);[3,4,2,0,1,[ 1 0 0 ],[[1],[1],[1]]]][1] os_md.chkspt("121,22,1111");[3,4,2,0,1,[ 1 0 0 ],[[1],[1],[1]]]][2] M=os_md.sp2grs([[1,1,1,1],[2,1,1],[2,2]],[a,b,c],[1,1]);[[[1,-2*c1-2*c0-b1-2*b0-a1-b2-a3-a2+3],[1,a1],[1,a2],[1,a3]],[[2,b0],[1,b1],[1,b2]],[[2,c0],[2,c1]]][3] os_md.sp2grs([[1,1,1,1],[2,1,1],[2,2]],[a,b,c],[1,1]|mat=1);
36

[[[1,-2*c1-2*c0-b1-2*b0-a1-b2-a3-a2],[1,a1],[1,a2],[1,a3]],[[2,b0],[1,b1],[1,b2]],[[2,c0],[2,c1]]][4] os_md.chkspt(M|opt="sp");[[1,1,1,1],[2,1,1],[2,2]][5] os_md.chkspt(M|opt="basic");[[1],[1],[1]][6] os_md.chkspt(M|opt="construct");[[[1],[1],[1]],[[1,1],[1,1],[1,1]],[[1,1,1],[1,1,1],[2,1]],[[1,1,1,1],[2,1,1],[2,2]]][7] os_md.chkspt(M|opt="short");[[-2*c1-2*c0-b2-b1-2*b0-a2-a1-a3+3,a1,a2,a3],[[2,b0],b1,b2],[[2,c0],[2,c1]]][8] os_md.chkspt([[0,1,2,1],[2,0,2,0],[1,1,1,1]]|opt="strip");[[2,1,1],[2,2],[1,1,1,1]][9] os_md.chkspt([[0,1,2,1],[2,0,2,0],[1,1,1,1]]|opt="sort");[[2,1,1,0],[2,2,0,0],[1,1,1,1]][10] os_md.chkspt("21,21,21,21"|opt="root");[[[1],[1],[1],[1]],[[2,1],[2,1],[2,1],[2,1]],[[1,3,1],[1,2,1],[1,1,1],[1,0,1],[2,0,0]]][11] os_md.chkspt("21,21,21,111");[4,3,0,0,1,[ 0 0 0 0 ],[[1,1],[1,1],[1,1],[1,1]]][12] os_md.chkspt([[3,2],[2,2,1],[1,1,1,1]]);
illegal partitions-1[13] os_md.chkspt("31,31,31,22");
not realizable
0[14] os_md.chkspt("43,322,1^7");[3,7,0,0,1,[ 0 0 0 ],[[3,3],[2,2,2],[1,1,1,1,1,1]]][15] os_md.chkspt("21,21,21,111");[4,3,0,0,1,[ 0 0 0 0 ],[[1,1],[1,1],[1,1],[1,1]]][16] os_md.chkspt([[2*m,2*m],[m,m,m,m],[m,m,m,m-1,1]]|opt="idx");-2*m+2[17] os_md.chkspt([[2*m,2*m],[m,m,m,m],[m,m,m,m-1,1]]);[3,4*m,-2*m+2,0,-1,[ 0 0 3 ],[[2*m,2*m],[m,m,m,m],[m-1,m,m,m,1]]]46. spgen(n|eq=1,str=1,std=f ,pt=[k, ℓ],sp=m,basic=1):: Gets rigid tuples of partitions with the rank ≤ n (or the orbit of a given tuple)
If n ≤ 0, fundamental tuples with the index of the rigidity n are obtained.
• eq=1: the rank is exactly n (when n > 1)
• str=1: returns in string form37• pt=[k, ℓ] : the number of the partition is in [k, ℓ]. pt=k means k = ℓ• sp=m: returns tuples in the orbit of a tuple (spectral type) m only to the direction withhigher rank.
If basic=1 is indicated, the direction is not speciﬁed.
• std=f: The multiplicities are arranged from larger ones at each partition and the partitions are arranged from smaller (resp. larger) tuples if f = 1 (resp. f = −1).
[0] os_md.spgen(4|eq=1,pt=4);[[[2,2],[2,2],[2,2],[3,1]],[[2,2],[3,1],[3,1],[2,1,1]]][1] ltov(os_md.spgen(4|eq=1,pt=4,str=1));[ 22,22,22,31 22,31,31,211 ][2] ltov(os_md.spgen(4|eq=1,pt=4,str=1,std=-1));[ 31,22,22,22 31,31,22,211 ][3] ltov(os_md.msort(os_md.spgen(4|eq=1,pt=4,str=1,std=-1),[-1,0]));[ 31,31,22,211 31,22,22,22 ][4] ltov(os_md.spgen(-2|pt=4,str=1));[ 21,21,111,111 22,22,22,211 31,22,22,1111 ][5] ltov(os_md.spgen(4|eq=1,sp="11,11,11,11",str=1,std=-1));[ 31,31,22,1111 31,22,22,211 31,31,211,211 31,31,31,31,22 ][0] gets the list of rigid spectral types with 4 singular points whose rank equals 4.
[1] gets the same list as above in the string form[2] gets the same list as above in the string form arranged in the inverse lexicographic order[3] gets the list the same list as above further arrangded by the order of tuples[4] gets the list of fundamental tuples with the index of rigidity −2 and 4 singular points[5] gets the list of tuples with the order 4 in the oribit containing ”11,11,11,11” An example of aprogram :/* Get the list of rigid spectral types with rank 8 which have 4 singular points
in the lexicographic order from the larger ones (in strings format) */Rank=8; /* give rank */[6] G=os_md.spgen(Rank|eq=1,pt=4); /* get spectral types */[7] for(L=[];G!=[];G=cdr(G))
L=cons(os_md.s2sp(os_md.s2sp(car(G)|std=-1)),L);[8] L=msort(L,[-1,0]);47. sproot(p,t|dviout=1,only=k,sym=t,null=1):: Returns informations of the root corresponding to a spectral type t="base", "length", "type","part", "pair", "pairs", sp• length : the length of the element of the Weyl group which changes p basic.
• base： same as chksp(p|opt="root") ．The minimal expression of the element.
• type： the type of the element (= [∆(m)]，cf. [O3, (7.40)])• height ： the hight of the corresponding root (the sum of the coeﬃcients in the linear expression of the root in terms of simple roots cf. [O3, (7.35)]）• part：data for the set of real roots changed from positive to negative under the element(= ∆(m) : corresponds to the condition of irreducibility. cf. [O3, (7.30)])
See chkspt(m|opt=root) for the data.
• pair, pairs：decompositions of root corresponding to the reducibility. See [9] for the diﬀerence
between pair and pairs.
38

dviout=1 and only=k can be indicated. roots are indicated by the corresponding partitionsiand(k, 1) = 1 : the decomposition whose paired one is also a partition
iand(k, 2) = 2 : the decomposition whose paired one is a root with order 0iand(k, 4) = 4 : the decomposition whose paired one is a negative root
sym=1 : identiﬁes the decompositions under symmetries
sym=2 : identiﬁes the decompositions under symmetries only at each singular point
null=1 : return nothing if there is no corresponding decompositions• sp : If spectral type is indicated, the inner product with p as roots is returned[0] os_md.sproot("11,11,11","height");
5[1] os_md.sproot("11,11,11","length");4[2] os_md.sproot("11,11,11","type");[[4,1]][3] os_md.sproot("11,11,11","base");[[[1],[1],[1]],[[1,1],[1,1],[1,1]],[[1,2,1],[1,1,1],[1,0,1],[1,0,0]]][4] os_md.sproot("11,11,11","part");[[[1],[1],[1]],[[1,1],[1,1],[1,1]],[[1,[[1,0],[1,0],[0,1]]],[1,[[1,0],[0,1],[1,0]]],[1,[[0,1],[1,0],[1,0]]],[1,[[1,0],[1,0],[1,0]]]]][4] os_md.sproot("11,11,11","11,11,11");2[5] os_md.sproot("11,11,11","10,10,10");1[6] os_md.sproot("31,31,22,211","length");8[7] os_md.sproot("31,31,22,211","type");[[6,1],[2,2]][8] os_md.sproot("31,31,22,211","height");
11[9] os_md.sproot("31,31,22,211","pairs"|dviout=1);
31, 31, 22, 211 = 10, 10, 01, 001 ⊕ 21, 21, 21, 210= 20, 11, 11, 110 ⊕ 11, 20, 11, 101= 11, 20, 11, 110 ⊕ 20, 11, 11, 101= 10, 10, 01, 010 ⊕ 21, 21, 21, 201= 10, 10, 10, 001 ⊕ 21, 21, 12, 210= 10, 10, 10, 010 ⊕ 21, 21, 12, 201= 2(10, 10, 01, 100) ⊕ 11, 11, 20, 011= 2(10, 10, 10, 100) ⊕ 11, 11, 02, 011
The ﬁrst terms in the left hand side in the above correspond to the positive real roots in ∆(m).
When "pair" indicated, the last two lines in the above are diﬀerent as 20, 20, 20, 200⊕11, 11, 02, 011
etc.

39

[10] os_md.sproot("31,31,22,211","pairs"|dviout=1,sym=1);[11] os_md.sproot("31,31,22,211","pairs"|dviout=1,sym=2);
31, 31, 22, 211 = 20, 11, 11, 110 ⊕ 11, 20, 11, 101= 10, 10, 10, 010 ⊕ 21, 21, 12, 201= 2(10, 10, 10, 100) ⊕ 11, 11, 02, 011
31, 31, 22, 211 = 20, 11, 11, 110 ⊕ 11, 20, 11, 101= 11, 20, 11, 110 ⊕ 20, 11, 11, 101= 10, 10, 10, 010 ⊕ 21, 21, 12, 201= 2(10, 10, 10, 100) ⊕ 11, 11, 02, 011

In [O2, Chapter 8] and [O3, Chapter 7] the correspondence between the spectral type m = (mj,ν )and the roots α of a star shaped Kac-Moody root system.
)∑ (∑αm = nαo +mj,ν αj,i , n = mj,1 + mj,2 + · · · (which do not depend on j)j≥0 ν>i= nα0 +∑∑

nj,ν αj,ν

j≥0 ν≥1

mj,ν = nj,ν−1 − nj,ν (j = 0, 1, . . . , ν = 1, 2, . . . , nj,0 = n)"11,11,11" ↔ α = 2α0 + α0,1 + α1,1 + α2,1"21,21,21,21" ↔ α = 2α0 + α0,1 + α1,1 + α2,1 + α3,1"31,31,22,211" ↔ α = 4α0 + α0,1 + α1,1 + 2α2,1 + 2α3,1 + α3,2(α|α) = 2(α ∈ Π := {α0 , αj,ν | j ≥ 0, ν > 0})(α0 |αj,ν ) = −δν,1{0(i 6= j or |µ − ν| > 1)
(αi,µ |αj,ν ) =−1 (i = j and |µ − ν| = 1)sα : x 7→ x − (x|α)αα0(α ∈ Π)

α0,1

α0,2

α1,1

α1,2

α2,1

α2,2

α3,1

α3,2

···
···
···
···

In the case of the spectral type "11,11,11" of Gauss hypergeometric equation we have−1
αm = 2α0 + α0,1 + α1,1 + α1,2 = sα0 sα2,1 sα1,1 sα0,1 (α0 ) = wm
(α0 ),
wm = sα0,1 sα1,1 sα2,1 sα0 ,∆(m) = {α0 + α0,1 , α0 + α1,1 , α0 + α2,1 , α0 },[∆(m)] := {(α|αm ) | α ∈ ∆(m)} = {1, 1, 1, 1}↔ 4 = 1 + 1 + 1 + 1 : 14
The height equals 2 + 1 + 1 + 1 = 5. In the rigid case [∆(m)] is the partition of the natural
number height − 1 and in this case it is 4 = 1 + 1 + 1 + 1．Moreover the second and third numbersof the 3rd element of the list[[1,2,1],[1,1,1],[1,0,1],[1,0,0]]
given by base mean−1wm
= sα2,1 sα1,1 sα0,1 sα0

and the ﬁrst numbers show the diﬀerences of height under the simple reﬂections.
40

In general if wm = sαi0 sαi1 · · · sαiK , we have∆(m) = {sαi0 · · · sαiν−1 (αiν ) | ν = 0, . . . , K}
and moreover if m is rigid，wm αm = α0 . Here w⋗ is the unique element with the minimal length(= K) of the Weyl group (which is generated by simple reﬂections sα (α ∈ Π)). Mote that mj,νis normalized by the condition mj,1 ≥ mj,2 ≥ · · · and i0 = 0.
/* Get all the decompositions of Type 2 and Type 3 of spectral types with rank 8
which have more than three singular points */[12] Rank=8; /* give rank */[13] G=os_md.spgen(Rank|eq=1,str=1,pt=[4,100]); /* get spectral types */[14] for(T=G;T!=[];T=cdr(T))
if((os_md.sproot(car(T),"pairs"|only=6))!=[]) /* only type 2, 3 */os_md.sproot(os_md.s2sp(car(T)|std=-1), /* in standard order */pairs"|only=6,dviout=1);
48. spbasic(k,d|str=1,pt=[k,ℓ):: Returns the list of fundamental spectral types with rank d whose index of rigidity equals k• k : 0 or a negative integer• d = 0 means the list without the restriction of the rank
• pt=[k,ℓ] means that the number of singular points (partitions) is greater than or equal to k
and less than or equal to ℓ.
pt=k means pt=[k,k].
The required spectral types correspond to {mj,ν } in the identity
p−1
(∑

nj
p−1(∑
)
)
∑
(ord m − mj,1 ) − 2 · ord m ord m +(mj,1 − mj,ν )mj,ν = −idx m
j=0 ν=1

j=0with the condition mj,1 ≥ mj,2 ≥ · · · , m1 ≥ m2 ≥ · · · and the ﬁrst terms of the left handside of this identity is non-negative.
We get the required spectral types in the lexicographic order from the larger ones. Here we note
0≤

p−1
(∑

)
(ord m − mj,1 ) − 2ord m ord m ≤ |idx m|

j=0

If ord m > |idx m|, thenIn particular∑p−1

j=0 (ord m − mj,1 ) = 2 · ord m.

p ≤ 12 |idx m| + 4, ord m ≤ 3|idx m| + 6, ord m ≤ |idx m| + 2 (p > 3).
Moreover if ord m > |idx m| + 2, then p = 3 and m0,1 + m1,1 + m2,1 = ord m.
Hence we put{1|idx m| + 4 (ord m ≤ idx m + 2)
L= 2,
3
(ord m > idx m + 2)
Si(p) =

p−1∑

(ord m − mj,1 ) − 2idx m, Sv(p) =

j=0

p−1(∑
∑

(mj,1 − mj,ν )mj,ν

)

j=0 ν≥1and check the conditions
p < L,

Si(p) ≥ 0,

Sv(p) ≤ |idx m|,
41

Si(p) · ord m + Sv(p) = |idx m|for the spectral types (cf. [Osp]).
rigidity index
runtime (sec)total number
3 singular pts.
4 singular pts.

0

−2

4
3
1

13
9
3

−4
0.02
37
25
9

−6
0.05
69
46
17

−8
0.09
113
73
29

−10
0.19
198
127
50

−12
0.33
291
182
76

−14
0.58
415
249
115

−16
1.03
647
395
172

−18
1.70
884
522
243

−20
2.67
1186
680
345

−22
4.25
1682
963
478

[0] os_md.spbasic(-2,0);[[[1,1],[1,1],[1,1],[1,1],[1,1]],[[2,1],[2,1],[1,1,1],[1,1,1]],...
[1] tstart$os_md.mycat(length(os_md.spbasic(-10,0)))$tstop$
198[2] 0.1875sec + gc : 0.03125sec(0.219sec)
The time for the calculation to get the list is given under Let’s Note CF-SZ5 (i7-6500U), 2016.
We get the list of spectral types with a given index of rigidity by[0] Idx=-4; Column=4; /* Put the rigidity index */[1] Ord=6-3*Idx; Sp="\\,\\ ";V=newvect(Ord+1);V[0]=V[1]=[];[2] for(I=2;I<=Ord;I++) V[I]=os_md.spbasic(Idx,I|str=1);
for(R=[],I=0;I<10;I++){T=Sp+rtostr(I)+":\\,";
for(TL=V[I];TL!=[];TL=cdr(TL)) R=cons(T+car(TL),R);};
for(I=10;I<=Ord;I++){T=rtostr(I)+":\\,";
for(TL=V[I];TL!=[];TL=cdr(TL)) R=cons(T+car(TL),R);};[3] R=reverse(R);Title="idx=$"+rtostr(Idx)+"$\\ (Pidx="+rtostr((2-Idx)/2)+"),\\ "+rtostr(length(R))+" fundamental tuples";[4] S=os_md.ltotex([R]|opt="tab",width=Column, align="l",title=Title);
dviout(S);The above [2] may be replaced by the following to get spectral types arranged according to thenumbers of singularities.
[2] for(I=2;I<=Ord;I++) V[I]=os_md.spbasic(Idx,I);
for(S=[],I=2;I<=Ord;I++)
for(TL=V[I];TL!=[];TL=cdr(TL)) S=cons([length(car(TL)),I,car(TL)],S);
S=qsort(S);for(R=[],TS=S;TS!=[];TS=cdr(TS)){N=(P=car(TS))[1];if(N<10) T= Sp+rtostr(N)+":\\,";
else T=rtostr(N)+":\\,";
R=cons(T+os_md.s2sp(P[2]),R);}
49. sp2grs(m,a,ℓ|mat=1):: Generates generalized Riemann scheme with a given spectral type• The inverse transformation is given by chkspt() with the option opt="sp".
• The j + 1-th spectral parameter in the i + 1-th singular point is aij (resp. a[i]j) if a is avariable (resp. a list), where a or a[i] may be a string.
42

• When ℓ is a list [ℓ1 , ℓ2 ], ℓ2 -th exponent of ℓ1 -th singular point is determined by Fuchs relation.
If the exponent is zero, another exponent is arranged.
• When ℓ is a positive integer, aij is changed into aij + k or a[i]j + k. If the above indicationis also necessary, we indicate ℓ = [ℓ1 , ℓ2 , k].
• When ℓ is a negative integer −1 − k ，some exponents are set to 0 in a standard way together
with the above k shift of indices.
• mat=1 means the Schleginger type (which has a diﬀerent Fuchs relation)[0] os_md.sp2grs([[1,1],[1,1],[1,1]],a,0);[[[1,a00],[1,a01]],[[1,a10],[1,a11]],[[1,a20],[1,a21]]][1] M=os_md.sp2grs("111,111,21",[a,b,c],[3,2]);[[[1,a0],[1,a1],[1,a2]],[[1,b0],[1,b1],[1,b2]],[[2,c0],[1,-b1-b2-a2-a1-2*c0-b0-a0+2]]][2] os_md.sp2grs([[1,1,1],[1,1,1],[2,1]],[a,b,c],[3,2,-2]);[[[1,a1],[1,a2],[1,a3]],[[1,b1],[1,b2],[1,0]],[[2,0],[1,-b1-b2-a3-a2-a1+2]]][3] subst(M,b0,0,b1,1-b1,b2,1-b2,c0,0);[[[1,a0],[1,a1],[1,a2]],[[1,0],[1,-b1+1],[1,-b2+1]],[[2,0],[1,b1+b2-a2-a1-a0]]][4] os_md.sp2grs([[1,1],[1,1],[1,1]],a,1);[[[1,a01],[1,a02]],[[1,a11],[1,a12]],[[1,a21],[1,a22]]][5] os_md.ssubgrs(M,"110,110,11");-b2-a2-c0+2[6] os_md.ssubgrs(M,[[1,1,0],[1,1,0],[1,1]]);-b2-a2-c0+2
50. ssubgrs (m, ℓ)
51. mcgrs(m,[r1 , r2 , . . . , rn ]|mat=1,slm=[[k1 ,k2 ,. . .],m0 ]):: Applies middle convolutions and additions successively to a generalized Riemann scheme or asum of residue matrices• If rj is a scalar, it means a middle convolution mcrj . If rj is a list [rj,1 , . . . , rj,n ], it means
additions. If rj is a list [rj,0 , rj,1 , . . . , rj,n ], it means that a middle convolution mcrj,0 is appliedﬁrst and then the additions corresponding to [rj,1 , . . . , rj,n ] are applied. Firstly rn is applied
to p and then arn−1 to its result,..., and r1 is lastly applied.
• We indicate mat=1 if the Riemann scheme is of Schlesinger type.
If sm1= is indicated, the transformation of the spectral type of sum m0 of k1 , k2 , . . . -th residue
matrices. This enables us to know the semi-local monodromy and the monodromy of thecorresponding conﬂuent singular point (cf. [O7]).
[1] M0=[[1,0]]$M=[M0,M0,M0,M0]$S=[m,[a,b,c]]$[2] os_md.mcgrs(M,S);[[[2,-m+1],[1,-a-b-c-m]],[[2,0],[1,a+m]],[[2,0],[1,b+m]],[[2,0],[1,c+m]]][3] os_md.mcgrs(M,S|mat=1);[[[2,-m],[1,-a-b-c-m]],[[2,0],[1,a+m]],[[2,0],[1,b+m]],[[2,0],[1,c+m]]][4] os_md.mcgrs(M,S|mat=1,slm=[[0,1],M0]);[[[[2,-m],[1,-a-b-c-m]],[[2,0],[1,a+m]],[[2,0],[1,b+m]],[[2,0],[1,c+m]]],[[1,0],[1,-m],[1,-b-c-m]]]43

52. mcop(p,[r1 , r2 , . . . , rn ],[x, x1 , x2 , . . . ]):: Applies middle convolutions and additions successively to a (partial) diﬀerential operator p• [x, x1 , x2 , . . .] : x is the variable, x1 , x2 , . . . are singular points.
• [r1 , r2 , . . .] : rj = [rj,0 , rj,1 , . . . , rj,ν , . . .] is the j-th operation of a middle convolution andadditions at xν
– Apply the middle convolution mcrj,0 and after that apply the additions at x = xν (corresponding to the gage transformation of a function u to (x − xν )rj,ν u (ν = 1, 2, . . .).
– Apply the transformation described by rj to p in the order r1 , r2 , . . ..
d∂
– dx : represents dx(or ∂x).
[0] R=os_md.getbygrs("21,21,21,21","construct")$[1] R[0][1];[[[1,b+c+d+a1+2*a0-2]],[[1,0]],[[1,0]],[[1,0]]][2] S=os_md.lsol(os_md.getbygrs("21,21,21,21","Fuchs"),a1);-b-c-d-2*a0+2[3] R=subst(R,a1,S,a0,a);[[0,[[[1,0]],[[1,0]],[[1,0]],[[1,0]]]],[[0,a+b-1,a+c-1,a+d-1],[[[1,-3*a-b-c-d+3]],[[1,a+b-1]],[[1,a+c-1]],[[1,a+d-1]]]],[[-a+1,0,0,0],[[[2,a],[1,-2*a-b-c-d+2]],[[2,0],[1,b]],[[2,0],[1,c]],[[2,0],[1,d]]]]][4] RR=[R[1][0],R[2][0]];[[0,a+b-1,a+c-1,a+d-1],[-a+1,0,0,0]][5] os_md.mcop(dy,RR,[x,0,1,y]);((-x+y)*dx-a)*dy+(-a-d+1)*dx[6] os_md.show(@@)$−(x − y)∂x ∂y − (a + d − 1)∂x − a∂y53. redgrs(m|mat=1):: Returns 1-step reduction of generalized Riemann scheme of Fuchsian diﬀerential equation
Returns [redsp, m0 ].
If the reduction is not possible, it returns non-negative integer（basic, 0 means rigid) or negative
number (in the case of the non-existence of the operator)
54. getbygrs(m,t|perm=ℓ,var=v,pt=[p1 , . . . ],mat=1) or
getbygrs(m,[t,s1 , s2 , . . . ]|perm=ℓ,var=v,pt=[p1 , . . . ],mat=1):: Analyzes Fuchsian ODE deﬁned by generalized Riemann scheme (GRS) （GRS may be given ina short form or a spectral type)• mat=1 : Schleginger form
• getbygrs(0,0) : parameter is shown (for help)• The number of the elements of m which we put p+1 corresponds to the number of the singularpoints denoted by x0 = ∞, x1 = 0, x2 = 1, x3 , . . . , xp .
• The generalized exponents of a Fuchsian equation at x = xj are {[λ0 ](n0 ) , . . . , [λk ](nk ) } if
the exponents are {λj + ν ; 0 ≤ ν < nj , j = 0, . . . , k} including their multiplicities and if
any diﬀerence of the elements {λ0 , . . . , λk } is not an integer (otherwise we will not give thedeﬁnition here but for example when all λj are same, then the sizes of Jordan blocks of thecorresponding local monodromy matrix correspond to the dual partition of n = n0 + · · · +nk x = xj is semisimple (diagonalizable), namely, there exist local solutions (x−xj )λj +ν ϕj,ν (x)(0 ≤ ν < nν ) (ϕj,ν (x) are holomorphic at x = xj and ϕj,ν (xj ) = 1).
• Generalized Riemann scheme (GRS) is the table of generalized exponents at the p + 1 singular44

points (cf. [O2, Chapter 5]，[O3, Deﬁnition 4.6]）:


x =]∞
xj (j = 1,
. . . , p)


[
[
]




 m[0][0][1]
m[j][0][1](m[0][0][0])(m[j][0][0])


[
]
[
]


 m[0][1][1]m[j][1][1](m[0][1][0])(m[j][1][0])
..
..

.]
.]
; x
[

[


 m[0][i][1]m[j][i][1](m[j][i][0])(m[0][i][0])






..
..


.
.
• perm=[[i, j]] : transposition of i-th singular point and j-th singular point• perm=[j0 , . . . , jp ] : permutation of singular points (xj0 corresponds to ∞).
• var=v : return the variable of exponents. (cf. the second parameter of sp2grs()).
• pt=[p1 , p2 , . . . ] : the singular points are ∞, p1 , p2 , . . ..
• One of the exponent of Generalize Riemann scheme m may not be indicated by "?". The isis determined by Fuchs relation.
• When m is a spectral types (a tuple of partitions), it is replaced to the corresponding GRS.
If s = "general" is indicated in the above case, the exponents are general. Otherwise some
exponents are 0 and the GRS may be Okubo type or a close one.
Put R = getbygrs(m,t).
The option parameter s is a string of a list of strings. "TeX", "dviout", "keep" can be indicatedin the following cases.
• t ="reduction" or 0 : reduction to the basic equation"top0" can be indicated when s ="TeX" is indicated.
R[i][0] : the i-th reduction are as follows (i = 1, 2, . . .)the additions at xν with the parameters R[i][0][ν] for ν = 1, . . . , p and then the middle convolution with the parameter R[i][0][0].
R[i][1] : the GRS obtained by the above reduction
R[0][1] : the original GRS• t ="construct" or 1 : construction of the equation and integral representation of the solution
0R[0][1]: GRS
equation(∏p of the basic) obtained by the reduction (we denote it by m ).
R[i][0][ν]By RAd ν=1 (x − xν )◦ mcR[i][0][0] the GRS is changed from R[i − 1][1] to R[i][1]（i = 1, 2, . . .) and the corresponding transformation of m0 into m is given.
s ="short" can be indicateds ="TeX" means the integral representation of the solution (in TEX) corresponding to a
multiplicity one exponent of the local monodromy at x = x1 (x1 = 0 in default).
• t ="connection" or 2 : the connection coeﬃcients ="simplify" can be indicatedWhen the number of singular points is p + 1, they are x0 = ∞, x1 = 0, x2 = 1, x3 , x4 , . . . , xp
by default. When the GRS is as given and the multiplicities of the last exponents at x = 0
and x = 1 are 1, the connection coeﬃcient of the corresponding normalized local solution at
x = 0 to that of x = 1 is given by∏
Γ(R[0][ν]) ∏R[2][j](1 − x−1
c B ∏νj )ν Γ(R[1][ν])j≥3Here cB is the corresponding connection coeﬃcient of the basic equation. When the equation
R[2][j]is rigid (it has no accessory parameter), then cB = 0. Note that the terms (1 − x−1doj )not exist when the number of the singular points is 3.
• t ="operator" or 3 : get the equations ="simplify" may be indicated45dx is the variable x and dx means dx
in the result
The accessory parameters are expressed by ri_j and they correspond to coeﬃcient of certain
di
xj dx
i.
This calculation is heavier than other calculations and the result may be long.
• t ="series" or 4 : The local solution in the power series corresponding to the last exponent
at x = 0. The multiplicity of the exponent should be 1.
R = [R0 , R1 , R2 ]R0 = [[R00 , [R01 , T1 ], [R02 , T2 ], . . .], [P1 , Q1 ], [P2 , Q2 ], . . .]R1 = [[R100 , P101 , P102 , . . .], [R110 , P111 , P112 , . . .], . . .]R2 = [[R200 , P201 , P202 , . . .], [R210 , P211 , P212 , . . .], . . .]0 ≤ P1 < P 2 < P 3 < · · ·∑∏ ( x ) nP j
Cn0 xR00 +n0xQj
nP1 ,nP2 ,...
j≥0, P j6=0∏∏(
x )R0j j≥0 (R1j0 )nP1j1 +nP1j2 +···
∏
·
1−
,
xTj
j≥0 (R2j0 )nP2j1 +nP2j2 +···j≥1

x1 = x2 = 1,P1 6= 0 ⇒ n0 = 0 and C0 = 1.
• t = "TeX" or 5 : give GRS in LATEX
s = "top0" : indicate that x = ∞ is the last in GRS• t = "Fuchs" or 6 : get Fuchs relation• t = "All" or 7 : only valid when "dviout" is indicated in s. Several related results are displayed using dviout(). If "irreducible" is indicated in s, the condition for the irreducibility
is omitted. If "operator" is indicated in s, the diﬀerential operator is shown.
• t = "basic" or 8 : get the corresponding basic GRS
s ="short" may be indicated• t = "" or 9 : get GRS
s ="short" indicates the short form
• t = "irreducible" or 10 : get the condition for the irreducibilitys = "simplify may be indicated
The condition for the irreducibility equals that the any value of the linear form in the resulting
list is not an integer (with the condition for the irreducibility of the resulting basic equation
if the equation is not rigid).
• t = "recurrence" or 11 : adjacent relation in three terms This is only valid when the numberof singular points are three (0, 1, ∞) and the multiplicities of the last exponent of the three
singularities are 1.
The result is the shift of the local normalized solution with the last exponent at the origin.
s is a string or a list of string. The string are• "simplify" : simplify the result using the Fuchs relation• "TeX" : the result is given in LATEX• "dviout" : the result is displayed by dviout
In this case we can indicate a title by the option parameter title=• "keep" : same as above but the result is not displayed (only a ﬁle in TEXis created).
• "short" : GRS is a short format• "general" : exponents are fully generic according to the spectral type• "x1" : the singular points are ∞, x1 , x2 , . . .. (only valid for GRS in TEXand the diﬀerential
operator)46

• "x2" : the singular points are ∞, 0, x2 , . . .. (only valid for GRS in TEXand the diﬀerential
operator)• "top0" : ∞ is the last in GRS in TEX.
• "sht" : the suﬃces of exponents start from 1 (0 by default) automatically generated from thegiven spectral type[1] M=os_md.sp2grs([[1,1,1],[1,1,1],[2,1]],[a,b,c],[3,2]);[[[1,a0],[1,a1],[1,a2]],[[1,b0],[1,b1],[1,b2]],[[2,c0],[1,-2*c0-b2-b1-b0-a2-a1-a0+2]]][2] os_md.getbygrs(M,"reduction");[[0,[ [[1,a0],[1,a1],[1,a2]],[[1,b0],[1,b1],[1,b2]],[[2,c0],[1,-2*c0-b2-b1-b0-a2-a1-a0+2]]]],[[ 0 0 0 ],[ [[0,-c0-b0-a0+2],[1,a1-a0+1],[1,a2-a0+1]],[[0,0],[1,c0+b1+a0-1],[1,c0+b2+a0-1]],[[1,0],[1,-2*c0-b2-b1-a2-a1+1]]]],[[ 1 1 0 ],[ [[0,-c0-b0-a1+2],[0,-c0-b1-a1+2],[1,a2-a1+1]],[[0,a1-a0],[0,0],[1,c0+b2+a1-1]],[[0,0],[1,-c0-b2-a2]]]]][3] os_md.getbygrs(M,"construct");[[[0,[ [[1,0]],[[1,0]],[[1,0]]]][[0,c0+b2+a1-1,-c0-b2-a2][ [[1,a2-a1+1]],[[1,c0+b2+a1-1]],[[1,-c0-b2-a2]]]],[[-c0-b1-a1+1,c0+b1+a0-1,0],47

[ [[1,a1-a0+1],[1,a2-a0+1]],[[1,c0+b1+a0-1],[1,c0+b2+a0-1]],[[1,0],[1,-2*c0-b2-b1-a2-a1+1]]]],[[-c0-b0-a0+1,b0,c0],[ [[1,a0],[1,a1],[1,a2]],[[1,b0],[1,b1],[1,b2]],[[2,c0],[1,-2*c0-b2-b1-b0-a2-a1-a0+2]]]]][4] os_md.getbygrs(M,"connection");[[3*c0+b2+b1+b0+a2+a1+a0-2,b2-b1+1,b2-b0+1],[c0+b2+a2,c0+b2+a1,c0+b2+a0],[ 0 2*c0+b2+b1+b0+a1+a0-2 -b2-a2 ]][5] os_md.getbygrs(M,["construct","TeX"])$x^{b_{0}}(1-x)^{c_0}\int_c^x(x-s_0)^{c_0+b_0+a_0}ds_0s_0^{c_0+b_1+a_0-1}\int_c^{s_0}(s_0-s_1)^{c_0+b_1+a_1}
s_1^{c_0+b_2+a_1-1}(1-s_1)^{-c_0-b_2-a_2}ds_1[6] M0=subst(M,b2,0,c0,0,b1,1-b1,b0,1-b0);[[[1,a0],[1,a1],[1,a2]],[[1,-b0+1],[1,-b1+1],[1,0]],[[2,0],[1,b1+b0-a2-a1-a0]]][7] os_md.getbygrs(M0,"connection");[[b1,-b1-b0+a2+a1+a0,b0],[a2,a1,a0],[ 0 -b1-b0+a1+a0 -a2 ]][8] P=os_md.getbygrs(M0,"operator");(x^3-x^2)*dx^3+((a1+a0+a2+3)*x^2+(-b1-b0-1)*x)*dx^2+(((a0+a2+1)*a1+(a2+1)*a0+a2+1)*x-b0*b1)*dx+a2*a0*a1[9] os_md.expat(P,x,"?");[[0,[-b1+1,-b0+1,0]],[1,[b1+b0-a1-a0-a2,1,0]],[infty,[a1,a0,a2]]][10] os_md.getbygrs(M0,"irreducible");[b1-a1,b1-a2,a1,a2,b0-a0,b0-a2,b0-a1,a0,b1-a0][11] M1=os_md.sp2grs([[1,1,1],[1,1,1],[2,1]],[a,b,c],[]);[[[1,a0],[1,a1],[1,a2]],[[1,b0],[1,b1],[1,b2]],[[2,c0],[1,c1]]][12] M2 = subst(M1,b0,1-b0,b1,1-b1,b2,0,c0,0,c1,-c1);[[[1,a0],[1,a1],[1,a2]],[[1,-b0+1],[1,-b1+1],[1,0]],[[2,0],[1,-c1]]]48

[13] os_md.getbygrs(M2,"connection");[[c1,b1,b0],[c1+b1+b0-a1-a0,a1,a0],[ 0 -b1-b0+a1+a0 -c1-b1-b0+a1+a0 ]][14] os_md.getbygrs(M2,["connection","simplify"]);[[c1,b1,b0],[a2,a1,a0],[ 0 c1-a2 -a2 ]][15] os_md.getbygrs(M2, "Fuchs");-c1-b1-b0+a2+a1+a0[16] os_md.getbygrs(M2, "TeX")$P\begin{Bmatrix}
x=\infty & 0 & 1\\
a_0 &-b_0+ 1 & [0]_{(2)} & \!\!;x\\a_1 &-b_1+ 1 & -c_1\\
a_2 & 0 & \\\end{Bmatrix}[17] os_md.getbygrs(M2,["connection","simplify","TeX"])$c(0:0 \rightsquigarrow 1: -c_1)=\frac{\Gamma(c_1)\Gamma(b_1)\Gamma(b_0)}{\Gamma(a_2)\Gamma(a_1)\Gamma(a_0)}[18] os_md.getbygrs(M2, ["Fuchs","TeX"]);-c_1-b_1-b_0+a_2+a_1+a_0[19] os_md.getbygrs([[1,1],[1,1],[1,1]],"operator");(-x^2+x)*dx^2+((c1+b0-2)*x-b0+1)*dx+a0*c1+a0*b0+a0^2-a0[20] HO=[[1,1,1],[2,1],[2,1],[2,1]]$[21] os_md.getbygrs(HO,["","short"]);[[a0,a1,a2],[[2,0],b1],[[2,0],c1],[[2,0],d1]][22] os_md.getbygrs(HO,"TeX");P\begin{Bmatrix}
x=\infty & 0 & 1& x_3\\
a_0 & [0]_{(2)} & [0]_{(2)} & [0]_{(2)}&\!\!;x\\a_{1} & b_1 & c_1 & d_1\\a_{2} & & & \\\end{Bmatrix}[23] os_md.getbygrs(HO,["basic","short"]);[[b1+a1,b1+a2],[-b1-a0+1,0],[0,c1+a0-1],[0,a0+d1-1]][24] os_md.getbygrs(HO,["","short","general"]);[[a0,a1,a2],[[2,b0],b1],[[2,c0],c1],[[2,d0],d1]][25] os_md.getbygrs(HO,["basic","TeX"]);
P\begin{Bmatrix}
x=\infty & 0 & 1& x_3\\
49b_1+a_1 & -b_1-a_0+1 & 0 & 0&\!\!;x\\b_1+a_2 & 0 & c_1+a_0-1 & a_0+d_1-1\\\end{Bmatrix}[26] os_md.getbygrs(HO,"Fuchs");
b1+c1+a1+a0+d1+a2-3[27] P=os_md.getbygrs(HO,"operator");(-x^3+(x_3+1)*x^2-x_3*x)*dx^3+((-a1-a0-a2-3)*x^2+(-x_3*b1+(-x_3+1)*c1+a1+a0+a2+4*x_3+1)*x+x_3*b1-2*x_3)*dx^2+(((-a0-a2-1)*a1+(-a2-1)*a0-a2-1)*x-b1^2+((x_3-1)*c1-a1-a0-a2-2*x_3+2)*b1+(-x_3+1)*c1+a1+a0+a2+2*x_3-r0_0-1)*dx-a2*a0*a1[28] os_md.expat(P,x,"?");[[0,[b1,1,0]],[1,[c1,1,0]],[x_3,[-b1-c1-a1-a0-a2+3,1,0]],[infty,[a1,a0,a2]]]
In the above example ([1]–[5]) we examine the generalized Riemann scheme


x=∞ 0
1




a0
b0 [c0 ](2) ; x
R=P
b1
c1


 a1

a2
b2
with c1 = −a0 − a1 − a2 − b0 − b1 − b2 − 2c0 + 2
whose spectral type is m = 111, 111, 21. Then getbygrs(m, 1) shows that the equation P u = 0
with the GRS R is given by()()
P = RAd xb0 (x − 1)c0 ◦ mc−a0 −b0 −c0 +1 ◦ RAd xa0 +b1 +c0 −1()◦ mc−a1 −b1 −c0 +1 ◦ RAd xa1 +b2 +c0 −1 (x − 1)−a2 −b2 −c0 ∂x
and the generalized Riemann scheme changes as follows{}
x=∞ 0 1P
00 0 ; x
( c0 +a1 +b2 −1)→ RAd x(x − 1)−c0 −b2 −a2
{
}
x=∞
0
1
P
a2 − a1 + 1 c0 + b2 + a1 − 1 −c0 − b2 − a2 ; x()→ RAd xa0 +b1 +c0 −1 ◦ mc−a1 −b1 −c0 +1
{
}
x=∞
0
1
0
P a 1 − a 0 + 1 c 0 + b1 + a 0 − 1
a2 − a0 + 1 c0 + b2 + a0 − 1 −2c0 − b2 − b1 − a2 − a1 + 1 ; x)(→ RAd xb0 (x − 1)c0 ◦ mc−a0 −b0 −c0 +1


x=∞ 0
1




a0
b0
[c0 ](2)P.
b1 c1 := −a0 − a1 − a2 − b0 − b1 − b2 − 2c0 + 2 ; x

 a1

a2
b2
Hence an integral representation of the solution is∫ x ∫ s0(x − s0 )a0 +b0 +c0 s0a0 +b1 +c0 −1u(x) = xb0 (1 − x)c0cc
a1 +b1 +c0 a1 +b2 +c0 −1s1(1 − s1 )−a2 −b2 −c0 ds1 ds0 .
· (s0 − s1 )50

When c = 0 or c = 1 or c = ∞, u(x) is a local solution at x = 0 or x = 1 or x = ∞ corresponding to
the exponent b2 or c1 or a2 , respectively. It corresponds to the local solution for the last exponent
with free multiplicity at each singular point.
By getbygrs(m,"connection") we get the connection coeﬃcient∏1
Γ(a0 + a1 + a2 + b0 + b1 + b2 + 3c0 − 2) ν=0 Γ(b2 − bν + 1)c(0 : b2 ⇝ 1 : c1 ) =∏2
ν=0 Γ(aν + b2 + c0 )∏1
Γ(c0 − c1 ) ν=0 Γ(b2 − bν + 1)=,∏2
ν=0 Γ(aν + b2 + c0 )which corresponds to the local solution
xb2 (1 − x)c0 3 F2 (a0 + b2 + c0 , a1 + b2 + c0 , a2 + b2 + c0 , 1 − b0 + b2 , 1 − b1 + b2 ; x).
The calculation[29] G=[[a,b],[1-c,0],[c-a-b,0]];
[
[a,
b],
[-c+1, 0],[-a-b+c,0]][30] os_md.getbygrs(G,"operator");(-x^2+x)*dx^2+((-a-b-1)*x+c)*dx-b*a[31] os_md.getbygrs(G,"connection");[[-a-b+c,c],[-a+c,-b+c],[ 0 -b -b ]][32] os_md.getbygrs(G,["construct","TeX"])$x^{-c+1}(1-x)^{-a-b+c}\int_c^x(x-s_0)^{-b+1}
s_0^{-b+c-1}(1-s_0)^{a-c}ds_0[33] os_md.getbygrs(G,"irreducible")[b,a,b-c,a-c]shows Gauss summation formula (cf. [31])F (a, b, c; 1) =Γ(c − a − b)Γ(c)Γ(c − a)Γ(c − b)for the Gauss hypergeometric series
F (a, b, c; x) =∞∑(a)(a + 1) · · · (a + k − 1) · b(b + 1) · · · (b + k − 1)k=0(c)(c + 1) · · · (c + k − 1)k!

which is a solution of the hypergeometric equation (cf. [30])()
x(1 − x)u00 + c − (a + b + 1)x u0 − abu = 0
corresponding to the Riemann scheme (cf. [29])
{
}
x=∞
0
1
a
0
0
; x .
P
b
1−c c−a−b
The equation is irreducible if and only if (cf. [33])a, b, a − c, b − c ∈
/ Z.
51

xk ,

[34] os_md.getbygrs([[a1,a2,a3],[0,b1,b2],[[2,0],"?"]],["reduction","dviout","top0"]);gives the following with its source ﬁle in LATEX:

x=0


0
P
 b1

b2


∞


a1 ; x
a2


a3
}
{
x=0
1
∞
0
a2 − a1 + 1 ; x← mc−a1 +1 : P b1 + a1 − 1
b2 + a1 − 1 −b1 − b2 − a3 − a2 + 1 a3 − a1 + 1
{
}
(
)
x=0
1
∞
← Ad xb1 +a1 −1 mc−b1 −a2 +1 : P
b2 + a2 − 1 −b2 − a3 a3 − a2 + 1 ; x{}()
x=0 1 ∞
← Ad xb2 +a2 −1 (1 − x)−b2 −a3 : P
0
0 0 ;x1[0](2)−b1 − b2 − a3 − a2 − a1 + 2[35] os_md.getbygrs("11,11,11",["All","dviout","operator"]);gives the following with its source ﬁle in LATEX:
Riemann scheme
{
P

x=∞ 0
a0
0
a1
b

1
0 ;x
c

}

Fuchs conditionb + c + a1 + a0 − 1Connection formulac(0 : b ⇝ 1 : c) =Γ(−c)Γ(b + 1)
Γ(b + a0 )Γ(b + a1 )Recurrence relation shifting the last exponents at ∞, 0, 1
u0,0,0 − u+1,0,−1 =(b + 1)u0,+1,−1(b + a0 )Integral representation∫ x

1(x − s0 )−a0 s−c−a(1 − s0 )−b−a1 ds00p∼Γ(−a0 + 1)Γ(b + a0 ) b
x (p = 0, x → 0)
Γ(b + 1)

Series expansion∑ (b + a0 )n (b + a1 )nn≥0(b + 1)n n!

xb+n

Irreducibility ⇔ any value of the following linear forms ∈/Z
a0 a1
c + a0 b + a052

which correspond to the decompositions
11, 11, 11 = 10, 10, 01 ⊕ 01, 01, 10= 10, 01, 10 ⊕ 01, 10, 01= 01, 10, 10 ⊕ 10, 01, 01= 10, 10, 10 ⊕ 01, 01, 01
Operator− x(x − 1)∂ 2 + ((b + c − 2)x − b + 1)∂ − a0 a1[36] os_md.getbygrs([[[2,e],f,g],[[2,0],a,b],[[2,0],c,d]],["All","top0","dviout"]);gives
Riemann scheme

x=0


[0](2)P ab

1[0](2)cd∞[e](2) ; xfg

Fuchs conditiona + b + c + d + 2e + f + g − 3
Connection formulac(0 : b ⇝ 1 : d) =Γ(−d)Γ(c − d)Γ(b + 1)Γ(−a + b + 1)
Γ(−d − e + 1)Γ(b + e)Γ(b + c + e + g − 1)Γ(b + c + e + f − 1)

Recurrence relation shifting the last exponents at ∞, 0, 1
u0,0,0 − u+1,0,−1 =(b + 1)(−a + b + 1)
u0,+1,−1(b + e)(b + c + e + f − 1)

Integral representation∫ x ∫ s0(x − s0 )−e sa+e−1(1 − s0 )c+e−1 (s0 − s1 )b+d+e+g−2 s1b+c+e+f −2 (1 − s1 )a+d+e+f −2 ds1 ds00ppΓ(−e + 1)Γ(b + e)Γ(b + d + e + g − 1)Γ(b + c + e + f − 1) b∼
x (p = 0, x → 0)
Γ(b + 1)Γ(−a + b + 1)
Series expansion∑
n1 ≥0, n2 ≥0(−c − e + 1)n2 (b + c + e + g − 1)n1 (b + c + e + f − 1)n1 (b + e)n1 +n2 b+n1 +n2x(−a + b + 1)n1 (b + 1)n1 +n2 n1 !n2 !

Irreducibility ⇔ any value of the following linear forms ∈/Zg f ed+e c+e b+e a+e
b+c+e+f a+d+e+f

53

a+c+e+g

a+c+e+f

which correspond to the decompositions
211, 211, 211 = 110, 110, 101 ⊕ 101, 101, 110= 110, 101, 110 ⊕ 101, 110, 101= 101, 110, 110 ⊕ 110, 101, 101= 110, 110, 110 ⊕ 101, 101, 101= 100, 100, 001 ⊕ 111, 111, 210= 100, 100, 010 ⊕ 111, 111, 201= 100, 001, 100 ⊕ 111, 210, 111= 100, 010, 100 ⊕ 111, 201, 111= 001, 100, 100 ⊕ 210, 111, 111= 010, 100, 100 ⊕ 201, 111, 111= 2(100, 100, 100) ⊕ 011, 011, 011
A non-rigid case:[37] os_md.getbygrs("3111,3111,3111",["All","dviout"]);shows
Riemann Scheme

x=∞
0



 [a0 ](3) [0](3)
a1
b1
P


b2

 a2
a3
b3


1



[0](3) ; x
c1


c2


c3

Basic Riemann Scheme




x=∞
0
b3 + c 1 + a 1 + a 0 − 1 b 1 − b 3P b3 + c 1 + a 2 + a 0 − 1 b 2 − b3
b3 + c 1 + a 3 + a 0 − 1
0


1


0
;x
c2 − c1
c3 − c1[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Fuchs condition
b1 + b2 + b3 + c3 + c2 + c1 + a3 + a2 + a1 + 3a0 − 6Connection formulac(0 : b3 ⇝ 1 : c3 )=Γ(−c3 )Γ(b3 + 1)
cB (0 : 0 ⇝ 1 : c3 − c1 )Γ(−c3 − a0 + 1)Γ(b3 + a0 )Integral representation∫ x(x − s0 )−a0 sb03 +a0 −1 (1 − s0 )c1 +a0 −1 uB (s0 )ds0p∼

Γ(−a0 + 1)Γ(b3 + a0 )C0 xb3 (p = 0, x → 0)
Γ(b3 + 1)

54

Series expansion∑
n0 ≥0, n1 ≥0(−c1 − a0 + 1)n1 (b3 + a0 )n0 +n1
Cn0 xb3 +n0 +n1(b3 + 1)n0 +n1 n1 !

Irreducibility ⇔ any value of the following linear forms ∈/ Z + fundamental irreducibility
a0 a1 a2 a3
c1 + a0 c 2 + a0

c3 + a0

b3 + a 0

b2 + a 0

b1 + a 0

which correspond to the decompositions
3111, 3111, 3111 = 1000, 1000, 0001 ⊕ 2111, 2111, 3110
= 1000, 1000, 0010 ⊕ 2111, 2111, 3101
= 1000, 1000, 0100 ⊕ 2111, 2111, 3011
= 1000, 0001, 1000 ⊕ 2111, 3110, 2111
= 1000, 0010, 1000 ⊕ 2111, 3101, 2111
= 1000, 0100, 1000 ⊕ 2111, 3011, 2111
= 0001, 1000, 1000 ⊕ 3110, 2111, 2111
= 0010, 1000, 1000 ⊕ 3101, 2111, 2111
= 0100, 1000, 1000 ⊕ 3011, 2111, 2111
= 3(1000, 1000, 1000) ⊕ 0111, 0111, 0111
Here the equation P u = 0 with a non-rigid Riemann scheme is reduced to a basic equation
PB uB = 0 by middle convolutions and additions.
The connection coeﬃcients, an integral representation, a local solution in a power series of the∑∞equation are expressed as above by the connection coeﬃcients cB , an solution n0 =0 Cn0 xb3 +n0 vof
the solution uB (x) of Pb uB = 0. The fundamental irreducibility is the condition of irreducibilityof the equation PB uB = 0.
PB is calculated by mcop() for a given diﬀerential operator P .
[38] os_md.getbygrs([[0,a,b],[[2,"?"],0],[d,e,f]],[""]|mat=1);[[[1,0],[1,a],[1,b]],[[2,-1/2*a-1/2*b-1/2*d-1/2*e-1/2*f],[1,0]],[[1,d],[1,e],[1,f]]][39] os_md.getbygrs([[0,a,b],[[2,"?"],0],[d,e,f]],["","short"]);[[0,a,b],[[2,-1/2*a-1/2*b-1/2*d-1/2*e-1/2*f+1],0],[d,e,f]]
55. spslm(m,[k1 ,k2 ,. . .]):: Gets a semilocal monodromy of a rigid linear ordinary diﬀerential equation• m : spectral type of a generalized Riemann scheme.
• calculate the semilocal monodromy corresponding to the simple curve (path) around singularpoints indexed by k1 ,k2 , . . . (cf. [O7]).
• return the list of generalized Riemann scheme and the logarithm of the semilocal monodromy[0] os_md.spslm("21,21,21,21",[0,3]);[1] [[[[2,a0],[1,a1]],[[2,0],[1,-c-d-a1-2*a0]],[[2,0],[1,c]],[[2,0],[1,d]]],[[1,0],[1,a0],[1,d+a1+a0]]]This means that the Jordan Pochhammer equation (of Schlesinger type) with the generalized
Riemann scheme
{
}
x=∞
0
1
y
[a0 ]2[0]2[0]2 [0]2a1−2a0 − a1 − c − dcd55

is studied and the eigenvalues of the monodromy matrix (which is semisimple if the parameters
are generic) corresponding to the simple curve which contains ∞ and y in the region surroundedby the curve are 1, e2πia0 , e2πi(a0 +a1 +d) .
56. shiftop(ℓ, s|zero=1,raw=k,all=t,dviout=1):: Gets the shift operator of rigid ODE with a spectral type ℓ corresponding to a shiftsℓ may be a Riemann scheme and s may be a list of the parameter and the shifted parameter.
Gets the list of the three elements, shift operator, diﬀerential operator and the Riemann scheme• zero=1 : some of the exponents are normalized to 0
• raw=1 : normalize including the constant multiple
raw=2 : give the constant with the composition with its left inverse shift operator
The constant vanishes ⇔ the shift operator is not isomorphic
raw=3 : give the list of the shift operator and the above constantraw=4 : give the list of the shift operator, the above constant and the left inverse shift operator• all=0 : give only the shift operator
all=1 : give the list of shift operator, diﬀerential operator, Riemann scheme, shifted diﬀerential operator, shifted Riemann scheme• dviout=1 : the result is displayed by dviout(). the option all is possible. all=1 means todisplay including the diﬀerential operator.
The exponents to be shifted are better to be the latter ones in each singular points for a faster
calculation.
[0] os_md.shiftop("11,11,11","00,01,0-1"|zero=1);[1] [x*dx-b,(-x^2+x)*dx^2+((b+c-2)*x-b+1)*dx+a^2+(b+c-1)*a,[[[1,a],[1,-a-b-c+1]],[[1,0],[1,b]],[[1,0],[1,c]]]][2] R=os_md.shiftop("11,11,11","00,01,0-1"|zero=1,raw=2,all=0);a^2+(b+c-1)*a+(c-1)*b[3] fctr(R);[[1,1],[a+c-1,1],[a+b,1]][4] os_md.shiftop("11,11,11","00,01,0-1"|zero=1,raw=4,all=0);[x*dx-b,a^2+(b+c-1)*a+(c-1)*b,(x-1)*dx-c+1][5] os_md.shiftop("11,11,11","10,00,0-1"|zero=1,raw=2,all=0);a^2+b*a[6] fctr(@@);[[1,1],[a,1],[a+b,1]][7] os_md.shiftop("11,11,11","10,00,0-1"|zero=1,raw=3,all=0);[x*dx+a,a^2+b*a][8] os_md.shiftop("11,11,11","1-1,00,00"|zero=1,dviout=1,all=1)$
Shift Operator
{

}
x=∞
0 1
a
0 0 = {u | P u = 0}
−a − b − c + 1 b c
{
}
x=∞
0 1
Q1
a+1
0 0
⇄
Q2
−a − b − c b c56

Q1 = (2a + b + c)x(x − 1)∂ + a((2a + b + c)x − a − c)
Q2 = −(2a + b + c)x(x − 1)∂ + (a + b + c)((2a + b + c)x − a − b)
Q2 Q1 ≡ a(a + c)(a + b)(a + b + c) mod W (x)P
P = −x(x − 1)∂ 2 + ((b + c − 2)x − b + 1)∂ + a(a + b + c − 1)
57. shiftPfaff(a,b,g,x,[µ1 ,µ2 ]):: Transformation of an adjacent relation of Pfaﬃan systems under a middle convolution
Here a(x), b(x) and g(x) are square matrices of rational functions and µ1 − µ2 ∈ Z should be valid.
When
∫ x
1
u0 (x) = a(x)u, u(x) =ū(t)(x − t)µ1 −1 dt,
Γ(µ1 ) x0∫ x1v̄(t)(x − t)µ2 −1 dt,
v 0 (x) = b(x)v, v(x) =Γ(µ2 ) x0v̄(x) = g(x)ū(x),this function returns the matrix G(x) satisfying u(x) = G(x)v(x).
• If µ1 = µ2 , [µ1 ,µ2 ] may be simply replaced by µ1 .
58. conf1sp(m|x2= ± 1,conf=0):: Conﬂuence (Poincare rank 1) of a diﬀerential operator with spectral type m
Partitions corresponding to a spectral type are assumed to the singularities ∞, 1c , x2 , . . . in thisorder and the partition corresponding to ∞ should be a reﬁnement of the partition corresponding
to 1c .
1
, . . . are replaced by x2 , . . ..
If x2=-1 is indicated, c2
If conf=0 is indicated, the singular points are ∞, 0, c, x3 , . . . and the conﬂuence of the points 0and c is calculated.
[0] P=os_md.conf1sp([[1,1],[1,1],[1,1]]|x2=1);(-c*x^2+(x_2*c+1)*x-x_2)*dx^2+(((-a01-a00-1)*c+a11)*x+x_2*c-x_2*a11+a01+a00)*dx-a00*a01*c+a00*a11[1] os_md.fctrtos(P|TeX=1,var=dx);-(x-x_2)(cx-1){dx}^2-(((a_{01}+a_{00}+1)c-a_{11})x-x_2c+x_2a_{11}-a_{01}-a_{00})[2] os_md.expat(P,x,"?");[[x_2,[-a01-a00+1,0]],[(1)/(c),[(a11)/(c),0]],[infty,[(a01*c-a11)/(c),a00]]][3] Q=os_md.conf1sp([[1,1],[1,1],[1,1]]);(-c*x^2+x)*dx^2+(((-a01-a00-1)*c+a11)*x+a01+a00)*dx-a00*a01*c+a00*a11[4] subst(Q,c,0);x*dx^2+(a11*x+a01+a00)*dx+a00*a11[5] P=os_md.conf1sp([[1,1],[1,1],[1,1]]|conf=0);(-x^2+c*x)*dx^2+((a01-2)*x+(-a01+1)*c+a11)*dx+a20^2+(a01-1)*a20[6] os_md.expat(P,x,"?");[[0,[(a01*c-a11)/(c),0]],[c,[(a11)/(c),0]],[infty,[-a20-a01+1,a20]]][7] subst(-P,c,0);-x^2*dx^2+((a01-2)*x+a11)*dx+a20^2+(a01-1)*a20[8] os_md.fctrtos(-@@|TeX=1,var=dx);x^2{dx}^2-((a_{01}-2)x+a_{11}){dx}-a_{20}(a_{20}+a_{01}-1)

57

59. pf2kz(m|all=1):: Converts a Pfaﬃan system m of n variables to a KZ system of n + 2 variables
When n = 2, the Pfaﬃan system
∂u
A1 u
A2 u
A0 u
=
+
+
∂x
x
x−1
y
A3 u
A4 u
A0 u
∂u
=
+
+
∂y
y
y−1
x
with m = [A0 , A1 , A2 , A3 , A4 , ] is transformed into
∂u
=
∂xi

∑
0≤j≤3, j6=i

Ai,j uxi − xj(0 ≤ i ≤ 3).

Here(x0 , x1 , x2 , x3 , x4 ) = (x, y, 0, 1, ∞)Ai,j = Aj,i , A0,j = Aj , A1,2 = A3 , A1,3 = A4 ,∑∑Ai,j =
Ai,j = 0.
0≤i<j≤30≤ν≤4, ν6=i

The function returns the list of n + 3 elements [A23 , A04 , A14 , A24 , A34 ].
In general, the coordinates of a Pfaﬃan system and those of a KZ equation are given by(x0 , x1 , . . . , xn+2 ) = (x, y1 , . . . , yn−1 , 0, 1, ∞).
If all=1 is indicated, this function returns the list of Aij arranged in the lexicographic order of(i, j), which has (n+2)(n+3)
elements.
2[0] N=5$P=[1,2,3,4,5]$MM=os_md.pf2kz(P|all=1)$M=newmat(N,N)$[1] for(I=0;I<N-1;I++) for(J=I+1;J<N;J++)
M[I][J]=M[J][I]=MM[os_md.lext2([I,J,N])[0]][2] dviout(M)$


0
1
2
3
−6
1
0
4
5
−10


2
4
0
−15
9 

 : the sum of diagonal elements and that in each line are 0
3
5
−15
0
7 
−6

−10

9

7

0

60. confexp([[c0 ,f0 ],[c1 ,f1 ],...,[cm , fm ]]) confexp([[f1 ,. . .,fn ],[c1 ,. . .,cm ]]|sym=k]):: Conﬂuence of characteristic exponents
1• A sum of constant multiples of x−c(j = 0, . . . , m) is expressed by a sum of constant multiplesj
1of ∏j (x−c ) (j = 0, . . . , m). Namely, this function returns the list [λ0 ,λ1 , . . . , λm ] of theνν=0
coeﬃcients given by
m
m
∑
∑
fj
λk
=
∏k
x
−
c
j
ν=0 (x − cν )j=0
k=0

(cf. paracmpl()). Here fj are matrices without the variable x.
The parameter of this function may be a list of the parameters as above. Then this function
returns the list of the corresponding results.
Note that we have
m
m
∑
∑
fj
λk y k=.
∏k
1 − cj y
ν=0 (1 − cν y)
j=0
k=0

58

by dividing the above equality by x and putting x = y1 .
• If sym=1 is indicated, this function returns the n × m matrix M satisfying


xm−1
 
f1
(x−c1 )···(x−cm )
xm−2
 f2 
 .  = M  (x−c1 )···(x−cm )  .
 .. 
..


.
fn
1
(x−c1 )···(x−cm )Here (x − c1 ) · · · (x − cm )fj should be polynomials of x with degree ≤ (m − 1).
• If sym=2 is indicated, this function returns the list [hf1 ,. . .,hfn ] of polynomials of x withh = (x − c1 ) . . . (x − cm ).
• If sym=3 is indicated, this function returns the n × m matrix M satisfying


1
 
f1
x−c1
1
 (x−c )(x−c f2 
12)  . =M.
.
 .. 
..

1fn(x−c1 )···(x−cm )[0] F=[[c0,((c0-c1)*a0+a1)/(c0-c1)],[c1,(a1)/(-c0+c1)]];[1] os_md.confexp(F);[a0,a1][2] G=os_md.mysubst(F,[c0,0]);[[0,(a0*c1-a1)/(c1)],[c1,(a1)/(c1)]][3] os_md.confexp(G);[a0,a1][4] os_md.confexp([[1/(x-a1),1/(x-a2)],[a1,a2]]|sym=1);[ 1 -a2 ][ 1 -a1 ][5] os_md.confexp([[1/(x-a1),1/(x-a1)/(x-a2)],[a1,a2]]|sym=1);[ 1 -a2 ][ 0 1 ]
[6] os_md.confexp([[1/(x-a1),1/(x-a2)],[a1,a2]]|sym=2);[x-a2,x-a1]
61. mcvm(n|var=x,z=1,get=g) mcvm([n1 ,n2 , . . .]|var=[a,b, . . . ],z=1,get=g)mcvm([r,k,i,j]|e=1,var=[a,b, . . . ]):: Middle convolution of versal unfolding
Returns the middle convolution of versal Schlesinger systems
n
du ∑
Aj
=
u,
dx j=1 (x − a1 )(x − a2 ) · · · (x − aj )n∑
duAj xj−1=−u,dx(1 − a1 x)(1 − a2 x) · · · (1 − aj x)
j=1
n ri
Aij
du ∑ ∑=u,dx(x − ai1 )(x − ai2 ) · · · (x − aij )i=1 j=1
r0
n ri∑
du ∑ ∑
A0j xj−1
Aij
=
u−
u.
dx
(x − ai1 )(x − ai2 ) · · · (x − aij )(1 − a01 x)(1 − a02 x) · · · (1 − a0j x)
i=1 j=1
j=1

59

Fuchsian systemp
du ∑ Cj=udx j=a x − ajwith square matrices Cj of size N is expressed by
u0 = (C1 , . . . , Cp ) t (p1 , . . . , pn )uand then the functionũ(x) =∫ x

Γ(µ + 1)−1u(t)(x − a1 )−1 (x − t)µ dt


c

..

.

∫
x

−1
Γ(µ + 1)u(t)(x − an )−1 (x − t)µ dt








c

deﬁned by the solution u(x) (c is aj or ∞) satisﬁes()
ũ0 = diag(p1 IN , . . . , pn IN ) t (1N , . . . , IN )(C1 , . . . , Cn ) + µIpN ũ
j



=

n
∑

C̃j
ũ,
x
−
aj
j=1

 0
 .
 .
 .
C̃j = j) 
 C1

 0

..
.

···
···
···
···
···

0
..
.
Cj + µIN
0..
.

This follows from) ((((C1 −1)uu )d
C2 u(x − a1 ) dx+
C1 − 1
x−a1
x−a1
x−a2
=
=
d
u
C2 −1uC1 u
C1(x − a2 ) dx
+
x−a2
x−a
x−a
1

∫x



⌣

2

···
···
···
···
···

0 
.. 

. 
.
Cn 

0 

..
.

)( u )
C2x−a1
u
C2 − 1x−a2dddbecause the integral transformation v(x) 7→ c v(t)(x − t)µ dt transforms x dx
and dx
to x dx−µ−1dand dx , respectively.
• Consider the ﬁrst equation. Change the base by1(j = 1, . . . , n),(x − a1 ) · · · (x − aj )∫ x
u(t)q1 (x)(x − t)µ dt
Γ(µ + 1)−1


c


.


..
û(x) = 

∫
x


µ
−1
u(t)qn (x)(x − t) dt
Γ(µ + 1)qj (x) =cand suppose that Ak of the ﬁrst equation are changed to Âk . In this case, this function returns[A01 , . . . , A0p ] with mcvm(n|get=1) such that()
Âk = δi,k Aj 1≤i≤n + µA0k
(

1≤j≤n

)

Here A0k = Dn,k,i,j IN 1≤i≤n and Dn,k,i,j is obtained by the option e=1, which will be men1≤j≤ntioned later.
60• If the option get is not indicated, the function returns thw matrix S given by
p1 (x)
q1 (x)
 ..  = S  .. .
.
pn (x)
qn (x)
where ũ = S −1 û and (C1 , . . . , Cn )S = (A1 , . . . , An ).
( )
(
)
p1
p1
−1
û = S ũ = S.. (C1 , . . .) ũ + S µ. . ũ
.
.


S1 q
−1 
S2 q
 S û,= q (A1 , A2 , . . .) û + µS
..
.

 
 

S1
q1
S1 q
∑
−1 
S
S
q
2
2




, q = q2  .
S, S =
Ak q k = S
..
..
..
.
.
.
0

−1 0

−1

• Consider the second equation. Then (x − ai )−1 and qi (x) are replaced by ( a1i − x)−1 andxi−1 (1 − a1 x)−1 · · · (1 − ai x)−1 , respectively, ahd this functions returns the corresponding
result.
• By the option var=[a,b,c, . . .] the points ai representing the singular points are replaced bya, b, c, . . ..
• In rhe case of the 3-rd equation or the 4-th equation, ℓ is [r1 , . . . , rn ] or [r0 , r1 , . . . , rn ],respectively, and the option z=1 should be indicated in the latter case.
• Suppose the above Fuchs system can be extended to the KZ system
∂u
=
∂xi

p
∑
ν∈{0,...,i}\{i}Ci,ν
xi − xν(i = 0, . . . , p),Ci,j = Cj,i , C0,j = Cj
by putting x0 = x. Then the convolution transforms C0,j = Cj to Ĉ0,j = C̃j and it is extended
to the KZ system and the resulting system is
i






i) 



C̃i,j =



j) 




j

⌣



⌣

Ci,j
..

















.
−C0,j

Ci,j + C0,j
Ci,j
..
−C0,i

.
Ci,j + C0,i
..

.
Ci,j

• Suppose get=2 is indicated.
The function returns the list of matrices whose elements are the transformation of C̃i,j (1 ≤i < j ≤ p) excluded the diagonal elements Ci,j and expressed by A0,ν . Here Aj or Ai,j are used
for the versal unfolding and A0,ν is expressed as a0ν by default. This gives the a convolutionof KZ equation with unramiﬁed irregular singularities (cf. [O9]).

61

• Suppose get=3 is indicated.
∂ û
The matrix A1 (x) of the equation ∂x= A1 (x)û corresponding to the 3-rd equation with1
n = 2 and x0 = x and a1,j = x1 − aj and a2,j = x2 − bj is expressed by using a complete base
{

} {
1
1
|
ν
=
1,
.
.
.
,
r
∪
,...,
1
(x1 − x0 )ν
x 1 − x 2 + a 1 − b1
}
1
1
,...,
.
(x1 − x2 + a1 − b1 ) · · · (x1 − x2 + a1 − br2 )(x1 − x2 + a1 − b1 ) · · · (x1 − x2 + ar1 − br2 )This function returns a list whose ﬁrst part is the list of the latter r1 r2 coeﬃcients with respect
the base. Here a1 = b1 = 0 is substituted and the diagonal parts Ai,j are omitted. The latterpart of the list is the substitution a2 = · · · = ar1 = b1 = · · · = br2 = 0 of the ﬁrst part.
The result in the case when n > 2 is easily obtained by that in the case when n = 2(cf. [O9]).
I = {i0 , i0 + 1, . . . , i0 + rI − 1}, J = {j0 , j0 + 1, . . . , j0 + rJ − 1},∑ C0,ν
∑ C0,i
∑
A0,i
du =
dx =
du +
du,
x
−
x
x
−
x
(x
−
x
)
ν
ν
i0 · · · (x − xi )
ν
i6∈I

i∈I

)
∑(
∑
∂ û
Ãi,0
C̃i,ν
+ S −1=S û,∂xi0(xi0 + ei0 − x0 ) · · · (xi0 + ei − x0 )x i0 + e i − x νi∈Iν6∈I, ν6=0()
C̃i,ν = Ci,ν δp,q + δp,i (δq,i − δq,ν )C0,ν + δp,ν (δq,ν − δq,i )C0,i
,
p,q

∑
1
=
U(i,j),(k,ℓ) qk,ℓ ,x i0 + e i − x j 0 − e jk∈I, ℓ∈J)∑ (S −1
Ci,j δp,q + δp,i (δq,i − δq,j )C0,j + δp,j (δq,j − δq,i )C0,ii∈I, j∈J

=

∑

∑

∑ (

+

∑

∑

p,q

∑

∑

SU(i,j),(k,ℓ) qk,ℓ

qk,ℓ

i
(
)
∑
S −1 δp,i (δq,i − δq,j )A0,s qs−i0 +1,{1,...,s−i0 } (xi0 , . . .)s=i0i∈I, j∈J k∈I, ℓ∈J

+

p,q

)

Ak,ℓ δp,qk∈I, ℓ∈J(xi0 + ei − xj0 − ej )−1 S()
S −1 Ci,j δp,q + δp,i (δq,i − δq,j )C0,j + δp,j (δq,j − δq,i )C0,ii∈I, j∈J k∈I, ℓ∈J

=

p,q

p,q

j
(
)
∑
S −1 δp,i (δq,j − δq,i )A0,s qs−j0 +1,{1,...,s−j0 } (xj0 , . . .)s=j0i∈I, j∈J k∈I, ℓ∈J

SU(i,j),(k,ℓ) qk,ℓp,qSU(i,j),(k,ℓ) qk,ℓ .

• If get=4 is indicated, the latter element of the list given by get=3 is returned．
• If e=1 is indicated and the ﬁrst parameter is [r,k,i,j], then the polynomial Dr,k,i,j of degree
j + k − i − 1 is returned (r is ignored).
{()
0(i < j)(最初の方程式),
S = Si,j, Si,j =
s
(i
≥ j)
i,j
i,{1,...,j}si,{j1 ,...,jk } (a) :=k∏(ai − ajν ),j=1

Dr,k,i,j (a) :=

pi =

i
∑

si,{1,...,j−1} qj ,

j=1
i
∑

ν=max{k,j}sν,{1,...,j−1}sν,{k,k+1,...,i}\{ν}
62

.

0
• If e=2 is indicated and the ﬁrst parameter is [r,k,i,j], then the polynomial Dr,k,i,j
of degree
j + k − i − 1 is returned.

0
Dr,k,i,j(a0 ) :=i∑ν=max{k,j}aν+1 sν+1,{2,...,j}sν+1,{k,k+1,...,i+1}\{ν+1}= Dr,k,i+1,j+1 (a)|a1 =0 .

[0] os_md.mcvm([2,1]);[ 1 0 0 ][ 1 -a1+a2 0 ][ 0 0 1 ][1] os_md.mcvm([2,2]|var=[a,b]);[ 1 0 0 0 ][ 1 -a1+a2 0 0 ][ 0 0 1 0 ][ 0 0 1 -b1+b2 ][2] os_md.mcvm([2,1]|get=1);[[ 1 0 0 ][ 0 1 0 ][ 0 0 0 ],[ 0 0 0 ][ 1 -a1+a2 0 ][ 0 0 0 ],[ 0 0 0 ][ 0 0 0 ][ 0 0 1 ]]This is the 3-rd equation with n = 2, r1 = 2, r2 = 1 and we have()
A1 + µ A 2 A30µ0 ,Â1,1 =
0
0
0
(
)
0
0
0
0
0
Â2,1 = 0
A1 A2 A3 + µ(Â1,2 =

[3] subst(os_md.mcvm([1,3]|get=1),b1,0);[[ 1 0 0 0 ][ 0 0 0 0 ][ 0 0 0 0 ][ 0 0 0 0 ],[ 0 0 0 0 ][ 0 1 0 0 ][ 0 0 1 0 ][ 0 0 0 1 ],[ 0 0 0 0 ][ 0 0 0 0 ][ 0 1 b2 0 ][ 0 0 1 b3 ],63

0
A1 + µ00A2 + (a2 − a1 )µ
0

0
A3
0

)
,

[ 0 0 0 0 ][ 0 0 0 0 ][ 0 0 0 0 ][ 0 1 b3 -b3*b2+b3^2 ]][4] M=os_md.mcvm([1,3])$[5] A=os_md.mcvm([1,3]|get=2)$[6] M=subst(M,b1,0)$ A=subst(A,b1,0)$[7] map(red,M[1][1]*A[0]+M[2][1]*A[1]+M[3][1]*A[2]); /* A12 */[ a02 -a02 -a03 -a04 ][ -a01 a01 0 0 ][ 0 0 a01 0 ][ 0 0 0 a01 ][8] map(red,M[1][2]*A[0]+M[2][2]*A[1]+M[3][2]*A[2]); /* A13 */[ a03 -a03 -a03*b2-a04 -a04*b3 ][ 0 0 0 0 ][ -a01 a01 a01*b2 0 ][ 0 0 a01 a01*b3 ][9] map(red,M[1][3]*A[0]+M[2][3]*A[1]+M[3][2]*A[3]); /* A14 */[ a04 -a04 -a04*b3 a04*b3*b2-a04*b3^2 ][ 0 0 0 0 ][ 0 0 0 0 ][ -a01 a01 a01*b3 -a01*b3*b2+a01*b3^2 ]This shows that the convolution of the system
4
( A
)
∑
A0j
∂u
01
=
+
u,
∂x0
x0 − x1 j=2 (x0 − x2 )(x0 − x2 − b2 ) · · · (x0 − x2 − bj−1 )
4
)
( A
∑
∂u
A1j
10
u,
=
+
∂x1
x1 − x0 j=2 (x1 − x2 )(x1 − x2 − b2 ) · · · (x1 − x2 − bj−1 )
1 ∑
4 (
)
∑
∂u
(−1)j Ajiu,=∂x2(x2 − xi )(x2 − xi + b2 ) · · · (x2 − x1 + bj−1 )i=0 j=2

Ai,j = Aj,iis given by





A04
0
0
0
0
0 
A01 A02 + µ A03 A04 , Â02 = 
,
0 
0
0
µ
0 
0
0
0
0
µ



0
0
0
0
0
0
0
0
0
0 
0
0
 0
 0
Â03 = , Â04 = 
a01 A02 + µ A03 + b2 µ A04 
0
0
0
0
0
µ
b3 µ
A01 A02 + µ A03 + b3 µ
A12 + A02
−A02
−A03
−A04
A12 + A0100
 −A01
Â12 = ,00
A12 + A0100
0
0
A12 + A01
Â01 = 

A01 + µ
0
0
0

A02
0
0
0

A03
0
0
0

64


0
0

,
0
A04 + b3 (b3 − b2 )µ

A13 + A03
0
Â13 = −A010
A14 + A04
0
Â14 = 0−A01−b3 A040,
b3 A01
A13 + b3 A01
−b3 (b3 − b2 )A0400
A14 + b3 (b3 − b2 )A01

−A03
A13
A01
0

−b2 A03 − A04
0
A13 + A01
A01

−A04
A14
0
A01

−b3 A04
0
A14
b3 A01

with Ãij = Ãji .
[10] os_md.mcvm([2,3]|get=1);[[ 1 0 0 0 0 ][ 0 1 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ],[ 0 0 0 0 0 ][ 1 -a1+a2 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ],[ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 1 0 0 ][ 0 0 0 1 0 ][ 0 0 0 0 1 ],[ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 1 -b1+b2 0 ][ 0 0 0 1 -b1+b3 ],[ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 1 -b1+b3 (b2-b3)*b1-b3*b2+b3^2 ]][11] os_md.mcvm([2,3]|get=4);[[ a03 0 -a03 -a04 -a05 ][ 0 a03 0 0 0 ][ -a01 -a02 a01 0 0 ][ 0 0 0 a01 0 ][ 0 0 0 0 a01 ],[ a04 0 -a04 -a05 0 ][ -a03 a04 a03 a04 a05 ][ a02 0 -a02 0 0 ][ -a01 -a02 a01 -a02 0 ][ 0 0 0 a01 -a02 ],65

[ a05 0 -a05 0 0 ][ -2*a04 a05 2*a04 2*a05 0 ][ 0 0 0 0 0 ][ 2*a02 0 -2*a02 0 0 ][ -a01 -a02 a01 -2*a02 0 ],[ 0 0 0 0 0 ][ -3*a05 0 3*a05 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 3*a02 0 -3*a02 0 0 ],[ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ],[ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ][ 0 0 0 0 0 ]]This result shows that the convolution of the KZ equation
3
2
(∑
∑
∂u
A0,ν+2 )
A0,ν
+
u,
=
∂x0
(x0 − x1 )ν ν=1 (x0 − x2 )ν
ν=1
2
4
(∑
(−1)ν−1 Aν,0 ∑ A1,ν+2 )
∂u
=
+
u,
∂x1
(x1 − x0 )ν
(x1 − x2 )ν
ν=1
ν=1
3
4
(∑
(−1)ν−1 Aν+2,0 ∑ (−1)ν−1 Aν+2,1 )
∂u
=
+
u,
∂x2
(x2 − x0 )ν
(x2 − x1 )ν
ν=1
ν=1

Ai,j = Aj,iis given by (cf. [O9])A01 + µ A02 A03

0
µ
0

0
0
0
Â01 = 

0
0
0
0
0
0

0
0
0
 0
0
0

Â03 = A01 A02 A03 + µ
 0
0
0
0
0
0

0
0
0
 0
0
0

0
0
Â05 =  0 000
A01 A02 A03 + µ

A04
0
0
0
0
0
0
A04
µ
0
0
0
0
0
A04


A05
0 

0 ,
0 
0

0
0 

A05  ,
0 
µ

0
0 

0 ,
0 
A05

66



0
0
0
A01 + µ A02 A03
000
Â02 = 

0
0
0
0
0
0

0
0
0
 0
0
0

0
0
Â04 =  0
A01 A02 A03 + µ
0
0
0

0
A04
0
0
0
0
0
0
A04
µ


0
A05 

0 ,
0 
0

0
0 

0 ,
A05 
0




A13 + A03
0
−A03
−A0,4
−A05


0
A13 + A03
0
0
0


−A02
A13 + A01
0
0Â13 =  −A01
,


0
0
0
A13 + A01
A02
0
0
0
0
A13 + A01

A14 + A04
0
−A04
−A05
0

 −A03
A14 + A04
A03
A04
A05


0
A14 − A02
0
0
Â14 =  A02
, −A01
−A02
A14 + A01
−A02
0
0
0
0
A01
A14 − A02

A15 + A05
0
−A05
0
0
 −2A04
A15 + A05
2A04
2A05
0 


0
0
A15
0
0 ,
Â15 =  2A02
0
−2A02
A15
0 
−A01
−A02
A01
−2A02 A15


A16
0
0
0
0
−3A05 A16
3A05
0
0 


0
A16
0
0 
Â16 =  0
 0
0
0
A16
0 
3A02
0
−3A02
0
A16

62. anal2sp(m,l):: Analyzes simultaneous spectral exponents m
m = [[m1 , λ1 , µ1 ], [m2 , λ2 , µ2 ], . . .] are the list of lists of multiplicity and a pair of simultaneous
eigenvalues
l has the following meaning. Here a spectral type means a pair of eigenvalues.
0
uniﬁes the same spectral types (works for single eigenvalues).
["add",n]add spectral type n (works for single eigenvalues).
["sub",n]delete spectral type n (works for single eigenvalues).
["swap"]swap eigenvalues["+",c1 ,c2 ] shifts eigenvalues["*",c1 ,c2 ] linear combinations of eigenvalues["+",c1 ,c2 ,. . .] shift eigenvalues (number of eigenvalues are arbitrary)["*",c1 ,c2 ,. . .] linear combinations of eigenvalues (number of eigenvalues are arbitrary)["mult",m] multiplies the multiplicities by m．
["get",f ,c] extracts the elements whose f -th eigenvalue = c.
["put",f ,c] replaces the f -th eigenvalue by c.
["get1",f ] extracts only f -th eigenvalues (the result is not a pair of eigenvalues)["get1",f ,c] extracts elements f -th eigenvalue equals c (the result is deleted th eigenvalue c)["put1",f ,c] inserts f -th eigenvalue c["put1"]
copies eigenvalues["max"]
returns the position with the maximal multiplicity with the corresponding element["max",f ,c] returns the position with the maximal multiplicity whose f -th eigenvalue is c andthe corresponding element. returns [-1] if there are no such element["val",f ]returns the multiplicity and the sum of eigenvalues of the f -th element.
[[· · · ],[· · · ],. . .] executes several commands[0] R=os_md.anal2sp([[2,a,b],[3,a,c],[-1,a,c]],["add",[[-2,a,b],[1,b,c]]]);[[2,a,b],[3,a,c],[-1,a,c],[-2,a,b],[1,b,c]] /* define R */[1] os_md.anal2sp([[2,a,b],[3,a,c],[-1,a,c]],["sub",[[2,a,b],[-1,b,c]]]);[[2,a,b],[3,a,c],[-1,a,c],[-2,a,b],[1,b,c]][2] os_md.anal2sp(R,["swap"]);/* swap two eigenvalues */[[2,b,a],[3,c,a],[-1,c,a],[-2,b,a],[1,c,b]]67

[3] os_md.anal2sp(R,0);/* unify */[[2,a,c],[1,b,c]][4] os_md.anal2sp(R,["+",f,-g]); /* shift eigenvalues */[[2,a+f,b-g],[3,a+f,c-g],[-1,a+f,c-g],[-2,a+f,b-g],[1,b+f,c-g]][5] os_md.anal2sp(R,["*",f,-g]); /* linear combination of eigenvalues */[[2,f*a-g*b],[3,f*a-g*c],[-1,f*a-g*c],[-2,f*a-g*b],[1,f*b-g*c]][6] os_md.anal2sp(R,["*",f]);[[2,f*a],[3,f*a],[-1,f*a],[-2,f*a],[1,f*b]][7] os_md.anal2sp([[2,a,b],[3,a,c],[-1,a,c]],["mult",2]); /* multiplicity *= m */[[4,a,b],[6,a,c],[-2,a,c]][8] os_md.anal2sp(R,["get",2,c]); /* extract elements with a given eigenvalue */[[3,a,c],[-1,a,c],[1,b,c]][9] os_md.anal2sp(R,["put",1,f]); /* replace eigenvalues */[[2,f,b],[3,f,c],[-1,f,c],[-2,f,b],[1,f,c]][10] os_md.anal2sp(R,["get",1,a]); /* extract elements with a given eigenvalue */[[2,a,b],[3,a,c],[-1,a,c],[-2,a,b]][11] R1=os_md.anal2sp(R,["get1",1,a]); /* extract elements by a given eigenvalue */[[2,b],[3,c],[-1,c],[-2,b]][12] os_md.anal2sp(R1,["put1",1,a]); /* insert an eigenvalue */[[2,a,b],[3,a,c],[-1,a,c],[-2,a,b]][13] os_md.anal2sp(R1,["put1"]); /* copies eigenvalues */[[2,b,b],[3,c,c],[-1,c,c],[-2,b,b]][14] os_md.anal2sp(R,["val",1]); /* sum of 1-st eigenvalues */[3,2*a+b][15] os_md.anal2sp(R,[["get1",1],["put1"],0]);[[2,a,a],[1,b,b]][16] os_md.anal2sp(R,["max"]);/* maximal multiplicity */[1,[3,a,c]][17] os_md.anal2sp(R,["max",1,b]);[4,[1,b,c]][18] os_md.anal2sp(R,["max",1,c]);[-1]
63. mc2grs(g,r|top=0,dviout=k,div=ℓ,fig=s):: Transformation of simultaneous spectral exponents of KZ equation of 5 points in P1
The KZ equation
∑

du =

Ai,j

0≤i<j≤3

Ai,4 = −3∑d(xi − xj )u,xi − xj

Ai,j , Aj,i = Ai,j , Ai,i = 0

j=0satisﬁes[AI , AJ ] = 0(I, J ⊂ {0, 1, 2, 3}, #I = #J = 2, I ∩ J = ∅)and the simultaneous eigenspace decompositions are possible for the 15 pairs of AI and AJ satisfying [AI , AJ ] = 0. Then g indicates a list of 15 lists each of which consists of [I,J] and the68corresponding dimension of simultaneous eigenspace and two eigenvalues for the pairs AI and AJ .
Here I=[ii ,i2 ], J=[ji ,j2 ] with i1 < i2 , j1 < j2 , i1 < j1 . For example, the list corresponding to
(
)
(
)
a
c
a
c
A0,1 =, A2,3 =bdis [[[0,1],[2,3]],[2,a,c],[1,b,d]].
∑We may assume that 0≤i<j≤3 Ai,j is a scalar matrix because of the generic irreducibility and wedenote the scalar by κ.
Other parameters mean as follows.
• g = 0 means trivial [[[[0,1],[2,3]],[1,0,0]],[[[0,1],[2,4]],[1,0,0]],. . .].
• g may be indicated by spectral types of 4 matrices A0,4 , A0,1 , A0,2 , A0,3 (string or GRS for 4
points) in this order. Then the options dep=[m,n]，int=0 etc. are possible as for the function
m2mc().
If top=0 is indicated, the order is changed to A0,1 , A0,2 , A0,3 , A0,4 .
If g is indicated by spectral type or string, the parameter r has the meaning as follows.
– r = 1 : Changes the spectral type in standard order and returns the list of 15 lists ofeigenspace decompositions.
– r = 3 : Deﬁne the parameters of simultaneous eigenvalues by a,b,c,. . . and returns the
Fuchs condition and the list of 15 lists.
r determines the following functions• 0 : returns the list of 15 lists.
• ["sort"] : arranges the list so that its elements are in standard order ([ ] may be omitted).
• ["deg"] : returns κ ([ ] may be omitted).
Note that A0,1 + A0,2 +{A0,3 + A1,2 + A1,3 + A2,3 = κ and+κ (j < 4)Ai,j = A{0,1,2,3,4}\{i,j}(0 ≤ i < j ≤ 4).
−κ (j = 4)
• [[i,j],λ] : transforms by the addition Ai,j 7→ Ai,j + λ, Ai,4 7→ Ai,4 − λ, Aj,4 7→ Aj,4 − λ.
（0 ≤ i < j ≤ 3）．
• ["homog"] : transforms by the addition r =[[1,3],−κ] to change κ = 0 ([ ] may beomitted).
• ["homog",[m,n]] : transforms by the addition r =[[m,n],−κ] (0 ≤ m < n < 4) to changeκ = 0 ([ ] may be omitted).
• ["swap",[i,j]] : swaps the indices i and j. If i or j is 4, swap them after the homogenization
ny r =["homog"].
()
0 1 2 3 4
• ["perm",[i0 , . . . , i4 ]] : permutation of indices. If the index 4 isi0 i1 i2 i3 i4changed, the permutation is applied after the homogenization.
• [µ] : middle convolution mcx0 ,µ for the variable x0 (the algorithm is given by [O5]).
• [i,µ] : middle convolution mcxi ,µ for the variable xi If i = 4，this function ﬁrst transforms
by r =["swap",[0,4]] and then by mcx0 ,µ and lastly by r =["swap",[0,4]].
• [[[i1 ,j1 ],λ1 ],. . .,[ik ,µk ],. . .] : transforms by successive additions middle convolutions.
• [[a,b,c]] : means [[[0,1],a],[[0,2],b],[[0,3],c]].
• [[a,b,c,µ]] : means [[[0,1],a],[[0,2],b],[[0,3],c],[µ]].
• ["get",[I,J]] : returns the list of simultaneous eigenvalues corresponding to [AI , AJ ] = 0
with the header [I, J].
• ["get",I] : returns the list of eigenvalues of AI with the header I.
• ["get",[i,j,k]] : returns the spectral data of Ai,j + Ai,k + Aj,k with the header I.
• ["get",i] (0 ≤ i ≤ 4) : returns the GRS corresponding to i ∈ I, which is the GRS of ODEof the variable xi .
69

If dviout=1 is indicated, the result is displayed tby using TEX.
If dviout=-1 is indicated, the result is given by the TEX source.
If dviout=2 is indicated, the result is written in the TEX source ﬁle without its display. The
result can be displayed later by a command.
• ["get"] : returns the list of eigenvalues of 10 matrices AI .
dviout=k can be indicated. In this case the Riemann Scheme is divided to lines by the option
div=ℓ (cf. divmattex()).
• ["get0",[I,J]], ["get0",I], ["get0",i] (0 ≤ i ≤ 4), ["get0",[i,j,k]]，["get0"] : sameas in the case where "get0" is replaced by "get" except that the headers are omitted.
• ["get0",I,J] : returns the spectral values of AI + AJ .
• ["show"] : displays the list g by using TEX.
The option dviout=-1 is possible.
• ["show0"] : shows 15 spectral types. The order of 15 types is same as in the case "show".
The option dviout=1, -1, 2 is possible. Moreover– fig=1 indicates to show the result in a ﬁgure by using TikZ.
– fig=[k] : the size of the ﬁgure is about k cm (or a little larger). k = 12 is the default
setting.
– fig=[k,s] or fig=[s] : s is a string to indicates 10 colors.
[s] is ["black,dashed","green,dashed","red,dashed","blue,dashed", "black","cyan","green","blue","red","magenta"] by default.
• ["spct"] : returns the spectral types as a 5 × 5 matrix
The (i, j) element id the spectral type of Ai,j if i 6= j and the index of rigidity with respect tosi if i = j (0 ≤ i, j ≤ 4).
dviout=k is possible.
• ["spct1"] : returns a 5 × 6 matrix describing the spectral types together with the spectral
type after one-step reduction (if possible). The result is same as in the case ["spct"] but the
6-th column is added which is formed by the spectral types after one-step reduction.
• ["mult",ℓ1 ,...,ℓm ] : Puts g0 = g and executes this function with gi = mc2grs(gi−1 ,ℓi ) fori = 1, . . . , m and returns gm . Other options are valid.
• ["eigen",I] : returns the eigenspace decompositions of each eigenspace of AI by the actionof 3 residue matrices commuting with AI (the list of eigenvalues of AI and eigenspace decompositions. The eigenspace decomposition is the pair of multiplicities and the eigenvalue of thematrix commuting with AI ).
The matrices which commutes with AI are AJ satisfying J ⊂ {0, 1, 2, 3, 4} \ I and the result
is returned in the lexicographic order ofJ. For example, J are [1, 3], [1, 4] and [3, 4] in thelexicographic order if I = [0, 2].
• ["rest",I] : returns GRS of the boundary equations of x0 corresponding to the exponentsof the singular line xi = xj with I = [i, j]. The singularities x0 = xk are arranged from asmaller k.
• ["rest0",I] : returns spectral types (strings) of the boundary equations of x0 corresponding
to the exponent of the singular line xi = xj with I = [i, j].
• ["rest1",I] : returns non-rigid spectral types of the boundary equation of x0 corresponding
to the exponent of the singular line xi = xj with I = [i, j].
• When ["eigen"], ["rest"], ["rest0"] or ["rest1"] is indicated, the function returns thelist of the above results of all 10 I with I on the each top.
In this case the option dviout=1, -1, 2 is possible.
(λ)m• ["K0",[µ,λ]] : K̃x−µ−λ,λ [ [0,0,λ,−µ − λ],[0,0,µ] ] : (1−µ)×
m• ["K1",[µ,λ]] : K̃y−µ−λ,λ [["swap",[0,1]],[0,0,λ,−µ − λ],[0,0,µ],["swap",[0,1]]]−µ−λ,λ• ["K01",[µ,λ]] : K̃x,(x,y)7→(x, x )y70• ["K2",[µ,λ]] : [ [0,λ,0,−µ − λ],[0,0,µ] ]• ["K3",[µ,λ]] : [["swap",[0,1]], [0,λ,0,−µ − λ],[0,0,µ],["swap",[0,1]] ]
∏p
∏q
∏r
∞ ∑
∞
∑
(a1 )m (b1 )n ν=2 (aν )m ν=2 (bν )n ν=1 (cν )m+n∏p∏q∏r
xm y n• ["K",[p,q,r]] :
(1
−
d
)
(1
−
e
)
(1
−
f
)
m!n!
ν
m
ν
n
ν
m+n
ν=2
ν=2
ν=1
m=0 n=0
rank : pq + qr + rp
∏p−1
∏q−1
∞ ∑
∞
∑
(aν )m ν=1 (bν )n · (c)m+n
ν=1
∏q
∏p
xm y n• ["I",[p,q]] :
(1
−
e
)
m!n!
(1
−
d
)
ν
n
ν
m
ν=2
ν=2
m=0 n=0
rank : pq, (pq − 1)1, (pq − q + 1)1q−1 , q p , q p−1 1q
If (x0 , x1 , x2 , x3 , x4 ) = (x, y, 1, 0, ∞), then(1 − x − y)−λ × : [ [[0,1],−λ],[[2,3],λ] ] at (0, 1) or (1, 0)(1 − x)−λ× : [ [[0,2],−λ],[[2,3],λ] ](1 − y)−λ× : [ [[1,2],−λ],[[2,3],λ] ]Homogenization : [["homog",[2,3]]]K̃xµ,λ : [ [0,0,λ,µ],[0,0,−λ − µ] ]K̃yµ,λ : [ [[1,3],λ],[1,µ],[[1,3],−λ − µ] ]µ,λK̃x,(x,y)7→(x7→ x ) : ["perm",[2,1,0,4,3]] → [[0,0,λ,µ],[0,0,−λ−µ] ] → ["perm",[2,1,0,4,3]]
y

 ∫x



 µ+1,λ xu Kx(x − t)µ tλ u(t,y)
x−yt−x dt
0
∫
x


x
µ,λ
u(t,y)µλ(K̃x u)(x, y) =
 0 (x − t) t y dt  = Kxµ+1,λ xuyΓ(µ + 1) ∫ x
µ+1,λ
µ λ−1
Kx
u
(x − t) tu(t, y)dt0∫ 1
1
Γ(λ + m) m n
Kxµ−λ,λ u(x, y) =tλ−1 (1 − t)µ−λ−1 u(tx, y)dt, xm y n 7→x y
Γ(µ − λ) 0
Γ(µ + m)∫ 1
1
Γ(λ + n) m nx y
Kyµ−λ,λ u(x, y) =tλ−1 (1 − t)µ−λ−1 u(tx, y)dt, xm y n 7→
Γ(µ − λ) 0
Γ(µ + n)∫ 1
1
Γ(λ + m + n) m nµ−λ,λKx,(x,y)7→(x, x ) u(x, y) =x ytλ−1 (1 − t)µ−λ−1 u(tx, ty)dt, xm y n 7→yΓ(µ − λ) 0
Γ(µ + m + n)−µ−λ[0] M=os_md.mc2grs(0,0);[[[[0,1],[2,3]],[1,0,0]],[[[0,1],[2,4]],[1,0,0]],...
[1] M1=os_md.mc2grs(M,[[[0,1],a],[[0,2],b],[[0,3],c]]);[[[[0,1],[2,3]],[1,a,0]],[[[0,1],[2,4]],[1,a,-b]],...
[2] os_md.mc2grs(M1,"deg");/* Get kappa */a+b+c[3] os_md.mc2grs(M1,["homog",[2,3]]);/* homogenize */[[[[0,1],[2,3]],[1,a,0]],[[[0,1],[2,4]],[1,a,-b]],...,[[[1,4],[2,3]],[1,-a,-a-b-c]]][4] F1=os_md.mc2grs(M1,[d]);[[[[0,1],[2,3]],[1,a+d,0],[1,0,0],[1,0,b+c]],[[[0,1],[2,4]],[1,a+d,-b],[1,0,-b],[1,0,-a-b-c-d]],...
[5] os_md.mc2grs(F1,"get");/* All residue matrices */[[[0,1],[1,a+d],[2,0]],[[0,2],[1,b+d],[2,0]],[[0,3],[1,c+d],[2,0]],[[0,4],[1,-a-b-c-d],[2,-d]],[[1,2],[2,0],[1,a+b]],[[1,3],[2,0],[1,a+c]],[[1,4],[2,-a],[1,-a-b-c-d]],[[2,3],[2,0],[1,b+c]],[[2,4],[2,-b],[1,-a-b-c-d]],[[3,4],[2,-c],[1,-a-b-c-d]]][6] os_md.mc2grs(F1,[-d])==M1; /* middle convolution */171

[7] os_md.mc2grs(F1,["get",0]); /* GRS for the variable x0 */[[[0,1],[2,0],[1,a+d]],[[0,2],[2,0],[1,b+d]],[[0,3],[2,0],[1,c+d]],[[0,4],[2,-d],[1,-a-b-c-d]]][8] os_md.mc2grs(F1,["get",0]|dviout=-1);\begin{Bmatrix}
A_{01}&A_{02}&A_{03}&A_{04}\\[0]_2 & [0]_2 & [0]_2 & [-d]_2\\
a+d & b+d & c+d & -a-b-c-d\end{Bmatrix}[9] os_md.mc2grs(F1,["get",0]|dviout=1); /* GRS for the variable x0 */
{

A01
[0]2
a+d

A02
A03
[0]2
[0]2
b+d c+d[10] os_md.mc2grs(F1,"get"|dviout=1)$
{

A01
[0]2
a+d

A02
[0]2
b+d

A03
[0]2
c+d

A04
[−d]2
−a − b − c − d

A12
[0]2
a+b

A13
[0]2
a+c

[11] os_md.mc2grs(F1,"show"|dviout=1)$

A04
[−d]2
−a − b − c − d}/* GRS of KZ equation */
A23
[0]2
b+c

A14
[−a]2
−a − b − c − d

A24
[−b]2
−a − b − c − d

A34
[−c]2
−a − b − c − d/* simultaneous eigenspaces */[A01 : A23 ] = {[a + d : 0], [0 : 0], [0 : b + c]},[A01 : A24 ] = {[a + d : −b], [0 : −b], [0 : −a − b − c − d]},[A01 : A34 ] = {[a + d : −c], [0 : −c], [0 : −a − b − c − d]},[A02 : A13 ] = {[b + d : 0], [0 : 0], [0 : a + c]},[A02 : A14 ] = {[b + d : −a], [0 : −a], [0 : −a − b − c − d]},[A02 : A34 ] = {[b + d : −c], [0 : −c], [0 : −a − b − c − d]},[A03 : A12 ] = {[c + d : 0], [0 : 0], [0 : a + b]},
[A03 : A14 ] = {[c + d : −a], [0 : −a], [0 : −a − b − c − d]},[A03 : A24 ] = {[c + d : −b], [0 : −b], [0 : −a − b − c − d]},[A04 : A12 ] = {[−a − b − c − d : 0], [−d : 0], [−d : a + b]},
[A04 : A13 ] = {[−a − b − c − d : 0], [−d : 0], [−d : a + c]},[A04 : A23 ] = {[−a − b − c − d : 0], [−d : 0], [−d : b + c]},[A12 : A34 ] = {[0 : −c], [0 : −a − b − c − d], [a + b : −c]},[A13 : A24 ] = {[0 : −b], [0 : −a − b − c − d], [a + c : −b]},[A14 : A23 ] = {[−a : 0], [−a − b − c − d : 0], [−a : b + c]}[12] os_md.mc2grs("322,52,52,43","show0"|dviout=1)$/* spectral type of simultaneous eigenspace decomposition */22 13 , 17 , 17 , 22 13 , 17 , 17 , 215 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17[13] os_md.mc2grs(F1,"spct"|dviout=1)$

72/* spectral type of KZ equation */

}

x0
x0
x1
x2
x3
x4

21
21
21
21

x1
21
21
21
21

x2
21
21
21
21

x3
21
21
21
21

x4
21
21
21
21

idx
2
2
2
2
2

[14] os_md.mc2grs("21,21,21,21","get"|dviout=1)$ /* GRS of KZ equation */
{

A01
[0]2
a

A02
[0]2
b

A03
A04
A12
A13
A23
A14
A24
A34
[0]2
[d]2
[0]2
[0]2
[0]2
[−a − d]2[−b − d]2[−c − d]2c −a − b − c − 2d a + b + 2d a + c + 2d b + c + 2d −a − b − c − 2d −a − b − c − 2d −a − b − c − 2d}[15] os_md.mc2grs([[[[2,3],[0,4]],[1,a,b]],[[[0,1],[2,3]],[1,c,d]]],"sort");[[[[0,1],[2,3]],[1,c,d]],[[[0,4],[2,3]],[1,b,a]]][16] os_md.mc2grs(F1,["eigen",[0,1]]); /* decomp. of eigenspaces */[[a+d,[[1,0]],[[1,-b]],[[1,-c]]],[0,[[1,0],[1,b+c]],[[1,-b],[1,-a-b-c-d]],[[1,-c],[1,-a-b-c-d]]]][17] os_md.mc2grs(F1,["rest",[0,1]]);/* bry GRS for a sing. line */[[a+d,[[1,a+b+d]],[[1,a+c+d]],[[1,-2*a-b-c-2*d]]],[0,[[1,a+b+d],[1,0]],[[1,a+c+d],[1,0]],[[1,-a-b-c-d],[1,-a-d]]]][18] os_md.mc2grs(F1,["rest0",[0,1]]); /* bry spectral types for sing. line */[[a+d,1,1,1],[0,11,11,11]][19] os_md.mc2grs("322,52,52,43","rest0"); /* all bry spectral types */[[[0,1],[a,11,11,11],[0,11111,11111,221]],[[0,2],[b,11,11,11],[0,11111,11111,221]],...
[20] os_md.mc2grs("322,52,52,43","rest1"); /* non-rigid bry spectral types */[[[0,1],[0,11111,11111,221]],[[0,2],[0,11111,11111,221]],[[0,3],[2*c,111,111,111],[0,1111,1111,211]],[[0,4],[2*d1,111,111,111]]][21] os_md.mc2grs("322,52,52,43","rest1"|dviout=1); /* non-rigid bry spectral types */[01] : 221, 15 , 15[02] : 221, 15 , 15[03] : 111, 111, 111 211, 14 , 14[04] : 111, 111, 111[22] os_md.mc2grs("322,52,52,43","rest0"|dviout=1);/* bry spectral type */[01] : 11, 11, 11 221, 15 , 15[02] : 11, 11, 11 221, 15 , 15[03] : 111, 111, 111 211, 14 , 14[04] : 11, 11, 11 11, 11, 11 111, 111, 111[12] : 11, 11, 11 11, 11, 11 21, 111, 111[13] : 1, 1, 1 21, 111, 111 21, 111, 111[14] : 1, 1, 1 1, 1, 1 1, 1, 1 11, 11, 11 11, 11, 11[23] : 1, 1, 1 21, 111, 111 21, 111, 111[24] : 1, 1, 1 1, 1, 1 1, 1, 1 11, 11, 11 11, 11, 1173

[34] : 1, 1, 1 1, 1, 1 1, 1, 1 11, 11, 11 11, 11, 11[23] os_md.mc2grs("322,52,52,43","rest"|dviout=-1); /* bry Riemann Scheme */{}−c − d1 − d2
c − d1−a − 2ca + b + 2c + 2d1 + d2 a + 2c + 2d1 −a − b − 2c − 2d1−c − d1 − d2
c − d1[−2c]2 a + b + 2c + 2d1 + d2

a + 2c + 2d1 [−b − 2c − 2d1 ]2 
0−a + 2c − 2d1
b + 4d1→

a + b + 4c + 4d1 + 2d2
0




−a − b − 2c − 2d1 − 2d2−a − 2d1{}−c − d1 − d2−c − d1−b→
a + b + 2c + 2d1 + d2 b + 2d1 −a − b − 2d1→[01] : a0[02] : b···[24] os_md.mc2grs("322,52,52,43","spct1"|dviout=1)$ /* all spectral types */
x0
x0
x1
x2
x3
x4

x1
52

52
52
43
322

x2
52
322

322
331
22111

331
22111

x3
43
331
331

x4
322
22111
22111
22111

idx
2
−22
−22
−24
−48

22111

reduction
22,22,31,22[25] os_md.mc2grs("322,52,52,43","show0"|dviout=1,fig=[6]);
17

17

17
[03]

[04]
17

215
[12]

[13]
17

17
[34]

7

17
[02]

1

[14]
17

[24]

[23]

22 13

17

[01]
17

2 3

2 1

17

[26] K222=os_md.mc2grs(0,["K",[2,2,2]])$[27] os_md.mc2grs(K222,"spct1"|dviout=1);
x0
x0
x1
x2
x3
x4

a2
a2
441111441111x1
a2
a2
441111441111x2
a2
a2
441111441111x3
441111441111441111x4
441111441111441111
72111

72111

[28] os_md.mc2grs(K222,"get"|dviout=1,div=5);
74

idx
−8
−8
−8
−124
−124

reduction
62, 62, 414 , 414
62, 62, 414 , 414
62, 62, 414 , 414


A01


[0]10



[−b1 − b2 − d2 − a1 − a2 − e2 ]2

A02
[0]10
[−d2 − a1 − a2 − c1 − f1 − c2 − f2 ]2







A13
[0]4
[e2 ]4
a 1 + f1
a 1 + f2
a 2 + f1
a 2 + f2

A23
[c1 ]4[c2 ]4b1 + a 1
b1 + a 2
b2 + a 1
b2 + a 2

A14[b1 ]4[b2 ]4c1
c2
d 2 + c1
d 2 + c2

A24
[f1 ]4[f2 ]40d2
e2
d 2 + e2A03[0]4[d2 ]4b 1 + f1b 1 + f2b 2 + f1b 2 + f2

A04
[a1 ]4[a2 ]4c1
c2
e2 + c 1
e2 + c 2

A12[0]10[−b1 − b2 − e2 − c1 − f1 − c2 − f2 ]2


A34


[0]7



[−b1 − b2 − d2 − a1 − a2 − e2 − c1 − f1 − c2 − f2 ]2 
−b1 − b2 − d2 − a1 − a2 − e2−b1 − b2 − e2 − c1 − f1 − c2 − f2
−d2 − a1 − a2 − c1 − f1 − c2 − f2[29] os_md.mc2grs(K222,"show0"|dviout=1);
32 16 , 32 16 , 715 , 32 16 , 32 16 , 715 , 32 16 , 112 , 112 , 32 16 , 112 , 112 , 715 , 112 , 112[30] os_md.mc2grs(K222,"show0"|dviout=1,fig=0);01 : 23 = 32 16 , 01 : 24 = 32 16 , 01 : 34 = 715 , 02 : 13 = 32 16 , 02 : 14 = 32 16 ,02 : 34 = 715 , 03 : 12 = 32 16 , 03 : 14 = 112 , 03 : 24 = 112 , 04 : 12 = 32 16 ,04 : 13 = 112 , 04 : 23 = 112 , 12 : 34 = 715 , 13 : 24 = 112 , 14 : 23 = 112[31] I43=os_md.mc2grs(0,["I",[4,3]])$[32] os_md.mc2grs(I43,"spct1"|dviout=1);
x0
x0
x1
x2
x3
x4

b1
a11
3333
333111

x1
b1
444
9111
441111x2
a11
444
6111111
42222

x3
3333
9111
6111111x4
333111441111
42222
3333

3333

idx
2
2
−64
−90
−154

reduction
81, 711, 333, 33111
71, 44, 5111, 414[33] os_md.mc2grs(I43,"get"|dviout=1,div=5);

A01



[0]11




−c − b1 − b2 − d1 − d2 − d3 − a1 − a2 − e1 − e2 − a3








A13
[0]9
−c − b1 − b2 + a1 − e1 − e2−c − b1 − b2 + a2 − e1 − e2−c − b1 − b2 − e1 − e2 + a3

A23
[c]6
b1 + a 1
b1 + a 2
b1 + a 3
b2 + a 1
b2 + a 2
b2 + a 3

A14[b1 ]4[b2 ]4cc + d1c + d2c + d3A02[0]10−c + b1 − d1 − d2 − d3 − a1 − a2 − a3−c + b2 − d1 − d2 − d3 − a1 − a2 − a3A24[−c − b1 − b2 − e1 − e2 ]4[0]2[d1 ]2[d2 ]2[d3 ]2A03[0]3[d1 ]3[d2 ]3[d3 ]3

A04[a1 ]3[a2 ]3[a3 ]3cc + e1c + e2


A34


[0]3




[e1 ]3
[e2 ]3[−c − d1 − d2 − d3 − a1 − a2 − a3 ]3 








[42] os_md.mc2grs(I43,"show0"|dviout=1);
517 , 324 1, 33 21, 715 , 32 16 , 33 13 , 112 , 112 , 24 14 , 112 , 23 16 , 112 , 33 13 , 24 14 , 112/* Search rigid spectral types whose extension to KZ eq. are identical
S:spectral type the spectral types with the same extension
S:numberthe list of all the above spectral types with rank S */def sameKZ(S){if(type(S)==1){
SS=os_md.spgen(S|eq=1,pt=4);
75

A12
[0]4
[e1 ]4[e2 ]4

for(L=[];SS!=[];SS=cdr(SS))
if((TL=sameKZ(car(SS)))!=0 && TL[0]>TL[1]) L=cons(TL,L);
return L;}
S=os_md.s2sp(S|std=-1);
KZ=os_md.mc2grs(S,0);
Sp=os_md.mc2grs(KZ,"spct");for(L=[],I=1;I<5;I++){
if(Sp[I][I]==2){
for(S2=[],J=0;J<5;J++) if(I!=J) S2=cons(Sp[I][J],S2);
S2=os_md.s2sp(S2|std=-1);
if(S!=S2) L=cons(S2,L);}}
if(L==[]) return 0;for(LS=[];L!=[];L=cdr(L)) LS=cons(os_md.s2sp(car(L)),LS);
LS=os_md.lsort(LS,[],"setminus");
return cons(os_md.s2sp(S),LS);}/* spectral types of rank N whose KZ ext. have idx=K for a variable */def idxKZ(K,N){
L=os_md.spgen(N|eq=1,pt=4,std=-1);
for(LL=[];L!=[];L=cdr(L)){
KZ=os_md.mc2grs(car(L),0);
Sp=os_md.mc2grs(KZ,"spct");for(I=1;I<5;I++){
if(Sp[I][I]==K){
LL=cons(os_md.s2sp(car(L)),LL);
break;}}}
return reverse(LL);}/* the list with KZ eq. of rank N with a non-rigid restriction on a
singular hypersurfaces */def rest1KZ(N){
L=os_md.spgen(N|eq=1,pt=4,std=-1);
for(LL=[];L!=[];L=cdr(L)){
KZ=os_md.mc2grs(car(L),0);76

R=os_md.mc2grs(KZ,"rest1");
for(S=[];R!=[];R=cdr(R)){
for(T=cdr(car(R));T!=[];T=cdr(T))
S=cons(os_md.s2sp(car(T)[1]|short=1,std=-1),S);}
if(S!=[]){
S=os_md.lsort(S,[],1);
LL=cons([os_md.s2sp(car(L)|short=1),S],LL);}}
return reverse(LL);}/* non-rigid restricted eq. in the above (opt="basic") */def rest2KZ(N){F=(getopt(opt)=="basic")?1:0;
for(S=[],R=rest1KZ(N);R!=[];R=cdr(R)){
TR=car(R)[1];if(F==1){
T=os_md.chkspt(TR|opt="basic");
if(type(T)==4) TR=os_md.s2sp(T|short=1,std=-1);}
S=append(TR,S);
return os_md.lsort(S,[],1);}/* sorted but same as above with index of rigidity (opt="basic") */def rest3KZ(N){R=rest2KZ(N|opt=getopt()));
else R=rest2KZ(N);
for(S=[];R!=[];R=cdr(R))
S=cons([os_md.chkspt(car(R)|opt="idx"),car(R)],S);
return reverse(qsort(S));}
64. newKZmat(k,l|raw=f ,base=1,ext=1)
65. midKZ(l,b|raw=1,skip=m,kill=f ,dviout=1):: diagonalization of residue matrices of KZ equation
66. mcfamily(i,j,[m1 , . . .],ℓ|mult=1,max=1,fix=[p1 , . . .],verb=1)h:: middle convolution of a family of commuting sets
ℓ =[ℓ1 ,ℓ2 , . . .]: commuting family of sets i.e. ℓν are list with length(ℓν )> 1 andℓν ∩ ℓν ′ = ∅ or ℓν ⊂ ℓν ′ or ℓν ⊃ ℓν ′ .
Here [· · · ] is identiﬁed with a set {· · · }.
77

The function retruns ℓ if i = j and it returns ℓ0 otherwise. Hereif j 6= "*"I
pij (I) := I ∪ {i}
I \ {i}ℓi 7→ ℓ0i := [({i, j} ∩ I = ∅ or {i, j} ∩ I = {i, j}),({i, j} ∩ I = {j}),({i, j} ∩ I = {i}),∪pji I],

I∈ℓi , |pij (I)|>1
0ℓ 7→ ℓ = [[i,j], ℓ01 , ℓ02 , . . . ].
When j = "*",pij (I) := I \ {i},ℓi 7→ ℓ0i := [∪pji I],

I∈ℓi , |pji (I)|>1ℓ 7→ ℓ0 = [m \ {i}, ℓ01 , ℓ02 , . . . ].
• ℓ0 is returned• A family of commuting subset ℓ is considered as a set of (sub)sets and they are sorted.
• If i = j, I is returned• If there is a duplications of elements, they are simpliﬁed to an element.
• j =”∗” :• ℓ can be a list (set) of families of commuting subsets– In this case we get a list adding families of commuting sets applying the transformations– If i and j are lists, several transformations are indicated (cf. lextn()).
– ℓ = [["b"]] : set ℓ commuting families consisting of a set of 2 elements of Z. But if
fix=[n1 , . . .] is indicated, the sets of 2 elements [ni ,nj ] are excluded.
– ℓ = [["B"]] : Same as above together with infunite points.
– mult=1 : apply indicated transformation several times until the result is stable– max=1 : returns families of sommuting subsets which are not comtained other families（cf. lmaxsub()）[0] os_md.mcfamily(0,1,[[0,3]],[[0,2]]);[[0,1]][1] os_md.mcfamily(0,1,[[0,3]],[[1,2]]);[[0,1],[0,1,2]][2] os_md.mcfamily(0,1,[[0,3]],[[2,3]]);[[0,1],[2,3]][3] os_md.mcfamily(0,1,[[0,3]],[[2,3],[1,2,3]]);[[0,1],[2,3],[0,1,2,3]][4] os_md.mcfamily(0,1,[[0,3]],[[[2,3],[1,2,3]]]);[[[2,3],[1,2,3]],[[0,1],[2,3],[0,1,2,3]]][5] os_md.mcfamily(0,"*",[[0,3]],[[0,1,2]]);[[1,2],[1,2,3]][6] os_md.mcfamily([0,1],[0,1,2],[[0,3]],[[[2,3],[1,2,3]]]);[[[0,1],[2,3]],[[1,2],[1,2,3]],[[2,3],[1,2,3]],[[0,1],[2,3],[0,1,2,3]],[[0,2],[0,2,3],[0,1,2,3]]]78

[7] os_md.mcfamily([],[],[[0,3]],[[["b"]]]|fix=[2,3]);[[[0,1]],[[0,2]],[[0,3]],[[1,2]],[[1,3]]][7] os_md.mcfamily([],[],[[0,3]],[[["B"]]]|fix=[2,3]);[[[0,1]],[[0,2]],[[0,3]],[[1,2]],[[1,3]],[[0,2,3],[0,1,2,3]],[[1,2,3],[0,1,2,3]]][8] os_md.mcfamily([[0,1]],[[0,3]],[[0,3]],[[[0,2]]]|verb=1);
0 1 : [[0,2]] -> [[0,1]]
0 3 : [[0,2]] -> [[0,3]]
1 0 : [[0,2]] -> [[0,1],[0,1,2]]
1 2 : [[0,2]] -> [[1,2],[0,1,2]]
1 3 : [[0,2]] -> [[0,2],[1,3]][[[0,1]],[[0,2]],[[0,3]],[[0,1],[0,1,2]],[[0,2],[1,3]],[[1,2],[0,1,2]]][9] L=os_md.mcfamily([[0,1]],[[0,3]],[[0,3]],[[[0,2]]]|verb=1,mult=1,max=1)$[10] os_md.llsymred(L,[[0,1],[2,3]]);[[[0,1],[0,1,2]],[[0,2],[1,3]],[[0,2],[0,1,2]]]
67. mcset(x,k,ℓ):: middle convolution of a set
k, ℓ are lists regarded as ﬁnite sets
Return: [m,f ] with a sorted list m

[ℓ,1]



[ℓ ∪ {x},0][m, f ] =[ℓ \ {x},0]


[ℓ,0]

(x ∈ ℓ ⊃ k),(x 6∈ ℓ ⊃ k),(x ∈ ℓ 6⊃ k),(x 6∈ ℓ 6⊃ k).

[0] os_md.mcset(1,[2,3],[1,2,3]);[[1,2,3],1][1] os_md.mcset(1,[2,3,4],[1,2,3]);[[2,3],0][2] os_md.mcset(3,[1,2],[0,1,2]);[[0,1,2,3],0][3] os_md.mcset(0,[0,1,2,3],[0,1,2]);[[1,2],0]68. m2mc(ℓ,[a0 ,ay ,a1 ,c]|swap=1,small=1,simplify=0,MC=1)m2mc(ℓ,s|small=1,simplify=0,int=0,swap=t):: Addition+middle convolution of Pfaﬃan systemd(x−y)d(y−1)
du = (A0 dx+ A1 d(x−1)+ B0 dyx + Ay x−yx−1
y + B1 y−1 )u with respect to x-variable(ℓ = [A0 , Ay , A1 , B0 , B1 ]).
When ℓ is a spectral type or a Riemann scheme, s ="GRC", "GRSC", "extend", "Pfaff", "sp","pairs", "irreducible", "All", "swap" in the latter case• m2mc(0,0) : Shows usage• ℓ is a list [A0 , Ay , A1 , B0 , B1 ] or vector of 5 square matrices. If the size of the matrix is 1, ℓ
can be a list or vector of 5 scalars. Transforms ℓ by additions A0 , Ay , A1 with the parameters
a0 , ay , a1 , respectively and then transforms by a middle convolution （convolution if MC=1 isindicated) with the parameter c and returns the vector of the resulting 5 matrices.
If additions are omitted, [a0 ,ay ,a1 ,c] can be simply c.
If the middle convolution is omitted, [a0 ,ay ,a1 ] can be allowed.
• ℓ can be spectral type of x-variable or Riemann scheme. Spectral type or Riemann scheme is79arranged in the order x = ∞, x = 0, x = y, x = 1. In this case a0 and s are は 0（returns[A0 ,Ay ,A1 ,B0 ,B1 ]) or the string given below.
• If ℓ is a spectral type, it may be better to arrange the multiplicities from bigger ones (cf. theoption dep=[m,n]).
• If a0 or s is a string, ite has a special meaning.
– GRS : returns Generalized Riemann scheme. ay can be "dviout".
– GRSC : same as above but containing generalized exponents for x = y = 0 and x = y = 1.
– extend：returns 10 residue matrices corresponding to[Ax,y , Ax,0 , Ax,1 , Ax,∞ , Ay,0 , Ay,1 , Ay,∞ , A0,1 , A0,∞ , A1,∞ ]This list of this 10 matrices can be the parameter ℓ.
If a0 ="extend" and a1 ="eigen", we have a TEX source of residue matrices, theireigenvalues and eigenvectors.
– Pfaff：returns Pfaﬃan system by string. ay can be "dviout".
– sp : spectral types of residue matrices for x-variable and y-variables starting from x = y– pairs, pair : returns decompositions in the case when the system is reducible– irreducible：returns parameters which give the conditions of irreducibility– All：means that the above all parameters are indicated together with a1 ="dviout".
Moreover if GRSC is indicated, this indication is valid in place of GRS.
operator=0 : do not show the system of Pfaﬃan form
– swap : returns the result under swapping x-variable and y-variable.
If swap=t is indicated, it means another transformation:．
t = 1 : swaps x-variable and y-variable.
t = 2 : transforms by the correspondence (x, y) 7→ (x, xy ).
t = [t0 ,t1 ,t2 ] : (t0 , t1 , t2 )is a permutation of the numbers (0, 1, 2) and 0, 1, 2 means
singular points 0, 1, ∞, respectively.
Here the residue matrices of the extended KZ equation are

x
y
0
1
∞

A0 = Ax,0 , A1 = Ax,1 , Ay = Ax,y ,

x
Ax,y
Ax,0
Ax,1 Ax,∞B = A , B = A ,
y
Ax,y
Ay,0
Ay,1 Ay,∞
0
y,0
1
y,1

0
Ax,0
Ay,0
A0,1 A0,∞
A
+
A
+
A
+
B

0
1
y
0 + B1 + A0,1 = 0,



1
Ax,1
Ay,1
A0,1
A1,∞
the sum of the elements of a line is 0
∞ Ax,∞ Ay,∞ A0,∞ A1,∞
Using the coordinate (x0 , x1 , x2 , x3 , x4 ) = (x, y, 1, 0, ∞), residue matrices are transformed into thematrices which acts vectors with the transposition o the ﬁrst and second elements. 0 and 1 may
be swapped. Then [c, a1 , ay , a0 ] deﬁne addition + middle convolution. Hence
M1=os_md.m2mc([a02,a01,a03,a12,a13],[0,0,lambda,mu]);
M2=os_md.m2mc(M1,[0,0,-lambda-mu]);
M3=os_md.m2mc(M2,"extend");
MM=os_md.mperm(M3,[1,0,2],1|mult=1);
gives the residue matrices corrsponding to Appell’s F1 (cf. m2grs(), K̂xµ,λ ).
{Ax,∞ = −(Ax,y + Ax,0 + Ax,1 ),A0,1 = Ax,∞ + Ay,∞ + Ax,y ,Ay,∞ = −(Ax,y + Ay,0 + Ay,1 ),A0,∞ = Ax,y + Ax,1 + Ay,1 ,There are following options.
• swap=1 : middle convolution after with swapping x and y.
80

A1,∞ = Ax,y + Ax,0 + Ay,0 .

• small=1 : produces matrices of smaller size by TEX.
• simplify=0 : does not simplify by an adjoint transformation using a diagonal matrix• simplify=1,3 : another simpliﬁcation by an adjoint transformation using a diagonal matrix• dep=[m,n] : For an automatic generation of spectral exponents from a spectral type the n-th
exponent of m-th singular point is determined by Fuchs condition. m = 1（and x = ∞）andthe last exponent
The ﬁrst exponents except for the point x = ∞ are normalized to 0.
• int=0 : Allows a fractional multiple of parameters in the automatic generation of characteristic
exponents.
[0] F1=os_md.m2mc([0,0,0,0,0],[a,b,c,d]);[ [ a+d b c ][ 0 0 0 ][ 0 0 0 ] [ 0 0 0 ][ a b+d c ][ 0 0 0 ] [ 0 0 0 ][ 0 0 0 ][ a b c+d ] [ b -b 0 ][ -a a 0 ][ 0 0 0 ] [ 0 0 0 ][ 0 c -c ][ 0 -b b ] ][1] os_md.m2mc(F1,["GRS","dviout"]);x = 0
a+d

[0]2

x=y
b+d
[0]2

x=1
c+d
[0]2

y=0
a+b
[0]2

y=1
b+c
[0]2

x=∞
−a − b − c − d
[−d]2

y=∞
−a − b − c − d[−b]2x=y=∞ [−a − b − c − d]2−b − d[2] os_md.m2mc(F1,["Pfaff","dviout"]);
((

du =

a+d b
0
0
0
0
(
b
−b
a
+ −a
0
0

)
(
c dx
0
0
+ a
0 x
0
)
(
0 dy
0
0
+ 0
0
0 y

)
(
0 d(x − y)
0
c
+ 0
x−y
0
a
)
)
0
d(y − 1)
−c
u
y−1
b

0
b+d
0
0
c
−b

0
0
b

0
0
c+d

)

d(x − 1)x−1[3] F2=os_md.m2mc(F1,[-a-d,0,0,e]);[ [ -a-d+e 0 c 0 ][ 0 -a-d+e 0 c+d ][ 0 0 0 0 ][ 0 0 0 0 ] [ 0 0 0 0 ][ 0 0 0 0 ][ (-d*a-d*b-d^2)/(c) -d b+d+e c+d ][ 0 0 0 0 ] [ 0 0 0 0 ][ 0 0 0 0 ][ 0 0 0 0 ][ (-d*b)/(c+d) (-d*a-d*c-d^2)/(c+d) (c*b)/(c+d) c+d+e ] [ a+b+d c -c 0 ][ 0 0 0 0 ][ (d*a+d*b+d^2)/(c) d -d 0 ][ 0 0 0 0 ] [ c -c 0 0 ]81

[ -b b 0 0 ][ 0 0 c -c-d ][ 0 0 (-c*b)/(c+d) b ] ][4] os_md.m2mc(F2,["GRS","dviout"]);






x=0
[−a − d + e]2
[0]2




x=y
b+d+e
[0]3

x=1
c+d+e
[0]3

y=0
a+b
[0]3

y=1
[b + c]2[0]2x=∞[a − e]2−b − c − e−ey=∞−a − b − c − d−b − c − e[−b]2x=y=∞ a−b−e[−b − c − e]3 

[5] os_md.m2mc(F1,[-a-d,0,0,e]|simplify=1,small=1);[ [ -a-d+e 0 1 0 ][ 0 -a-d+e 0 1 ][ 0 0 0 0 ][ 0 0 0 0 ] [ 0 0 0 0 ][ 0 0 0 0 ][ -d*a-d*b-d^2 -d b+d+e 1 ][ 0 0 0 0 ] [ 0 0 0 0 ][ 0 0 0 0 ][ 0 0 0 0 ][ -d*c*b -d*a-d*c-d^2 c*b c+d+e ] [ a+b+d 1 -1 0 ][ 0 0 0 0 ][ d*a+d*b+d^2 d -d 0 ][ 0 0 0 0 ] [ c -1 0 0 ][ -c*b b 0 0 ][ 0 0 c -1 ][ 0 0 -c*b b ] ][6] os_md.m2mc("21,21,21,21",["GRSC","dviout"]|small=1);{ x=0 x=y x=1 y=0
y=1
x=∞
y=∞
x=y=∞
x=y=0
a
b
[0]2 [0]2

x=y=1
c a+b+2d b+c+2d −a−b−c−2d1 −a−b−c−2d [−a−b−c−2d]2 [a+b+d]2 [b+c+d]2
[0]2
[0]2
[0]2
[d]2
[−b−d]2−b
00}[7] os_md.m2mc(0,0)$m2mc(m,t) or m2mc(m,[t,s]) Calculation of Pfaff system of two variables
m : list of 5 residue mat. or GRS/spc for rigid 4 singular points
t : [a0,ay,a1,c], swap, GRS, GRSC, extend (eigen), sp, irreducible, pair, pairs, Pfaff, Alls : TeX, dviout, GRSC
option : swap, small, simplify, operator
Ex: m2mc("21,21,21,21","All")[8] os_md.m2mc("21,21,21,21", "All")$Riemann scheme
{

x=0
a
[0]2

x=y
b
[0]2

x=1
c
[0]2

y=0
a + b + 2d
[0]2

y=1
b + c + 2d[0]2Spectre types : 12,12,12,12 : 12,12,12,1282

x=∞−a − b − c − 2d
[d]2

y=∞
−a − b − c − 2d[−b − d]2x=y=∞[−a − b − c − 2d]2−b}

By the decompositions
21, 21, 21, 21 = 10, 10, 10, 01 ⊕ 11, 11, 11, 20= 10, 10, 01, 10 ⊕ 11, 11, 20, 11= 10, 01, 10, 10 ⊕ 11, 20, 11, 11= 01, 10, 10, 10 ⊕ 20, 11, 11, 11= 2(10, 10, 10, 10) ⊕ 01, 01, 01, 01
irreducibility ⇔ ∅ = Z∩{d, c + d, b + d, a + d, a + b + c + 2d}
The equation in a Pfaﬀ form is)
a b + d c + d dx
0
0
0
du =
x
0
0
0
(
)
0
0
0
d(x − y)+ a+d b c+d
x−y
0
0
0
(
)
0
0
0 d(x − 1)
0
0
0
+
x−1
a+d b+d c()
b+d−(b + d) 0 dya+d0
+ −(a + d)
0
0
0 y
)
(
)
0
0
0
d(y − 1)c+d−(c + d)u
+ 0y−10 −(b + d)b+d((

69. mcmgrs(g,r|dviout=k):: Transform of simultaneous spectral exponents g of a KZ equation of several (≥ 5) points in P1
The function handles a KZ equation such that the indices of the square matrices Ai,j in mc2grs()
runs from 0 to N − 1. If we regards the solution of hypergeometric function with several variables,
the number of variables equals N − 2. The system is
∂u
=
∂xi

∑
j∈{0,1,...,N −1}\{i}Ai,juxi − xj(i = 0, 1, . . . , N − 1),

Ai,i = 0, Ai,j = Aj,i , Ai,N := −(Ai,0 + Ai,1 + · · · + Ai,N −1 ),A0,i,j := A0,i + A0,j + Ai,j .
The parameter g can be the list of simultaneous eigenvalues (multiplicities and eigenvalues) forthe commutative pairs (A0,i , Aj,k ) and (A0,i , A0,i,j ). Here i, j, kare diﬀerent indices in {1, . . . , N }.
2
−1)
The former are N × N −1 C2 pairs and the latter are N × (N − 1) pairs and there are N (Npairs.
2
If g is indicated by a spectral type or the corresponding string, then we have the following.
• If g is a positive integer diﬀerent from 1, the trivial data of simultaneous eigenvalues of trivial
hypergeometric function of g variables. (N = g + 2)．
• Suppose g is deﬁned by the spectral types (GRS or a string) of matrices 行列 A0,N , A0,1 , A0,2 , . . . , A0,N −1 .
In this case the parameters with indices are used if short=0 is indicated.
r determines the following functions.
• 0 : returns the list of lists of simultaneous eigenvalues.
• ["deg"] : returns κ ([ ] can be omitted).
83• [[i,j],λ] : transforms by the addition Ai,j 7→ Ai,j + λ, Ai,N 7→ Ai,N − λ, Aj,N 7→ Aj,N − λ(0 ≤ i < j < N ).
• [µ] : transforms by middle convolution mcx0 ,µ of x0 variable (the algorithm is given by [O5]).
• [[[i1 ,j1 ],λ1 ],. . .,[µk ],. . .] : transforms by successive additions and middle convolutions.
• [[a1 ,. . .,aN −1 ]] : same as [[[0,1],a1 ],. . .,[[0,N-1],aN −1 ]].
• [[a1 ,. . .,aN −1 ,µ]] : same as [[[0,1],a1 ],. . .,[[0,N-1],aN −1 ],[µ]].
• ["get",[I,J]] : returns the list of simultaneous eigenvalues for [AI , AJ ] = 0 with the header[I, J].
• ["get",I] : returns eigenvalues of AI with the header I.
• ["get",i] (0 ≤ i ≤ N ) : returns GRS for AI with i ∈ I, which is GRS for the variable xi .
dviout=1 : displays the result by using TEX.
dviout=-1 : returns the corresponding source ﬁle of TEX.
dviout=2 : outputs the corresponding source ﬁle of TEXwithout display.
• ["get"] : returns the list of eigenvalues of (N +1)N
matrices.
2dviout=k can be indicated.
• ["get0",[I,J]], ["get0",I], ["get0",i] (0 ≤ i ≤ N ), ["get0"] : "get0" are same as"get" but the header is omitted.
• ["show"] : displays simultaneous eigenvalues by using TEX.
dviout=-1 can be indicated.
2−1)• ["show0"] : shows the multiplicities of simultaneous eigenvalues of N (Npairs (the order2
is same as in "show").
dviout=1, -1 can be indicated.
• ["spct"] : returns spectral types.
Returns (N + 1) × (N + 1) matrix whose (i, j) element is the spectral type of Ai,j if i 6= j andthe index of rigidity for the variable xi if i = j. のとき Ai,j (0 ≤ i, j ≤ N + 1).
dviout=k can be indicated.
• ["mult",ℓ1 ,...,ℓm ] : Puts g0 = g and deﬁnes gi = mcmgrs(gi−1 ,ℓi ) for i = 1, . . . , m andreturns gm . Options are possible.
[0] os_md.mcmgrs("31,31,31,31,31",["get"]|dviout=1)$[1] os_md.mcmgrs("31,31,31,31,31",["spct"]|dviout=1)$[2] os_md.mcmgrs("31,31,31,31,31",["show"]|dviout=1)$
give
{

A01
[0]3
a

A02
[0]3
b

A23
[0]3
b + c + 2e

A03
[0]3
c

A04
A05
A12
A13
A14
A15
[0]3
[e]3
[0]3
[0]3
[0]3
[−a − e]3d −a − b − c − d − 3e a + b + 2e a + c + 2e a + d + 2e −a − b − c − d − 3e
}
A24
A25
A34
A35
A45
[0]3
[−b − e]3[0]3[−c − e]3[−d − e]3b + d + 2e −a − b − c − d − 3e c + d + 2e −a − b − c − d − 3e −a − b − c − d − 3e

x0
x0
x1
x2
x3
x4
x5

31
31
31
31
31

x1
31
31
31
31
31

x2
31
31
31
31
31

84

x3
31
31
31
31
31

x4
31
31
31
31
31

x5
31
31
31
31
31

idx
2
2
2
2
2
2

[A01 : A23 ] = {[a : 0], [0 : 0]2 , [0 : b + c + 2e]} ,[A01 : A24 ] = {[a : 0], [0 : 0]2 , [0 : b + d + 2e]} ,······[A01 : A012 ] = {[a : a + b + e], [0 : 0]2 , [0 : a + b + e]} ,[A01 : A013 ] = {[a : a + c + e], [0 : 0]2 , [0 : a + c + e]} ,······
70. mmc(l,[µ,a1 ,...,an ]|full=1,homog=1,mult=f ):: Addition and middle convolution of ODE of Schlesinger type and a KZ equation
Transforms of the Fuchsian system of Schlesinger typen
du ∑ Aj=udx j=1 x − xjand the KZ type equation
∂u
=
∂xi

∑
j∈{0,...,n}\{i}Ai,juxi − xj(i = 0, . . . , n)

by additions and middle convolutions.
We put ℓ =[A1 , . . . , An ] or ℓ =[A0,1 , . . . , A0,n , A1,2 , . . . , A1,n , . . . , An−1,n ] ( n(n+1)
elements) for2
the former system or latter equation, respectively. If g is a list of rational numbers or functions,they are regarded as matrices of size 1 × 1.
Moreover ℓ can be a spectral type or GRS. Then for the latter KZ equation ℓ should be rigid andcorrespond to the diﬀerential equation of the variable x0 .
• [µ, a1 , . . . , an ] : Adds aj to Aj (or A0,j ) and then transforms the resulting matrices by the
middle convolution mcµ with respect to the variable x (or x0 ).
We may indicate [a1 , . . . , an ] or [µ] by one of the above transformation.
• mult=f : f = 0 means the former system of Schlesinger type and f = 1 means a KZ equation.
By default, ℓ corresponds to a system of Schleginger type if the number of elements of ℓ issmaller than 6 and to a KZ system otherwise. If ℓ is a spectral type, ℓ corresponds to a KZ
system by default.
• homog=1 : transforms by the homogeneous middle convolution for a KZ system, namely, middle
convolution with respect to µ together with an addition of the last residue matrix by −µ.
71. kzext([a1 , a2 , . . . , am ]|perm=σ):: extend to full KZ residue matrices
Consider the homogenized KZ equation
∂u
=
∂xi

∑
ν={0,...,n}\{i}Ai,j uxi − xνsatisﬁes
Ai,j = Aj,i , Ai,i = 0, Ai,n+1 =

n
∑
ν=0

(0 ≤ i ≤ n)Ai,ν ,∑

Ai,j = 0.

0≤i<j≤n

If m = 12 n(n( + 1)) or m = 12 n(n + 1) − 1, a1 , . . . , am are A0,1 , . . . , A0,n , A1,2 , . . . , A1,n , A2,3 , . . . andthe matrix Ai,j 0≤i≤n is returned,0≤j≤n• If perm=σ is indicated. [Aσ(0),σ(1) , . . . , Aσ(0),σ(n) , Aσ(1),σ(2) , . . . , Aσ(1),σ(n) , Aσ(2),σ(3) , . . . ,Aσ(n−3),σ(n) , Aσ(n−2),σ(n) ] is returned. Here σ is a permutation given by a list of n+1 numbers
in {0, . . . , n + 1} or a transposition given by a list of pair of two numbers.
85[0] os_md.kzext([1,2,3,4,5]);[ 0 1 2 3 -6 ][ 1 0 4 5 -10 ][ 2 4 0 -15 9 ][ 3 5 0 0 -8 ][ -6 -10 9 -8 0 ][1] os_md.kzext([1,2,3,4,5]|perm=[1,2]);[2,1,3,4,-15]
72. linfrac01(ℓ|over=1):: List of linear fractional transformations of x = 0, 1, ∞, y, z, . . . (ℓ = [x, y] etc.)ℓ = [x,y] or ℓ = [x,y1 , . . . , yq ] and put x = (x0 , x1 , . . . , xq+3 ) = (x, 0, 1, y1 , . . . , yq , ∞)（x0 = x, x1 = 0, x2 = 1, x3 = y1 , . . . , xq+2 = yq , xq+3 = ∞）と置く．
• A linear fractional transformation corresponds to a permutation of {0, 1, . . . , q + 3}. If q > 1
there are (q + 4)! permutations. But if q = 1, a linear transformation corresponds to a
permutation of {1, 2, 3}．cf. lft01()).
This function returns the list of all linear fractional transformations.
• ℓ = [[x,y]] or ℓ = [[x,y1 , . . . , yq ]]: returns the list of pairs of linear transformations withthe corresponding permutations.
[0] os_md.linfrac01([x]);[[x],[-x+1],[(1)/(x)],[(x-1)/(x)],[(-1)/(x-1)],[(x)/(x-1)]][1] os_md.linfrac01([[x]]);[[[x],[0,1,2,3]],[[-x+1],[0,2,1,3]],[[(1)/(x)],[0,3,2,1]],[[(x-1)/(x)],[0,2,3,1]],[[(-1)/(x-1)],[0,3,1,2]],[[(x)/(x-1)],[0,1,3,2]]][2] os_md.linfrac([x,y]);[[x,y],[y,x],[-x+1,-y+1],[(1)/(x),(1)/(y)],[(1)/(x),(y)/(x)],[(y)/(x),(1)/(x)],...
[(y*x-y)/((y-1)*x),(x-1)/(y-1)],[((y-1)*x)/(y*x-y),(y-1)/(x-1)]]
73. lft01(ℓ, t|tr=τ ):: Linear fractional transformations of ℓ = [x,y] or ℓ = [x,y1 ,y2 ,. . .,yq ]Let (0, 1, y1 , y2 , . . . , yq , ∞) be singular points with respect to x-variable and put x(x0 , x1 , . . . , xq+3 ) = (x, 0, 1, y1 , . . . , yq , ∞)(x0 = x, x1 = 0, x2 = 1, x3 = y1 , . . . , xq+2 = yq , xq+3 = ∞).
• We consider the KZ equation
∂u
=
∂xi

∑
j∈{0,...,q+2}\{i}Ai,j = Aj,i ,

∑

Ai,j
u
xi − xj
Ai,j = 0=(0 ≤ i ≤ q + 2),(0 ≤ i ≤ q + 3)

j∈{0,...,q+3}\{i}and its restriction to x1 = 0 and x2 = 1 with variables (x, y1 , . . . , yq ).
• A linear fractional transformation corresponds to a permutation of{0, 1, . . . , q + 3}.
• If t is a permutation σ, then the corresponding linear fractional transformation is returned.

86• If σ = [σ0 , . . . , σq+3 ], the singular hypersurface xi = xj changes into xσi = xσj . namely,
∂u
=
∂xi
→

∑
j∈{0,...,q+2}\{i}

∂u
=
∂xi

Ai,j
u
xi − xj∑j∈{0,...,q+2}\{i}(0 ≤ i ≤ q + 2)
∑

Ai,j
u=
xσ(i) − xσ(j)j∈{0,...,q+2}\{i}Aσ−1 (i),σ−1 (j)uxi − xj

σ can be a transposition [i,j] or an identity 1. We may indicate a pair in the elements ℓ or
the strings "0", "1", "infty"．
• If ℓ = [[x,y],1], then the corresponding permutation is also returned. Here 1 can be a
permutation. Namely,
os md.lft01([[x,y],1],σ ◦ σ 0 ) = os md.lft01(os md.lft01([[x,y],1],σ),σ 0 )• If t is an integer, it corresponds to the following permutation
t

0<j<q

transposition

t∞

t0

t1

tx

ty

0
0
0
1
∞
x
0
0

1
1
1
0
1
0
x
x

x
x
y
x
x
1
1
y

y
x
y
y
y
y
1

(tx −t0 )(t1 −t∞ )(tx −t∞ )(t1 −t0 )(ty −t0 )(t1 −t∞ )(ty −t∞ )(t1 −t0 )

x
x
y
1−x

y

−j
0
1
2
3
4
5

yj ↔ yj+1
x ↔ y1
0↔1
∞↔0
1↔x
0↔x
1↔y

(j + 2, j + 3)
(0,3)
(1,2)
(1, q + 3)
(0,2)
(0,1)
(2,3)

∞
∞
∞
∞
0
∞
∞
∞

6
7

∞ ↔ yq1↔∞(q + 2, q + 3)
(2, q + 3)

yq
1

0
0

x
∞

1
x

y

1
x
1
x
x
x−1
x
y
x(1−yq )
x−yq
x
x−1

8

x↔∞

(0, q + 3)

x

0

1

∞

y

1−x

t=0

(y1 , x, y2 , y3 , ...)

x 0 = x ↔ x 3 = y1

t = −j(x, y1 , ..., yj−1 , yj+1 , yj , yj+2 , ...)yj ↔ yj+1

x
1−y
1
y
y
x
x−y
x−1
1
y

1−y

(q=1)
y
y−1
y(x−1)x−y(1 ≤ j ≤ q − 1)

t=1

(1 − x, 1 − y1 , 1 − y2 , 1 − y3 , ...)

x 1 = t0 ↔ x 2 = t1

t=2(1/x, 1/y1 , 1/y2 , 1/y3 , ...)

x1 = t0 ↔ xq+3 = t∞t=3(1/x, y1 /x, y2 /x, y3 /x, ...)

x 0 = x ↔ x 2 = t1

t=4x
1 x−y2 x−y3
, x−y
( x−1
x−1 , x−1 , x−1 , ...)
x
1
2
3
( x−1
, y1y−1, y2y−1, y3y−1, ...)

x 0 = x ↔ x 1 = t0x2 = t1 ↔ xq+3 = t∞y2 (x−1) y3 (x−1)(1 − x, y(x−1)
x−y , x−y2 , x−y3 , ...)x0 = x ↔ xq+3 = t∞

t=7
t=8
t∞

t0
2

x0
x

t1
1

x1
4

0

3

x2
1

1

y1

x

5

y1

x4
−1

· · · yq−2 yq−1

−1

0

x3

y2

y2

2−q

x5
−2

yq

1−q

· · · xq+1 xq+2 xq+3
1−q

y3

yq−1

yq

6

∞

[0] for(I=-1;I<9;I++) os_md.mycat([I,os_md.lft01([x,y,z],I|tr=1)]);-1 [[x,z,y],[0,1,2,4,3,5]]0 [[y,x,z],[3,1,2,0,4,5]]
1 [[-x+1,-y+1,-z+1],[0,2,1,3,4,5]]87

2 [[(1)/(x),(1)/(y),(1)/(z)],[0,5,2,3,4,1]]
3 [[(1)/(x),(y)/(x),(z)/(x)],[2,1,0,3,4,5]]
4 [[(x)/(x-1),(x-y)/(x-1),(x-z)/(x-1)],[1,0,2,3,4,5]]5 [[(x)/(y),(1)/(y),(z)/(y)],[0,1,3,2,4,5]]
6 [[((-z+1)*x)/(x-z),((-z+1)*y)/(y-z),-z+1],[0,1,2,3,5,4]]
7 [[(x)/(x-1),(y)/(y-1),(z)/(z-1)],[0,1,5,3,4,2]]
8 [[-x+1,(y*x-y)/(x-y),(z*x-z)/(x-z)],[5,1,2,3,4,0]][1] os_md.lft01([[x,y],1],1);[[-x+1,-y+1],[0,2,1,3,4]][2] os_md.lft01(@@,2);[[(-1)/(x-1),(-1)/(y-1)],[0,4,1,3,2]] /* (0,1,infty) -> (∞,0,infty) */[3] os_md.lft01([x,y],@@[1]);[(-1)/(x-1),(-1)/(y-1)][4] os_md.lft01([x,y],[2,4,0,3,1]);[x,(x)/(y)][5] os_md.lft01([x,y],[1,0,4,3,2]);[x,(-x+y)/(y-1)][6] os_md.lft01([x,y],[4,2,1,3,0]);[x,((-y+1)*x)/(x-y)][7] os_md.lft01([x,y,z],[x,"0"]);[(x)/(x-1),(x-y)/(x-1),(x-z)/(x-1)]
3.1.3 Some operators
74. okubo3e([p0,1 , . . . , p0,m ],[p1,1 , . . . , p1,n ],[p2,1 , . . . , p2,m+n |opt=1])
75. fuchs3e([p0,1 , . . . , p0,n ],[p1,1 , . . . , p1,n ],[p2,1 , . . . , p2,n ])76. ghg([p1,1 , p1,2 , ..., p1,m ],[p2,1 , p2,2 , ..., p2,n ]):: diﬀerential operator satisﬁed by generalized hypergeometric function m Fn (p1 ; p2 ; x)(cf. seriesHG())
d
P (x, dx
)=

n
∏

d
d
(x dx
+ p2,j ) · dx
−

m
∏

d
(x dx
+ p1,j )

j=1

j=1
∞ ∏m
∑
(p1,ν )n xn∏ν=1
m Fn (p1,1 , . . . , p1.m ; p2,1 , . . . , p2,n ; x) =n
ν=1 (p2,ν )n n!
n=0

x is the variable and dx is diﬀerential
If 
m = n + 1, the operator is rigid and Fuchsian and0
1 − p2,1 · · · 1 − p2,m−2 1 − p2,m−1
0:

℘ 1:
0
1
···
m−2
−γ
;x


∞ : p1,1
p1,2∑ . . . . .∑...........
p1,m
Fuchs relation : γ =p1,ν − p2,νWhen m = 2 and n = 1, the operator corresponds to Gauss hypergeometric equation[0] os_md.ghg([a,b],[c]);(-x^2+x)*dx^2+((-a-b-1)*x+c)*dx-b*a
77. ghg2([a1 , a2 , . . . , b],[a01 , a02 , . . . , b0 ]|raw=1,all=1,symbol=1,var=v):: generalized hypergeometric equation of many variablse88ai are lists [ai,1 , ai,2 , . . .].
If ai is a scalar. ai is replaced by [ai ].
∑

∏ ∏

∏

(ai,j )mi k (bk )m1 +··· m1 m2∏ 0∏ ∏j 0u(x1 , x2 , . . .) =x1 x2 · · ·k (bk )m1 +···ij (ai,j )mim1 ≥0, m2 ≥0,...
i

Get the equation satisﬁed by this series modulo constant.
Default : (x1 , x2 , x3 , x4 ) = (x, y, z, w) if the number of variables ≤ 4.
• all=1 : get full equation• raw=1 : get reduced equation if (a01 )1 (a02 )1 · · · = 0• symbol=1 : get the generator of the symbol ideal
The equations satisﬁed by F1 (a; b, b0 ; c; x, y), F2 (a; b, b0 ; c, c0 ; x, y),
F4 (a; b; c, c0 ; x, y) are given byos md.ghg2([b,b0 ,a],[0,0,c]),os md.ghg2([b,b0 ,c],[[0,c],[0,c0 ],[]]),
os md.ghg2([[a,b],[a0 ,b0 ],[]].[0,0,c]),os md.ghg2([[],[],[a,b]],[[0,c],[0,c0 ],[]]).
[0] P=os_md.ghg2([b,c,a],[0,0,d]);[((-y*x+y)*dx-b*y)*dy+(-x^2+x)*dx^2+((-a-b-1)*x-d+1)*dx-b*a,(-y^2+y)*dy^2+((-y+1)*x*dx+(-a-c-1)*y-d+1)*dy-c*x*dx-c*a][1] map(os_md.psymbol,P,[[x,dx],[y,dy]]);[(-y*x+y)*dx*dy+(-x^2+x)*dx^2,(-y^2+y)*dy^2+(-y+1)*x*dx*dy]
78. even4e([p1,1 , p1,2 , p1,3 , p1,4 ],[p2,1 , p2,2 ]):: 
Even family of order 4 (Rigid)

0
1
p2,1
p2,2
0:

℘ 1:
0
1
p0 p0 + 1 ; x∞ : p1,1 p1,2 p1,3
p1,4
Fuchs relation : 2p0 + p1,1 + p1,2 + p1,3 + p1,4 + p2,1 + p1,2 = 3
79. odd5e([p1,1 , p1,2 , p1,3 , p1,4 , p1,5 ],[p2,1 , p2,2 ]):: 
Odd family of order 5 (Rigid)01
p2,1 p2,2 p2,2 + 1
0:

℘ 1:
0
1
2
p0
p0 + 1 ; x∞ : p1,1 p1,2 p1,3 p1,4 ∑p1,5
Fuchs relation 2p0 + p2,1 + 2p2,2 + p1,j = 4
80. rigid211([p0,1 , p0,2 ],[p1,1 , p1,2 ],[q0 , q1 ]):: Type 211,211,211

1
p0,1 p0,2
0: 0
℘ 1: 01
p1,1 p1,2 ; x∞ : q0 q0 + 1 q1
q2
Fuchs relation : p0,1 + p0,2 + p1,1 + p1,2 + 2q0 + q1 + q2 = 4
81. extra6e([p1,1 , p1,2 , p1,3 , p1,4 , p1,5 , p1,6 ],[p2,1 , p2,2 ]):: Extra case (Rigid)01
p2,1 p2,1 + 1 p2,2 p2,2 + 1

0:
℘ 1:
0
1
2
3
p0
p0 + 1 ; x∞ : p1,1 p1,2 p1,3
p1,4
p∑
p2,6
1,5
Fuchs relation : 2p0 + 2p2,1 + 2p2,2 + p1,j = 5
82. eofamily([p0,1 , p0,2 ],[p1,1 ],[p2,1 , . . . , p2,n ]):: Even/odd family (obsolete)

89

F3 (a, a0 ; b, b0 ; c; x, y),83. ev4s(p1 ,p2 ,p3 ,p4 ,p5 ):: Rigid restriction of Heckman-Opdam’s hypergeometric equation of type (BC2 , BC1 )[0] P=os_md.ev4s(a,b,c,d,e);(x^4-2*x^3+x^2)*dx^4+((-2*a+2*b+8)*x^3+(4*a-2*b-13)*x^2+(-2*...
[1] os_md.expat(P,x,0);[a-c+1/2,a+c-1/2,1,0][2] os_md.expat(P,x,1);[-b+1/2,-b+3/2,1,0][3] os_md.chkexp(P,x,1,-b+1/2,2);[][4] os_md.expat(P,x,"infty");[-1/2*a+1/2*b-1/2*d+1/2,-1/2*a+1/2*b+1/2*d+1/2,-1/2*a+1/2*b-1/2*e+1/2,-1/2*a+1/2*b+1/2*e+1/2]
84. b2e(p1 ,p2 ,p3 ,p4 ,p5 ):: Non-rigid restriction of Heckman-Opdam’s hypergeometric equation of type (BC2 , A1 )[0] P = os_md.b2e(a,b,c,d,e);(x^4-2*x^3+x^2)*dx^4+((-4*c+10)*x^3+(6*c-15)*x^2+(-2*c+5)*x...
[1] os_md.expat(P,x,0);[-a+c+1/2,a+c-1/2,1,0][2] os_md.expat(P,x,1);[-b+c+1/2,b+c-1/2,1,0][3] os_md.expat(P,x,"infty");[-c-1/2*d-1/2*e+1,-c-1/2*d+1/2*e+1,-c+1/2*d-1/2*e+1,-c+1/2*d+1/2*e+1]
85. heun([a, b, c, d, e],p,r|):: Heun’s equation. r is an accessory parameter
0
:
0
c






1: 0 d ; x℘
Fuchs relation : a + b + 1 = c + d + ep: 0 e∞: a b[0] os_md.heun([a,b,c,d,"?"],p,r);(x^3+(-p-1)*x^2+p*x)*dx^2+((a+b+1)*x^2+((-c-d)*p-a-b+d-1)*x+c*p)*dx+b*a*x-b*a*r

3.2 Useful functions
The following functions are in a module and we call the functions by putting os_md. at the headsuch as os_md.myhelp().
3.2.1 Extended function
86. myhelp(h):: Displays the manual of os_muldif.rr• os_muldif.pdf, os_muldif.dvi should be in get_rootdir()\help. They are displayed by
h = 1 or −1, respectively.
90• Suppose DVIOUTH is correctly set. Then the explanation of the function is shown by indicating
its name h by myhelp(h) (if it is contained in os_muldif.dvi). Here h is a string such as
myhelp("m2mc") removed the top os_md..
• When h = 0, os_md.getbygrs, os_md.m2mc or os_md.mgen, the corresponding explanation isdisplayed.
• h = [dviout, n] : Sets the environment to this display. dviout is the pathname of dviout andn is the number of dviout. Here n = 2 is recommended since the ﬁrst dviout is used todisplay equations by os muldif.rr.
• DVIOUTH may be used under other environment or more general settings.
87. chkfun(f ,s):: Checks whether f (= a string) is deﬁned and load(s) if it is not• f = 0 : Returns version of Risa/Asir• f = 1 : Returns version of os_muldif.rr• s = 0 : Checks whether the function with the name f is deﬁned when f is a string.
• f can not be a function in a module[0] os_md.chkfun(0,0)$
Risa/Asir Ver. 20121217[1] os_md.chkfun(1,0)$
Loaded os_muldif Ver. 00140401 (Toshio Oshima)
88. isMs():: Checks whether the operating system is Microsoft Windows
Checks the environment variable temp or tmp and returns 1 if the 3rd character of the value is ¥or \ and 0 otherwise.
89. isyes(p|set=ℓ):: Deﬁnes a function returning 0 or 1
• set=1 : Deﬁnes a function. p is a list whose elements are a function and the list of parametersof the functions and the range of the value returned by the function which means as follows.
Namely, when p = [fn,[t1 ,t2 ,. . .],[a,b]]. isyes(X|set=p) means the function
def foo(X){R=fn(X,t1 ,t2 ,. . .);return (R>=a && R<=b)?1:0;}– Suppose p =[type,[],[0,1]]. Then the function is deﬁned which returns 1 (yes) or 0(no) if type(p) ∈ [0, 1] and 0 otherwise. Here −∞ or ∞ is indicated by "".
– If the range is a value, then the value can be indicated. Namely, [type,[],1] is equivalent
to [type,[],[1,1]].
– If several conditions are indicated by a list of lists reoresenting a condition, then thefunction deﬁned returns 1 only if all the conditions are ”yes”.
– p=[[os_md.isint,[],1],[os_md.calc,[[">",0]],1]]] means that the function deﬁned returns 1 only if the given parameter is a positive integer.
– The function deﬁned is valid until a new function is deﬁned by set=1.
• set=0 : Returns the function deﬁned (see the following example [11]).
• set= : If the list for judge is indicated by set= and p is an object to be judged, then the value
1 or 0 is returned with keeping the already deﬁned function.
• If set= is not indicated, p is judged and 1 or 0 is returned according to the judge.
[0] os_md.isyes([[os_md.isint,[],1],[os_md.calc,[[">",0]],1]]|set=1)$[1] os_md.isyes(0|set=0);91

[[os_md.isint,[],1],[os_md.calc,[[>,0]],1]][2] os_md.isyes(3/2);
0[3] os_md.isyes(@i);
0[4] os_md.isyes(-1);
0[5] os_md.isyes(3/2);
0[6] os_md.isyes(3);1[7] A=mat([1,2],[3,4]);[ 1 2 ]
[ 3 4 ]
[8] os_md.isall(os_md.isyes,A);
1[9] A[1][1]=0$[10] os_md.isall(os_md.isyes,A);
0[11] def isPositiveInt(X){P=os_md.isyes(0|set=0);
os_md.isyes([[os_md.isint,[],1],[os_md.calc,[[">",0]],1]]|set=1);
V=os_md.isyes(X);os_md.isyes(P|set=1);
return V;}$[12] isPositiveInt(3/2);
0
The above [11] is same as the following function
def isPositiveInt(X){return os_md.isyes(X|set=[[os_md.isint,[],1],[os_md.calc,[[">",0]],1]]);}$90. isall(f ,m):: Returns 0 if m contains an element satisfying f (p) = 0 and 1 otherwise
If m is not a list, a vector nor a matrix, m is replaced by [m].
See an example of isyes().
[0] os_md.isall(os_md.isint,[0,2,3,1/2]);0[1] os_md.isall(os_md.isint,[0,2,3,4]);
1[3] os_md.isall(os_md.isint,[0,2,3,[1]]);0[4] os_md.isall(os_md.isint,mat([0,2,3,4]));921
91. ptype(p,ℓ):: Returns type() regarding ℓ as the variable or ℓ as the list of variables• ptype(p,vars(p)) corresponds to type(p).
• If p is a rational function and its denominator (resp. numerator) contains an elementaryfunction which is not a polynomial, then 128 (resp. 64) is added to the number returned.
[0] P=(x+y)^2/a;(x^2+2*y*x+y^2)/(a)[1] os_md.ptype(P,x);2[2] os_md.ptype(P,a);3[3] os_md.ptype(P,z);
1[4] os_md.ptype(P,[x,y]);2[5] os_md.ptype(P,[x,y,a]);3[6] os_md.ptype([1,2],[x,y]);4[7] os_md.ptype(sin(x)+sin(y)+@pi,x);
65[8] os_md.ptype(sin(x)+x,x);66[8] os_md.ptype(sin(x)/x,x);67[9] os_md.ptype(1/sin(x),x);129[10] os_md.ptype(sin(x)/(x+cos(x)),x);
195
92. getline(Id|Max=m,CR=[r1 ,r2 ,..],LF=[l1 ,l2 ,...]):: An extension of get line()
Gets a line form a text ﬁle (deleted the last line feed).
• m : maximal length in bytes for a line (1023 by default).
• r1 , r2 ,. . . : codes to be ignored ([13] by default),• l1 , l2 ,. . . : codes indicating the end of a line ([10] by default).
93. keyin(s):: Shows s and waits a line input from keyboard and returns it
Returns a line input deleting the last linefeed
mycat0() is used to show s and therefore numbers or a list is allowed.
[0] S=os_md.keyin("Input? ")$Input? This is a pen.
[1] S;
This is a pen.
93

94. showbyshell(s):: Executes s by shell and show the standard output in Risa/Asir[0] os_md.showbyshell("echo %temp%")$[1] os_md.showbyshell("dir c:\\")$
95. getbyshell(s):: Executes s by shell and puts the standard output to a ﬁle• If Idis returned, Id ≥ 0 means that the output is obtained and it can be read get_line(Id)by lines. If we use get_byte(Id), we get by bites.
• We get 0 by getline(Id) after tle last line. We need getbyshell(Id) or close_file(Id)before we call this function again.
• A temporary ﬁle is made in the directory indicated by the environment variable %temp% or%tmp% or the value DIROUT. A new ﬁle is created after erasing the former ﬁle.
96. fcat(f ,s|exe=1):: Outputs s in a ﬁle f• Outputs print(s) in the ﬁle f . If f exists, the output is appended in the ﬁle by default.
The command remove file(f ) means to delete the ﬁle f .
In the followings, the ﬁle is in the directory indicated by DIROUT.
• f = 0 : Appends print(s) in the ﬁle fcat.txt.
• f = 1 : Outputs print(s) to the ﬁle fcat.txt.
• f = 2, . . . , 9 : Outputs to the ﬁle fcatf .txt.
• f = −1 : Returns the default ﬁlename.
• exe=1 : Outputs print(s) and executes the related program (usually an editor).
97. makev([ℓ1 ,ℓ2 , . . . ]|num=1):: Makes a variable combining ℓ1 , ℓ2 . . .
• ℓi may be a variable, a string or a non-negative integer• The integers 10, 11, . . . are understood as a letter a, b, . . . if num=1 is not indicated.
[0] os_md.makev(["a_", 0, 1]);a_01[1] os_md.makev([a, 0, 1]);a01
[2] os_md.makev([a, 0, b]);a0b[3] os_md.makev([a, 10, b]);aab[4] os_md.makev([a,10,"_",3]|num=1);
a10_3[5] os_md.my_tex_form(@@);
a_{10,3}98. shortv(p,[v1 ,v2 , . . .]|top=w):: Changes the variables v1 , . . . with indices contained in p into valiables with one letter
When the name vi is a letter followed by numbers starting from 0 or 1, then vi are changed tovariables starting from w (a by default) up to z excluded the variables already used.
[0] P=[a1,a2,b,c0,c1]$[1] os_md.shortv(P,[a,c]);[a,c,b,d,e]94

[2] os_md.shortv(P,[c,a]);[d,e,b,a,c][3] os_md.shortv(P,[a,c]|top=x);[x,y,b,z,c1]
99. makenewv(ℓ|var=v,num=n):: Generates a new variable which is not used in ℓ
• Returns a variable from z_0, z_1, . . .,z_9, z_10, . . . which is not contained in ℓ.
• The variable z_ to be returned is changed by var= v. Here v is a variable or a string.
• The variables contained in functions in ℓ are checked.
• num=n : New n variables are returned.
[0] os_md.makenewv(0);z_0[1] os_md.makenewv([z_0+z_1,z_2]);
z_3[2] os_md.makenewv([z_0+z_1,z_2]|var=x);x0[3] os_md.makenewv([z_0,z_1]|num=3);[z_2,z_3,z_4][4] os_md.makenewv(z_2*sin(cos(z_0+z_1))+z_3);
z_4100. isvar(p):: Is p a variable?
Returns 1 or 0.
[0] os_md.isvar(dx);1[1] os_md.isvar(-dx);
0[2] os_md.isvar(1);0101. varargs(p|all=t):: Returns elementary functions and variables in p
• p can be matrix or list.
• Returns the list of elementary functions and their variables in p.
• The variables contained in elementary functions appeared in variables of functions in p are
considered.
• all=1 : Returns all elementary functions and variables• all=2 : Returns all variables.
[0] os_md.varargs(x*sin(y)+z+cos(s-t));[[sin,cos],[y,s,t]][1] os_md.varargs(x*sin(y)+z+cos(s-t)|all=1);[[sin,cos],[x,z,y,s,t]][2] os_md.varargs(x*sin(y)+z+cos(s-t)|all=2);[x,z,y,s,t]95

[3] os_md.varargs(sin(cos(x)*sin(y)+@pi+z));[[sin,cos],[x,y,z]]102. pfargs(p,x|level=t):: Returns all functions and variables containing variable x• p can be a matrix or a list.
• Returns the list of elementary functions and their variables in p.
• Elementary functions in an argument of elementary function are considered.
• level=t : t = 1 means that the argument of a function is ignored. t = 2 means only thevariables in the argument of a function. t means the depth of the function.
[0] os_md.pfargs(log(log(log(x))),x);[[log(log(log(x))),log,log(log(x))],[log(x),log,x],[log(log(x)),log,log(x)]][1] os_md.pfargs(sin(cos(x)*cos(y)+@pi+z),x);[[sin(z+cos(y)*cos(x)+@pi),sin,z+cos(y)*cos(x)+@pi],[cos(x),cos,x]][2] os_md.pfargs(log(log(log(x))),x|level=1);[[log(log(log(x))),log,log(log(x))]][3] os_md.pfargs(log(log(log(x))),x|level=2);[[log(log(x)),log,log(x)]][4] os_md.pfargs(log(log(log(x))),x|level=3);[[log(x),log,x]]103. isdif(p):: Returns a list of the pairs of variable and its derivatives
p is considered a diﬀerential operator if• p is a polynimial or a rational form
• p contains a variable whose ﬁrst character is ‘d’ and 2nd chracter is a small alphabetical letterand p is a polynomial with respect to the variable.
[0] os_md.isdif((x+dx+dx1+dy+dz)^2/z);[[x1,dx1],[x,dx],[y,dy],[z,dz]][1] os_md.isdif((x+dx+dx1+dy+dz)^2/dz);
0104. mysubst(r,[v1 ,r1 ]|inv=1) mysubst(r,[[v1 ,r1 ], . . . ]|inv=1)
mysubst(r,[ℓ1 ,ℓ2 ]|lpair=1,inv=1):: Same as subst(r,v1 ,r1 , . . . ). Useful if r is complicated and r is a rational form
• r may be a rational form, a list, a vector or a matrix containing rational forms. It may contains
a strings as an element, which is not changed.
• When rj are variables, inv=1 can be indicated which means the inverse substitution (by thetransposition of vj and rj ).
• inv=1 : inverse substitution• If the number of elements of ℓ1 is larger that 2, lpair=1 is indicated.
105. myswap(p,[x1 ,x2 ,. . .,xn ]):: Cyclic permutation (x1 , x2 , . . . , xn ) of a (list of) rational form(s)n = 2 means the transposition of two variables.
[0] os_md.myswap([x,y,z,w],[x,y,z]);[y,z,x,w][1] os_md.myswap([x,y,z,w],[x,z]);96

[z,y,x,w]
106. substnum(l,s,t|depth=d):: Substitution of elements of a list or a vector
107. mulsubst(r,[[p1,0 , p1,1 ],[p2,0 , p2,1 ], . . . ]|inv=1)
mulsubst(r,[ℓ0 ,ℓ1 ,...]|lpair=1,generate=k,short=1)
mulsubst(r,[ℓ0 ,ℓ1 ]|conj=f ) mulsubst(r,[ℓ0 ,ℓ1 ]|dform=1):: Simultaneous substitutions• Retruns the imultaneous substitution pj,0 7→ pj,1 (j = 1, 2, . . .).
• [[x,y],[y,x]] : transposition of x and y.
• lpair=1 : the variables in ℓ1 are simultaneously replaced by the elements of ℓ2 , respectively.
ℓ2 =[ℓ2,0 ,ℓ2,1 ] means that the variables in ℓ2,1 are replaced by elements in ℓ2,0 m respectively.
• generate=k ： Return the pair os the lists of elements obtained by the compositions of substitutions and the procedures of the corresponding compositions (all or up to |k elements).
|k| = 1 means that |k| = 160 is indiacted.
The compositions is obtained by applying ℓj to r r に ℓj . If k > 0, then the numbers j areindicated. If k < 0 and the element is obtained by applying ℓj to the m-th element, then[j,m] is indicated.
• conjugate=1 : Regarding [ℓ0 ,ℓ2 ] as a rational transformation and returns s ◦ r ◦ s−1 .
• conjugate=-1 : Regarding [ℓ0 ,ℓ2 ] as a rational transformation returns s−1 ◦ r ◦ s.
[0] os_md.mulsubst(x+y^2+z^3,[[x,y],[y,x]]);x^2+y+z^3[1] os_md.mysubst(x+y^2+z^3,[[x,y],[y,x]]);x^2+x+z^3[2] os_md.mysubst(["top",x,y],[x,2]);[top,2,y][3] subst(["top",x,y],[x,2]);
subst : invalid argument
return to toplevel[4] os_md.mulsubst([x,y,z],[x,w]);[w,y,z][5] os_md.mulsubst([x,y,z],[x,w]|inv=1);[x,y,z][6] os_md.mulsubst([x,y,z],[[x,y,z],[y,x,z],[x,z,y]]|generate=1);[[[x,y,z],[y,x,z],[x,z,y],[y,z,x],[z,x,y],[z,y,x]],[[],[1],[2],[1,2],[2,1],[1,2,1]]][7] os_md.mulsubst([x,y,z],[[x,y,z],[y,x,z],[x,z,y]]|generate=-1);[[[x,y,z],[y,x,z],[x,z,y],[y,z,x],[z,x,y],[z,y,x]],[[0],[1,0],[2,0],[1,2],[2,1],[1,4]]][8] os_md.mulsubst([x,z,y],[[x,y,z],[y,z,x]]|conj=1);[z,y,x][9] os_md.mulsubst([x,z,y],[[x,y,z],[y,z,x]]|conj=-1);[y,x,z]108. fmult(f ,m,ℓ,n| · · · ):: Returns mlength(l) by mi 7→ mi+1 = f (mi ,ℓ[i],n[0], n[1], . . . | · · · ) (m0 = m)
• ℓ and n are lists.
97

• Options are indicated to functions.
109. mtransbys(f ,m,ℓ| · · · ):: Extends a function f (x) of scalar x to a function of a list, vector or matrix• The elements mn u of m are transformed to f (mν , l[0], l[1], . . .|· · · ).
• The list/vector/matrix mae be nested.
• The arguments are indicated by the list ℓ.
• Option are put to the function.
• This function is similar to map(f ,m,l[0], . . . ) but map() cannot be nested and options are
not indicated.
[0] A=newmat(2,2,[[(x^2-y^2)/(x+y),x/y],[yx/x^2,(x^2-y^2)/(x-y)]]);[ (x^2-y^2)/(x+y) (x)/(y) ][ (y*x)/(x^2) (x^2-y^2)/(x-y) ][1] os_md.mtransbys(red,A,[]);[ x-y (x)/(y) ][ (y)/(x) x+y ][3] os_md.mtransbys(os_md.abs,[[1,-2],[3,-4]],[]);[[1,2],[3,4]][4] map(os_md.abs,[[1,-2],[3,-4]]);[[1,-2],[3,-4]]110. mmulbys(f ,m,n,ℓ| · · · ):: Extends a pair of arguments of f to a a pair of matrices• ℓ is a list of options. m is a argument of f or a matrices of the rarguments of f .
• If
m and n are matrices, the natrices
(∑
)
f
(m
,
n
,
ℓ[0],
ℓ[1],
.
.
.)
i,ν
ν,j
ν
i,j

is returned.
• If m or n is matrices, it is considered as a scalar matrix.
• If m (redp. n) is a vector, it is considered as a line (resp. column) vector.
If m and n are vectors, a scalar is returned.
• Options are valid,111. cmpsimple(p,q|comp=t):: Copmares the simplicities of p and q
If p is simpler than q, a negative integer is returned and if q is simpler than p, a posirive number
is returnd.
Compare• iand(t,1)!=0 : numbers of variables• iand(t, 2)!=0 : numbers of monomials• iand(t, 4)!=0 : length of their expression• compares p and p in Risa/Asirin this order. Here t = 7 by default.
[0] os_md.cmpsimple((x+y)^2,(x+1)^3|comp=1); /* # of variables */1[1] os_md.cmpsimple((x+y)^2,(x+1)^3|comp=2); /* # of monomials */-1[2] os_md.cmpsimple((x+y+z)^2,(sin(x)+cos(x))^2)|comp=4); /* length of expression */98

-4[3] os_md.cmpsimple(1,-1);-1[4] os_md.cmpsimple(4,2);
1/* length of expression *//* length of expression *//* compare in Risa/Asir */112. simplify(p,ℓ,t|var=[x1 , x2 , . . . ]):: Simpliﬁes p by using linear relations indicated by ℓ
• ℓ = [ℓ0 , ℓ1 ] : Applies subst(*, ℓ0 , ℓ1 ) to (each element of) p and uses this subsititution if thethe result is simpler (t = 1 ∼ 7).
• ℓ = [ℓ1 ] ; If ℓ1 is a polynomial and ℓ1 contains a variable with just degree 1, we applies theabove simpliﬁcation by this linear relation.
• If there many linear relations, ℓ is indicated the list of linear relations.
• Compares the simplicity of the substitution checking
iand(t,1)!=0 : number of variablesiand(t, 2)!=0 : number of monomials ，iand(t, 4)!=0 : length of expression
in this order and if the subsitution is simpler, returns the substitution• If the substitution is same as original in the above check, check the order in |Risa/Asir—.
• 複数の置き換えを試すときは，ℓ = [[ℓ00 , ℓ01 ], [ℓ10 , ℓ11 ], . . .] とする．
• var=[x1 , x2 , . . . ] : If p is a rational form of variables x1 , x2 , . . . , the numerator and denominator are simpliﬁed as polynomials.
[0] os_md.simplify([x+y+z+a+b,x+z+a+b],[a,-x-y-w/2-c],1);[z-1/2*w+b-c,x+z+a+b][1] os_md.simplify([x+y+z+a+b,x+z+a+b],[a,-x-y-w/2-c],4);[x+y+z+a+b,x+z+a+b][1] os_md.simplify(x+3*y+4*z,[x+y+z],1);
2*y+3*z[2] os_md.simplify(x+3*y+4*z,[x+y+z],4);-3*x-y113. getel(m,i):: Returns m[i] if m is a list/vector/matrix and i is non-negative integer
If i is a list [i1 , i2 ] and m is a matrix, then m[i1 ][i2 ] is returned
Returns m in the remaining cases.
114. evalred(r|opt=[[s1 ,t1 ],[s2 ,t2 ]...]):: Replaces sin(0), cos(0), exp(0) by 0, 1, 1 etc• Replace the following expression by exact valuessin(k@pi), cos(k@pi) etc. with the value in 0, ±1, ± 12 , tan(0), asin(0), atan(0), sinh(0),cosh(0), tanh(0), exp(0), log(1), pow(1,x), 1^x• Adds the rule which means sj are replaced by tj (j = 1, 2, . . .). We may indicate opt=[s,t] if
there is only one rule to be added.
[0] evalred(exp(sin(0)));1[1] eval(exp(sin(0)));1.0000000000000000000000000000[2] os_md.evalred(exp(sin(@pi)));99

1[3] eval(exp(sin(@pi)));1.0000000000000000000000000000

3.2.2 Numbers
3.2.3 Polynomials and rational functions
202. fctrtos(r|var=ℓ,rev=1,dic=1,TeX=f ,dviout=1,lim=n,small=1,pages=1,add=s):: Transforms a rational function r to factorized strings• TeX=1 : Returns a source in LATEX. If s is not a polynomial, the list of the numerator anddenominator is returned.
• TeX=2, 3 : Returns a source in LATEX. If s is not a polynomial, \frac{ }{ } is used but it is
too long for a line \Bigl( \Bigr)\bigm/\Bigl( \Bigr) is used with necessary new lines
as follows.
• var=x : Returns as polynomials of x (for numerator/denominator) with the factorized coeﬃcients. If TeX=2（resp. TeX=3）is indicated, \\（resp. \\ &）is used after the powers of x etc.
considering the width of a line.
• var=[x, s] : Transforms the variable x to a string s.
• var=[x,y,...] : Regards r as a polynomial of (x, y, . . .).
• var=[[x, s],[y, t],...] : As above and x, y, . . . are transformed by strings s, t, . . ., respectively.
• rev=1 : Monomials are arranged from smaller degree.
• dic=1 : Monomials are arranged from bigger degree in the lexicographic order.
• dic=2 : Same as above but the product of variables is arranged in the reverse order.
• var="dif0" : The variable starting d followed by a lower case alphabet is regarded as adiﬀerential of the variable omitted the top d. The option TeX is indicted, the diﬀerential isexpressed by ∂x1 using ∂.
• var="dif" : Same as above. But if there is only one variable to be diﬀerentiated, the diﬀerential is simply expressed by ∂. If there are many such variables and all the names of variables
to be diﬀerentiated are between x0 と x99, then the diﬀerentials are expressed as ∂0 , . . . , ∂99 .
d2∂3• var="dif1" : Same as above but diﬀerentials are expressed as dx
2 or ∂x2 ∂y .
• var="dif2" : Same as above but the partial diﬀerential is used even if there is only one
variable to be diﬀerentiated.
• lim=n : If r is a polynomial, the width of each line is arranged so that it does not exceed thewidth of n characters. The string \\ or \\ & are used in cases TeX=2 or TeX=1,3, respectively,
but & is not put at the top. If n is smaller than 30, it is considered to n =TeXLim. If n is 0,
the width of a line is not considered.
• small=1: Uses the text style in LATEX for fractions.
The change of width by this indication is ignored.
• dviout=1 : Displays r by dviout. TeX=3 is automatically indicated.
show() is useful for the display. The same option parameters are valid.
• pages=1 : r is too long to put it in a page, \begin{align*}... is used and multiple pages
are allowed. pages=2 : Same as above but \allowdisplaybreaks are used. The number oflines in a page is indicated by TeXPages.
• add=s : Puts string s after each term. s may be a variable or a equation.
[0] S = os_md.fctrtos(1/(x-y)^2-1/(x+y)^2);
4*y*x/((x-y)^2*(x+y)^2);[1] eval_str(S);100(4*y*x)/(x^4-2*y^2*x^2+y^4)[2] os_md.fctrtos(1/(x-y)^2-1/(x+y)^2|TeX=1);[4yx,(x-y)^2(x+y)^2][3] os_md.fctrtos(1/(x-y)^2-1/(x+y)^2|TeX=2);\frac{4yx}{(x-y)^2(x+y)^2}[4] os_md.fctrtos((x-a^4+1)^2|var=x);x^2-2*(a-1)*(a+1)*(a^2+1)*x+(a-1)^2*(a+1)^2*(a^2+1)^2[5] os_md.fctrtos((x-a^4+1)^2|var=x, TeX=1);
x^2-2(a-1)(a+1)(a^2+1)x+(a-1)^2(a+1)^2(a^2+1)^2[6] os_md.fctrtos((x+y+1/a)^2|var=[x,y],TeX=1);
x^2+2xy+y^2+\frac{2}{a}x+\frac{2}{a}y+\frac{1}{a^2}[7] os_md.fctrtos((x+y+a+b)^2|var=[x,y],TeX=1);
x^2+2xy+y^2+2(a+b)x+2(a+b)y+(a+b)^2[8] os_md.fctrtos((x+y+a+b)^2|var=[x,y],TeX=1,dic=1);x^2+2xy+2(a+b)x+y^2+2(a+b)y+(a+b)^2[9] os_md.fctrtos((x+y+a+b)^2|var=[x,y],TeX=1,rev=1);(a+b)^2+2(a+b)y+2(a+b)x+y^2+2xy+x^2[10] os_md.fctrtos((a+b+dx)^2|var="dif",TeX=1);\partial^2+2(a+b)\partial+(a+b)^2[11] os_md.fctrtos((a+b+dx1)^2|var="dif",TeX=1);\partial_{x_1}^2+2(a+b)\partial_{x_1}+(a+b)^2[12] os_md.fctrtos((a+b+dx)^2|var="dif1",TeX=1);\frac{d^2}{dx^2}+2(a+b)\frac{d}{dx}+(a+b)^2[13] os_md.fctrtos((a+b+dx)^2|var="dif2",TeX=1);\frac{\partial^2}{\partial x^2}+2(a+b)\frac{\partial}{\partial x}+(a+b)^2[14] os_md.fctrtos((a+dx+dy)^2|var="dif1",TeX=1);\partial_x^2+2\partial_x\partial_y+\partial_y^2+2a\partial_x+2a\partial_y+a^2[15] os_md.fctrtos((dx+dy)^2|var="dif1",TeX=1);\frac{\partial^2}{\partial x^2}+2\frac{\partial^2}{\partial x\partial y}+\frac{\partial^2}{\partial y^2}[16] os_md.fctrtos((x+2*y-z)^(20)+1|dviout=1)$[17] os_md.fctrtos((x+2*y-z)^(20)+1|var=z,dviout=1)$[18] os_md.fctrtos(os_md.seriesHG([a,b],[c],x,3)|var=x,rev=1,dviout=1)$[19] os_md.fctrtos((1/(alpha+beta)+dx+d)^4+1|var="dif1",dviout=1)$
The result of [18] is the display
1+b(b + 1)a(a + 1) 2 b(b + 1)(b + 2)a(a + 1)(a + 2) 3
ba
x+
x +
x
c
2c(c + 1)
6c(c + 1)(c + 2)

The result of [18] is the following including the break of each line.
4((α + β)d + 1) d36((α + β)d + 1)2 d24((α + β)d + 1)3 d
d4
+
+
+
dx4
α+β
dx3
(α + β)2dx2(α + β)3
dx
(
4
3
2 2
3
4 4
3
2
2
3 3
+ (α + 4βα + 6β α + 4β α + β )d + (4α + 12βα + 12β α + 4β )d + (6α2 + 12βα + 6β 2 )d2 + (4α)/()+ 4β)d + α4 + 4βα3 + 6β 2 α2 + 4β 3 α + β 4 + 1(α + β)4101

If var= is indicated and r is considered as a diﬀerential operator by[20] os_md.fctrtos((1/(a+b)+dx1+dx2)^2|var="dif0",dviout=1)$[21] os_md.fctrtos((1/(a+b)+dx1+dx2)^2|var="dif",dviout=1,small=1)$[22] os_md.fctrtos((1/(b-a)+dx1+dx2)^2|var="dif2",dviout=1)$[23] os_md.fctrtos((1/(a+b)+dx+d)^2|var="dif",dviout=1)$[24] os_md.fctrtos((1/(a+b)+dx+d)^2|var="dif0",dviout=1)$[25] os_md.fctrtos((1/(a+b)+dx+d)^2|var="dif1",dviout=1)$[26] os_md.fctrtos((1/(a+b)+dx+d)^2|var="dif2",dviout=1,add="u")$[27] os_md.fctrtos((1/(a+b)+dx+d)^2|var="dif1",dviout=1,small=1)$
The results are as follows, respectively.
∂x21 + 2∂x1 ∂x2 + ∂x22 +2
2
1∂ x1 +∂ x2 +
a+b
a+b(a + b)22
2
1∂12 + 2∂1 ∂2 + ∂22 + a+b∂1 + a+b∂2 + (a+b)
2

∂2
2
∂
∂
∂2
∂2
2
1
+2
−
+
−
+
2
∂x1
∂x1 ∂x2∂x22
a − b ∂x1
a − b ∂x2
(a − b)22(da + db + 1)
(da + db + 1)2
∂2 +
∂+
a+b
(a + b)22(da + db + 1)
(da + db + 1)2
∂x2 +
∂x +
a+b
(a + b)22
d2(da + db + 1) d(da + db + 1)2
+
+
dx2
a+b
dx
(a + b)22∂ u 2(da + db + 1) ∂u (da + db + 1)2
+
+
u
∂x2
a+b
∂x
(a + b)22(da+db+1) d(da+db+1)
d2
dx2 +
a+b
dx +
(a+b)2

2

(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)

[28] os_md.fctrtos((a+b+x+y)^2|var=[x,y],TeX=2);
x^2+2xy+y^2+2(a+b)x+2(a+b)y+(a+b)^2/* order by degree of (x,y) */[29] os_md.fctrtos((a+b+x+y)^2|var=[x,y],dic=1,TeX=2);
x^2+2xy+2(a+b)x+y^2+2(a+b)y+(a+b)^2 /* order by degree of x */[30] os_md.fctrtos((a+b+x+y)^2|var=[x,y],dic=2,TeX=2);
x^2+2yx+2(a+b)x+y^2+2(a+b)y+(a+b)^2 /* inverse order by degree of x */[31] os_md.fctrtos((a+b+x+y)^2|var=[x],TeX=2);
x^2+2(y+a+b)x+(y+a+b)^2

3.2.4 Functions with real/complex variables
3.2.5 Lists and vectors
3.2.6 Matrices
3.2.7 Strings
3.2.8 Permutations
3.2.9 TEX
386. show(p|opt=ℓ,raw=1):: Displays p by using TEX in a plausible format
Display properly a diﬀerential operator, a list of eigenvalues with multiplicities, GRS etc. If thedisplay is not good, we may put a option or use other functions with precise options.
102• opt="verb" : Displays p by dviout as in the case Risa/Asir.
• raw=1 : Returns the source in TEX.
The following are other cases.
• p is a polynomial or a rational function:– Displays of the resolution p into factors by using fctrtos(p).
– If the option opt is not indicated and p is considered to be a diﬀerential operator by
isdif(p), then p is displayed with the option var="dif".
– opt="pfrac": Displays decomposition of p into partial fractions.
– In the other case p is displayed by fctrtos() with all the options.
– If p is very long, it is displayed by dividing lines (except the case when p is a monomial
or a number).
• If p is a matrix, p is displayed by mtotex(p|lim=1,small=2).
– If the size of the matrix is very large, it is displayed by dividing into lines.
– opt=ℓ : Uses mtotex() with the option var=ℓ.
• If p is list and all the elements of p are polynomials and p is long, it may be displayed by
eqs2tex(). In this case the option var=V is valid, where V is a variable or the second
parameter of eq2tex().
In the other case, if opt is indicated by a string or a list, then p is displayed by ltotex(p)with all option parameters.
Otherwise:– If p is a list corresponding to GRS or eigenvalues with multiplicities or list of strings, thenp may be properly displayed. Here a list of eigenvalues with multiplicities means a list of
the pairs of a non-negative integer and an equation or an integer. A list corresponding to
GRS is a list of lists of eigenvalues with multiplicities.
– Suppose p is a list and the element of p is a list and moreover the element is a list of
strings or equations (rational functions, vectors, matrices). If the list contains a string
and an equation, p is displayed by using ltotex(p|opt=["cr","spts"]). Here there isa string containing \, we put the options opt=["cr","spts0"] and str=1.
• p is a string:– opt="raw" : p is displayed as a string of TEX.
– opt="eq" : p is considered as an equation and displayed with \begin{equation} p\end{equation}.
– If the above options are not indicated and \begin{ is not contained and \draw or \ar@is contained in the ﬁrst 128 characters, p is displayed by using xyproc() considering thesetting of TiKZ.
– In the other case, if p contains any of \begin{equation， \begin{align and \[ and pdoes not contain any of & ^ and _, then p is directly displayed. Otherwise p is displayedby display style.
• In the other case, p is displayed by dviout(p).
[0] os_md.show(2*2^x|raw=1);
2\cdot{2}^x[1] os_md.show(1.2*2^x|raw=1);
1.2\cdot{2}^x[2] os_md.show((x+@i)^2|raw=1);
x^2+(2\sqrt{-1})x-1[3] os_md.show(2*(x+1)^2/y|raw=1);\frac{2(x+1)^2}{y}103387. dviout(p|clear=1,keep=1,delete=t,fctr=1,mult=1,subst=[s0, s1],eq=k,title=s):: Displays p• dviout(@@) means to display the last result.
• The command dviout should be executable in Windows. If it is not so, risatex.bat shouldbe edited and another program (under other operating system such as Unix or Mac) can beused.
• Outputs a LATEX source ﬁle to DIROUT/out.tex and DIROUT/risaout.tex read it.
• If p is a string, it is regarded as a LATEX source by default but the following option indicates
it a source of equations in LATEX and use
eq=0 : default display styleeq=1 : \[ and \]eq=2 : \begin{align} and \end{align}
eq=3 : \begin{gather} and \end{gather}eq=4 : \begin{multline} and \end{multline}
eq=5 : \begin{align}\begin{split} & and \end{split}\end{align}
eq=6 : \begin{align*} & and \end{align*}
eq=7 : \begin{gather*} and \end{gather*}eq=8 : \begin{equation} and \end{equation}
eq=s with a string s : \begin{s} and \end{s}to display it in a display style.
• Substitute substrings s0 by s1 (multiple substitutions are possible. cf. str subst()).
• p=" " (a space) : displays again• clear=1 : displays equations with erasing the last display• keep=1 : rewrites the LATEX source ﬁle without a display• delete=t : erases the last t equations with labels of numbers (0 ≤ t ≤ 10).
• mult=1 : displays p in diﬀerent lines for the elements when p is a list
• fcrt=1 : displays p after factorizing it when p is a polynomial or a rational function.
• tilte=s : displays p with s when p is a string.
If source special is valid in dviout, a double click at the preview screen given by dviout
starts up an editor and moves to the indicated point of the LATEX source ﬁle.
If the source ﬁle is changed, it will be valid in the next display ( for example, dviout(" ")）.
• If risatex.bat or risaout.tex does not exists, they are made by os_muldif.rr if the corresponding directory is writable. They can be edited according to the environment.
risatex.bat should be executable (whose location is get_rootdir()/bin by default) andthe ﬁle risaout.tex should be in the directory deﬁned by DIROUT (cf. DVIOUTA).
388. dviout0(ℓ) or dviout0([ℓ1 , ℓ2 , . . . ]) or dviout0(ℓ|opt=s):: Fundamental operations to display equations using TEX• ℓ = 0：Erase display (dviout(" "|keep=1,clear=1)).
• ℓ = 1：Display (dviout(" ")).
• ℓ = 2：Erase and Display (dviout(" "|clear=1)).
• ℓ = 3：Shows values of DIROUT, DVIOUTH, DVIOUTA, DVIOUTB, DVIOUTL, Canvas, TeXLim, TeXEq,
AMSTeX, TikZ, XYPrec, XYcm.
• ℓ = 4：Swaps DVIOUTA and DVIOUTB and shows DVIOUTA.
See DVIOUTL for an example of the result.
• ℓ = 5：Converts DVIOUTA and DVIOUTB form the default setting.
• ℓ = 6： Sets TikZ 1 (to use TikZ).
• ℓ = 7： Sets TikZ 1 (to use XY-pic).
• ℓ > 10： Allows the size of matrix AMSTEX up to ℓ.

104• When ℓ is a negative integer, it means dviout(" "|keep=1,delete= − ℓ), namely, the last ℓequations are erased.
• If ℓ is a string, \ followed by the string is put in the TEX ﬁle and begins a newline
For example, dviout0("newpage") means to start a new line.
The following string has an diﬀerent meaning.
– "" : A space and a line feeds– "cls" : Erase– "show" : Display– "?" : Shows the setting• Several commands can be written as a list.
• If opt=s is indicated, s is replaced by ℓ (s is a string).
In this case, if ℓ = −1, the current value is returned,s can be TikZ, TeXEq, TeXLim, XYPrec, XYcm，XYLim，DVIOUT, Canvas or TeXPages.
In the case when s is DVIOUT, the setting of DVIOUTA and DVIOUTB are set to the initial values
if s = 1 and its converse if ℓ = 1.
363. ltotex(l|opt=s,pre="string",cr="cr",small=1,lim=ℓ,var=v):: Transforms a list to plausible TEX source which represents GRS or a table or a list etc.
• show() can be used to display the result (the same parameters are valid).
• s = "spt" : Transforms the list (given by meigen( |mult=1)) as a spectral type..
• s = "GRS" : Transforms the list (given by sp2grs()) as a GRS. In this case pre is valid.
• s = "coord" : Transforms the list to√( , , . . .) as a coordinate.
– cpx=1 : Complex number a + b√−1 is transformed to a + bi√(by default).
– cpx=2 : Complex number a + b −1 is transformed to a + b −1.
• s = ["Pfaff",u,x,x-y, . . . ] : A list of matrices is transformed to a Pfaﬀ form such as()
dxd(x − y)du = A0+ A1+ · · · u.
xx−y
• s = ["Fuchs",u,x,x,x-y,x-1, . . . ] : A list of matrices is transformed to a Fuchsian form
such as
(
)
du
A0
A1
A2
=
+
+
+ · · · u.
dxxx−y x−1• s = "dform" : A list in the format given by dform() is considered as a diﬀerential form.
If ℓ =[[(a*x-b*y)/(x),x,z],[(-a*x+b*y)/(y),y,z]], we have(ax − by−ax + by) dx ∧ dz + () dy ∧ dz.
xyHere the coeﬃcients are (matrices of) rational functions.
• s = "vect" : Transforms the list as a column vector,• s = "cr" : Element are put in diﬀerent lines.
As in the following, cr= and var= are possible.
• s = "spts" : Puts a space between the elements of the list and arranges elements as many as
possible in each line.
• s = "spts0" : Same as above but does not put a apace.
– lim=ℓ : The line width is considered to be ℓ as a number of characters. If ℓ = 0, the limit
is ignored.
– str=1 : Strings are considered usual strings in TEX– cr= : The code of a new line is indicated. It is cr="\\\\\n & " by default.
If it is an integer k with 0 ≤ k < 32, then the code of a new line is texcr(k).
Then k = 7 = 2 + 1 + 4 by default and if k = 0, it is a space and if k = 15, it is\\allowdisplaybreaks\\\\\n& .
105

– var= : Deﬁnes a variable for matrices (cf. mtotex()), polynomials and rational functions(cf. ltotex()).
• s =["cr","spts"] or s =["cr","spts0"] : Puts a new line between elements (cr= andvar= can be indicated). If the element of the list is a list, the element follows the indications ="spts" or s ="spts0" and moreover str=1 can be indicated.
If the elements of ℓ is lists and we put cr=[s1 ,s2 ], the elements of ℓ will be separated by thecode s1 and the elements of the lists will be separated by the code s2 . s1 and s2 can be strings
or integers as above.
• s = "text" : It is same as in the case s = "spts" but l is returns as in a text style. In thiscase str=1 and cr= can be indicated.
• s = "tab" and ℓ is a list of lists : Returns a table \begin{tabular}...\end{tabular} in atext style.
Replacing a long list ℓ by [ℓ] and using the option widh=w, we can use this function to get atable (cf. spbasic()).
– title=s : The string s is a title of the table.
– left=[s1 ,s2 ,. . .] : Inserts the ﬁst column of the table.
If sj =[sj,1 ,sj,2 ,. . .] for a suitable j, it will be repeated up to the last line, which is samein the following.
– right=[s1 ,s2 ,. . .] : Inserts as the last column.
– top=[s1 ,s2 ,. . .] : Inserts as the ﬁrst line. If right= is indicated, the indication right=
is processed before top=.
– last=[s1 ,s2 ,. . .] : Inserts as the last line.
– null=n : The element equals n is transformed into a space (n = "" by default).
– hline=[h1 , h2 , . . .] : Inserts horizontal lines after hi -th line. Here the top of the tablewithout a title is indicated by 0 and the ﬁrst line of the table is indicate by 1 and amultiple indication of the same number means a horizontal multiplet.
∗ z : means (after) the last line. The indication z-1 is possible.
∗ vj =[kj ,nj ] with a positive integer nj and a non-negative integer nj : Indicates k-thlines of the table with k = νnj + kj for ν = 0, 1, 2, . . ..
– vline=[v1 , v2 , . . .] : Indicates horizontal lines after vj -th lines of the table.
The ﬁrst column is indicated by 1 and a multiple indication by a same number means ahorizontal multiplet.
∗ z means the last column of the table. The indication z-1 is possible.
∗ vj =[kj ,nj ] with a positive integer nj and a non-negative integer nj : Indicates k-th
columns with k = νnj + kj for ν = 0, 1, 2, . . ..
– align=s : s is the string to deﬁne the arrangement and vertical lines indicated as {s}after \begin{tabular}. If this is indicated, vline= is ignored.
But if s is a character, it is considered as a character deﬁning the arrangement and theindication vline= is valid.
s="r" : right, s="c" : center, d="l" : left.
– vert=1 : Transposes the table.
– width=w : If w is a positive integer, the number of the columns of the table is limited byw and the table is changed int a piled table.
If w is a negative integer, the number of the columns of the table is multiplied by |w| andthe table is changed into a table with a smaller number of lines.
∗ If vert=1 is indicated, the above transformation is processed after the transposition.
See examples powprimroot().
To arrange the table it is convenient to so as follows. We transform the corresponding list to amatrix by lv2m( |null="") and arrange the matrix by madjust()，mtranspose()，mperm(),106

newbmat() etc. and then transforms the matrix to a list by m2ll().
• s = "graph" and ℓ is a list of numbers : Returns a bar graph by using XY-pic or TikZ. To put
strings or numbers below the bar graph, we insert a list of the strings or the numbers after
the last list of numbers.
If the number of the element of the list is smaller than the number of elements of the data ina line by 1, the strings or numbers are put between the bars.
– size=ℓ : Indicates the size of the graph.
ℓ is a list of numbers formed by the width of the graph, the hight of the graph, the ratio of
the gap between bars and the width of a bar, which is ignored in the case of a line graph,
the height between the graph and the strings, which is the same value as the former if it
is not indicated.
They are omitted except the ﬁrst and the second numbers.
The second element of ℓ is a negative number −c, the height of the bar is indicated tobe the number of the table × c.
TikZ=0，1 : ℓ = [80, 30, 1/2, 2]，[8, 3, 1/2, 0.2] respectively, by default.
If horiz=1 is indicated, the 4-th values 4 and 0.2 are changed to 2 and 0.2, respectively,by default.
– max=m : m is a maximal value (which is automatically determined by default. This value
is the height of the graph).
– shift=n : The bottom reference line is shifted by n (0 by default).
– horiz=1 : A bar graph with horizontal bars.
– line=1 : A line graph.
line=2 : Same as above with indicated the points by •.
– line=[n,t]：n is 2 or 1 according to the use of points in a line graph.
t indicates the style of lines which corresponds to the indication in XY-pic/TikZ. For
example, s="@{.}"/dotted is a dotted line (cf. xyarrow()).
– line=[-1,r] : A pie chart with a circle of radius r mm.
– value=0 : Does not show values.
value=1 : Shows the corresponding value even if the bar is shrunk to the bottom referenceline.
– strip=1 : The strings \begin{xy} · · · \end{xy} or \begin{tikzpicture} · · ·\end{tikzpicture} are omitted.
strip=2 : The bottom reference line is omitted.
strip=3 : Only the values are shown (the part omitted by value=0).
– color=s : Colors and ﬁlls the graph if TikZis used (same as in the case of xybox()). In
the case of a pie graph s is a list of the indications to the data.
– mult=1 : Draw several bar graphs or line graphs in one graph.
In this caseℓ =[[ℓ1 ,ℓ2 , . . .],m] and color or line should be indicated by the corresponding
list.
relative=1 : The values of ℓ1 , ℓ2 are transformed to the values added successively.
If this is not indicated in the case of a bar graph, the element of ℓj+1 should be larger
than or equals to the corresponding element of ℓj .
• If R is returned and s ="text", "tab" or "graph", R is displayed by dviout(R) and by
dviout(R|eq=5) otherwise.
• small=1 : Uses \begin{smallmatrix}.
[0] os_md.ltotex([a+b, c/d,[2,3]]);\left\{
a+b,\, \frac{c}d,\, [2,3]107\right\}[1] os_md.dviout(@@|eq=5)$c[a + b, , [2, 3]]d[2] L=[[12,a+b],[3,c],[1,d]];[[12,a+b],[3,c],[1,d]][3] os_md.ltotex(L|opt="spt");\left\{[a+b]_{12},\, [c]_3,\, d\right\}[4] os_md.dviout(@@|eq=5)${[a + b]12 , [c]3 , d}
[5] LL=[L,[[3,3*b],[2,f]]];[[[12,a+b],[3,c],[1,d]],[[3,3*b],[2,f]]][6] os_md.ltotex(LL|opt="GRS",pre=" 0 & 1\\\\\n");\begin{Bmatrix}
0 & 1\\[a+b]_{12} & [3b]_3\\[c]_3 & [f]_2\\d &\end{Bmatrix}[7] os_md.dviout(@@|eq=5)$


0
1 



[a + b]12 [3b]3[f ]2  [c]3d[8] A=newmat(2,2,[[a,b],[c,d]]);[ a b ]
[ c d ]
[9] B=newmat(2,2,[[p,q],[r,s]]);[ p q ]
[ r s ]
[10] os_md.ltotex([A,B]|opt=["Pfaff",u,x-1,y]);du= \Biggl(\begin{pmatrix}
a&b \\
c&d\end{pmatrix}\frac{d(x-1)}{x-1}\\&+ \begin{pmatrix}
p&q \\
r&s

108

\end{pmatrix}\frac{dy}{y}\Biggr)u[11] os_md.dviout(@@|eq=5,subst=["\\\\&","%"])$
((
)
(
) )
a b d(x − 1)
p q dy
du =
+
u
c d
r s y
x−1
[12] os_md.ltotex([A,B]|opt=["Fuchs",u,x,x,x-1]);\frac{du}{dx}= \Biggl(\frac{\begin{pmatrix}
a&b \\
c&d\end{pmatrix}}{x}+ \frac{\begin{pmatrix}
p&q \\
r&s\end{pmatrix}}{x-1}\Biggr)u[13] os_md.dviout(os_md.smallmattex(@@)|eq=5);
(( )
)
a b
du
( pr qs )
c d
=
+
u
dx
x
x−1
[14] P=[[2*a,x,y],[(a+b)^2,y,z],[-2,x,z/y]]$[15] os_md.ltotex(P|opt="dform");2a\,dx\wedge dy+(a^2+2ba+b^2 )\,dy\wedge dz-2\,dx\wedge d(\frac{z}y)[16] os_md.dviout(@@|eq=5,subst=["\\frac","\\tfrac"]);2a dx ∧ dy + (a2 + 2ba + b2 ) dy ∧ dz − 2 dx ∧ d( yz )[17] os_md.ltotex(["There are",(n+1)^2,"points."]);[\texttt{There are},n^2+2n+1,\texttt{points.}][18] os_md.dviout(@@|eq=5)$[There are, n2 + 2n + 1, points.][19] os_md.ltotex(["There are",(n+1)^2,"points."]|opt="text");$\texttt{There are}$$n^2+2n+1$$\texttt{points.}$[20] os_md.dviout(@@)$
There are n2 + 2n + 1 points.
[21] os_md.ltotex(["There are",(n+1)^2,"points."]|opt="text",str=1);
There are $n^2+2n+1$
points.
[22] os_md.dviout(@@)$
There are n2 + 2n + 1 points.
109

[23] L=[10,12,34,53,23,12,24,68,55,57,32,20]$[24] M=[1,2,3,4,5,6,7,8,9,10,11,12]$[25] os_md.dviout(os_md.ltotex([M,L]|opt="tab",title="Year 2014"));
We display the above TEX source.
1
10

2
12

3
34

4
53

5
23

Year 20146
7
8
12 24 68

9
55

10
57

11
32

12
20

[26] os_md.dviout(os_md.ltotex([L,M]|opt="graph"));
68
55 57

53
34

32
24

23
10 12

20

12

1 2 3 4 5 6 7 8 9 10 11 12[27] L=[10,12,-10,34,53,23,-12,24,48,52,38,32,20]$[28] os_md.ltotex(L|opt="graph");
53

52

48

38

34

32
24

23

20

10 12

−10

−12

[29] L=[12,15,10,8,12,14,19,15,17,13,10,15]$[30] M=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]$[31] os_md.ltotex([L,LL]|opt="graph",line=[2,"@{.}"],shift=5,size=[100,40]);
19
•
17
•
15
•

15
•

14
•

12
•

15
•
13
•

12
•
10
•

10
•
8
•

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec[32] L=cons("number",L)$[33] M=cons("Month",M)$[34] os_md.ltotex([M,L]|opt="tab",hline=[0,1,2],vline=[0,1,1,13],110

title="Year 2014");Monthnumber

Jan
12

Feb
15

Mar
10

Apr
8

Year 2014
May Jun
12
14

Jul
19

Aug
15

Sep
17

Oct
13

Nov
10

Dec
15

[35] L=[35,42,19,38]$[36] LL=["spring","summer","autumn","winter"]$[37] os_md.ltotex([L,LL]|opt="graph",line=[-1,15]);

winterautumnspringsummer[38] L=[5,12,25,13,22,17,3,2]$[39] M=[0.5,1,1.5,2,2.5,3,3.5]$[40] os_md.dviout0(1|opt="TikZ")$[41] os_md.ltotex([L,M]|opt="graph",color="fill=blue!50",size=[4.5,-0.1,1]);/* width 4.5cm, height x 0.1，ratio (width) 1 */\begin{tikzpicture}\draw(0,0)--(4.5,0);\draw[fill=blue!50](0,0)rectangle(0.563,0.5);\node at(0.281,0.7){$5$};\node at(0.563,-0.2){$ 0.5$};\draw[fill=blue!50](0.563,0)rectangle(1.125,1.2);...
[42] L2=[10,18,35,20,27,22,8,6]$[43] os_md.ltotex([[L,L2],M]|opt="graph",color=["fill=blue!40","fill=blue!20"],
size=[4.5,-0.1,1],mult=1);[44] L3=lsub([L2,L]);[5,6,10,7,5,5,5,4][45] os_md.ltotex([[L,L3],M]|opt="graph",color=["fill=blue!40","fill=blue!20"],
size=[4.5,-0.1,1],mult=1,relative=1);[46] N=cons(0,M);[0,0.5,1,1.5,2,2.5,3,3.5];[47] os_md.ltotex([L,N]|opt="graph",color="fill=blue!40",
size=[4.5,-0.1,1],horiz=1);[48] os_md.ltotex([[L,L3],N]|opt="graph",color=["fill=blue!40","fill=blue!20"],size=[4.5,-0.1,1,0.5,0.25],mult=1,horiz=1,relative=1);[49] os_md.ltotex([L,N]|opt="graph",line=[2,"red"],size=[4.5,-0.1,1]);[50] L3=[8,17,21,24,15,12,9,6]$[51] os_md.ltotex([[L,L3],N]|opt="graph",line=[[1,"red"],[1,"blue"]],mult=1,
size=[4.5,-0.1,1],value=0);[52] L=[35,42,19,38]$LL=["spring","summer","autumn","winter"]$111

[53] os_md.ltotex([L,LL]|opt="graph",line=[-1,15],color=["fill=yellow!30","fill=green!30","fill=red!30","fill=blue!30"]);
35
10
25

22
17
13

12
5

3

10
5

2

0.5 1 1.5 2 2.5 3 3.5

27
25
22 22
20
18
17
13
12

3.5 2 4

3

3

3

2
13

1
0.5
0

12

22 5

1.5

13

7

1

25

0.5

5

0

12
5
5
4
5
3 2
0.5 1 1.5 2 2.5 3 3.5

17 5

2

25

5
22 5
7
17
13

3 5

2.5
22

1.5

6
2

0.5 1 1.5 2 2.5 3 3.5

2
17

6
8
3

3.5
2.5

25

10

12 6
5 5

0 0.5 1 1.5 2 2.5 3 3.5

WinterAutumn3.2.10 Lines and curves
3.2.11 Drawing curves and graphs
3.2.12 Applications
3.2.12.1 Make tables
3.2.12.2

Make tables and matrices

3.2.12.3

Mathematical tables

3.2.12.4

Table of score distribution

3.2.12.5

Tayler’s expansion

3.2.12.6

Slide Scale

3.2.13 Environments
466. Canvas:: Default size of the canvas of Risa/Asir112

SpringSummer467. AMSTeX:: TEX means AMSLATEX if this value equals 1
In os_muldif.rr AMSTeX=1 by default. If otherwise, the TEX source created some functions may
not be correct.
[0] M=newmat(2,2,[[a,b],[c,d]]);[ a b ]
[ c d ]
[1] AMSTeX=0$[2] print_tex_form(M);\pmatrix{{a}& {b} \cr{c}& {d} \cr}[3] AMSTeX=1$[4] print_tex_form(M);\begin{pmatrix}{a}& {b} \\{c}& {d}\end{pmatrix}[5] os_md.my_tex_form(M);\begin{pmatrix}
a&b \\
c&d\end{pmatrix}[6] print_tex_form(x_1+x_2^2/y);\frac{{x}_{1} {y}+ {x}_{2}^{ 2} }{ {y}}[7] os_md.my_tex_form(x_1+x_2^2/y);\frac{x_1y+x_2^2}y468. TeXEq:: Default display style of LATEX (dviout0(3) shows it)
The value TeXEq is one of 1, 2, 3, 4, 5, 6, 7 and it corresponds to the value of the option parametereq= of dviout().
When AMSTeX=1, the default is 5 and when AMSTeX=0 it is TeXEq=1.
It can be changed by dviout0(n|opt="TexEq").
469. TeXLim:: Maximal width referred to divide a long equations into lines by LATEX• The number means an estimated length measured by the number of characters.
• It can be deﬁned in .muldif and dviout0("?") shows the value.
• texlim(1,n) or dviout0(n|opt="TexLim") can change the value (the default value is 80).
470. TeXPages: Threshold value of the numbers of lines for a page in a display style of TEX (cf. fctrtos())• dviout0(n|opt="TexPages") can change the value (80 by default).
471. TikZ

113

:: Flag using XY-pic or TikZ in TEX
TikZ=1 : TikZand ，TikZ=0 : XY-pic
The ﬂag is changed by dviout0(6), dviout0(7) or dviout0(1|opt="TikZ"), dviout0(0|opt="TikZ").
472. XYPrec:: Number of ﬁgures after the decimal point in the expression of coordinates for graphic display
It can be changed by dviout0(n|opt="XYPrec").
473. XYcm:: Unit is cm even in XY-pic
It can be changed by dviout0(0|opt="XYcm") or dviout0(1|opt="XYcm").
474. XYLim:: Maximal number of coordinates for a line in a source of XY-pic or TikZ
It can be changed by dviout0(n|opt="XYLim").
475. DVIOUTH:: A program to show explanations of functions indicated by myhelp()• This can be deﬁne in .muldif and dviout0("?") shows the deﬁnition.
• The default setting when the command dviout works in Windows is
start dviout -2 -hyper:0x90 "%ASIRROOT%\help\os_muldif.dvi" #%LABEL%– This means that 2-nd dviout shows the place labeled by %LABEL% (which myhelp(s)replaces it by s) of get_rootdir()\help\os_muldif.dvi.
– If dviout is installed in Windows and the command dviout does not work, the fullpathname can be indicated.
– The indication -hyper:0x90 means to show the hot spot in blue (which is similar in
ox_muldif.pdf). If it is not indicated, the underline is also shown,
In dviout this setting can be changed by Option → Setup parameters... → HyperTeX →Color and the button OK. If the value -hyper: is set by the value deﬁned by hyper= in
Option → Non-default Parameters, the hot spot is shown by the setting.
The explanation of fn exists in the place with the label r:fn. If it contains the underscore " ",it is omitted in the label.
• myhelp() shows the explanation of an indicated function %ASIRROOT% is replaced by
get rootdir() and %LABEL% is replaced by the corresponding label as above and thenmyhelp() shows the explanation of the indicated function
476. DIROUT:: Directory where the source ﬁle of LATEX is put (it should be writable)
477. DVIOUTA:: Pathname of a program which compiles a source risaout.tex of LATEX under AMSTEX anddisplays it
478. DVIOUTB:: Pathname of a program which compiles a source risaout10.tex (or risaout10.tex) of LATEX
under AMSTEX and displays it. We can choose this setting or DVIOUTA in Risa/Asir479. DVIOUTL
Pathname of a program which compiles a source risaout0.tex of LATEX and displays it
We can set it in .muldif, and the values are obtained by the command dviout0("?").
The default under Windows is[0] os_md.dviout0(3)$DIROUT ="%HOME%\tex"
DVIOUTH="start dviout -2 -hyper:0x90 "%ASIRROOT%\help\os_muldif.dvi" #%LABEL%"DVIOUTA="%ASIRROOT%\bin\risatex.bat"
DVIOUTB="%ASIRROOT%\bin\risatex1%TikZ%.bat"
114

DVIOUTL="%ASIRROOT%\bin\risatex0.bat"
Canvas = [400,400]
TeXPages = 20
TeXLim = 80
TeXEq = 5
AMSTeX = 1
TikZ= 0
XYPrec = 3
XYcm= 0
XYLim = 4
The default setting under other platforms is[0] os_md.dviout0(3)$DIROUT ="%HOME%/asir/tex"
DVIOUTH="%ASIRROOT%/help/os_muldif.pdf"
DVIOUTA="%ASIRROOT%/bin/risaout.sh"
DVIOUTB="%ASIRROOT%/bin/risaout1%TikZ%.sh"
DVIOUTL="%ASIRROOT%/bin/risaout0.sh"
DVIOUTL="%ASIRROOT%/bin\risatex0.bat"
TeXPages = 20
Canvas = [400,400]
TeXLim = 80
TeXEq = 5
AMSTeX = 1
TikZ= 0
XYPrec = 3
XYcm= 0
XYLim = 4
Here %TikZ%is the value of TikZ, %ASIRROOT% is the install directory obtained by get rootdir(),%HOME% means the value of environment variable HOME but the latter equals %ASIRROOT% buy default
in Windows.
In .muldif, %ASIRROOT% and %HOME% are not allowed to contain spaces and they should be indicatedby using " as
DIROUT ="\"%HOME%\asir\tex\""DVIOUTA="\"%ASIRROOT%\\bin\risaout.bat\""
DVIOUTB="\"%ASIRROOT%\bin\risaout1%TikZ%.bat\""
DVIOUTL="\"%ASIRROOT%\bin\risaout0.bat\""
if necessary.
480. .muldif:: os_muldif.rr reads this ﬁle when it starts up• If .muldif is in %HOME%, it is read when os_muldif.rr is loaded. It is also searched in%HOME%/asir，%ASIRROOT%，%ASIRROOT%/bin, %ASIRROOT%/lib-asir-contrib in this order.
Here %ASIRROOT% is equal to get_rootdir(). Moreover %HOME% coincides with the environment variable HOME and it is also coincides with %ASIRROOT% under Windows.

115• The values TeXLim, TeXPages, TeXEq, DIROUT, DVIOUTA, DVIOUTB, DVIOUTL, DVIOUTH, TikZ,
XYPrec, XYcm, XYLim, Canvas can be changed from the default values.
• The current setting can be obtained by dviout0(3).
An example of .muldif is
DVIOUTH="start c:\\dviout\\dviout -2 \"%ASIRROOT%\\help\\os_muldif.dvi\" #%LABEL%"
end$
Following the format of C, the letter \ and " in a word should be written by \\ and \"etc. (It may be unnecessary in many cases). Beginning of a sequence of strings and its end can beclariﬁed by " .
481. risatex.bat:: Program compiling the LATEX ﬁle which os_muldif.rr outputs and displaying it on a screen• os_muldif.rr outputs a source ﬁle out.tex (or out0.tex) of LATEX to get a nice display ofresulting results and equations on a screen and then risatex.bat called by os_muldif.rr
reads it from risaout.tex (or risaout1.tex，risaout0.tex) and compiles it into a dvi ﬁle ora pdf ﬁle and display them. Here risaout1.tex or risaout0.tex is called by risaout0.bat
as in the case of risatex.bat.
• DVIOUTA (or DVIOUTB，DVIOUTL) indicates the above. We can deﬁne three diﬀerent ways toprocess the LATEX ﬁle using DVIOUTA, DVIOUTB and DVIOUTL.
Examples of settings to display results and equations using TEXare as follows．
• The default setting of risatex.bat which is located in get_rootdir()\bin is (cf. DVIOUTA) :cd "c:\Program Files\asir\tex"platex -src=cr,display,hbox,math,par risaout
start dviout -1 "c:\Program Files\asir\tex\risaout" 1000
– c:\Program Files\asir in the above is replaced by get_rootdir(). In the ﬁrst line cd
indicates the directory given by DIROUT where os_muldif.rr outputs a LATEX ﬁle. The
directory should be writable.
– If the command dviout does not work, it should be indicated by its full pathname or
it should be replaced by another program to display the compiled ﬁle processed by TEX
system.
– The last parameter -1 in the last line indicates to the command to the 1-st dviout. It
will start up if it is not so.
– The last parameter 1000 indicated the page to be displayed. If it is suﬃciently large, itmeans the last page. The equations to be displayed will be added at the end.
An example of risaout.tex whose location is given by DIROUT:\documentclass[a4paper]{amsart}\usepackage{amsmath, amssymb, amsfonts}\pagestyle{empty}\begin{document}\thispagestyle{empty}\input{out}\end{document}
The following example allows longer equations in a line. Moreover XY-pic (or TikZ) will be
loaded to handle several graphics.
\documentclass[a4paper]{amsart}\usepackage{amsmath,amssymb,amsfonts}\AtBeginDvi{\special{dviout -y=A3L}}
116

\usepackage[all]{xypic}\pagestyle{empty}\textwidth=7.6in\textheight=11in\voffset=-1.4in\hoffset=-1.4in\begin{document}\thispagestyle{empty}\input{out}\end{document}
If a pdf ﬁle is created by TEX by dvipdfmx or pdfTeX, it is better to change the above\usepackage[all]{xypic} by \usepackage[pdf,all]{xypic} so that a better pdf is created.
To set it by DVIOUTB (which os_muldif.rr uses by the command dviout0(4)), we put thefollowing risaoutpdf.tex in c:\Program Files\asir\tex\documentclass[a4paper]{amsart}\usepackage{amsmath,amssymb,amsfonts}\usepackage{pdf,all]{xypic}\pagestyle{empty}\begin{document}\thispagestyle{empty}\input{out}\end{document}
and moreover risatex1.bat may be
cd "c:\Program Files\asir\tex"platex risaoutpdf
dvipdfmx risaoutpdf
risaoutpdf.pdf
and risatex1.bat is indicated by DVIOUTB with its full pathname.
To display the pdf by SumatraPDF.exe, the last line in the above may be replaced by"c:\Program Files\SumatraPDF\SumatraPDF.exe" -reuse-instance risaoutpdf.pdf
If we use TikZ in place of XY-pic, which is more desirable, risaoutpdf.tex may be as follows:\documentclass[dvipdfmx,a4paper]{amsart}\usepackage{amsmath,amssymb,amsfonts}\usepackage{tikz}\pagestyle{empty}\begin{document}\thispagestyle{empty}\input{out}\end{document}
To use graphics with TikZ, we put a line
TikZ=1
in .muldif. This can be changed by dviout0(6) or dviout0(7) after loading os_muldif.rr.

117

To use both of XY-pic and TikZ，we set as follows.
Since %TiKZ% in DVIOUTB is replaced by the value %TiKZ%, we change the ﬁlenames of
risaoutpdf.tex and risaoutpdf0.tex to risaoutpdf0.tex and risaoutpdf1.tex whichcorrespond to XY-pic and TikZ respectively, and risatex10.bat are risatex11.bat
cd "c:\Program Files\asir\tex"platex risaoutpdf0
dvipdfmx risaoutpdf0"c:\Program Files\SumatraPDF\SumatraPDF.exe" -reuse-instance risaoutpdf0.pdf
andcd "c:\Program Files\asir\tex"platex risaoutpdf1
dvipdfmx risaoutpdf1"c:\Program Files\SumatraPDF\SumatraPDF.exe" -reuse-instance risaoutpdf1.pdf
We may use XY-pic and TikZ at a time and then its example is\documentclass[dvipdfmx,a4paper]{jsarticle}\usepackage{amsmath,amssymb,amsthm,amscd,mathrsfs}\usepackage{tikz}%\usetikzlibrary{patterns,shapes} % if necessary\usepackage[pdf,all]{xy}\begin{document}\thispagestyle{empty}\input{out}\end{document}• In the case AMSTeX=0, risatex0.bat and risaout0.tex are used and they are as follows by
default.
cd "c:\Program Files\asir\tex"platex -src=cr,display,hbox,math,par risaout0
start dviout -1 "c:\Program Files\asir\tex\risaout0" 1000
\documentclass{article}\pagestyle{empty}\begin{document}\thispagestyle{empty}\input{out0}\end{document}• Under Unix or Mac, risatex.bat may be replaced by risatex.sh which is the default nameand we set it executable (chmod 755). For example, it is#!/bin/sh
cd ${HOME}/asir/tex
platex -src=cr,display,hbox,math,par risaout
dvipdfmx risaout
evince risaout.pdf &or#!/bin/sh118

cd $HOME/asir/tex/usr/local/texlive/2014/bin/x86_64-darwin/platex risaout/usr/local/texlive/2014/bin/x86_64-darwin/dvipdfmx risaout
open -a Preview risaout.pdf
In this case risaout.tex may be\documentclass[a4paper]{amsart}\usepackage{amsmath,amssymb,amsfonts}\usepackage[pdf,all]{xy}\pagestyle{empty}\begin{document}\thispagestyle{empty}\input{out}\end{document}
Here risatex0.bat and risatex1.bat may be risatex0.sh and risatex1.sh.
• risaout.tex and risaout0.tex do not exist in DIROUT and the directory is writable, they
are automatically created if necessary.
3.2.14 Suppliment3.2.14.1 Input matrices
3.2.14.2

Plane ﬁgure

3.2.14.3

Function by list

3.2.14.4

Analyze functions with values in real/complex numbers

3.2.14.5
3.2.14.6

Data by table
Finite sets

3.3 Functions in the original library
3.4 Functions in the contributed library

Bibliography[Apéri] R. Apéry, Irrationalité de ζ(2) et ζ(3), Journées arithmétiques de Luminy, Astérisque no.61,(1979), 11–13.
[Batut et al.] C. Batut, D. Bernardi, H. Cohen, M. Olivier, User’s Guide to PARI–GP, 1993.
[Becker-Weispfenning] T. Becker, V. Weispfenning, Groebner Bases, Graduate Texts in Math. 141,
Springer-Verlag, 1993.
[Boehm-Weiser] H. Boehm, M. Weiser, Garbage Collection in an Uncooperative Environment, Software
Practice & Experience, September 1988, 807–820.
[DR] M. Dettweiler and S. Reiter, An algorithm of Katz and its applications to the inverse Galois
problems, J. Symbolic Comput. 30(2000), 761–798.
[Gebaue-Moeller] R. Gebauer, H. H. Moeller, An installation of Buchberger’s algorithm, J. of Symbolic
Computation 6, 275–286.
[Giovini et al.] A. Giovini, T. Mora, G. Niesi, L. Robbiano, C. Traverso, “One sugar cube, please” OR
Selection strategies in the Buchberger algorithm, Proc. ISSAC’91, 49–54.
[Ha] Y. Haraoka, Middle convolution for completely integrable systems with logarithmic singularities
along hyperplane arrangements, Adv. Studies in Pure Math. 62(2012), 109–136.
119

[Hiroe-Kawakami-Nakamura-Sakai] K. Hiroe, H. Kawakami, A. Nakamura and H. Sakai, 4-dimensional
Painlevé-type equations, MSJ Memoirs vol.37, Mathematical Society of Japan, 2018.
[Hiroe-Oshima] K. Hiroe and T. Oshima, A classiﬁcation of roots of symmetric Kac-Moody root systems
and its application, Symmetries, Integrable Systems and Representations, Springer Proceedings inMathematics and Statistics 40 (2012), 195–241.
[Morier-Genoud and Ovsienko] S. Morier-Genoud and V. Ovsienko, q-deformed rationals and qcontinued fractions, arXiv:1812.00170, 2020.
[Noro-Takeshima] M. Noro, T. Takeshima, Risa/Asir – A Computer Algebra System, Proc. ISSAC’92,
387–396.
[Noro-Yokoyama] M. Noro, K. Yokoyama, A Modular Method to Compute the Rational Univariate
Representation of Zero-Dimensional Ideals, J. Symb. Comp. 28/1 (1999), 243–263.
[O1] T. Oshima, Annihilators of generalized Verma modules of the scalar type for classical Lie algebras,“Harmonic Analysis, Group Representations, Automorphic forms and Invariant Theory”, in honorof Roger Howe, Vol. 12, Lecture Notes Series, 2007, 277-319, National University of Singapore.
[O2] T. Oshima, special functions and algebraic linear ordinary diﬀerential equations,in Japanese, Lecture note 11, Department of Mathematics Univ. of Tokyo 2011,
http://www.ms.u-tokyo.ac.jp/publication/documents/spfct3.pdf.
[O3] T. Oshima, Fractional calculus of Weyl algebra and Fuchsian diﬀerential equations, MSJ Memoirs
28, Mathematical Society of Japan, Tokyo, 2012.
[O4] T. Oshima, Drawing Curves, Mathematical Progress in Expressive Image Synthesis III, edited by
Y. Dobashi and H. Ochiai, Mathematics for Industry, 24 (2016), 95–106, Springer.
[O5] T. Oshima, Transformation of KZ type equations, Microlocal Analysis and Singular Perterbation
Theory, RIMS Kôkyûroku Bessatsu B61 (2017), 141–162.
[O6] T. Oshima, os muldif.rr, a library of the calculation of diﬀerential operators for computer algebra
Risa/Asir, 2007–2022, https://www.ms.u-tokyo.ac.jp/~oshima[O7] T. Oshima, Semilocal monodromy of rigid local systems, Formal and Analytic Solutions of Diﬀ.
Equations, Springer Proceedings in Mathematics and Statistics 256(2018) 189-199,[O8] T. Oshima, Counting numbers, in Japanese, Sûgaku Shobo, 2019, 226 pp.
[O9] T. Oshima, Conﬂuence and versal unfolding of Pfaﬃan systems, Josai Mathematical Journal
12(2020), 117–151.
[O10] T. Oshima, Versal unfolding of irregular singularities of a linear diﬀerential equation on the Riemann sphere, Publ. RIMS Kyoto Univ. 57 (2021), 893–920.
[Okt] T. Oshima, Middle convolution of KZ-type equations and single-elimination tournaments, to appear.
[Osp] T. Oshima, Algorithm classifying roots of star-shaped Kac-Moody root systems,
https://www.ms.u-tokyo.ac.jp/~oshima/paper/spbasic.pdf[OSe] T. Oshima and J. Sekiguchi, Eigenspaces of invariant diﬀerential operators on an aﬃne symmetricspaces, Invent. Math. 57(1980), 1–81.
[OSh] T. Oshima and N. Shimeno, Heckman-Opdam hypergeometric functions and their specializations,
RIMS Kôkyûroku Bessatsu B20 (2010), 129–162.
[Saito-Sturmfels-Takayama] M. Saito, B. Sturmfels, N. Takayama, Groebner deformations of hypergeometric diﬀerential equations, Algorithms and Computation in Mathematics 6, Springer-Verlag(2000).
[Shimoyama-Yokoyama] T. Shimoyama, K. Yokoyama, Localization and primary decomposition of polynomial ideals, J. Symb. Comp. 22 (1996), 247–277.
[Shoup] V. Shoup, A new polynomial factorization algorithm and its implementation, J. Symb. Comp.
20(1995), 364–397.
[OEIS] N. Sloane. The on-line encyclopedia of integer sequences, 1964–, https://oeis.org/.
[Traverso] C. Traverso, Groebner trace algorithms, Proc. ISSAC ’88(LNCS 358), 125-138.

120

[Yokoyama] K. Yokoyama, Prime decomposition of polynomial ideals over ﬁnite ﬁelds, Proc. ICMS,(2002), 217–227.
[Weber] K. Weber, The accelerated Integer GCD Algorithm, ACM TOMS, 21, 1(1995), 111–122.

121