#### Within this dialog, you can choose predicates used in merges by predicate abstraction.

An abstraction predicate is a unary mapping from terms of suitable type to formulae. You can construct such mappings here by registering placeholder variables (e.g., `int i` or `java.lang.String s`) and using those in the predicate definition (e.g., `s = null`). For each sort of placeholder predicates, a finite lattice for merges with abstraction is constructed.

Thus, it does not make sense to register multiple placeholders of the same type. Furthermore, each abstraction predicate definition must contain exactly one placeholder which then also determines the type of the predicate.

There are three lattice types you can choose; your choice determines how abstract domain elements will be constructed from the given abstraction predicates. Your options are:

Simple Predicates Lattice
  This lattice type consists out of a bottom element, one abstract domain element for each of your abstraction predicates, and a top element.
Conjunctive Predicates Lattice
  In this lattice, all 2^n combinations of your predicates are combined using conjunction. The iterator of this lattice returns a bottom element, then the conjunction of all n predicates, then all conjunctions of length n-1 of the predicates, and so on. Finally, the top element is returned.
Disjunctive Predicates Lattice
  Similar to the conjunctive lattice, but with disjunctions and reversed order: After the bottom element, the next elements correspond to one predicate each, then follow all disjunctions of length 2, and so on. You have to make sure that at most the disjunction of all predicates is valid, but no combination before.