0

私は現在、scalaの圏論について学んでおり、結合性の法則は次のように言っています

(x + y) + z = x + (y + z)

2 つ以上の値を扱う場合は問題ありません

("Foo" + "Bar") + "Test" == "Foo" + ("Bar" + "Test") // true

その場合、順序は関係ありません。しかし、値が 2 つしかない場合はどうでしょう。数値の場合はまだ機能していますが(可換)、文字列で同じことを行うと失敗します。

3+1==1+3 // True
("Foo" + "Bar") == ("Bar" + "Foo") // Not commuative

では、結合性がモノイド法則を満たすために交換性を必要とすると言うのは合法でしょうか? とにかく、文字列モノイドは有効ですか?

4

1 に答える 1

4

では、結合性がモノイド法則を満たすために可換性を必要とすると言うのは合法でしょうか?

いいえ。2 項演算は、結合可能であるために交換可能である必要はありません。("Foo" + "Bar") == ("Bar" + "Foo")false であるという事実は+String.

とにかく、文字列モノイドは有効ですか?

はい、ご利用いただけますMonoid[String]

定義により:

モノイドは、連想二項演算の下で閉じられた集合であり、すべてのinに対して Iなど+の恒等要素を持ちIます。SaS + a = a + I = a

モノイドには少なくとも 1 つの要素が含まれている必要があります。

をa+の二項演算としMonoid[String]ます。任意の 2 つの文字列について、aおよびも であるbため、二項演算は型 に対して閉じられます。厳密な証明がなくても、それが結合的であることもわかっています。a + bStringString

つまり、すべての文字列ab、およびc:

(a + b) + c == a + (b + c)

任意の文字列、および""のため、ID 要素(空の文字列) もあります。aa + "" == a"" + a == a

二項演算も可換であるモノイドは可換モノイドと呼ばれます。Stringそして、操作を使用するための可換モノイドを持つことは明らかにできません+

于 2015-10-05T15:20:32.210 に答える