Probabilistic Matrix Inspection - Suggested by a paper, implemented by me
In F# we prefer match over if:

if thereIsZeroProbabilityIn column then false
else 
    column
    |&gt; List.filter (fun (_, q) -&gt; q &lt; 100)
    |&gt; thereIsZeroIn
    |&gt; not


Should, instead, be:

match thereIsZeroProbabilityIn column with
| true -&gt; false
| false -&gt;
    column
    |&gt; List.filter (fun (_, q) -&gt; q &lt; 100)
    |&gt; thereIsZeroIn
    |&gt; not


In the case where you're only piping to one other function, you should stay consistent with whether you inline the pipe or not:

 System.Console.ReadKey() |&gt; ignore


and

column
|&gt; List.sortWith comparator


Are inconsistent, generally speaking I prefer to inline the pipe when there is only one pipe happening. (It seems to make be more readable that way.)

column |&gt; List.sortWith comparator


You reduce LoC and make use of the horizontal spacing.

let comparator column1 column2 =
    let sum1 = sumProbabilities column1
    let sum2 = sumProbabilities column2

    sum2 - sum1


In that case you should not be using the local constants, they only create overhead on the stack, they're not used more than once, and they're not cached, so in reality they provide no additional value.

let comparator column1 column2 =
    (sumProbabilities column2) - (sumProbabilities column1)


Again, reduce vertical space a little.

Other than this, I have nothing else to say about the code except maybe to shorten some of the names. It's awful verbose. It's good F# already, my modifications are merely recommendations. Good work. :)