芋の独り言

当ブログへのアクセスは当ブログのプライバシーポリシーに同意したものとみなします.

論理・集合記号について簡単なまとめ

pとqは論理数学では命題のことで,Python等のプログラミングにおける論理演算では変数のことです.

記号 Pythonでの演算子 意味
p ⋁ q p or q 論理和:pまたはq.pかqのどちらか一方が真である.
p ⋀ q p and q 論理積:pかつq.pとqの両方が真である.
p ̅
pの上にーが付いてる
not p 否定:pの真と偽が反転.
p XOR q p ^ q 排他的論理和:どちらか一方が真の時に真になる.

集合(set)はPythonでは集合型として用意?されてます.ホントは違うものかもしれないけど,似たような使い方なので,同じものとして以下に示します.
集合はいろんなものが集まった一つのグループのことで,そのグループに属しているものを集合の要素もしくは元と言います.例としては,

A = { 1,2,3,4,5 }
B = { 整数n | 1≦n≦5}

といった具合に集合を定義して使います.この場合,AとBが集合で,{ }内のものが要素ですねー.この要素がテキスト文書ならば文書集合(document collection)ということで, 情報検索(自然言語処理)係の分野で使いますね.正確には違うかもしれませんが,まぁ似たようなもんです.
ちなみに,集合Bの書き方に関して少し触れておくと,集合Bには整数nが要素として属すと定義されています.そして,その整数nの条件(もしくは命題)が”|”の後ろに記述されています. つまり,集合Bには1以上5以下(”以”の場合はその数字も範囲に含まさることに注意!)の整数が要素として含まさってるよーということです.Pythonで集合Bのような書き方はできないと 思います.やるならfor文やif文を組み合わせて使うことになるでしょう.内包表記でもいいかもしれません.
以下のxは要素です.

記号 Pythonでの演算子 意味
set( ) もしくは { } 空集合:どんな要素も属していない集合
x ∈ A x in A エレメント:xはAに属している.xはAの要素である.
x ∉ A x not in A xはAに属さない.xはAの要素でない.
A ⊆ B A <= B もしくは A.issubset(B) 部分集合(subset):Aの要素が全てBに属する時のAをBの部分集合という.AとBが完全一致も含む.
A ⊂ B A < B 真部分集合:Aに属していない要素がBに存在する場合の部分集合Aのこと.
∀x ∈ A 全称記号:Aに属するすべての要素x
存在記号:~が存在する
A = B A == B 相等:AとBが互いにすべての要素が属している.AとBが等しい.A ⊆ B かつ B ⊆ A の状態.
U 全体集合:すべての集合が属する集合
A ̅ 補集合:ある集合に属さない全体集合の要素からなる集合.
A ̅ = { x | ( x ∉ A ) ⋀ ( x ∈ U ) }
A ⋃ B A|B もしくは A.union(B) 和集合:AまたはBに属する要素の集合.
A ⋃ B = { x | ( x ∈ A ) ⋁ ( x ∈ B ) }
A ⋂ B A & B もしくは A.intersection(B) 積集合(共通集合,重なり):AかつBに属する要素の集合.
A ⋂ B = { x | ( x ∈ A ) ⋀ ( x ∈ B ) }
( a , b ) ( a , b )
Pythonのタプル型で代用可?
順序対:ある集合の要素aとbの2つをペアにしたもの.順序を考慮するため,( a , b ) と ( b , a ) は別物と考える.
A × B 直積集合:Aの要素aとBの要素bに対する全ての順序対 ( a , b ) を要素とする集合.
A × B = { ( a , b ) | ( a ∈ A ) ⋀ ( b ∈ B ) }
A XOR B A ^ B もしくは A.symmetric_difference(B) 排他的和集合(そんな言葉ないかも...):AとBのうち,どちらかにしか属さない要素の集合.

また,集合演算は足す・引くもできます.あと,空白部分は分からないです...分かったら書きますが,そもそもPythonではサポートしてないかもしれないです.
直積集合を関数定義してみると,以下のようになるでしょうか?一応型についても書いてありますが,他の言語のような強制力がなく,コメントの延長扱いなので, あまり意味はありません...以下の場合,集合CがA × Bを意味しています.

def direct_product_set(A: set,B: set) -> set:
    C = set()
    for a in A:
        for b in B:
            C.add((a,b))
    return C

A={1,2,3}
B={1,2}
C=direct_product_set(A,B)
print(C)

参考