[[
wikihub
]]
Search
⌘K
Explore
People
For Agents
Sign in
Explore
People
For Agents
Sign in
@jemoka / Jemoka Knowledge Base / raw/concept/kbhstate.md
Suggest edit
Cancel
Submit suggestion
Title
Name
Note
--- title: "state" source: https://www.jemoka.com/posts/kbhstate/ --- Lambda Calculus with state: \begin{equation} e \to (x | \lambda x . e | e e | i | \text{new} | {!e} | e := e) \end{equation} where: \(new\) allocate a new memory location \(x\) and return pointer (initialize \(x\) to \(0\)) \(!e\) deref a pointer \(e := e\), which is assigning the pointee of the memory location at the first argument to the second argument new \begin{equation} \frac{l \not \in dom(S)}{E,S \vdash \text{new} \to l, S[l=0]} \end{equation} that is, we need to return to ourselves a new place in memory dereference \begin{equation} \frac{E, S_0 \vdash e \to l, S_1}{E, S_0 \vdash !e \to S_{1}(l), S_1} \end{equation} assignment \begin{equation} \frac{\begin{align} &E, S_0 \vdash e_1 \to I, S_1 \\ &E, S_1 \vdash e_2 \to v, S_2 \end{align}}{ E, S_0 \vdash e_1 := e_2 \to v, S_2[I=v]} \end{equation} store a store is a mapping from memory locations to values— \begin{equation} S = [l_1 = 1, l_2 = 42] \end{equation} where, \(1\) is stored at location \(l_{1}\), and \(42\) is stored at location \(l_2\) importantly! locations are first class—we can return pointers some observations the store is an extra argument in the environment the store is never copied: no evaluation step uses more than one store, and every store is modified at most once the state is unstructured; the whole store is passed to every step of the evaluation even if only a part is used semantics is very costly sequential order of evaluation must be defined (otherwise your state will be inconsistent) there are uncontrolled amount of aliasing of names unstructured states exposes too much since we only look up a few things at a time