忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【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}}

4. ステップアップ:要素数が増えた場合

べき集合の性質上、元の要素が1つ増えるごとに、結果の数は倍増していきます。

  • 要素3個 → べき集合は 8個
  • 要素4個 → べき集合は 16個
  • 要素10個 → べき集合は 1024個!

SymPyの FiniteSet は、数値だけでなく文字列や記号も扱えるため、抽象的な数学の証明やロジックの確認にも非常に役立ちます。

5. まとめ

Python標準の set にはべき集合を直接求めるメソッドはありませんが、SymPyの FiniteSet を使えば powerset() 一発で解決します。空集合(EmptySet)もしっかり含めてくれるため、数学的な厳密さを求める際にぜひ活用してみてください。


PR