<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Minimal logic detection and exporting SMT-LIB problems with Dolmen</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Guillaume</forename><surname>Bury</surname></persName>
							<email>guillaume.bury@gmail.com</email>
							<affiliation key="aff0">
								<orgName type="institution">OCamlPro SAS</orgName>
								<address>
									<addrLine>21 rue de Châtillon</addrLine>
									<postCode>75014</postCode>
									<settlement>Paris</settlement>
									<country key="FR">France</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Minimal logic detection and exporting SMT-LIB problems with Dolmen</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">88E0140ADF6657D8CD13A40BEAB452F2</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2025-04-23T17:21+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>provides tools to parse, type, and validate input files used in automated deduction, and in particular problems from the SMT-LIB. This work adds to Dolmen the ability to export in SMT-LIB format any problem that it successfully parsed and typed. More than just printing terms, this work includes the ability for Dolmen to compute the minimal SMT-LIB logic needed for a set of statements, so that problems from other languages can be given an adequate logic when being exported to SMT-LIB format. This also means that Dolmen can now be used to compute the minimal logic of an arbitrary SMT-LIB problem.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Introduction</head><p>Dolmen <ref type="bibr" target="#b0">[1,</ref><ref type="bibr" target="#b1">2]</ref> is a project providing parsers and a typechecker for some of the most commonly used languages in automated deduction, such as SMT-LIB <ref type="bibr" target="#b2">[3]</ref> and TPTP <ref type="bibr" target="#b3">[4]</ref> 1 . Dolmen is used as a validator for the submission of new benchmarks to the SMT-LIB, where it checks that new problems conform to the SMT-LIB specification. While this guarantees that new problems are conformant, problems already in the SMT-LIB do not have such guarantee, and it has been shown in <ref type="bibr" target="#b0">[1]</ref> that there is a small number of problems in the SMT-LIB that are not conformant. Furthermore, manual analysis of problems in the SMT-LIB has revealed that some were misclassified: the logic used by such problems, while correct, was not the minimal logic in which the problems belonged, potentially hampering the efforts of solvers on these, as well as making benchmarks harder to correctly interpret.</p><p>The work presented in this extended abstract is a first step towards building a tool that would help solve these problems, by adding to Dolmen the ability to export to the SMT-LIB format any problem that it parsed and typed successfully. In this case, exporting means more than simply printing a problem in SMT-LIB format. Rather, it means considering a problem made up of statements over arbitrary typed terms, and generating an SMT-LIB problem that is equivalent. One major aspect of this generation is determining an adequate logic, because the input problem may not have an explicit logic (this is the case for languages accepted by Dolmen other than SMT-LIB, such as TPTP, Zipperposition's format <ref type="bibr" target="#b4">[5]</ref> and Alt-Ergo's <ref type="bibr" target="#b5">[6]</ref> native format, called ae) or, in the case of an input problem in the SMT-LIB language, because the original logic is incorrect or not precise enough. This work actually discovered an issue with the current specification of the SMT-LIB which is that there are problems that do not have a single minimal logic. This will be developped in Section 4.</p><p>Another non-trivial aspect of exporting problems to the SMT-LIB format is to respect the syntax and typing conventions of the SMT-LIB language. Indeed, the export feature of Dolmen is not meant only as a formatting tool. Instead, it can already translate problems from other languages to SMT-LIB, and these other languages often have different syntactic conventions than the SMT-LIB language, for instance with respect to variable names, and shadowing. In addition to this translation feature, it is planned to add to Dolmen the ability to transform and rewrite terms before exporting. In such a situation, it would be problematic to try and enforce that each of these transformations/rewrites respect some target language's conventions: what happens if some transformation happens to be used for multiple target languages with different (or even incompatible) conventions ? Instead Dolmen has its own conventions on how it represents terms and the exporting mechanism has the duty of taking as input terms that respect Dolmen's conventions, and generating (or rather printing in this case) terms that respect the target language's conventions, while preserving satisfiability.</p><p>Dolmen is written in OCaml <ref type="bibr" target="#b6">[7]</ref> and is available at https://github.com/Gbury/dolmen, under a BSD2 license. Recent releases include pre-built binaries for Linux, MacOs and Windows, for ease of use.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">The export functionality in practice</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1.">Basic usage and logic detection</head><p>The export functionality of Dolmen is easily used with its binary, by specifying on the command line an input problem, followed by an output filename, as shown in Figure <ref type="figure" target="#fig_0">1</ref>. Dolmen auto-detects both the input and output language in that case, based on the filenames. In order to explicitly specify the output language, one can use the -o lang option, which combined with no output file on the command line will print the result on the standard output. In the example in Figure <ref type="figure" target="#fig_0">1</ref>, one can notice a few changes that Dolmen made to the problem:</p><p>• the declare-fun on line 3 has been changed to a declare-const • an (exit) statement has been added at the end • lastly, Dolmen has automatically detected that there were no quantifiers, and that only integer difference logic was used, resulting in it changing the logic to QF_IDL.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2.">Translating a problem from another language</head><p>Another interesting example is what happens when one tries to translate a problem from another language to SMT-LIB, as shown in Figure <ref type="figure" target="#fig_1">2</ref>. In this example, the input problem is in Alt-Ergo's native language <ref type="bibr" target="#b5">[6]</ref>, which was designed to be very close to OCaml, and in typical ML fashion, it defines the type of polymorphic lists and the length function over these lists 2 . That problem then defines two goals, which are formulas that must each be proved separately, using the context preceding them.</p><p>; i n p u t . ae t y p e ' a l i s t = N i l | Cons o f { head : ' a ; t a i l : ' a l i s t } f u n c t i o n l e n g t h ( l : i n t l i s t ) : i n t = match l w i t h</p><formula xml:id="formula_0">| N i l −&gt; 0</formula><p>| Cons ( _ , l ' ) −&gt; l e n g t h ( l ' ) + 1 end g o a l g1 : ( e x i s t s l : ' a . ( l e n g t h ( l ) &lt;= 4 ) ) g o a l g2 : ( l e n g t h ( N i l ) = 0 ) # dolmen input.ae output.smt2</p><p>; o u t p u t . smt2 ( s e t − l o g i c UFDTLIA ) ( d e c l a r e − d a t a t y p e l i s t ( p a r ( | ' a | )</p><formula xml:id="formula_1">( ( N i l ) ( Cons ( head | ' a | ) ( t a i l ( l i s t | ' a | ) ) ) ) ) )</formula><p>( d e f i n e − f u n − r e c l e n g t h ( ( l ( l i s t I n t ) ) ) I n t</p><formula xml:id="formula_2">( match l ( ( N i l 0 ) ( ( Cons | _ | | l ' | ) ( + ( l e n g t h | l ' | ) 1 ) ) ) ) )</formula><p>( push 1 ) ( a s s e r t ( n o t ( e x i s t s ( ( l ( l i s t I n t ) ) ) ( &lt;= ( l e n g t h l ) 4 ) ) ) ) ( c h e c k − s a t ) ( pop 1 ) ( push 1 ) ( a s s e r t ( n o t ( = ( l e n g t h ( a s N i l ( l i s t I n t ) ) ) 0 ) ) ) ( c h e c k − s a t ) ( pop 1 ) ( e x i t ) In that example in Figure <ref type="figure" target="#fig_1">2</ref>, there are quite a few interesting transformations that have been done by Dolmen :</p><p>• A suitable logic, UFDTLIA has been automatically chosen for the problem 3 . Similarly, the type variable used in the datatype definition has been quoted: indeed Alt-Ergo's native language encourages uses of variables starting with an apostrophe, which are interpreted as type variables. However in SMT-LIB, type variables are not allowed to start with an apostrophe, except if they are quoted<ref type="foot" target="#foot_0">4</ref> . • In the length function's pattern matching, the ML-style wildcard used in the Cons(_, l')</p><p>constructor has also been quoted as required, since _ is a reserved word in SMT-LIB.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>2</head><p>The length in this example is intentionally restricted to integer lists because although SMT-LIB allows polymorphic datatypes, it does not allow polymorphic function definitions.</p><p>3</p><p>In this case, the choice of LIA over IDL is slightly arbitrary: in the presence of the integer types and literals, but without any arithmetic operator, it is currently the default choice, but that may change in the future.</p><p>• Each goal has been translated to a series of push, assert, check-sat, pop, to respect Alt-Ergo's language semantics. • In the first goal, the type of the quantified variable has been inferred to be that of a list of integers • In the second goal, the use of the Nil polymorphics nullary constructor has been disambiguated using the as annotation, as required by the SMT-LIB specification.</p><p>Besides showing the results, these two examples have shown some instances of the normalization process used by Dolmen to make logic detection and language translation easier and scalable. The next section will explain why that normalization is useful, and how it is done.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Exporting from Typed Terms</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1.">Context</head><p>One of the goals of exporting problems in SMT-LIB format in Dolmen is to allow translation of problems from one language into another. The common issue with such endeavor is that the naive approach of writing translations and/or printers from each input language to each output language results in a number of translation/printing function that is quadratic in the number of languages supported, assuming all input language is also an output language, which is the case here. Since Dolmen supports multiple input languages, one would have to write a dedicated translation/printer to SMT-LIB for each input language to account for small differences in semantics of each language. To address this issue, Dolmen uses a common representation into which every input problem is converted, with defined semantics. That representation is then exported to the desired language. Instead of a quadratic number of translation functions (from each input language to each output language), this only requires a linear number of translation functions: one for conversion from each input language to this common representation, and then one export function for each output language. In Dolmen, that common representation is simply called the typed terms.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2.">Parsed and Typed Terms in Dolmen</head><p>Dolmen distinguishes two kinds of terms: the parsed terms and the typed terms. This distinction comes from the architecture of Dolmen which separates parsing from type-checking. Parsers in Dolmen generate parsed terms, which are meant to simply be a structured representation of the input: terms are represented as trees instead of strings. This means that the semantics of a parsed term (or even if it has defined semantics) depends on the input language considered. For instance :</p><p>• The parsed term corresponding to (+ 1 "foo ") can not be given semantics, at least not in any language currently accepted by Dolmen. • The parsed term corresponding to (and a b c) can be given some semantics in SMT-LIB where it is actually syntactic sugar for (and (and a b) c), which can be given its usual semantics. However, other languages may simply prohibit such uses of conjunction, only allowing it to be applied to two arguments. • Similarly, the parsed term corresponding to (+ 1 2.0) can be given a semantic in SMT-LIB where it is actually syntaxic sugar for (+ ( to_real 1) 2.0) , whereas it is a typing error in TPTP.</p><p>That process of assigning semantics to terms that have one <ref type="foot" target="#foot_1">5</ref> is actually done during type-checking: parsed terms are inspected, and those that match the typing rules set by each language are accepted and transformed into typed terms, where they are given semantics independent of any context or language. For instance :</p><p>• Syntactic sugar is expanded, and every operation made explicit e.g., associativity, chainability, implicit to_real operations in SMT-LIB arithmetic, . . .</p><p>• Symbols that may be overloaded in input languages are disambiguated e.g., division can sometimes share the same symbol for integers and reals in inputs, but after typechecking, there are different symbols for euclidean integer division, and real division. • Some builtin symbols may have different arguments (or order of arguments) depending on the languages; in such cases, one order is chosen as the canonical one for the typed terms.</p><p>This can be seen as some kind of normalization step, and it provides useful guarantees. Most notably, it means that Dolmen is easy to use as a frontend for solvers written in OCaml<ref type="foot" target="#foot_2">6</ref> : solvers only have to implement a translation function from Dolmen's typed terms to their own internal terms. That translation function is independent of the input language, and only has to translate the terms according to the semantics given by the documentation in Dolmen. Exporting to SMT-LIB is then simply another application of that idea: instead of translating typed terms to a solver's internal terms, one simply generates strings according to the SMT-LIB language, without worrying about the input language.</p><p>A slight limitation of that approach is that, while one does not need to consider the input language in order to manipulate typed terms, it does not mean that all typed terms can be directly exported in any language as they are. Indeed, Dolmen's typed terms can express all of the problems from multiple input languages: in that sense, the semantics of these typed terms are a superset of each language's semantics. In particular, it can happen that a language has more builtin symbols than another, and it is not obvious how to export a typed term that contains a builtin not available in a given language. Fortunately, in the case of the SMT-LIB, it is the language with the most builtins, and it is almost a superset of every other language supported by Dolmen currently. The only exception is the exponentiation symbol that is present in Alt-Ergo's native language, but is not present in SMT-LIB's theory of integers.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.3.">Printing Typed Terms</head><p>Identifiers, shadowing and renaming Given typed terms, the task of exporting them to SMT-LIB format is now reduced to printing, although some care needs to be taken to respect the SMT-LIB's syntax conventions. The main limitation is that of naming of identifiers, such as quantified variables, function symbols, etc. . . Indeed, all languages have restrictions on what names can be used, but there are no such limitations in typed terms, where names are only used for pretty printing <ref type="foot" target="#foot_3">7</ref> . Therefore names coming from the typed terms need to be checked against the target language's syntax rules, which can result in any of these outcomes :</p><p>• The name is printable as is • The name can be printed if it is quoted • The name cannot be printed at all, and must be renamed to another name that can be printed.</p><p>Additionally, typed terms may use the same name multiple times in the same scope. This is not a problem for most term manipulations, but it becomes problematic when printing terms. This means that in some cases it may also be necessary to rename a variable or constant that could have been printed, but whose name is already used by another variable or constant in scope.</p><p>To address these issues, during printing, Dolmen maintains a bijection between the typed variables and constants in scope, and their printed names (i.e. their name after any potential renaming), to ensure that all variables and constants in scope can be unambiguously printed.</p><p>View While this paper mainly shows examples using the Dolmen binary, Dolmen also provides all of its features as OCaml libraries, which aim at being as versatile as possible. To follow that objective, the SMT-LIB printer in Dolmen (as well as all other printers that will be added in the future), do not operate directly on the typed terms of Dolmen but instead on a view of these terms. This means that a user does not need to use dolmen's typed terms to make use of the printers, but only needs to provide a view function, as well as some other small functions, for intance to compute equality of function symbols. A simplified version of the interface that a view function needs to implement is presented in Figure <ref type="figure" target="#fig_2">3</ref>. Undoing Syntactic Sugar Expansion Lastly, one feature of the SMT-LIB printer in Dolmen is the ability to undo the syntactic sugar expansion that was done during type-checking. Indeed, SMT-LIB defines a few expressions as being syntactic sugar for more complex expressions. Instances of syntactic sugar are expanded by Dolmen during type-checking. While it is correct to print the typed terms after expansion of the syntax sugar, it is useful to try and "undo" the expansion while printing. Indeed, it improves readability of generated problems, and it also results in smaller problems being generated, which is always useful. Therefore, Dolmen tries to "undo" such syntax sugar expansion.</p><p>Currently, Dolmen does recognize and "undo" the expansion of the following syntactic sugars :</p><p>• Type aliases can be defined using the define-sort statement. Such aliases are to be substituted/expanded during type-checking. • In arithmetic using both integers and reals, most (e.g. addition) can take arguments which are either all integers, or all reals. However, if they are applied to one integer argument and a real argument, then it is considered syntactic sugar for an expanded term where the to_real function has been applied to the integer argument. • A few operators/functions in the SMT-LIB are defined as being left associative, right associative, or chainable, which are all syntactic sugar to allow the application of binary functions to an arbitrary number of arguments, by considering it syntactic sugar. As mentioned previously, an instance of that is the and function, which is left associative, meaning that (and a b c) is allowed (even though and is a binary function), and is actually syntactic sugar for (and (and a b) c).</p><p>Most of that work is done during printing. First, nested applications of associative and chainable functions are detected and the n-ary application is printed instead of the expanded form. Separately, the printer maintains a state to keep track of whether the term being printed is directly under an arithmetic operator, in which case the application of the to_real can be omitted.</p><p>Finally, Dolmen only expands type aliases as needed during type-checking applications, and even this expansion occurs on copies of the types that are used specifically to check that typing rules are respected. This means that the original type (before alias expansion) is kept in the typed terms, which enables Dolmen to print the alias when exporting to the SMT-LIB format.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Minimal Logic in the SMT-LIB</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.1.">Minimal Logic detection</head><p>The previous section has detailed how Dolmen handles normalisation of input problems and printing to the SMT-LIB format. This essentially is enough to use Dolmen as a formatter for SMT-LIB problems. However, when translating problems from other languages, a logic has to be chosen for the resulting SMT-LIB problem, since most languages do not have a notion of logic that can be set for each problem. For individual problems of small to medium size, it might be possible to choose a logic manually, and for some languages, it might also be possible to choose a single logic for all problems in that language: most of the languages other than SMT-LIB have very few builtin theories, and could actually be given the UFDTNIRA logic. However, this is not a very satisfying solution. Indeed, using this logic may induce solvers to use expensive algorithms needed to handle complex theories such as non-linear arithmetic, instead of using more optimized algorithm that only works on linear arithmetic or difference logic. Furthermore, always using the same over-estimated logics would also make it harder to compare provers' reasoning capabilities on specific theories, as well as potentially exclude some provers in competitions, since provers are sometimes registered only for some specific and targeted logics.</p><p>Additionally, existing problems in the SMT-LIB library could also benefit from a detection of the minimal logic of a given problem: indeed previous manual analysis proved that some problems could be given a smaller logic than they had been given. All of this motivated the work to add detection of the minimal logic of a problem to Dolmen in the course of this work.</p><p>Most of the work for determining the minimal logic is straightforward: for theories such as FP, BV, S, DT, it is simple to iterate over all the function symbols used and identify to which theory they belong to. A minor level of complexity is introduced due to the overlap between the FP and BV theory, where problems in FP are allowed to use bitvector literals, but that is easily solved by distinguishing uses of builtin function symbols of BV from uses of bitvector literals. Similarly, detecting the presence of quantifiers in terms is easy.</p><p>The most complex part of finding the minimal logic is arithmetic, which is divided in multiple fragments. The number of fragments is a first source of complexity. There are two axis of fragmentation: arithmetic can use integers, reals or both, and arithmetic can be non-linear, linear, or part of difference logic.</p><p>However, the most problematic part is that there are actually much more than the 6 combinations one could think the above two axis provide. Indeed, while integer arithmetic, real arithmetic, and combined arithmetic are defined as theories, this is not the case for linear arithmetic and difference logic. Instead, each logic that uses linear arithmetic (or difference logic) actually defines its notion of linearity (resp. difference logic) in the logic description. This description sometimes refers to the description of another logic to avoid redundancy, but even then, there are two distinct variant of linear arithmetic, and three variant of difference logic. This significantly complexifies the task of finding the minimal logic.</p><p>Fortunately, Dolmen already has code for checking and enforcing each variant during type-checking. This code proved to be a good guide in how to detect and track each variant of arithmetic.</p><p>Dolmen is now able to detect the use of each theory and variant of arithmetic present in any given problem. However, this brought an interesting problem to light: it can happen that some problems do not a minimal logic; these problems can actually belong to many different logics, but not one is truly minimal, and this is because of the fragmentation of the definitions of linearity in arithmetic.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.2.">Problems with no minimal logic</head><p>There are actually two distinct definitions of linear arithmetic that can be found in logic descriptions. In both cases, the complexity of the restriction revolves around uses of multiplication, where terms of the form ( * x c) and ( * c x) are only allowed under some conditions :</p><p>• Most logic 8 requires that • x is a free constant c is an integer or rational coefficient • However, the logics AUFLIA and QF_AUFLIA instead require :</p><p>x is a free constant or a term with top symbol not in Ints c is a term of the form n or (− n) for some numeral n First thing of note is that, according to these definitions, ( * 2 3) is not a valid term in linear arithmetic, since neither 2, nor 3 is a free constant or a term with top symbol not in Ints . Second, and more important, is that, assuming a function f from integers to integers, the term ( * 2 ( f x) ) is accepted in AUFLIA but not in UFLIA, because only the former allows one side of the multiplication to be a term with top symbol not in Ints . This is an actual and real problem for the existence of a minimal logic. Indeed consider the following problem :</p><p>( s e t − l o g i c ALL ) ( d e c l a r e − c o n s t x I n t ) ( d e c l a r e − f u n f ( I n t ) I n t ) ( a s s e r t ( = 0 ( * 2 ( f x ) ) ) ) ( c h e c k − s a t ) ( e x i t )</p><p>One would naturally give this problem the logic QF_UFLIA, since there are no quantifiers, at least one uninterpreted function, and some arithmetic which could be seen as linear. However, It does not belong to that logic, at least according to the current specification (as explained above). The problem is then to chose which logic to give to that problem: as show previously, the QF_AUFLIA logic would fit, but it seems unfortunate that this logic mentions the Array theory, which is not used in our problem. On the other side we could use a non-linear logic, but that would also be less than ideal. Essentially, this is a case where it appears that there is no one minimal logic for this problem, because of somewhat arbitrary restriction imposed by the SMT-LIB specification, and instead in the current state, there could be multiple logics adequate for this problem, but not one truly minimal among them.</p><p>Currently, Dolmen will produce an error for cases such as these, because no truly satisfying solution was yet found on how to solve the issue. It would be a very interesting subject of discussion with the community to see what solution can be found, both for the current version of SMT-LIB, but also for the upcoming version 3, which could be an opportunity to simplify the specification and avoid the very problematic fragmentation that the current specification creates, particularly around linearity. 8 See for instance the specification of QF_LIA <ref type="bibr">[9]</ref> </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Conclusion</head><p>Dolmen is now able to both translate problems from other languages into problems in the SMT-LIB format, as well as reformat and rewrite existing problems in order to minimize their logic. That work is still at the prototype stage, in particular it has not yet been tested at a large scale, and the errors produced are also currently not user friendly. That being said, it has reached a state where it can be used, and members of the community are encouraged to use it and report potential bugs.</p><p>These new features of Dolmen should prove useful to the community, both those managing the SMT-LIB, but also those proposing new problems to the SMT-LIB benchmark library (who could use it to correctly classify their problems without too much work). Lastly, this work could also potentially open new possibilities for the upcoming version 3 of the SMT-LIB language: with a translator being available to translate problems from version 2 to version 3 9 , it might be reasonable to break backwards compatibility, since there would be an easy way to convert a problem from one version to another.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Example of using Dolmen to export an SMT-LIB problem</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: Example of using Dolmen to translate a problem in Alt-Ergo'a native language</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Simplified version of the View signature for printing</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_0">SMT-LIB identifiers can be quoted that is, put between pipes e.g.,|a quoted identifier|.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="5" xml:id="foot_1">One example of terms that do not have semantics is terms that do not type-check.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="6" xml:id="foot_2">Dolmen is currently used as frontend by at least two solvers: Alt-Ergo and COLIBRI<ref type="bibr" target="#b7">[8]</ref>.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="7" xml:id="foot_3">For comparison, unique integers assigned at creation time are used.</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Dolmen: A validator for smt-lib and much more</title>
		<author>
			<persName><forename type="first">G</forename><surname>Bury</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SMT</title>
		<imprint>
			<biblScope unit="page" from="32" to="39" />
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Verifying models with dolmen</title>
		<author>
			<persName><forename type="first">G</forename><surname>Bury</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Bobot</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SMT</title>
		<imprint>
			<biblScope unit="page" from="62" to="70" />
			<date type="published" when="2023">2023</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">The SMT-LIB Standard: Version 2.0</title>
		<author>
			<persName><forename type="first">C</forename><surname>Barrett</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Stump</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Tinelli</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 8th International Workshop on Satisfiability Modulo Theories</title>
				<editor>
			<persName><forename type="first">A</forename><surname>Gupta</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">D</forename><surname>Kroening</surname></persName>
		</editor>
		<meeting>the 8th International Workshop on Satisfiability Modulo Theories<address><addrLine>Edinburgh, UK</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">The Logic Languages of the TPTP World</title>
		<author>
			<persName><forename type="first">G</forename><surname>Sutcliffe</surname></persName>
		</author>
		<idno type="DOI">10.1093/jigpal/jzac068</idno>
	</analytic>
	<monogr>
		<title level="j">Logic Journal of the IGPL</title>
		<imprint>
			<date type="published" when="2022">2022</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<title level="m" type="main">Extending superposition with integer arithmetic, structural induction, and beyond</title>
		<author>
			<persName><forename type="first">S</forename><surname>Cruanes</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2015">2015</date>
		</imprint>
		<respStmt>
			<orgName>École polytechnique</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Ph.D. thesis</note>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<ptr target="https://alt-ergo.ocamlpro.com/" />
		<title level="m">The Alt-Ergo theorem prover</title>
				<imprint>
			<date type="published" when="2024">2024</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<monogr>
		<ptr target="https://ocaml.org/" />
		<title level="m">The OCaml Official website</title>
				<imprint>
			<date type="published" when="2024">2024</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Real behavior of floating point numbers</title>
		<author>
			<persName><forename type="first">B</forename><surname>Marre</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Bobot</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Chihani</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">SMT Workshop</title>
				<imprint>
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<monogr>
		<ptr target="http://smtlib.cs.uiowa.edu/logics-all.shtml#QF_LIA" />
		<title level="m">Official Specification of the QF_LIA logic of SMTLIB</title>
				<imprint>
			<date type="published" when="2024">2024</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<monogr>
		<title level="m">Although Dolmen does not yet have a printer for SMT-LIB vesion 3</title>
				<imprint/>
	</monogr>
	<note>, it is the author&apos;s intention to implement one as soon as SMT-LIB version 3 is released</note>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
