Theory and Practice of Logic Programming



Decomposing non-redundant sharing by complementation


ENEA ZAFFANELLA a1 2 , PATRICIA M. HILL a2 1 and ROBERTO BAGNARA a3 2
a1 Department of Mathematics, University of Parma, Italy (e-mail: zaffanella@cs.unipr.it)
a2 School of Computing, University of Leeds, Leeds, UK (e-mail: hill@comp.leeds.ac.uk)
a3 Department of Mathematics, University of Parma, Italy (e-mail: bagnara@cs.unipr.it)

Abstract

Complementation, the inverse of the reduced product operation, is a technique for systematically finding minimal decompositions of abstract domains. Filé and Ranzato advanced the state of the art by introducing a simple method for computing a complement. As an application, they considered the extraction by complementation of the pair-sharing domain PS from the Jacobs and Langen's set-sharing domain SH. However, since the result of this operation was still SH, they concluded that PS was too abstract for this. Here, we show that the source of this result lies not with PS but with SH and, more precisely, with the redundant information contained in SH with respect to ground-dependencies and pair-sharing. In fact, a proper decomposition is obtained if the non-redundant version of SH, PSD, is substituted for SH. To establish the results for PSD, we define a general schema for subdomains of SH that includes PSD and Def as special cases. This sheds new light on the structure of PSD and exposes a natural though unexpected connection between Def and PSD. Moreover, we substantiate the claim that complementation alone is not sufficient to obtain truly minimal decompositions of domains. The right solution to this problem is to first remove redundancies by computing the quotient of the domain with respect to the observable behavior, and only then decompose it by complementation.


Key Words: Abstract interpretation; domain decomposition; complementation; sharing analysis.


Footnotes

1 This work was partly supported by EPSRC under grant GR/M05645.

2 The work of the first and third authors has been partly supported by MURST project “Certificazione automatica di programmi mediante interpretazione astratta.”