Conway's Game of Life in F#
I thought it would make sense if you created a function alive, which would take care of bounds checking for you. And also simplify the the final expression by using a single sequence expression instead of two like you do.

But I'm not sure it's actually much better than your version:

let amount_neighbours (board: Cell[,]) (pos: int * int) =
    let alive board pos = 
        let (x, y) = pos
        if x &lt; 0 || x &gt;= Array2D.length1 board ||
           y &lt; 0 || y &gt;= Array2D.length2 board then
            false
        else
            board.[x, y] = Alive

    let vicinity x = seq { x - 1 .. x + 1 }

    seq {
        for x in vicinity (fst pos) do
        for y in vicinity (snd pos) do
        if (x, y) &lt;&gt; pos &amp;&amp; alive board (x, y) then
            yield true
    } |&gt; Seq.length