Summary: Introduce machinery to do disjunctive HIL domains and use it for pulse, but only in a mode that preserves the existing behaviour. The disjunctive domain is a functor that turns any (HIL for now) transfer function module into one operating on sets of elements of the original domain. The behaviour of joins (and widenings, which are equal to joins) can be chosen when instantiating the functor among 3 behaviours: - `` `JoinAfter n`: when the set of disjuncts gets bigger than `n` the underlying domain's join is called to collapse them into one state - `` `UnderApproximateAfter n`: when the sest of disjuncts gets bigger than `n` then just stop adding new states to it, drop any further states on the floor. This corresponds to an under-approximation/bounded approach. - `` `NeverJoin` The widening is always of the form `` `UnderApproximateAfterNumIterations max_iter` for now since the only user is pulse and I'm not sure what else would be useful. Picking `` `JoinAfter 0` gives the same results as the non-disjunctive domain since the underlying `join` will always be called. Make pulse use this mode for now, and tune it in a next diff. Reviewed By: mbouaziz Differential Revision: D13431375 fbshipit-source-id: b93aa50e7master
parent
d9a014f71b
commit
156f5946c2
Loading…
Reference in new issue