algebra 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +53 -0
  3. data/.travis.yml +7 -0
  4. data/CODE_OF_CONDUCT.md +49 -0
  5. data/Gemfile +7 -0
  6. data/Gemfile.lock +28 -0
  7. data/LICENSE.txt +21 -0
  8. data/README-ja.txt +60 -0
  9. data/README.md +61 -0
  10. data/Rakefile +43 -0
  11. data/algebra.gemspec +33 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/doc-ja/README-ja.html +69 -0
  15. data/doc-ja/README-ja.rd +60 -0
  16. data/doc-ja/README.html +0 -0
  17. data/doc-ja/README.rd +0 -0
  18. data/doc-ja/algebra-ja.html +66 -0
  19. data/doc-ja/algebra-ja.rd +60 -0
  20. data/doc-ja/algebraic-equation-ja.html +36 -0
  21. data/doc-ja/algebraic-equation-ja.rd +26 -0
  22. data/doc-ja/algebraic-extension-field-ja.html +122 -0
  23. data/doc-ja/algebraic-extension-field-ja.rd +118 -0
  24. data/doc-ja/algebraic-parser-ja.html +87 -0
  25. data/doc-ja/algebraic-parser-ja.rd +95 -0
  26. data/doc-ja/changes.html +161 -0
  27. data/doc-ja/changes.rd +119 -0
  28. data/doc-ja/elementary-divisor-ja.html +56 -0
  29. data/doc-ja/elementary-divisor-ja.rd +45 -0
  30. data/doc-ja/euclidian-ring-ja.html +78 -0
  31. data/doc-ja/euclidian-ring-ja.rd +69 -0
  32. data/doc-ja/finite-group-ja.html +285 -0
  33. data/doc-ja/finite-group-ja.rd +276 -0
  34. data/doc-ja/finite-map-ja.html +224 -0
  35. data/doc-ja/finite-map-ja.rd +227 -0
  36. data/doc-ja/finite-set-ja.html +393 -0
  37. data/doc-ja/finite-set-ja.rd +408 -0
  38. data/doc-ja/index-ja.html +113 -0
  39. data/doc-ja/index-ja.rd +112 -0
  40. data/doc-ja/jordan-form-ja.html +106 -0
  41. data/doc-ja/jordan-form-ja.rd +99 -0
  42. data/doc-ja/localized-ring-ja.html +121 -0
  43. data/doc-ja/localized-ring-ja.rd +131 -0
  44. data/doc-ja/m-polynomial-ja.html +542 -0
  45. data/doc-ja/m-polynomial-ja.rd +596 -0
  46. data/doc-ja/matrix-algebra-ja.html +686 -0
  47. data/doc-ja/matrix-algebra-ja.rd +727 -0
  48. data/doc-ja/matrix-algebra-triplet-ja.html +124 -0
  49. data/doc-ja/matrix-algebra-triplet-ja.rd +129 -0
  50. data/doc-ja/permutation-group-ja.html +159 -0
  51. data/doc-ja/permutation-group-ja.rd +151 -0
  52. data/doc-ja/polynomial-converter-ja.html +64 -0
  53. data/doc-ja/polynomial-converter-ja.rd +54 -0
  54. data/doc-ja/polynomial-ja.html +446 -0
  55. data/doc-ja/polynomial-ja.rd +473 -0
  56. data/doc-ja/residue-class-ring-ja.html +112 -0
  57. data/doc-ja/residue-class-ring-ja.rd +113 -0
  58. data/doc-ja/sample-algebraic-equation01.rb.v.rd +11 -0
  59. data/doc-ja/sample-algebraic-equation02.rb.v.rd +11 -0
  60. data/doc-ja/sample-algebraic-root01.rb.v.rd +20 -0
  61. data/doc-ja/sample-algebraicfield01.rb.v.rd +26 -0
  62. data/doc-ja/sample-algebraicfield02.rb.v.rd +15 -0
  63. data/doc-ja/sample-cayleyhamilton01.rb.v.rd +14 -0
  64. data/doc-ja/sample-diagonalization01.rb.v.rd +48 -0
  65. data/doc-ja/sample-divmod01.rb.v.rd +17 -0
  66. data/doc-ja/sample-elementary-divisor01.rb.v.rd +48 -0
  67. data/doc-ja/sample-factorize01.rb.v.rd +11 -0
  68. data/doc-ja/sample-factorize02.rb.v.rd +13 -0
  69. data/doc-ja/sample-factorize03.rb.v.rd +14 -0
  70. data/doc-ja/sample-factorize04.rb.v.rd +14 -0
  71. data/doc-ja/sample-factorize05.rb.v.rd +53 -0
  72. data/doc-ja/sample-galois-group01.rb.v.rd +27 -0
  73. data/doc-ja/sample-gaussian-elimination01.rb.v.rd +19 -0
  74. data/doc-ja/sample-geometry01.rb.v.rd +33 -0
  75. data/doc-ja/sample-geometry02.rb.v.rd +34 -0
  76. data/doc-ja/sample-geometry03.rb.v.rd +45 -0
  77. data/doc-ja/sample-geometry04.rb.v.rd +33 -0
  78. data/doc-ja/sample-geometry07.rb.v.rd +62 -0
  79. data/doc-ja/sample-groebner01.rb.v.rd +13 -0
  80. data/doc-ja/sample-groebner02.rb.v.rd +18 -0
  81. data/doc-ja/sample-groebner03.rb.v.rd +19 -0
  82. data/doc-ja/sample-group01.rb.v.rd +21 -0
  83. data/doc-ja/sample-jordan-form01.rb.v.rd +56 -0
  84. data/doc-ja/sample-jordanform01.rb.v.rd +55 -0
  85. data/doc-ja/sample-lagrange-multiplier01.rb.v.rd +35 -0
  86. data/doc-ja/sample-m-factorize01.rb.v.rd +15 -0
  87. data/doc-ja/sample-m-factorize02.rb.v.rd +12 -0
  88. data/doc-ja/sample-m-polynomial01.rb.v.rd +10 -0
  89. data/doc-ja/sample-map01.rb.v.rd +9 -0
  90. data/doc-ja/sample-polynomial01.rb.v.rd +9 -0
  91. data/doc-ja/sample-polynomial02.rb.v.rd +11 -0
  92. data/doc-ja/sample-primefield01.rb.v.rd +13 -0
  93. data/doc-ja/sample-quotientfield01.rb.v.rd +11 -0
  94. data/doc-ja/sample-quotientfield02.rb.v.rd +18 -0
  95. data/doc-ja/sample-quotientfield03.rb.v.rd +16 -0
  96. data/doc-ja/sample-quotientfield04.rb.v.rd +16 -0
  97. data/doc-ja/sample-set01.rb.v.rd +18 -0
  98. data/doc-ja/sample-splitting-field01.rb.v.rd +19 -0
  99. data/doc-ja/samples-ja.html +885 -0
  100. data/doc-ja/samples-ja.rd +221 -0
  101. data/doc-ja/style.css +85 -0
  102. data/doc-ja/todo.html +20 -0
  103. data/doc-ja/todo.rd +9 -0
  104. data/lib/algebra.rb +36 -0
  105. data/lib/algebra/algebraic-equation.rb +56 -0
  106. data/lib/algebra/algebraic-extension-field.rb +135 -0
  107. data/lib/algebra/algebraic-parser.rb +160 -0
  108. data/lib/algebra/algebraic-system.rb +224 -0
  109. data/lib/algebra/annihilate.rb +52 -0
  110. data/lib/algebra/array-supplement.rb +53 -0
  111. data/lib/algebra/auto-require.rb +84 -0
  112. data/lib/algebra/chinese-rem-th.rb +135 -0
  113. data/lib/algebra/combinatorial.rb +145 -0
  114. data/lib/algebra/elementary-divisor.rb +193 -0
  115. data/lib/algebra/euclidian-ring.rb +161 -0
  116. data/lib/algebra/factors.rb +305 -0
  117. data/lib/algebra/finite-group.rb +374 -0
  118. data/lib/algebra/finite-map.rb +201 -0
  119. data/lib/algebra/finite-set.rb +456 -0
  120. data/lib/algebra/galois-group.rb +129 -0
  121. data/lib/algebra/gaussian-elimination.rb +385 -0
  122. data/lib/algebra/groebner-basis-coeff.rb +228 -0
  123. data/lib/algebra/groebner-basis.rb +197 -0
  124. data/lib/algebra/import-module-single-thread.rb +86 -0
  125. data/lib/algebra/import-module.rb +491 -0
  126. data/lib/algebra/jordan-form.rb +114 -0
  127. data/lib/algebra/linear-algebra.rb +143 -0
  128. data/lib/algebra/localized-ring.rb +294 -0
  129. data/lib/algebra/m-index.rb +282 -0
  130. data/lib/algebra/m-polynomial-factor-int.rb +186 -0
  131. data/lib/algebra/m-polynomial-factor-zp.rb +114 -0
  132. data/lib/algebra/m-polynomial-factor.rb +315 -0
  133. data/lib/algebra/m-polynomial-gcd.rb +40 -0
  134. data/lib/algebra/m-polynomial.rb +875 -0
  135. data/lib/algebra/matrix-algebra-triplet.rb +292 -0
  136. data/lib/algebra/matrix-algebra.rb +929 -0
  137. data/lib/algebra/numeric-supplement.rb +123 -0
  138. data/lib/algebra/permutation-group.rb +257 -0
  139. data/lib/algebra/polynomial-converter.rb +193 -0
  140. data/lib/algebra/polynomial-factor-alg.rb +148 -0
  141. data/lib/algebra/polynomial-factor-int.rb +252 -0
  142. data/lib/algebra/polynomial-factor-zp.rb +165 -0
  143. data/lib/algebra/polynomial-factor.rb +140 -0
  144. data/lib/algebra/polynomial.rb +592 -0
  145. data/lib/algebra/powers.rb +31 -0
  146. data/lib/algebra/prime-gen.rb +32 -0
  147. data/lib/algebra/rational.rb +81 -0
  148. data/lib/algebra/residue-class-ring.rb +219 -0
  149. data/lib/algebra/sets-system.rb +43 -0
  150. data/lib/algebra/splitting-field.rb +103 -0
  151. data/lib/algebra/version.rb +3 -0
  152. data/sample/Makefile +10 -0
  153. data/sample/do-testscripts.rb +100 -0
  154. data/sample/sample-algebraic-equation01.rb +6 -0
  155. data/sample/sample-algebraic-equation02.rb +6 -0
  156. data/sample/sample-algebraic-root01.rb +15 -0
  157. data/sample/sample-algebraicfield01.rb +21 -0
  158. data/sample/sample-algebraicfield02.rb +10 -0
  159. data/sample/sample-cayleyhamilton01.rb +9 -0
  160. data/sample/sample-diagonalization01.rb +43 -0
  161. data/sample/sample-divmod01.rb +12 -0
  162. data/sample/sample-elementary-divisor01.rb +43 -0
  163. data/sample/sample-factorize01.rb +6 -0
  164. data/sample/sample-factorize02.rb +8 -0
  165. data/sample/sample-factorize03.rb +9 -0
  166. data/sample/sample-factorize04.rb +9 -0
  167. data/sample/sample-factorize05.rb +48 -0
  168. data/sample/sample-galois-group01.rb +22 -0
  169. data/sample/sample-gaussian-elimination01.rb +14 -0
  170. data/sample/sample-geometry01.rb +28 -0
  171. data/sample/sample-geometry02.rb +29 -0
  172. data/sample/sample-geometry03.rb +40 -0
  173. data/sample/sample-geometry04.rb +28 -0
  174. data/sample/sample-geometry07.rb +58 -0
  175. data/sample/sample-groebner01.rb +8 -0
  176. data/sample/sample-groebner02.rb +13 -0
  177. data/sample/sample-groebner03.rb +14 -0
  178. data/sample/sample-group01.rb +16 -0
  179. data/sample/sample-jordan-form01.rb +51 -0
  180. data/sample/sample-lagrange-multiplier01.rb +30 -0
  181. data/sample/sample-m-factorize01.rb +10 -0
  182. data/sample/sample-m-factorize02.rb +7 -0
  183. data/sample/sample-m-polynomial01.rb +5 -0
  184. data/sample/sample-map01.rb +4 -0
  185. data/sample/sample-polynomial01.rb +4 -0
  186. data/sample/sample-polynomial02.rb +6 -0
  187. data/sample/sample-primefield01.rb +8 -0
  188. data/sample/sample-quotientfield01.rb +6 -0
  189. data/sample/sample-quotientfield02.rb +13 -0
  190. data/sample/sample-quotientfield03.rb +11 -0
  191. data/sample/sample-quotientfield04.rb +11 -0
  192. data/sample/sample-set01.rb +13 -0
  193. data/sample/sample-splitting-field01.rb +14 -0
  194. data/sample/test-00-cayley-hamilton.rb +76 -0
  195. data/sample/test-00-groebner-basis.rb +274 -0
  196. data/sample/test-00-polynomial-factor-alg.rb +89 -0
  197. data/sample/test-00.list +4 -0
  198. data/sample/time-trial.rb +65 -0
  199. metadata +373 -0
