Probability of All Combinations of Given Events
Haskell, 86 bytes

unlines.map(\p-&gt;show(fst&lt;$&gt;p)++" = "++show(product$snd&lt;$&gt;p)).mapM(\x-&gt;[(0,1-x),(1,x)])


Usage example:

Prelude&gt; putStrLn $ unlines.map(\p-&gt;show(fst&lt;$&gt;p)++" = "++show(product$snd&lt;$&gt;p)).mapM(\x-&gt;[(0,1-x),(1,x)]) $ [0.55, 0.67, 0.13]
[0,0,0] = 0.12919499999999998
[0,0,1] = 1.9304999999999996e-2
[0,1,0] = 0.262305
[0,1,1] = 3.9195e-2
[1,0,0] = 0.157905
[1,0,1] = 2.3595e-2
[1,1,0] = 0.320595
[1,1,1] = 4.790500000000001e-2


Most of the bytes are spent for output formatting. If you are only interested in the probability vector it's only 29 bytes:

map product.mapM(\x-&gt;[1-x,x])


How it works:

                    mapM(\x-&gt;[(0,1-x),(1,x)])   -- for each number x in the input
                                                -- list make either the pair (0,1-x)
                                                -- or (1,x). Build a list with
                                                -- all combinations

    map(\p-&gt;                    )               -- for each such combination p
          show(fst&lt;$&gt;p)                         -- print the first elements
          ++" = "++                             -- then the string " = "
          show(product$snd&lt;$&gt;p)                 -- then the product of the second
                                                -- elements

unlines                                         -- joins with newlines