いけがみです.

Numeric::Zero の値(?)が 自然数 0 で,
Numeric::unit の値が自然数 1 としたい気持ちはあります.

作ろうとする数のクラス(Numericのサブクラス)が可換環だったら,
自然数からのスカラー積としての作用が自然に入ります.

N ->  A
n |-> 1_A + 1_A + ... + 1_A (Aの(乗法の)単位元をn回足す)  ........... (*)
0 |-> 0_A (A の零元(加法の単位元))

この意味で, 自然数の 0 と A の零元 0_A が同一視でき,
自然数の 1 と A の単位元 1_A が同一視できます.

上の同一視(*)が上手にかけるのなら,
 >n + Numeric::Zero == Numeric::Zero + n  #=> true
 >n * Numeric::Unit == Numeric::Unit * n  #=> true
はきちんとした意味を持つと思います.

僕はまだ同一視を Ruby でどのように書いたらよいかわかりません.

> ただUnitは実数というよりは群論的な要素なので、必ずしも必要で
> はないでしょう。実用上はむしろsuccやpredのために必要なことが
> 多いかと思います。
群論的というのは僕にはちょっと変に思えます.
環の世界だからこそ,Unit と Zero を区別したいのですよね?
succ や pred のために必要になることもあるのかもしれないのですが,
可換環を考えるときに,
  加法の単位元 Zero だけでなく乗法の単位元 Unitもほしい
というのも強い動機です.

具体例を挙げると, Zp 係数の多項式環クラスを上手に書きたいと思って,
Z の単位元と Zp の単位元を同じように扱いたいときに,
Unit や Zero のように名前が付いていてほしいという気持ちが湧きます.
Zp 係数多項式環は,たとえば代数的暗号の実装にも重要な役割を果たすので,
綺麗に実装できると嬉しいです.
--
池上 大介
Daisuke IKEGAMI <daisu-ik / is.aist-nara.ac.jp>
奈良先端科学技術大学院大学 情報科学研究科
情報処理学専攻 情報基礎学講座 関研究室