Differences
This shows you the differences between two versions of the page.
sav08:review_of_fixpoints_in_semantics [2008/04/30 10:18] vkuncak |
sav08:review_of_fixpoints_in_semantics [2015/04/21 17:30] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Review of Fixpoints in Semantics ====== | ||
- | **Definition:** Given a set $A$ and a function $f : A \to A$ we say that $x \in A$ is a fixed point (fixpoint) of $f$ if $f(x)=x$. | ||
- | |||
- | **Definition:** Let $(A,\le)$ be a partial order, let $f : A \to A$ be a monotonic function on $(A,\le)$, and let the set of its fixpoints be $S = \{ x \mid f(x)=x \}$. If the least element of $S$ exists, it is called the **least fixpoint**, if the greatest element of $S$ exists, it is called the **greatest fixpoint**. | ||
- | |||
- | Note: | ||
- | * a function can have various number of fixpoints. Take $f : {\cal Z} \to {\cal Z}$, | ||
- | * $f(x)=x$ the set of fixedpoints is | ||
- | * $f(x)=x^2$ the set of fixedpoints is | ||
- | * $f(x)=3x-6$ has exactly one fixpoint | ||
- | * a function can have at most one least and at most one greatest fixpoint | ||
- | |||
- | We can use fixpoints to give meaning to recursive and iterative definitions | ||
- | * key to describing arbitrary long executions in programs | ||
- | |||
- | ===== 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$ | ||
- | |||
- | ===== Relations and Reachable States Fixpoints ===== | ||
- | |||
- | Consider program with single loop: | ||
- | while (c) { | ||
- | s; | ||
- | } | ||
- | |||
- | Using tail recursion, we could rewrite it as 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 | ||
- | |||
- | 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 | ||
- | |||
- | ===== Collecting Semantics ===== | ||
- | |||
- | Particular way of representing and computing sets of reachable, splitting states by program counter. |