+4  A: 
type IVector =  
    abstract Item : int -> float with get, set
Brian
Excellent. Thank you so much!
Allan
weird, defining the setter in the interface is not necessary in C# ...
Mauricio Scheffer
@Mauricio, yes it is. That is, it is if you want to call the setter via the interface. And if you don't, and only have the getter in the interface, then it's still illegal to uncomment the setter here: "public class V : IV { double IV.this[int x] { get { return 0.0; } /*set { }*/ } }" (recall that all interfaces in F# are explicit).
Brian
@Brian: right, so in order to honor the original interface *and* provide a setter, you have to implement the property separately from the interface.
Mauricio Scheffer
+3  A: 

You can implement DenseVector without changing the original interface while also providing a setter like this:

type IVector = 
    abstract Item: int -> float with get

type DenseVector(size : int) = 
    let data = Array.zeroCreate size
    interface IVector with 
        member this.Item with get i = data.[i]
    member this.Item 
        with get i = (this :> IVector).[i]
        and set i value = data.[i] <- value
Mauricio Scheffer