まつもと ゆきひろです

In message "[ruby-math:00710] Re: Scalar class?"
    on 02/04/22, daisu-ik <daisu-ik / is.aist-nara.ac.jp> writes:

|だと思うと、a, b, c をそれぞれ "数に対応するオブジェクト" とするとき
|
|  1. ある順序 < のもとで Comparable (全順序) でなければならない
|  2. 加法が定義できて、Comparable で考慮した順序と矛盾しない:
|     a < b ならば a + c < b + c が必ず成り立つ
|
|の二条件が必要だろうと思います。
|
|さらに #step が必ず有限回で停止することを保証する必要があるならば、
|  3. 零元 0 が存在して、 任意の a に対し 0 < a  
|が必要です。
|
|1. 2. 3. をみたす数のクラスを ordered monoid と呼んでいます。
|また、順序 < が 2. 3. を満たすとき < は admissible であるといいます。

そうなんですか。そのような条件が必要だろうとは思っていて、そ
れに対する名称をここではScalarと呼んでました。勉強になります。

|具体例をあげると、Complex は数学的に意味のある順序は持たないと思います。
|(Complex は議論の余地はあると思いますが…)
|
|  したがって、Complex がそもそも Numeric なのか?
|   (Numeric は Comparable を include しているから)
|  という、昔から議論されている問題(*)とかぶるんじゃないかなあ。
|  (*) [ruby-talk] Subject: inconsistence in class complex 

たぶんそうだと思います。ちょっと自分の中で整理が出来てきまし
た。ありがとうございます。

推測ですが、石塚さんは四則演算が定義されている系として
Numericをとらえたのではないかと思います。もちろんNumericを定
義した当の本人があまり考えずに定義してるんでそれが正しいとも
間違いともいえないのですが。

ですから、考えるべきことは、Numericってのは四則演算の定義で
きるものなのか、それとも"orderd monoid"なのかってことです。
あるいは別のなにかなのかもしれませんが。

|逆に、 ordered monoid なら #step は定義できます。
|Numeric = ordered monoid です。
|
|Scalar という特別な名前は、どのような特徴を持っていますか?

さきほどのメールにおけるScalarはまさにordered monoidというも
のです。matrix.rbで定義されているScalarとは別物です。

Numericが実はordered monoidを表現しているものだとするならば
(というか、そう決めるならば)ComplexをNumericのサブクラスから
外す必要がありますよね。これには分かりやすいというメリットも
ありますが、デメリットもあるかもしれません。

私自身はstepを定義してもしばらくComplexの存在に気がつかなかっ
たくらいなので、ordered monoidという概念に親近感を覚えますが。

逆にNumericは複素数も含むより大きな存在である(現状のクラス階
層の追認)という結論になれば、ordered monoidを表現する別のク
ラス、モジュールが必要になります。

が、(胸を張っていえることじゃありませんが)私にはそれを判断す
る能力はないんで、みなさんの意見を聞きたいなと。

                                まつもと ゆきひろ /:|)