Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
sav07_lecture_9 [2007/04/19 11:13] vkuncak |
sav07_lecture_9 [2007/04/19 11:30] vkuncak |
||
---|---|---|---|
Line 32: | Line 32: | ||
\end{equation*} | \end{equation*} | ||
where $a^1,\ldots,a^n$ are variables ranging over a lattice $A$ (one for each control-flow graph node), and $f_k$ are monotonic functions on $A$ (one for each edge in the control-flow graph). | where $a^1,\ldots,a^n$ are variables ranging over a lattice $A$ (one for each control-flow graph node), and $f_k$ are monotonic functions on $A$ (one for each edge in the control-flow graph). | ||
+ | |||
Line 104: | Line 105: | ||
=== Narrowing === | === Narrowing === | ||
- | Once we have reached above the fixpoint (using widening or anything else), we can always apply the fixpoint transformer and improve the precision of the results. | + | Once we have reached above the fixpoint (using widening or anything else), we can always apply the fixpoint operator $G$ and improve the precision of the results. |
+ | |||
+ | If this is too slow, we can stop at any point or use a narrowing operator, the result is sound. | ||
+ | |||
+ | Instead of using the fixpoint operator $G$, we can use any operator that leaves our current value above fixpoint. | ||
+ | |||
+ | See Combination of Abstractions in ASTREE, Section 8.1, define $\Delta$ such that $\gamma(a) \cap \gamma(b) \subseteq \gamma(a \Delta b)$ | ||
+ | * example: take $\sqcap$ as $\Delta$, or even some improved version | ||
=== Reduced product === | === Reduced product === | ||
Line 115: | Line 123: | ||
Reduced product: [[http://www.di.ens.fr/~cousot/COUSOTpapers/POPL79.shtml|Systematic Design of Program Analysis Frameworks]], Section 10.1. | Reduced product: [[http://www.di.ens.fr/~cousot/COUSOTpapers/POPL79.shtml|Systematic Design of Program Analysis Frameworks]], Section 10.1. | ||
+ | |||
+ | Key point: define $\sigma : A_1 \times A_2 \to A_1 \times A_2$ by | ||
+ | \begin{equation*} | ||
+ | \sigma(a_1,a_2) = \sqcap \{ (a_1',a_2') \mid \gamma(a_1') \cap \gamma(a_2') = \gamma(a_1) \cap \gamma(a_2) \} | ||
+ | \end{equation*} | ||
+ | The function $\sigma$ improves the precision of the element of the lattice without changing its meaning. Subsequent computations with these values then give more precise results. | ||