Software Engineering Institute Carnegie Mellon

Product Line Systems Program
Predictable Assembly from
Certifiable Components
PACC Technologies
Collaborations
Downloads
Publications
Glossary
Workshops and Conferences
Software Product Lines
Software Architecture

Copper User Manual

Table of Contents

Introduction

The general goal of Copper is to verify that an implementation conforms to its specification. The implementation is always a C program and hence quite standard. However, Copper can be used to play around with several kinds of specifcations and notions of conformance. For a quick overview of how to start using Copper, check out the tutorial.

Back to Top

Usage

Copper is a command line tool. It is invoked with a set of options and input file names. The input files are either pre-processed C files with extension .pp or specification files with extension .spec. The C files must be pre-processed with CIL. The specification files must obey this grammar. The most basic way to run Copper is as follows:

   
copper  --default --specification <specification name> <filenames>
The above invocation will cause Copper to check simulation conformance between the FSP specification identified by "specification name" and the program defined by the input C files. To verify SE-LTL specifications, use the following command line:

   
copper  --default --ltl --specification <specification name> <filenames>

Other common types of verification tasks are: (1) checking trace containment between a program and an FSP specification, and (2) checking for the unreachability of ERROR states in an FSP specification. These are achieved, respectively, by the following two command lines:

   
copper  --default --trace --specification <specification name> <filenames>

   
copper  --default --reach --specification <specification name> <filenames>

In reality, "--default" is just a synonym for the following set of options which, most often, appear to work best in practice:

   
--useAllSpecs --ceShowAll --stat --cegar --symbolic

The general usage of Copper is:

    
copper <option | filename> <option | filename> ...

In general, anything on the command line that begins with a minus sign is treated as an option. Everything else is treated either as an argument of the preceeding option or a filename. Later options take precedence over earlier ones whenever applicable. Thus, "--trace --reach" is equivalent to "--reach". Thus, "--default" should be one of the first options you supply to Copper. We now describe the set of all available Copper options in more detail. Options are grouped together into broad categories. Options within the same category are more closely related to each other than options belonging to a different category.

Back to Top

Options

In the following we write "by default" to mean the situation when no command line options are supplied to Copper, and not the situtation when the option "--default" is provided. The following options affect the global behavior of Copper. The following options control the type of verification to be carried out. By default, Copper checks simulation between the C program and the specification. In the rest of this document, we refer to trace containment, ERROR state reachability, and the detection of assertion failure collectively as "safety" verifications since all of them boil down to model checking safety properties. The following options control the verification mechanism used by Copper. By default, Copper uses a HORNSAT based model checker for simulation and safety verification, and an explicit state model checker for SE-LTL model checking and deadlock detection. The following options control the type of Assume-Guarantee reasoning done by Copper. By default, Copper does not perform Assume-Guarantee reasoning. Also, Assume-Guarantee reasoning is only supported for simulation, safety verification, and deadlock detection.
The following options control the degree of inlining used by Copper. By default, Copper inlines according to the "inline" directives in the specification files.
The following options control the initial set of "seed" predicates used by Copper. Seed predicates are essentially branch conditions from which other predicates are inferred at various control flow points by propagating weakest preconditions. By default, there are no initial seed predicates and the only initial predicates are those appearing in the specification. The following options control the abstraction refinement used by Copper. By default, Copper does no refinement and will terminate with the model checking result on the first abstract model.
The following options control the theorem prover used by Copper. The default theorem prover is Simplify.
The following options control the SAT solvers used by Copper. By default, Copper uses ZChaff.
The following options control the information displayed as part of the counterexamples. By default, only the sequence of the control locations from the program that appear in the counterexample are displayed. The following options control various statespace reduction techniques used by Copper for efficient verification.
The following options achieve miscellaneous purposes. The following options control the aspects of Copper related to proof generation. The following options control the aspects of Copper related to proof-carrying code. For these options to work, a version of gcc that generates PowerPC binaries must be installed as "gcc-ppc".  Also, the target C program must be called "pcc-test.c". Back to Top