マグマの計算(4)
「エレファントな群とリー代数(2) - エレファント・ビジュアライザー調査記録」でやった「モノイドの左逆元・右逆元」の問題をやります。これも基本的には Python に書き換えただけになっています。前回のプログラムでは表示される式が多すぎるので、式を選択することができるようにします。クラス TransitiveTransformer に以下のメソッドを追加します。
def transitive_select(self, deg, sel_list): for n in range(1, deg + 1): transitive_transformer.compose_transitive_all() print(f"結果({n}回目)のリスト") for his in transitive_transformer.history: print(" = ".join([e.texstr() for e in his])) sel = sel_list[n - 1] - 1 # この要素だけにする self.expressions = [self.expressions[sel]] self.history = [self.history[sel]]
sel_list で各回の選択する式を指定します。[2, 9, 1, 12, 1] のときは 1 回目には 2 番目の式、2 回目には 9 番目の式…を選択します。
eq1 = custom_transformer.transform(parser.parse("(X*Y)*Z=X*(Y*Z)")) eq2 = custom_transformer.transform(parser.parse("e*X=X")) eq3 = custom_transformer.transform(parser.parse("X*e=X")) eq4 = custom_transformer.transform(parser.parse("x_l*x=e")) eq5 = custom_transformer.transform(parser.parse("e=x*x_r")) # 左辺が最初の式(右辺は使わない) exp = custom_transformer.transform(parser.parse("x_l=x_r")).left # 入力として等式のリストを提供 equations = [eq1, eq2, eq3, eq4, eq5] print("元の等式のリスト") for eq in equations: print(eq.texstr()) transitive_transformer = TransitiveTransformer(equations, exp) transitive_transformer.transitive_select(5, [2, 9, 1, 12, 1])
結果
元の等式のリスト
結果(1回目)のリスト
結果(2回目)のリスト
結果(3回目)のリスト
結果(4回目)のリスト
結果(5回目)のリスト