0 people like it.

# From Löb's Theorem to Spreadsheet Evaluation

 ``` 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: ``` ``````// From Löb's Theorem to Spreadsheet Evaluation // based on http://blog.sigfpe.com/2006/11/from-l-theorem-to-spreadsheet.html type seq2<'T> = seq> let rec loeb : seq2 -> 'T> -> seq2<'T> = fun seqs -> seq { for fs in seqs -> seq { for f in fs -> f (loeb seqs) } } let value : 'T -> seq2<'T> -> 'T = fun v _ -> v let nth : (int * int) -> seq2<'T> -> 'T = fun (i, j) cells -> cells |> Seq.item i |> Seq.item j let cells : seq2 -> int> = [[value 1; nth (0, 0)]; [value 2; fun c -> nth (1, 0) c + nth (0, 1) c]; [value 3; fun c -> nth (2, 0) c + nth (1, 1) c]; [value 4; fun c -> nth (3, 0) c + nth (2, 1) c]; [value 5; fun c -> nth (4, 0) c + nth (3, 1) c];] |> Seq.map Seq.cast cells |> loeb |> Seq.toArray // [|seq [1; 1]; // seq [2; 3]; // seq [3; 6]; // seq [4; 10]; // seq [5; 15] |] ``````
Multiple items
val seq : sequence:seq<'T> -> seq<'T>

Full name: Microsoft.FSharp.Core.Operators.seq

--------------------
type seq<'T> = System.Collections.Generic.IEnumerable<'T>

Full name: Microsoft.FSharp.Collections.seq<_>
val loeb : seqs:seq2<(seq2<'T> -> 'T)> -> seq2<'T>

Full name: Script.loeb
type seq2<'T> = seq<seq<'T>>

Full name: Script.seq2<_>
val seqs : seq2<(seq2<'T> -> 'T)>
val fs : seq<(seq2<'T> -> 'T)>
val f : (seq2<'T> -> 'T)
val value : v:'T -> seq2<'T> -> 'T

Full name: Script.value
val v : 'T
val nth : i:int * j:int -> cells:seq2<'T> -> 'T

Full name: Script.nth
Multiple items
val int : value:'T -> int (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.int

--------------------
type int = int32

Full name: Microsoft.FSharp.Core.int

--------------------
type int<'Measure> = int

Full name: Microsoft.FSharp.Core.int<_>
val i : int
val j : int
val cells : seq2<'T>
module Seq

from Microsoft.FSharp.Collections
val item : index:int -> source:seq<'T> -> 'T

Full name: Microsoft.FSharp.Collections.Seq.item
val cells : seq2<(seq2<int> -> int)>

Full name: Script.cells
val c : seq2<int>
val map : mapping:('T -> 'U) -> source:seq<'T> -> seq<'U>

Full name: Microsoft.FSharp.Collections.Seq.map
val cast : source:System.Collections.IEnumerable -> seq<'T>

Full name: Microsoft.FSharp.Collections.Seq.cast
val toArray : source:seq<'T> -> 'T []

Full name: Microsoft.FSharp.Collections.Seq.toArray