BooleanCountingFunction[kmax,n]
BooleanCountingFunction[{k},n]
BooleanCountingFunction[{kmin,kmax},n]
BooleanCountingFunction[{{k1,k2,…}},n]
BooleanCountingFunction[spec,{a1,a2,…}]
spec で指定されるブール計数関数に対応する変数 aiのブール式を返す.
BooleanCountingFunction[spec,{a1,a2,…},form]
form で指定された形式のブール式を返す.
BooleanCountingFunction
BooleanCountingFunction[kmax,n]
BooleanCountingFunction[{k},n]
BooleanCountingFunction[{kmin,kmax},n]
BooleanCountingFunction[{{k1,k2,…}},n]
BooleanCountingFunction[spec,{a1,a2,…}]
spec で指定されるブール計数関数に対応する変数 aiのブール式を返す.
BooleanCountingFunction[spec,{a1,a2,…},form]
form で指定された形式のブール式を返す.
詳細
- BooleanCountingFunction[spec]は,Functionのように振る舞うブール関数オブジェクトを返す.
- BooleanCountingFunction[spec][a1,a2,…]は明示的ブール式BooleanCountingFunction[spec,{a1,a2,…}]と等価である暗示的表現を返す.
- BooleanConvertはBooleanCountingFunction[spec][vars]を明示的ブール式に変換する.
- BooleanCountingFunction[{kmin,kmax,s},…]は,kmin, kmin+s, …, kmax変数がTrueであればTrueを返す関数を表す.
- 任意の対称ブール関数はBooleanCountingFunctionを使って一意的に表すことができる.
- BooleanCountingFunction[spec,{a1,a2,…},form]では,可能な形式はBooleanConvertに与えられるものと同じである.
- BooleanCountingFunction[spec,{a1,a2,…}]は,デフォルトで式を選言標準形(Disjunctive normal form, DNF)で与える.
例題
すべて開く すべて閉じる例 (1)
スコープ (6)
f = BooleanCountingFunction[2, 4]{f[True, True, False, False], f[True, True, False, True]}g = BooleanCountingFunction[{2}, 4]{g[True, False, True, False], g[False, True, False, False]}h = BooleanCountingFunction[{2, 3}, 4]{h[True, False, True, True], h[True, False, False, False]}i = BooleanCountingFunction[{1, 5, 2}, 5]{i[True, False, True, False, True], i[True, False, False, False, True]}厳密に1個,4個あるいは5個の引数が真であるとき f が真であると指定する:
f = BooleanCountingFunction[{{1, 4, 5}}, 5]{f[False, True, True, True, True], f[False, True, False, False, True]}BooleanCountingFunctionはデフォルトで関数の形で保存される:
f = BooleanCountingFunction[{2, 3}, 5][a, b, c, d, e]BooleanConvertを使って他の形に変換する:
BooleanConvert[f, "DNF"]BooleanConvert[f, "CNF"]明示的な変数のリストが与えられるとBooleanCountingFunctionは自動的に変換される:
BooleanCountingFunction[{2, 3}, {a, b, c, d, e}]BooleanCountingFunction[{2, 3}, {a, b, c, d, e}, "CNF"]Length@BooleanCountingFunction[{5, 15}, Array[a, 20]]関数形を評価する際のパフォーマンスがかなり向上する場合もある:
f = BooleanCountingFunction[{5, 15}, Array[a, 20]];g = BooleanCountingFunction[{5, 15}, 20]@@Array[a, 20];rules = Thread[Array[a, 20] -> RandomChoice[{True, False}, 20]];Timing@(f /. rules)Timing@(g /. rules)BooleanCountingFunction[{3, 4}, 6]@@{a, True, b, False, c, d}BooleanCountingFunction[{3, 4}, 6]@@{a, True, b, True, c, d}BooleanCountingFunction[0, 4]@@{a, b, c, d}BooleanCountingFunction[4, 4]@@{a, b, c, d}BooleanCountingFunction[{4}, 4]@@{a, b, c, d}アプリケーション (4)
最大で k 個,少なくとも k 個,あるいは厳密に k 個の引数が真であるときに真となる新たなプリミティブを作成する:
AtMostK[k_, v_] := BooleanCountingFunction[{0, k}, Length[v]]@@vAtLeastK[k_, v_] := BooleanCountingFunction[{k, Length[v]}, Length[v]]@@vExactlyK[k_, v_] := BooleanCountingFunction[{k}, Length[v]]@@vineqs = Table[(x - Cos[i 2Pi / 6]) ^ 2 + (y - Sin[i 2Pi / 6]) ^ 2 < 1, {i, 0, 5}]{RegionPlot[AtMostK[2, ineqs], {x, -2, 2}, {y, -2, 2}, PlotPoints -> 35],
RegionPlot[AtLeastK[2, ineqs], {x, -2, 2}, {y, -2, 2}, PlotPoints -> 35], RegionPlot[ExactlyK[2, ineqs], {x, -2, 2}, {y, -2, 2}, PlotPoints -> 35]}NIntegrate[Boole[AtLeastK[2, ineqs]], {x, -2, 2}, {y, -2, 2}]Integrate[Boole[AtLeastK[2, ineqs]], {x, -2, 2}, {y, -2, 2}]真となる引数が m を法として k 個である場合に真となるブール関数を定義する:
BooleanModCount[{k_, m_}, v_] := BooleanCountingFunction[{Mod[k, m], Length[v], m}, Length[v]]@@vk=0で m=2のときはXnorになる:
TautologyQ[Equivalent[Xnor@@Array[a, 10], BooleanModCount[{0, 2}, Array[a, 10]]]]k=1で m=2のときはXorになる:
TautologyQ[Equivalent[Xor@@Array[a, 10], BooleanModCount[{1, 2}, Array[a, 10]]]]Table[BooleanModCount[{1, 3}, Join[ConstantArray[True, {k}], ConstantArray[False, {10 - k}]]], {k, 0, 10}]Boole[%]ArrayPlot[BooleanTable[BooleanModCount[{1, 3}, Array[a, 10]], Array[a, 5], Array[a, 5, 6]], ColorRules -> {False -> White, True -> Black}]BooleanSort[v_] := Table[BooleanCountingFunction[{k, Length[v]}, Length[v]]@@v, {k, Length[v], 1, -1}]BooleanTable[BooleanSort[{a, b}], {a, b}]BooleanTable[BooleanSort[{a, b, c}], {a, b, c}]正常に機能するためには3つのコンポーネントのうちの2つが必要な系の,故障までの平均時間を求める:
{𝒟1, 𝒟2, 𝒟3} = {ExponentialDistribution[Subscript[λ, 1]], ExponentialDistribution[Subscript[λ, 2]], ExponentialDistribution[Subscript[λ, 3]]};ℛ = ReliabilityDistribution[BooleanCountingFunction[{2, 3}, {x, y, z}], {{x, 𝒟1}, {y, 𝒟2}, {z, 𝒟3}}];Mean[ℛ]特性と関係 (6)
BooleanCountingFunctionは引数について対称である:
f = BooleanCountingFunction[{1, 2}, 3]f@@@Permutations[{True, False, True}]BooleanCountingFunctionの論理結合は指標に対する集合演算に相当する:
e1 = BooleanCountingFunction[{{1, 3}}, 4][a, b, c, d]∨BooleanCountingFunction[{{1, 4}}, 4][a, b, c, d];e2 = BooleanCountingFunction[{Union[{1, 3}, {1, 4}]}, 4][a, b, c, d];TautologyQ[Equivalent[e1, e2]]基本的な指定はRangeを用いても同じように行うことができる:
f = BooleanCountingFunction[{1, 5, 2}, 5]g = BooleanCountingFunction[{Range[1, 5, 2]}, 5]TautologyQ[Equivalent[f@@Array[a, 5], g@@Array[a, 5]], Array[a, 5]]多くのプリミティブはBooleanCountingFunctionを使って表すことができる:
vars = Array[x, 10];And:
and[v__] := BooleanCountingFunction[{Length[{v}]}, Length[{v}]][v]TautologyQ[Equivalent[And@@vars, and@@vars]]Or:
or[v__] := BooleanCountingFunction[{1, Length[{v}]}, Length[{v}]][v]TautologyQ[Equivalent[Or@@vars, or@@vars]]Nand:
nand[v__] := BooleanCountingFunction[Length[{v}] - 1, Length[{v}]][v]TautologyQ[Equivalent[Nand@@vars, nand@@vars]]Nor:
nor[v__] := BooleanCountingFunction[0, Length[{v}]][v]TautologyQ[Equivalent[Nor@@vars, nor@@vars]]Xor:
xor[v__] := BooleanCountingFunction[{1, Length[{v}], 2}, Length[{v}]][v]TautologyQ[Equivalent[Xor@@vars, xor@@vars]]Xnor:
xnor[v__] := BooleanCountingFunction[{0, Length[{v}], 2}, Length[{v}]][v]TautologyQ[Equivalent[Xnor@@vars, xnor@@vars]]equivalent[v__] := BooleanCountingFunction[{{0, Length[{v}]}}, Length[{v}]][v]TautologyQ[Equivalent[Equivalent@@vars, equivalent@@vars]]majority[v__] := BooleanCountingFunction[{Floor[Length[{v}] / 2] + 1, Length[{v}]}, Length[{v}]][v]TautologyQ[Equivalent[Majority@@vars, majority@@vars]]BooleanCountingFunctionの真理集合の大きさはSubsetsの長さである:
SatisfiabilityCount[BooleanCountingFunction[{5, 10}, 15]]Length[Subsets[Range[15], {5, 10}]]BooleanCountingFunctionの真理集合の大きさは組合せ総和によって与えられる:
SatisfiabilityCount[BooleanCountingFunction[{300, 700}, 1000]@@Array[a, 1000]]Sum[Binomial[1000, k], {k, 300, 700}]%% == %おもしろい例題 (1)
厳密に i 個の変数が真であるときのBooleanCountingFunctionは互いに素な真理集合を与える:
Table[ArrayPlot[BooleanTable[BooleanCountingFunction[{i}, 10]@@Array[x, 10], Array[x, 5], Array[x, 5, 6]], ColorRules -> {False -> None, True -> ColorData["Rainbow"][i / 11]}], {i, 0, 10}]Show[%]テキスト
Wolfram Research (2008), BooleanCountingFunction, Wolfram言語関数, https://reference.wolfram.com/language/ref/BooleanCountingFunction.html.
CMS
Wolfram Language. 2008. "BooleanCountingFunction." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/BooleanCountingFunction.html.
APA
Wolfram Language. (2008). BooleanCountingFunction. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/BooleanCountingFunction.html
BibTeX
@misc{reference.wolfram_2026_booleancountingfunction, author="Wolfram Research", title="{BooleanCountingFunction}", year="2008", howpublished="\url{https://reference.wolfram.com/language/ref/BooleanCountingFunction.html}", note=[Accessed: 16-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_booleancountingfunction, organization={Wolfram Research}, title={BooleanCountingFunction}, year={2008}, url={https://reference.wolfram.com/language/ref/BooleanCountingFunction.html}, note=[Accessed: 16-August-2026]}