エレファント・ビジュアライザー調査記録

ビジュアルプログラミングで数式の変形を表すことを考えていくブロクです。

モノイドの素因数分解(2)

素因数分解の一般化

 S で生成された自由モノイド  S^* の有限部分集合全体を  S^{**} とおきます。モノイドの演算子 *、和集合の演算子 + とすると、 S^{**} * を積、 + を和とする半環となります。積の単位元 1、和の単位元 0 と書きます。

 S^{**} の元  r
 r = s_{1,1} * \cdots * s_{1,n_1} + \cdots + s_{m,1} * \cdots * s_{m,n_m} \ (s_{i,j} \in S)
と表すことができます(この  s_{i,j} r[i,j] と書くことにします)。 f: S \to S^{**}
 f^{**}(r) = f(s_{1,1}) * \cdots * f(s_{1,n_1}) + \cdots + f(s_{m,1}) * \cdots * f(s_{m,n_m})
と定義することにより  f^{**}: S^{**} \to S^{**} に拡張することができます。

素因数分解の部分写像

 S = I + R d: R \to S とします。 s \in S を「素因数分解」する「形式的写像 f(s)

  • (1)  s \in I のとき  s
  • (2)  s \in R のとき  f^{**}(d(s))

と定義します。これは  f_k(s)

  • (k1)  s \in I のとき  s
  • (k2)  s \in R のとき  f_{k+1}^{**}(d(s))

と定義し、 f=f_0, f_1, f_2, \cdots を合成したものを表すとします。

 s \in S に対して  f_k が(k2)にならない  k が存在すれば  f_k f'_k = 1 (恒等写像)で置き換え、各  f_i f'_{i+1} を呼び出すように置き換えた  f'=f'_0, f'_1, f'_2, \cdots, f'_{k-1}, f'_k を合成した「部分写像」を  f' としたとき  f(s) = f'(s) であるとします。

この  f \rho_d とおきます。

順序

 S は順序  \le を持つとします。

 s \in S r \in S^{**} に対して、任意の  i,j に対して  r[i,j] < s であるとき  r < s とします。
任意の  s \in R に対して  d(s) < s であるとします。(*)

 R が順序  \le に関して降鎖条件を満たすならば、すなわち任意の  R の元の列
 a_{1} \geq a_{2} \geq a_{3} \geq \cdots
に対して、ある自然数  n が存在して、
 a_{n} = a_{n+1} = a_{n+2} = \cdots
が成り立つとします。(**)

このとき  \rho_d S から  S^{**} への写像となります。

項の素因数分解

 C = C_0 + C_1 + C_2 + \cdots
 M = C^* (演算子 \cdot または省略します)
 I = C
 R = C \cdot M = \{c \cdot s \mid c \in C, \ s \in M\}
とおきます。

 d: R \to M^{**}
 \displaystyle d(s) = \sum_{n \in \mathbb{N}} \sum_{c \in C_n} \sum_{s = c s_1 \cdots s_n} c * s_1 * \cdots * s_n
とおきます。ここで  \mathbb{N} = \{0, 1, 2, \cdots \} \displaystyle \sum_{s = c s_1 \cdots s_n} s = c s_1 \cdots s_n で、各  s_i単位元ではない  s_1, \cdots, s_n のすべての組についての和を表します。

項の長さの順序を順序とすると条件(*)、(**)が成り立ち、 \rho_d: M \to M^{**}写像となります。

単一化アルゴリズム

(「単一化アルゴリズム(3) - エレファント・ビジュアライザー調査記録」参照)

項全体  T の空ではない有限部分集合全体を  F、代入全体を  \Sigma とします。 U = F + \Sigma とおきます。

 R を元の個数が  2 以上の  F の部分集合  S で、不一致集合が単一化代入  \sigma_S によって単一化可能であるもの全体とします。
 I = U \setminus R とします。

 d: R \to U^{**} \displaystyle d(S) = \sigma_S * S \sigma_S と定義します。

 S に現れる変数の個数の順序を順序とすると条件(*)、(**)が成り立ち、 \rho_d: U \to U^{**}写像となります。

 \rho_d を単一化代入を取得できるように変更すると、単一化アルゴリズムとなります。