#1
Posted: Thu Mar 26, 2026 11:42 am
Okay I'm going to say the thing. I'm going to say the thing that apparently nobody here is allowed to say nya~.
Widening operators are a crutch.
Now before GaloisCat shows up and starts copy-pasting from the POPL '77 paper at me (yes, I've read it, yes, the whole thing, yes including the footnotes), let me lay out my actual argument.
The standard pitch for widening is that on abstract domains with infinite ascending chains, you need something to guarantee termination of your fixpoint iteration. The Cousot & Cousot 1977 framework gives you the widening operator ∇ : L × L → L with two properties:
1. It's an upper bound: ∀ a, b. a ⊑ (a ∇ b) and b ⊑ (a ∇ b)
2. For all ascending chains (xₙ), the sequence y₀ = x₀, yₙ₊₁ = yₙ ∇ xₙ₊₁ must eventually stabilize.
Great. Wonderful. Thirty-something years of interval analysis tooling built on this. I get it.
But here's my problem: widening is fundamentally a precision-destroying blunt instrument, and we've all just sort of... accepted this? The classic interval widening just YEETS bounds to ±∞ the moment they look unstable. Yes, you can improve this with threshold widening, with delayed widening, with the whole zoo of refinements that have accumulated in the literature since. But all of these feel like band-aids on a fundamentally awkward design.
My actual thesis: with sufficiently lazy / incremental / demand-driven fixpoint computation, you can often avoid widening entirely, or make it a much rarer last resort, without sacrificing termination. Things like:
-
Demand-driven analysis (only compute what you need; avoid materializing the full ascending chain)
- Semantic unrolling (specialized approaches for loop-dominated domains that don't require extrapolation)
- Finite abstract domain restriction (just... pick a domain with DCC? controversial I know)
- Coinductive / greatest fixpoint approaches for safety properties where you want gfp not lfp
I'm not saying Cousot was wrong in 1977. I'm saying that our default instinct to slap a widening operator on every infinite-height domain and call it a day might be holding back more elegant solutions.
Flame war begins... now? :3
--
/\_/\ FixpointFeline
( ˘ᵕ˘ ) "The least fixpoint is the truth.
> ⊑ < The greatest fixpoint is also fine honestly."