@@ -0,0 +1,221 @@
1
+ =begin
2
+ [((<index-ja|URL:index-ja.html>))]
3
+
4
+ = 練習帖
5
+
6
+ == CONTENTS
7
+ * ((<有限集合>))
8
+ * ((<集合>))
9
+ * ((<写像>))
10
+ * ((<群>))
11
+ * ((<多項式の計算>))
12
+ * ((<多変数多項式の計算>))
13
+ * ((<多変数多項式の計算その2>))
14
+ * ((<多項式を複数の多項式で割った余りを求める>))
15
+ * ((<多項式のグレブナ基底を求める>))
16
+ * ((<素体を作る>))
17
+ * ((<代数体を作る>))
18
+ * ((<商体の生成>))
19
+ * ((<整数環の商体を取って有理数を作る>))
20
+ * ((<有理関数体の生成>))
21
+ * ((<代数拡大体上の有理式の計算>))
22
+ * ((<代数関数体>))
23
+ * ((<線形代数>))
24
+ * ((<連立1次方程式を解く>))
25
+ * ((<正方行列の対角化>))
26
+ * ((<行列の単因子を求める>))
27
+ * ((<行列の Jordan 標準形を求める>))
28
+ * ((<Cayley-Hamilton の定理の(次元毎の)証明>))
29
+ * ((<グレブナ基底を元の基底で表現する>))
30
+ * ((<任意の基底で割った商と余りを求める(余り=0に意味がある)>))
31
+ * ((<因数分解>))
32
+ * ((<整数係数多項式の因数分解>))
33
+ * ((<Zp 係数多項式の因数分解>))
34
+ * ((<有理数の代数拡大上の多項式の因数分解>))
35
+ * ((<有理数の代数拡大の代数拡大上の多項式の因数分解>))
36
+ * ((<x^4 + 10x^2 + 1 の因数分解>))
37
+ * ((<整数、有理係数多変数多項式の因数分解>))
38
+ * ((<Zp 係数多変数多項式の因数分解>))
39
+ * ((<代数方程式>))
40
+ * ((<最小多項式>))
41
+ * ((<最小分解体>))
42
+ * ((<多項式のガロア群>))
43
+ * ((<初等幾何>))
44
+ * ((<重心の存在>))
45
+ * ((<外心の存在>))
46
+ * ((<垂心の存在>))
47
+ * ((<4 つの等面積>))
48
+ * ((<解析>))
49
+ * ((<ラグランジュの乗数法>))
50
+
51
+ == 有限集合
52
+
53
+ === 集合
54
+
55
+ <<< sample-set01.rb.v.rd
56
+
57
+ === 写像
58
+
59
+ <<< sample-map01.rb.v.rd
60
+
61
+ === 群
62
+
63
+ <<< sample-group01.rb.v.rd
64
+
65
+ == 多項式の計算
66
+
67
+ <<< sample-polynomial01.rb.v.rd
68
+
69
+ == 多変数多項式の計算
70
+
71
+ <<< sample-polynomial02.rb.v.rd
72
+
73
+ == 多変数多項式の計算その2
74
+
75
+ <<< sample-m-polynomial01.rb.v.rd
76
+
77
+ == 多項式を複数の多項式で割った余りを求める
78
+
79
+ <<< sample-divmod01.rb.v.rd
80
+
81
+ == 多項式のグレブナ基底を求める
82
+
83
+ <<< sample-groebner01.rb.v.rd
84
+
85
+ == 素体を作る
86
+
87
+ <<< sample-primefield01.rb.v.rd
88
+
89
+ == 代数体を作る
90
+
91
+ <<< sample-algebraicfield01.rb.v.rd
92
+
93
+ === これと同じものが次の様に書ける。
94
+
95
+ <<< sample-algebraicfield02.rb.v.rd
96
+
97
+ === ルートの計算
98
+
99
+ <<< sample-algebraic-root01.rb.v.rd
100
+
101
+ == 商体の生成
102
+
103
+ === 整数環の商体を取って有理数を作る
104
+
105
+ <<< sample-quotientfield01.rb.v.rd
106
+
107
+ === 有理関数体の生成
108
+
109
+ <<< sample-quotientfield02.rb.v.rd
110
+
111
+ === 代数拡大体上の有理式の計算
112
+
113
+ <<< sample-quotientfield03.rb.v.rd
114
+
115
+ === 代数関数体
116
+
117
+ <<< sample-quotientfield04.rb.v.rd
118
+
119
+ == 線形代数
120
+
121
+ === 連立1次方程式を解く
122
+
123
+ <<< sample-gaussian-elimination01.rb.v.rd
124
+
125
+ === 正方行列の対角化
126
+
127
+ <<< sample-diagonalization01.rb.v.rd >>>
128
+
129
+ === 行列の単因子を求める
130
+
131
+ <<< sample-elementary-divisor01.rb.v.rd
132
+
133
+ === 行列の Jordan 標準形を求める
134
+
135
+ <<< sample-jordan-form01.rb.v.rd
136
+
137
+ === Cayley-Hamilton の定理の(次元毎の)証明
138
+
139
+ <<< sample-cayleyhamilton01.rb.v.rd
140
+
141
+ == グレブナ基底を元の基底で表現する
142
+
143
+ <<< sample-groebner02.rb.v.rd
144
+
145
+ == 任意の基底で割った商と余りを求める(余り=0に意味がある)
146
+
147
+ <<< sample-groebner03.rb.v.rd
148
+
149
+ == 因数分解
150
+
151
+ === 整数係数多項式の因数分解
152
+
153
+ <<< sample-factorize01.rb.v.rd
154
+
155
+ === Zp 係数多項式の因数分解
156
+
157
+ <<< sample-factorize02.rb.v.rd
158
+
159
+ === 有理数の代数拡大上の多項式の因数分解
160
+
161
+ <<< sample-factorize03.rb.v.rd
162
+
163
+ === 有理数の代数拡大の代数拡大上の多項式の因数分解
164
+
165
+ <<< sample-factorize04.rb.v.rd
166
+
167
+ === x^4 + 10x^2 + 1 の因数分解
168
+
169
+ <<< sample-factorize05.rb.v.rd
170
+
171
+ === 整数、有理係数多変数多項式の因数分解
172
+
173
+ <<< sample-m-factorize01.rb.v.rd
174
+
175
+ === Zp 係数多変数多項式の因数分解
176
+
177
+ <<< sample-m-factorize02.rb.v.rd
178
+
179
+ == 代数方程式
180
+
181
+ === 最小多項式
182
+
183
+ <<< sample-algebraic-equation01.rb.v.rd
184
+
185
+ === 最小分解体
186
+
187
+ <<< sample-splitting-field01.rb.v.rd
188
+
189
+ === 多項式のガロア群
190
+
191
+ <<< sample-galois-group01.rb.v.rd
192
+
193
+ == 初等幾何
194
+
195
+ === 重心の存在
196
+
197
+ <<< sample-geometry01.rb.v.rd
198
+
199
+ === 外心の存在
200
+
201
+ <<< sample-geometry02.rb.v.rd
202
+
203
+ #=== 内心の存在
204
+
205
+ #<<< sample-geometry03.rb.v.rd
206
+
207
+ === 垂心の存在
208
+
209
+ <<< sample-geometry04.rb.v.rd
210
+
211
+
212
+ === 4 つの等面積
213
+ see ((<URL:http://www1.odn.ne.jp/drinkcat/topic/column/quest/quest_2/quest_2.html>)) Question 3.
214
+
215
+ <<< sample-geometry07.rb.v.rd
216
+
217
+ == 解析
218
+ === ラグランジュの乗数法
219
+ <<< sample-lagrange-multiplier01.rb.v.rd
220
+
221
+ =end
@@ -0,0 +1,85 @@
1
+ /*
2
+ * style.css: CSS style definition file for `Rubyavailable'.
3
+ * (<URL:http://www.jin.gr.jp/~nahi/Ruby/*>)
4
+ */
5
+
6
+ body {
7
+ background: #EEEEEE;
8
+ color: black;
9
+ margin-left: 2%;
10
+ margin-right: 2%;
11
+ font-size: 10.5pt;
12
+ font-family: verdana, arial, helvetica, Sans-Serif;
13
+ }
14
+
15
+ h1 {
16
+ font-family: "comic sans ms", verdana, sans-serif;
17
+ # text-align: right;
18
+ margin-top: 5%;
19
+ margin-right: 10%;
20
+ }
21
+
22
+ h2, h3, h4, h5, h6 {
23
+ font-family: verdana, arial, helvetica, Sans-Serif;
24
+ }
25
+
26
+ h2 {
27
+ color: #FFFFFF;
28
+ # background: #CC3333;
29
+ background: #33CCAA;
30
+ }
31
+
32
+ div.header p.status { text-align: right; }
33
+ div.header p.last-modified { text-align: left; }
34
+
35
+ /*
36
+ li p {
37
+ margin-top: -1ex;
38
+ }
39
+ */
40
+
41
+ dt {
42
+ font-weight: bold;
43
+ margin-top: 2ex;
44
+ margin-left: 1em;
45
+ }
46
+
47
+ address {
48
+ color: gray;
49
+ background: #EEEEEE;
50
+ text-align: right;
51
+ font-family: Times, serif;
52
+ font-style: normal;
53
+ font-variant: normal;
54
+ font-weight: normal;
55
+ }
56
+
57
+ pre {
58
+ border-right: #646464 1px solid;
59
+ padding-right: 0.5em;
60
+ border-top: #646464 1px solid;
61
+ padding-top: 0.5em;
62
+ border-left: #646464 1px solid;
63
+ padding-left: 0.5em;
64
+ border-bottom: #646464 1px solid;
65
+ padding-bottom: 0.5em;
66
+ margin-left: 1em;
67
+ margin-right: 2em;
68
+ white-space: pre;
69
+ background-color: #e6e6e6;
70
+ color: black;
71
+ }
72
+
73
+ span.download {
74
+ font-weight: normal;
75
+ color: blue;
76
+ background: #EEEEEE;
77
+ }
78
+
79
+ .path {
80
+ font-family: Verdana, Arial, Helvetica, sans-serif;
81
+ }
82
+
83
+ .navi {
84
+ text-align: right;
85
+ }
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml">
6
+ <head>
7
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
8
+ <title>doc-ja/todo.rd</title>
9
+ <link href="style.css" type="text/css" rel="stylesheet" />
10
+ </head>
11
+ <body>
12
+ <h1><a name="label-0" id="label-0">ToDo</a></h1><!-- RDLabel: "ToDo" -->
13
+ <ul>
14
+ <li>Factorization of multi-variate polynomials over algebraic field</li>
15
+ <li>Factorization over polynomial ring over Euclidian ring</li>
16
+ <li>Geometry</li>
17
+ </ul>
18
+
19
+ </body>
20
+ </html>
@@ -0,0 +1,9 @@
1
+ =begin
2
+
3
+ = ToDo
4
+
5
+ * Factorization of multi-variate polynomials over algebraic field
6
+ * Factorization over polynomial ring over Euclidian ring
7
+ * Geometry
8
+ =end
9
+
@@ -0,0 +1,36 @@
1
+ #
2
+ # algebra
3
+ # by Shin-ichiro HARA
4
+ #
5
+ # Version 0.04 (2003.06.19)
6
+ #
7
+
8
+ require 'algebra/auto-require'
9
+ require 'algebra/rational'
10
+ require 'algebra/version'
11
+
12
+ module Algebra
13
+ require 'algebra/algebraic-equation'
14
+ require 'algebra/polynomial' # class Polynomial
15
+ require 'algebra/m-polynomial'
16
+ require 'algebra/residue-class-ring'
17
+ require 'algebra/algebraic-extension-field'
18
+ require 'algebra/localized-ring'
19
+ require 'algebra/matrix-algebra'
20
+
21
+ require 'algebra/finite-set'
22
+ require 'algebra/finite-map'
23
+ require 'algebra/permutation-group'
24
+ end
25
+ include Algebra
26
+
27
+ require 'algebra/polynomial' # function Polyomial
28
+ require 'algebra/m-polynomial'
29
+
30
+ require 'algebra/residue-class-ring'
31
+ require 'algebra/algebraic-extension-field'
32
+ require 'algebra/localized-ring'
33
+ require 'algebra/matrix-algebra'
34
+
35
+ # for backward compatibility
36
+ require 'algebra/splitting-field'
@@ -0,0 +1,56 @@
1
+ # Utility for Algebraic Equations
2
+ #
3
+ # by Shin-ichiro Hara
4
+ #
5
+ # Version 1.11 (2002.02.23)
6
+
7
+ require 'algebra/polynomial'
8
+ require 'algebra/polynomial-factor'
9
+ require 'algebra/m-polynomial'
10
+ require 'algebra/groebner-basis'
11
+ require 'algebra/residue-class-ring'
12
+ require 'algebra/splitting-field'
13
+
14
+ module Algebra
15
+ module AlgebraicEquation
16
+ def symmetric_product(objs)
17
+ a = [1]
18
+ objs.each do |x|
19
+ ax = a.collect { |t| t * x }
20
+ a.each_index do |i|
21
+ a[i] = a[i] + ax[i - 1] if i > 0 && i < a.size
22
+ end
23
+ a.push ax.last
24
+ end
25
+ a
26
+ end
27
+
28
+ def minimal_polynomial(e, *fs)
29
+ raise 'too many polys' if fs.size > 'x'.ord - 'a'.ord # ("a"..."x").size
30
+ require 'algebra/groebner-basis'
31
+ (mpring = e.class).vars('x')
32
+ x = mpring.var('x')
33
+ gb = mpring.with_ord(:lex) do
34
+ Algebra::Groebner.basis([x - e, * fs])
35
+ end
36
+ gb.last
37
+ end
38
+
39
+ module_function :minimal_polynomial
40
+ module_function :symmetric_product
41
+ end
42
+ end
43
+
44
+ if __FILE__ == $PROGRAM_NAME
45
+ include Algebra::AlgebraicEquation
46
+ require 'algebra/rational'
47
+ PQ = Algebra.MPolynomial(Rational)
48
+ a, b, c, _d = PQ.vars('abcd')
49
+ p minimal_polynomial(a + b, a**3 - 2, b**2 + b + 1)
50
+ p minimal_polynomial(a + b + c, a**2 - 2, b**2 - 3, c**2 - 5)
51
+ # p minimal_polynomial(a + b, a**5-2, b**4+b**3+b**2+b+1)
52
+ # x^20 + 5x^19 + 15x^18 + 35x^17 + 70x^16 + 113x^15 + 155x^14 + 215x^13 + 410x^12 + 1095x^11 + 1929x^10 + 2185x^9 + 1180x^8 - 905x^7 - 835x^6 + 17x^5 + 40x^4 - 255x^3 - 45x^2 + 135x + 81
53
+
54
+ # too difficult, deg == 16
55
+ # p minimal_polynomial(a+b+c+d, a**2-2, b**2-3, c**2-5, d**2-7)
56
+ end
@@ -0,0 +1,135 @@
1
+ # Algebraic Extension Field
2
+ #
3
+ # by Shin-ichiro Hara
4
+ #
5
+ # Version 1.00 (2002.02.27)
6
+
7
+ require 'algebra/polynomial'
8
+ # require "algebra/m-polynomial"
9
+ require 'algebra/residue-class-ring'
10
+
11
+ module Algebra
12
+ def AlgebraicExtensionField(field, var = 'x', &b)
13
+ AlgebraicExtensionField.create(field, var, &b)
14
+ end
15
+ module_function :AlgebraicExtensionField
16
+
17
+ class AlgebraicExtensionField < ResidueClassRing
18
+ def self.create(field, var_obj)
19
+ poly_ring = Algebra.Polynomial(field, var_obj)
20
+
21
+ modulus = yield(poly_ring.var)
22
+ klass = super(poly_ring, modulus)
23
+
24
+ # def klass.var; self[ground.var]; end
25
+ klass.sysvar :var, klass[klass.ground.var]
26
+ klass.sysvar :base, field
27
+
28
+ if Algebra::AlgebraicExtensionField >= field
29
+ env_ring = Algebra.Polynomial(field.env_ring, var_obj)
30
+ klass.sysvar :def_polys, field.def_polys + [modulus]
31
+ else
32
+ env_ring = poly_ring
33
+ klass.sysvar :def_polys, [modulus]
34
+ end
35
+
36
+ poly_ring.class_eval <<-__DEF__
37
+ def abs_lift
38
+ if Algebra::AlgebraicExtensionField >= ground
39
+ project(self.class.env_ring) {|c, n| c.abs_lift }
40
+ else
41
+ project(self.class.env_ring) {|c, n| c }
42
+ end
43
+ end
44
+ __DEF__
45
+ poly_ring.sysvar :env_ring, env_ring
46
+ klass.sysvar :env_ring, env_ring
47
+
48
+ klass
49
+ end
50
+
51
+ def [](n)
52
+ lift[n]
53
+ end
54
+
55
+ def abs_lift
56
+ Algebra::AlgebraicExtensionField >= self.class.base ? lift.abs_lift : lift
57
+ end
58
+
59
+ def self.to_ary
60
+ [self, var]
61
+ end
62
+ end
63
+
64
+ ################# experimental ###################
65
+
66
+ def QuadraticExtensionField(field, var_obj = nil)
67
+ poly_ring = Algebra.Polynomial(field, 'x')
68
+ modulus = yield(poly_ring.var)
69
+ unless modulus.deg == 2
70
+ raise 'give deg 2 polynomial to QuadraticicExtensionField.'
71
+ end
72
+
73
+ fact = modulus.factorize
74
+ if o = fact.find { |x| x[0].deg == 1 }
75
+ b = o[0][0]
76
+ a = o[0][1]
77
+ c = b / a
78
+ return [field, - c, c]
79
+ end
80
+
81
+ c = modulus[0]
82
+ b = modulus[1]
83
+ a = modulus[2]
84
+ a2 = a * 2
85
+ b0 = a2.zero? ? b : (b / a2)
86
+ c1 = c / a - b0**2
87
+ cs = (-c1).to_s
88
+ r = 'r'
89
+ var_obj ||= r + (/^\d+$/ !~ cs ? '(' + cs + ')' : cs)
90
+
91
+ klass, v = AlgebraicExtensionField(field, var_obj) { |x| x**2 + c1 }
92
+
93
+ r1 = v - b0
94
+ r2 = - v - b0
95
+ [klass, r1, r2]
96
+ end
97
+ module_function :QuadraticExtensionField
98
+
99
+ def Sqrt(field, a, _name = nil)
100
+ QuadraticExtensionField(field, nil) { |x| x**2 - a }
101
+ end
102
+
103
+ module_function :Sqrt
104
+
105
+ def Root(field, a = nil, deg = 2, cs = nil, &b)
106
+ r, x = Polynomial(field)
107
+ if b
108
+ f = yield(x)
109
+ as = a ? a.to_s : f.to_s
110
+ else
111
+ f = x**deg - a
112
+ as = a.to_s
113
+ end
114
+
115
+ r = deg == 2 ? 'r' : "r[#{deg}]"
116
+ cs ||= r + (/^\d+$/ !~ as ? '(' + as + ')' : as)
117
+ k = f.splitting_field(nil, cs)
118
+ [k.field, *k.roots]
119
+ end
120
+
121
+ module_function :Root
122
+ end
123
+
124
+ if $PROGRAM_NAME == __FILE__
125
+ R2, r2, _r2_ = Root(Rational, 2)
126
+ R3, r3, _r3_ = Root(R2, 3)
127
+ R6, r6, _r6_ = Root(R3, 6)
128
+
129
+ p r6
130
+ p (r6 + r2 + r3) * (r6 + r2 - r3)
131
+
132
+ P, x = Polynomial(R6, x)
133
+ p (x**4 - 60 * x**2 + 36).factorize
134
+ #=> (x - 2r3 - 3r2)(x + 2r3 - 3r2)(x - 2r3 + 3r2)(x + 2r3 + 3r2)
135
+ end