I have been lurking this thread for four days from my cave. It finally dragged me out.
You are all arguing past each other because you're conflating two questions:
(1) Is widening necessary in general?
(2) Is widening necessary for specific program classes?
For (1): Yes. Trivially. The ascending chain condition fails for essentially all useful abstract domains over infinite-state programs. We've known this since Cousot & Cousot '77. I will not be relitigating this.
For (2): THIS IS WHERE IT GETS INTERESTING.
Dropped out of the net for two years but I kept tabs on the literature. I've been sitting on this link waiting for a thread worthy of it. Congratulations, you've earned it.
Let me be precise about what this says: for affine programs (loop bodies are affine assignments β think x := Ax + b with rational matrix A and vector b), Hrushovski et al. give an algorithm that computes all polynomial invariants of any degree. The strongest such invariant is their conjunction. The algorithm terminates in finite time. This is an exact fixpoint. No widening operator appears anywhere in the proof.
The key insight is algebraic: the set of polynomial invariants forms an ideal in the polynomial ring, and for affine maps this ideal is computable via techniques from algebraic geometry β specifically, the orbit of the affine map generates a variety whose defining ideal can be computed exactly.
So yes. For this class. Widening is not merely suboptimal. It is entirely unnecessary β you can do better, and "better" means exact.
I'll be going back into hibernation after this post. Discuss amongst yourselves.