InsertSort F# program
Function names in F# are usually written in camelCase. (Though members that are not private should use PascalCase, to adhere to general .Net naming conventions.)
SubArrayBegin is not recursive, so it doesn't need to be rec.
List implements Seq, so you don't need that Seq.ofList.
Collection manipulation functions usually have that collection as the last parameter, so that you can use them with |&gt;.
Your implementation of SubArrayEnd is pretty complicated and inefficient. Instead, you could write it for example like this:

let rec subArrayEnd n list =
    match (n, list) with
    | 0, _ | _, [] -&gt; list
    | _ -&gt; subArrayEnd (n-1) (List.tail list)

There is no reason why your innerInsertSort has to follow the normal imperative version of insert sort so closely and operate on a single list (and use List.nth). Instead, you could have two collections: one where you take from using pattern matching and one where you insert using List.partition and @.
Alternatively, you could use ImmutableList from Microsoft.Bcl.Immutable instead of List for the collection you're inserting into. With that, you can insert into the middle in O(log n) and you can also find the index to insert to in O(log n) using binary search. So it will make your code simpler and also much faster.