Skip to content

Instantly share code, notes, and snippets.

@45deg
Last active August 29, 2015 14:20
Show Gist options
  • Save 45deg/c8c7758979907a838578 to your computer and use it in GitHub Desktop.
Save 45deg/c8c7758979907a838578 to your computer and use it in GitHub Desktop.
Trace Monoid について

Trace Monoid について

Monoid

集合S (台集合と呼ぶ) と二項演算 • : S → S を与えられたとき、

  • 任意の a, b, c ∈ S に対して、 (a • b) • c = a • (b • c) [結合法則]
  • ある元 e ∈ S が存在し、任意の a ∈ S に対して e • a = a • e = a [単位元の存在]

を満たすとき モノイド という。 (文脈におおじて二項演算の記号は省略される)

また、任意の元 a, b ∈ S に対し、a • b = b • a を満たすならば 可換モノイド (commutative monoid) という。

上のモノイドの規則から導かれるもの以外に等式関係が存在しないならば、自由モノイド (Free monoid)と呼ばれる。 例えば、「文字列とその結合」は自由モノイドであるが、「非負整数と加法」は自由モノイドではない。(1 + 5 = 3 + 3 等が成り立つ)

Monoid と プログラム

単純なプログラムにおいて、「プログラムの文やブロックとその連接」はモノイドを成す。 (このとき単位元はいわゆるNOPである)

Trace Monoid

Trace Monoid は 別名 free partially commutative monoidである。 つまり、一部の元同士が可換な自由モノイドである。

例:台集合 S = {a,b,c} とし、bc=cb となるTrace Monoidにおいて abbca = abcba = acbba となる。

Trace Monoid とプログラム

台集合として「プログラムのブロック=ジョブ」を取る。また、二項演算として「ジョブの結合」を取る。 このとき、可換な元同士は「独立して実行できるジョブ」、非可換な元同士は「同期的なジョブ/排他処理が必要なジョブ」という意味になる。 つまり、Trace Monoidで並行処理を表現できる。

また、Trace MonoidはDependency Graph(依存関係を表現するグラフ)と同相なので、グラフ理論の手法が利用できる。(逆も然り)

History Monoid

理解したら書きます。(書かないかもね)

参考文献

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment