Differences
This shows you the differences between two versions of the page.
sav08:review_of_fixpoints_in_semantics [2008/04/30 11:03] vkuncak |
sav08:review_of_fixpoints_in_semantics [2015/04/21 17:30] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Review of Fixpoints in Semantics ====== | ||
- | |||
- | ===== Transitive Closure as Least Fixedpoint ===== | ||
- | |||
- | Recall the definition of transitive closure for $r \subseteq D \times D$ a binary relation | ||
- | \[ | ||
- | r^* = \bigcup_{n \ge 0} r^n | ||
- | \] | ||
- | where $r^0 = \Delta_D$. | ||
- | |||
- | **Lemma:** Reflexive transitive closure is the least fixpoint of function $f(r) = \Delta \cup r$, mapping $f : D^2 \to D^2$ | ||
- | |||
- | ===== Meaning of Recursive and Iterative Constructs as Fixpoints of Relations ===== | ||
- | |||
- | Consider program with single loop: | ||
- | while (c) { | ||
- | s; | ||
- | } | ||
- | |||
- | Using tail recursion, we could rewrite it as a procedure p such that | ||
- | |||
- | p = if (c) then (s;p) else skip | ||
- | |||
- | This can be written as | ||
- | \[ | ||
- | p = F(p) | ||
- | \] | ||
- | where | ||
- | F(p) = if (c) then (s;p) else skip | ||
- | |||
- | How to give semantics to recursive definitions? | ||
- | * eliminate recursive by denoting left-hand side as the result of non-recursive function $F$ | ||
- | * look for solution of $p=F(p)$, which contains $p$ twice, so it expresses recursion | ||
- | * we can abstract the question of existence of values of recursive functions using fixpoints | ||
- | |||
- | If $r_s$ is meaning of $s$ and $\Delta_c$ is meaning of //assume( c )//, the meaning is the fixpoint of function | ||
- | \[ | ||
- | f(r) = (\Delta_c \circ r_s \circ r) \cup \Delta_{\lnot c} | ||
- | \] | ||
- | |||
- | Any program can be reduced to a loop: | ||
- | * introduce program counter and iterate until it reaches exit point | ||
- | * more generally, can write an interpreter that interprets the program | ||
- | |||
- | Recall [[Relational semantics of procedures]]. | ||
- | |||
- | What is the fixpoint of the recursive function $f(x)=1+f(x)$ mapping integers to integers? | ||
- | * we need ordering to ensure existence of fixpoints | ||
- | * relations have a natural subset ordering | ||
- | * relation does not always represent terminating computation | ||
- | |||
- | ===== Reachable States and Collecting Semantics ===== | ||
- | |||
- | **Main question:** What values can variables of the program take at different program points? | ||
- | |||
- | We can represent programs by control-flow graphs (CFG). | ||
- | |||
- | **Definition:** Control flow-graph is a graph with nodes $V$, edges $E \subseteq V\times V$ and for each edge $e \in E$ a command $c(e)$, with initial $init$ and final node $final$ | ||
- | |||
- | Program points are CFG nodes. Statements are labels on CFG edges. | ||
- | |||
- | We look at a particular way of representing and computing sets of reachable, splitting states by program counter (control-flow graph node): **collecting semantics**. | ||
- | |||
- | $PS$ - the set of values of program variables (not including program counter). | ||
- | |||
- | For each program point $p$, we have the set of reachable states $C(p) \subseteq PS$. | ||
- | |||
- | The set of all reachable states of the program is $\{(p,s) \mid s \in C(p) \}$. | ||
- | |||
- | Let $p_0$ be initial program counter and $I$ the set of values of program variables in $p_0$. | ||
- | |||
- | The set of reachable states is defined as the least solution of constraints: | ||
- | \[ | ||
- | I \subseteq C(p_0) | ||
- | \] | ||
- | \[ | ||
- | \bigwedge_{(p_1,p_2) \in E} sp(C(p),r(c(p_1,p_2)))) \subseteq C(p_2) | ||
- | \] | ||
- | where $c(p_1,p_2)$ is command associated with edge $(p_1,p_2)$, $r(c(p_1,p_2))$ is relation for this command. | ||