“…In other cases, one might be interested in relating two runs of a single program, but, as soon as the control flow can differ between the two runs, the compositional verification problem becomes the same as relating two different programs. This is for instance the case for noninterference, which requires that a program's public outputs are independent of its private inputs [Antonopoulos et al 2017;Banerjee et al 2016;Clarkson and Schneider 2010;Nanevski et al 2013;Sabelfeld and Myers 2003;Sousa and Dillig 2016]. The list of practical applications of relational verification is, however, much longer, including showing the correctness of program transformations [Benton 2004], cost analysis [Çiçek et al 2017;Qu et al 2019;Radicek et al 2018], program approximation [Carbin et al 2012;He et al 2018], semantic diffing [Lahiri et al 2012;Wang et al 2018], cryptographic proofs [Barthe et al 2009[Barthe et al , 2013a[Barthe et al , 2014Petcher and Morrisett 2015;Unruh 2019], differential privacy [Barthe et al 2013b[Barthe et al , 2015Gavazzo 2018;Zhang and Kifer 2017], and even machine learning [Sato et al 2019].…”