SMTLIB Theory of Nominative Data In this article, we describe the theory of nominative data, formulate the basic principles of the compositionnominative approach, define the class of nominative data and functions, and describe a calculus for the Theory of Nominative Data. By using nominative data, we can increase the adequacy level of representation of data structures, functions, and compositions that are used in programming languages. Thus, in terms of compositionnominative approach, we can build program verification system based on a unified conceptual basis. Computeraided verification of computer programs often uses SMT (satisfiability modulo theories) solvers. A common technique is to translate preconditions, postconditions, and assertions into SMT formulas in order to determine whether required properties can hold. The SMTLIB Standard was created for forming a common standard and library for solving SMT problems. Now, it is one of the most used libraries for SMT systems. Formulas in SMTLIB format are accepted by the great majority of current SMT solvers. The theory of nominative data is of interest for software modelling and verification, but currently lacks support in the SMTLIB format. In the article, we propose the declaration for the theory of nominative data for the SMTLIB Standard 2.6.

Elaborating dependent (co)pattern matching: No pattern left behind In a dependently typed language, we can guarantee correctness of our programmes by providing formal proofs. To check them, the typechecker elaborates these programs and proofs into a lowlevel core language. However, this core language is by nature hard to understand by mere humans, so how can we know we proved the right thing? This question occurs in particular for dependent copattern matching, a powerful language construct for writing programmes and proofs by dependent case analysis and mixed inductioncoinduction. A definition by copattern matching consists of a list of  clauses  that are elaborated to a  case tree , which can be further translated to primitive  eliminators . In previous work this second step has received a lot of attention, but the first step has been mostly ignored so far. We present an algorithm elaborating definitions by dependent copattern matching to a core language with inductive data types, coinductive record types, an identity type, and constants defined by welltyped case trees. To ensure correctness, we prove that elaboration preserves the firstmatch semantics of the user clauses. Based on this theoretical work, we reimplement the algorithm used by Agda to check lefthand sides of definitions by pattern matching. The new implementation is at the same time more general and less complex, and fixes a number of bugs and usability issues with the old version. Thus, we take another step towards the formally verified implementation of a practical dependently typed language.