【Python】SymPyでべき集合を求める!FiniteSetの活用
集合論において、ある集合から作ることができる「すべての部分集合の集合」を「べき集合(powerset)」と呼びます。PythonのSymPyライブラリを使うと、このべき集合を非常に直感的に求めることができます。
1. 考え方:べき集合(powerset)とは?
例えば、集合 {1, 2} があるとき、その部分集合は以下の4つになります。
- 空集合(何も含まない)
- {1}
- {2}
- {1, 2}(自分自身)
要素の数が n 個のとき、べき集合の要素数は 2のn乗 個になります。SymPyの FiniteSet を使うと、これらを自動的に列挙してくれます。
2. Pythonサンプルプログラム
対話型シェル(REPL)での実行例をベースにした、標準的なスクリプト形式のコードです。powerset() メソッドを呼び出すだけで計算が完了します。
# -*- coding: utf-8 -*- from sympy import FiniteSet def main(): # 1. 有限集合(FiniteSet)を作成 s = FiniteSet(1, 2) # 2. べき集合を求める ps = s.powerset() print("元の集合:", s) print("べき集合:", ps) if __name__ == "__main__": main()
3. 実行結果
元の集合: {1, 2}
べき集合: {EmptySet, {1}, {2}, {1, 2}}
べき集合: {EmptySet, {1}, {2}, {1, 2}}
4. ステップアップ:要素数が増えた場合
べき集合の性質上、元の要素が1つ増えるごとに、結果の数は倍増していきます。
- 要素3個 → べき集合は 8個
- 要素4個 → べき集合は 16個
- 要素10個 → べき集合は 1024個!
SymPyの FiniteSet は、数値だけでなく文字列や記号も扱えるため、抽象的な数学の証明やロジックの確認にも非常に役立ちます。
5. まとめ
Python標準の set にはべき集合を直接求めるメソッドはありませんが、SymPyの FiniteSet を使えば powerset() 一発で解決します。空集合(EmptySet)もしっかり含めてくれるため、数学的な厳密さを求める際にぜひ活用してみてください。
PR