# How to find the cumulative probability of a multinomial?

Suppose I want to know the probability that when rolling a fair 3-sided die (faces labeled 1-3) 12 times 1 comes up 4 times, 2 comes up 6 times, and 3 comes up twice. This is straightforward enough using the multinomial formula, but suppose I want to know the probability of "at least" scenarios? For example, what is the probability that after 12 rolls the die shows 3 at least twice, shows 2 at least twice, and shows 1 at least 3 times?

I don't think it's simply a matter of adding probabilities using the standard formula, because "at least" constrains the number of possibilities, and I haven't been able to find any formula or algorithm which shows how to do it correctly.

I suspect there's no simple equation to give you what you need, but a brute force algorithm is pretty easy to implement.

# Python Solution

import collections
import fractions
import itertools as it

def enumerate_rolls(faces, count):
for elems in it.product(range(1, faces + 1), repeat=count):
yield collections.Counter(elems)

def count_successes(count, faces, success_test):

successes, failures = 0, 0

for elems in enumerate_rolls(faces=faces, count=count):
if success_test(elems):
successes += 1
else:
failures += 1

return fractions.Fraction(successes, successes + failures)

if __name__ == '__main__':
print(
count_successes(12, 3, lambda s: s[3] >= 2 and s[2] >= 2 and s[1] >= 3)
)


# Theory

Suppose you have $$N$$ count of dice each with $$F$$ number of faces. The domain of all possible rolls can be modeled as a set of multisets where cardinality equals $$N$$ and the domain is $$\mathbb{Z}_F$$. The goal is to find a subdomain $$S$$ meeting your condition.