===================================================================
RCS file: /home/cvs/OpenXM/src/asir-contrib/testing/tr-ja.oxt,v
retrieving revision 1.4
retrieving revision 1.6
diff -u -p -r1.4 -r1.6
--- OpenXM/src/asir-contrib/testing/tr-ja.oxt 2005/04/03 11:05:21 1.4
+++ OpenXM/src/asir-contrib/testing/tr-ja.oxt 2005/04/15 12:47:14 1.6
@@ -1,28 +1,48 @@
-/*&generate-prologue
-*/
-$Id: tr-ja.oxt,v 1.4 2005/04/03 11:05:21 takayama Exp $
-$OpenXM: OpenXM/src/asir-contrib/testing/tr-ja.oxt,v 1.3 2005/04/02 05:56:57 takayama Exp $
+$Id: tr-ja.oxt,v 1.6 2005/04/15 12:47:14 takayama Exp $
+$OpenXM: OpenXM/src/asir-contrib/testing/tr-ja.oxt,v 1.5 2005/04/06 09:26:28 takayama Exp $
注意: testing/tr.rr では quote を quotetolist で list に変換して扱うため,
下の仕様とはことなり, list 型でデータを戻す場合も多い.
ユーザ言語で書いている関係上 pn(x) を pn("x") としている.
他にも同様な関数があり.
-gentexi
t.texi
-t.texi に
-\input texinfo
-@def@pi{PI}
-を加えてから ptex t.texi で 大体見れるが,
+このファイルから texi ファイルを作成するには以下のように入力して下さい.
+oxgentexi は OpenXM/src/util の下にあります.
-cat pre.texi >t.texi
-${OpenXM_HOME}/asir-contrib/packages/doc/gentexi tr.oxt >>t.texi
-echo "@bye" >>t.texi
-ptex t.texi
-とすればもっとマニュアルっぽいものができる.
+nkf -e tr.oxt | oxgentexi --noSorting --title 'Term rewriting functions for Risa/Asir' --author 'Nobuki Takayama' >t.texi
-@c --------------------------------------------------------------------
+begin: AAA01|
+
+@c ---------------------------------------------------------
+@section 変数パターンと関数パターン
+
+
+変数パターン
+
+pn(x) 任意のものにマッチ. マッチしたものを x に bind.
+pn(x,qt_is_integer(x))
+
+Todo; fn は多分いらない. qt_is_function(x) で OK.
+fn(f) 任意の関数にマッチ. マッチした関数名を f に bind.
+fn(f,pn(x),pn(y)) 任意の関数にマッチ. マッチした関数名を f に bind.
+ f の引数を x, y に bind
+
+
+パターンは quote で与える.
+予約語 tr_and, tr_or, tr_not はパターンのマッチに関して論理演算をおこなう.
+たとえば
+quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negative(x))))
+は x が 整数で - が先頭についていない場合マッチする.
+
+end:
+
+begin: AAA02|
+
@section quote に対する基本関数
+end:
+
+
begin: qt_node(Q)
quote データ {Q} の node を取り出す.
example: qt_node(quote(1+2*3))
@@ -49,9 +69,9 @@ begin: qt_is_integer(Q)
example: qt_is_integer(quote(0))
end:
-begin: qt_depend(Q,x)
+begin: qt_is_dependent(Q,x)
quote データ {Q} が不定元 {x} を含むと 1, 含まないと 0.
- example: qt_depend(quote(1+1/x),x)
+ example: qt_is_dependent(quote(1+1/x),x)
end:
begin: qt_is_function(Q)
@@ -73,6 +93,10 @@ end:
begin: qt_replace(Qobj,[[x,Valuex],[y,Valuey],...])
quote object {Qobj} の中の x を Valuex, y を Valuey, ... に置き換えた
quote object を戻す.
+ description:
+ 課題; x, y は大文字も許すか? @var{Qobj} も元々含まれている大文字を評価して置き換える
+ 関数も必要か?
+
example: qt_replace(quote(sin(x*@pi)), [[x,quote( (2*t+3) )]])
end:
@@ -83,20 +107,35 @@ begin: qt_parenthesis(Qobj)
quote object {Qobj} の中の括弧が足りないときには補い, 多いときには取り去った
quote object を作る.
+, *, /, ^, - 等について asir の文法での演算子の強さを仮定する.
+ description:
+ 参考;
+ noro_simplify.rr の @code{remove_paren()} がすでに実現づみ?
+ @code{flatten()} や @code{quote_to_funargs()} を利用してる模様.
+
end:
begin: qt_eval(Qobj,type)
Qobj を asir の他の object に変換.
+ description:
+ @code{eval_quote()} がすでに実現づみ.
+
end:
begin: qt_(Obj)
asir の Obj を quote 型に変換.
+ description:
+ @code{objtoquote()} がすでに実現づみ.
+
end:
+begin: tr|
+
@c --------------------------------------------------------------------
@section tr (term rewriting) のトップレベルの関数
+end:
+
begin: tr_match0(Qobj,P)
quote データ {Qobj} が パターン {P} に適合すれば 1 を戻し, そうでなければ 0
を戻す.
@@ -134,7 +173,7 @@ begin: tr_apply_rule1(Qobj,P,Act)
description:
ここで sin_int(X) は X が integer の時は quote(0) を戻し,
- そうでないときは quote(sin(X*@pi)) を戻す.
+ そうでないときは quote(sin(X*@@pi)) を戻す.
深さ優先で書き換えをするには 関数 sin_int の中でまた tr_apply_rule1 を呼び出せば
よい.
@@ -156,37 +195,15 @@ end:
begin: tr_make_binding(Qobj,P)
end:
-@c ---------------------------------------------------------
-@section 変数パターンと関数パターン
-begin: remark_on_pn()
-変数パターン
-example:
-pn(x) 任意のものにマッチ. マッチしたものを x に bind.
-pn(x,qt_is_integer(x))
+begin: zzz00|
-Todo; fn は多分いらない. qt_is_function(x) で OK.
-fn(f) 任意の関数にマッチ. マッチした関数名を f に bind.
-fn(f,pn(x),pn(y)) 任意の関数にマッチ. マッチした関数名を f に bind.
- f の引数を x, y に bind
-end:
+@section 例題
-@c ---------------------------------------------------------
-@section パターン
-
-begin: remark_pattern()
-パターンは quote で与える.
-予約語 tr_and, tr_or, tr_not はパターンのマッチに関して論理演算をおこなう.
-たとえば
-quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negative(x))))
-は x が 整数で - が先頭についていない場合マッチする.
end:
-@c ---------------------------------------------------------
-@section 例題 sin(整数*@pi) を 0 に.
-
-begin: example_sin_int();
-例題 sin(整数*@pi) を 0 に.
+begin: zzz01|
+例題 sin(整数*@@pi) を 0 に.
example:
/* 準備 */
extern P,A;
@@ -206,7 +223,7 @@ end:
@c ------------------------------------------------------
@section 例題 Mathematica の N[ ] 相当の関数をユーザが書けるように.
-begin: example_Mathematica_N()
+begin: zzz02|
例題 Mathematica の N[ ] 相当の関数をユーザが書けるように.
example:
nn(sin(cos(@pi)+sqrt(2)))
@@ -228,7 +245,7 @@ end:
@c ---------------------------------------------------------
@section 例題 不定積分
-begin: example_indefinite_integral()
+begin: zzz03|
例題 不定積分
example:
/* integral(f+g) => integral(f)+integral(g) */
@@ -257,8 +274,11 @@ end:
@c ---------------------------------------------------------
@section 例題 簡単な構文解析
-begin: example_parsing()
+begin: zzz04|sortKey: zzz04
+description:
+
例題 簡単な構文解析
+
example:
式(expression) は 式+式 | 式*式 | (式) | 整数
@@ -297,19 +317,60 @@ example:
tr_eval_expression(quote(1+2*(3+15)));
end:
-@c ---------------------------------------------------------
-@section 例題 非可換環の簡単な構文解析
+begin: misc|
+@section 考え方についての概説
+ トップレベルの関数達. (stylesheet の考えに似てる.)
-@section Todo;
+ iterator の一種.
+ yacc に似てる.
+
+@section デバッガー
+
+ 選択すべきルールが沢山あるときは, 警告する機能.
+
+ 無限ループの|検出.
+
+end:
+
+begin: exp|
+
+@c ------------------------------------------------
+@section 実験的関数
+
+end:
+
+begin: qt_map_arg(F,Q)
+ 関数 F を quote データ {Q} の すべてのノードに再帰的に
+ apply した quote データを戻す.
+ example: qt_map_arg(nn,quote(sin(@pi)+2/3))
+ nn(nn(sin(nn(@pi)))+nn(nn(2)/nn(3)))
+end:
+
+begin: todo|
+
+@section Todo
+
+@subsection ユーザ定義の中置演算子
+
+ tfb の書き方を導入.
+
+@subsection 数学よりの例題
+
+数学的におもしろい例題をなるべく沢山用意する.
+これらの例題に対して tr が試作品を作るのに有効であるということをいう.
+
+ 例; gcd 計算の多項式 reduction を tr で実現.
+
例; 冪級数の計算を quote で実現.
sort や expand は組み込みで.
例; Mathematica の Expand[], Toghether[] 相当のもの.
例; D の掛け算を パターンマッチで実現.
+ holonomic 関数を係数とする微分作用素環での計算.
例; (x^(1/n))^n --> x 等.
@@ -318,35 +379,67 @@ end:
例; QE, 論理式.
-@section 考え方についての概説
+ 例; 外積代数.
- トップレベルの関数達. (stylesheet の考えに似てる.)
- iterator の一種.
+ 例; 岩波, 応用数学, 神保のソリトンの本にあるような fermion 等の例.
-@c ------------------------------------------------
-@section 実験的関数
-begin: qt_map_arg(F,Q)
- 関数 F を quote データ {Q} の すべてのノードに再帰的に
- apply した quote データを戻す.
- example: qt_map_arg(nn,quote(sin(@pi)+2/3))
- nn(nn(sin(nn(@pi)))+nn(nn(2)/nn(3)))
+ 例;
+ Bergman, George M.
+ The diamond lemma for ring theory.
+ Advances in Math. 29 (1978), no. 2, 178--218.
+ にあるような非可換代数の例.
+
end:
+begin: new-functions|
+
@section まだスケッチのみの関数仕様
- qt_ltor, qt_rtol : 木の構造の変換; 例 (x*y)*z --> x*(y*z)
+ qt_ltor, qt_rtol ; 木の構造の変換; 例 (x*y)*z --> x*(y*z)
- idxtov(x,i) x_i を生成. x_i の index (idx) 属性 を i に.
- base_name 属性を x に.
- idxtov(x,[i,j]) x_i_j を生成. x_i_i の index (idx) 属性 を [i,j] に.
- vtoidx(x_i) は i を戻す. 属性の検索なので高速. idx 属性が無い場合は i を設定.
+end:
- idxtov 関数は 関数名にも使えるようにする --> 微分環対応.
+begin: idx|
+@subsection Index つき変数
+
+end:
+
+begin: idxtov(X,I)
+ idxtov({X},{I}) は変数 {X}_{I} を戻す.
+ {I} はスカラーかリスト.
+ example:
+ idxtov(x,i) は x_i を戻す.
+ description:
+ idxtov(x,[i,j]) は x_i_j を生成. x_i_i の index (idx) 属性 を [i,j] に.
+
+ @code{util_v()} とほぼ同じ.
+
+ x_i の index (idx) 属性 を i に.
+ base_name 属性を x に.
+ 不定元の属性を利用することにより高速に index をとりだせて index つき変数の
+ 代りができる.
+
+end:
+
+begin: vtoidx(X)
+ vtoidx(x_i) は [x,i] を戻す.
+description:
+ @code{util_index()} とほぼ同様.
+
+ 属性の検索なので高速. idx 属性が無い場合は i を設定.
+
+ idxtov 関数は 関数名にも使えるようにする? --> 微分環対応.
+
qt_function(名前, 引数) --> quote(名前(引数)) を生成.
index 付き関数は微分環の取扱に必要.
+end:
+begin: powerSeries|
+
+@subsection 冪級数, dp の pretty print.
+
巾級数の取扱, dp の pretty print のため.
qt_qttodp(Qobj | vlist, order?) quote から dp を作る.
exponent が数でないと作れず.
@@ -354,5 +447,35 @@ end:
qt_expand, qt_sort, qt_ht, qt_rest, qt_mtov も基礎関数として欲しい.
-/*&generate-epilogue
-*/
+end:
+
+begin: MonomialSimplifier|
+
+@subsection モノミアルを標準形へ (builtinで?)
+
+example:
+ x^1 --> x
+ (x*y)*(z*t) --> x*y*z*t
+ x*2*y*4 --> 8*x*y (指定した変数以外は可換とする)
+ x*x^3 --> x^4
+ x*(-y)*z --> -x*y*z
+ ((x)) --> x これは noro_simplify.rr noro_simplify.remove_paren() が対応
+
+
+end:
+
+4/15 夜. 実装は明日講義の準備の終了後か?
+begin: qt.gtlex(f,g)
+{f} は {g} より quote tree の lex order で大きい.
+description:
+ quote tree の lex order は次のように決める.
+ @itemize
+ @item 不定元は不定元の順序.
+ @item 不定元より +, - , *, /, ^ 等の node は大きい.
+ たとえば x < power(x,2) (power(x,2) は x^2 の意味)
+ @item あとは再帰的. times(x,y) < power(x,y) だが,
+ times(x,y) と times(p,q) は x と p の比較, これできまらないなら,
+ y, q の比較.
+ @end itemize
+
+end:
\ No newline at end of file