<?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">Arrays Reasoning in MCSat</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Ahmed</forename><surname>Irfan</surname></persName>
							<email>ahmed.irfan@sri.com</email>
							<affiliation key="aff0">
								<orgName type="institution">SRI International</orgName>
								<address>
									<addrLine>333 Ravenswood Ave</addrLine>
									<postCode>94025</postCode>
									<settlement>Menlo Park</settlement>
									<region>CA</region>
									<country key="US">USA</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Stéphane</forename><surname>Graham-Lengrand</surname></persName>
							<email>stephane.graham-lengrand@sri.com</email>
							<affiliation key="aff0">
								<orgName type="institution">SRI International</orgName>
								<address>
									<addrLine>333 Ravenswood Ave</addrLine>
									<postCode>94025</postCode>
									<settlement>Menlo Park</settlement>
									<region>CA</region>
									<country key="US">USA</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Arrays Reasoning in MCSat</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">E031BB8ACBC4DF7EE7EEA75869B09918</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>In this paper, we present the support for the (extensional) theory of arrays in the MCSat scheme for SMT solving. We describe its implementation in the (MCSat component of) the Yices2 SMT-solver, allowing Yices2 to solve, for the first time, benchmarks that combine arrays with nonlinear arithmetic. Our experimental results show that this implementation outperforms other state-of-the-art SMT solvers when solving such benchmarks (QF_ANIA + QF_AUFNIA), and also demonstrates decent performance on other SMT logics that involve arrays.</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>A key mathematical concept in the modeling of both software and hardware systems is the concept of (persistent) arrays. For example, arrays are used to model (mutable) array data structure or the memory heap (e.g., Frama-C tool for C) for program analysis <ref type="bibr" target="#b0">[1,</ref><ref type="bibr" target="#b1">2,</ref><ref type="bibr" target="#b2">3,</ref><ref type="bibr" target="#b3">4,</ref><ref type="bibr" target="#b4">5]</ref>, as well as memories <ref type="bibr" target="#b5">[6,</ref><ref type="bibr" target="#b6">7,</ref><ref type="bibr" target="#b7">8]</ref> for hardware design verification. Efficient methods for reasoning about arrays are essential for analyzing and understanding software and hardware.</p><p>Dedicated methods for array reasoning are typically found in Satisfiability Modulo Theories (SMT) solvers, which provide the automated reasoning capabilities of numerous formal methods toolchains. These solvers check the satisfiability of a first-order formula in some background theory 𝒯 (or combination of theories). If the formula is true in some model of the theory(ies), it is said to be satisfiable (SAT). If not, it is said to be unsatisfiable (UNSAT). While most SMT solvers traditionally follow the CDCL(𝒯) <ref type="bibr" target="#b8">[9]</ref> scheme for solving (i.e., deciding) such satisfiability problems, the Model-Constructing Satisfiability (MCSat) <ref type="bibr" target="#b9">[10]</ref> scheme offers a deeper integration of Boolean and theory reasoning that has proved particularly successful for nonlinear arithmetic. MCSat also offers a new explanation functionality generalizing unsat cores to theory reasoning, which provides new algorithms for interpolation <ref type="bibr" target="#b10">[11]</ref> and quantifier-supporting reasoning <ref type="bibr" target="#b11">[12]</ref>.</p><p>Yices2 is a state-of-the-art SMT-solver that implements both the CDCL(𝒯) and MCSat schemes, in two distinct (sub-)solvers. Nonlinear arithmetic is only supported in the MCSat-based solver, which does offer the aforementioned explanation and interpolation functionalities for all of the theories it supports. Until recently, these theories did not include the theory of arrays, which was only supported in the CDCL(𝒯)-based solver. More generally and to the best of our knowledge, no SMT-solver has been supporting arrays in the MCSat approach. Hence, even if a solver uses an MCSat-like procedure to reason about nonlinear arithmetic (e.g., cvc5 <ref type="bibr" target="#b12">[13]</ref>, Z3 <ref type="bibr" target="#b13">[14]</ref>), the nonlinear arithmetic reasoner interacts with the rest of the solver via a traditional theory combination scheme (typically a variant of the Nelson-Oppen scheme <ref type="bibr" target="#b14">[15]</ref>) when trying to solve benchmarks involving both arrays and nonlinear constraints (e.g., benchmarks for the SMT logics QF_ANIA and QF_AUFNIA). Yices2 itself did not support this theory combination, as its CDCL(𝒯) and MCSat components do not interact. In this work, we address this limitation by extending the MCSat component of Yices2 with array reasoning.</p><p>The contributions of this paper are: 1) we describe how to integrate array reasoning in an MCSatbased SMT solver using the concept of weak equivalence graph <ref type="bibr" target="#b15">[16]</ref>; 2) we describe the implementation of that integration in Yices2 -the source is publicly available on GitHub 1 ; 3) we experimentally evaluate our implementation on the array benchmarks from SMT-LIB and compare it against other SMT solvers.</p><p>Notation. We assume the standard many-sorted first-order logical setting with the usual notions of signature, term, formula, and interpretation. A theory is a pair 𝒯 = (Σ, I), where Σ is a signature and I is a class of Σ-interpretations that are the models of 𝒯. A Σ-formula 𝜑 is satisfiable (resp., unsatisfiable) in 𝒯 if it is satisfied by some (resp., no) interpretation in I.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Theory of Arrays.</head><p>Let 𝒯 𝐴 be the standard theory of arrays <ref type="bibr" target="#b16">[17]</ref> with extensionality. We assume sorts for arrays, indices, and elements, and function symbols read and write. Here and rest of the paper, we use 𝑎 and 𝑏 to refer to arrays, 𝑖 and 𝑗 to refer to array indices, and 𝑒 to refer to array elements. The theory contains the class of all interpretations satisfying the following axioms: ∀𝑎, 𝑖, 𝑗, 𝑒. 𝑖 = 𝑗 ⟹ read(write(a, j, e), i) = 𝑒 (idx)</p><p>∀𝑎, 𝑖, 𝑗, 𝑒. 𝑖 ≠ 𝑗 ⟹ read(write(a, j, e), i) = read(a, i) (read-over-write)</p><formula xml:id="formula_0">∀𝑎, 𝑏. (∀𝑖. read(a, i) = read(b, i)) ⟹ 𝑎 = 𝑏 (ext)</formula><p>Related Work. The theory of arrays has been a significant focus in the development of SMT solvers since their early days. Two main approaches have been utilized to decide the theory of arrays: rewritingbased and instantiation-based techniques.</p><p>Rewriting-based techniques address the problem using rewrite rules with a specific ordering to ensure completeness. Some notable work in this category can be found in <ref type="bibr" target="#b17">[18,</ref><ref type="bibr" target="#b18">19]</ref>.</p><p>On the other hand, instantiation-based techniques involve adding instantiations of array axioms, typically done lazily under certain conditions to minimize the number of instantiations. Most CDCL(𝒯)based SMT solvers, such as proposed in <ref type="bibr" target="#b19">[20,</ref><ref type="bibr" target="#b20">21,</ref><ref type="bibr" target="#b21">22,</ref><ref type="bibr" target="#b22">23]</ref>, utilize instantiation-based approaches.</p><p>One specific instantiation-based approach is the weakly equivalent arrays method, as implemented in the CDCL(𝒯)-based SMT solver SMTInterpol <ref type="bibr" target="#b15">[16,</ref><ref type="bibr" target="#b23">24]</ref>, as well as in the CDCL(𝒯) solver in Yices2. <ref type="foot" target="#foot_0">2</ref> Our work leverages weakly equivalent arrays reasoning, integrating it into an MCSat-based SMT solver.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">Weakly Equivalent Arrays</head><p>Our approach uses the weakly equivalent arrays decision procedure proposed by <ref type="bibr" target="#b15">[16]</ref>, which we briefly describe here. The procedure exploits the use of chains of write function applications by introducing the notion of weak equivalence: two arrays connected via a chain of write function application can differ only at finitely many indices. This essentially generalizes the read-over-write axiom to reason about a chain of write applications. The lemmas produced from that reasoning have the advantage of using small number of new terms. In fact, we can compute the set of terms that would appear in those lemmas by scanning the input formula. Note that the finiteness of that set of terms used for generating all lemmas is a key requirement for termination, making MCSat a decision procedure.</p><p>Let 𝜙 be the input formula whose satisfiability is under question and 𝒜 be the set of array terms in 𝜙. </p><formula xml:id="formula_1">𝑎 ≅ 𝑖 𝑏 ∶= 𝑎 ≈ 𝑖 𝑏 ∨ (∃𝑎 ′ 𝑏 ′ 𝑗𝑘.𝑎 ≈ 𝑖 𝑎 ′ ∧ 𝑖 ∼ 𝑉 𝑗 ∧ read(a ′ , j) ∼ 𝑉 read(b ′ , k) ∧ 𝑘 ∼ 𝑉 𝑖 ∧ 𝑏 ′ ≈ 𝑖 𝑏)</formula><p>Lemma 2. Weakeq-ext: Given an equivalence relation ∼ 𝑉 , if array terms 𝑎 and 𝑏 connected via a path 𝑃 in 𝐺 𝑊 and for all indices 𝑖 ∈ 𝐼 𝑛𝑑𝑖𝑐𝑒𝑠(𝑃) we have 𝑎 ≅ 𝑖 𝑏, then 𝑎 ∼ 𝑉 𝑏 holds.</p><p>To produce the full explanation, we need to add equality constraints of the path involved in readover-weakeq and weakeq-ext. Definition 6. Let 𝐶𝑜𝑛𝑑(⋅) (resp. 𝐶𝑜𝑛𝑑 𝑖 (⋅)) be the function that takes as input a path 𝑃 in the weak equivalence graph and computes a condition under which a weak equivalent or weak congruence holds (resp. weak equivalence modulo 𝑖 holds), defined by induction on 𝑃 as follows:</p><formula xml:id="formula_2">𝐶𝑜𝑛𝑑(∅) ∶= 𝑡𝑟𝑢𝑒 𝐶𝑜𝑛𝑑 𝑖 (∅) ∶= 𝑡𝑟𝑢𝑒 𝐶𝑜𝑛𝑑((𝑎 ↔ 𝑏) ⋅ 𝑃) ∶= (𝑎 = 𝑏) ∧ 𝐶𝑜𝑛𝑑(𝑃) 𝐶𝑜𝑛𝑑 𝑖 ((𝑎 ↔ 𝑏) ⋅ 𝑃) ∶= (𝑎 = 𝑏) ∧ 𝐶𝑜𝑛𝑑 𝑖 (𝑃) 𝐶𝑜𝑛𝑑((𝑎 𝑗 ↔ 𝑏) ⋅ 𝑃) ∶= 𝐶𝑜𝑛𝑑(𝑃) 𝐶𝑜𝑛𝑑 𝑖 ((𝑎 𝑗 ↔ 𝑏) ⋅ 𝑃) ∶= (𝑖 ≠ 𝑗) ∧ 𝐶𝑜𝑛𝑑 𝑖 (𝑃) 𝐶𝑜𝑛𝑑(𝑎 ≈ 𝑖 𝑏) ∶= 𝐶𝑜𝑛𝑑 𝑖 (𝑃)</formula><p>, where 𝑃 is a path between 𝑎 and 𝑏, and</p><formula xml:id="formula_3">∀𝑗 ∈ 𝐼 𝑛𝑑𝑖𝑐𝑒𝑠(𝑃).𝑖 ≁ 𝑉 𝑗 𝐶𝑜𝑛𝑑(𝑎 ≅ 𝑖 𝑏) ∶= ⎧ ⎪ ⎨ ⎪ ⎩ 𝐶𝑜𝑛𝑑(𝑎 ≈ 𝑖 𝑏) if 𝑎 ≈ 𝑖 𝑏 𝐶𝑜𝑛𝑑(𝑎 ≈ 𝑖 𝑎 ′ ) ∧ 𝑖 = 𝑗 ∧read(a ′ , j) = read(b ′ , k) ∧𝑘 = 𝑖 ∧ 𝐶𝑜𝑛𝑑(𝑏 ′ ≈ 𝑖 𝑏) if 𝑎 ≈ 𝑖 𝑎 ′ ∧ 𝑖 ∼ 𝑉 𝑗 ∧read(a ′ , j) ∼ 𝑉 read(b ′ , k) ∧𝑘 ∼ 𝑉 𝑖 ∧ 𝑏 ′ ≈ 𝑖 𝑏 Algorithm 1: check-read-over-write-conflict(𝐺 𝑊 , 𝑉, ∼ 𝑉 ) for 𝑎, 𝑏, 𝑖, 𝑗 ∈ 𝑉 such that read(a, i), read(b, j) ∈ 𝑉 do if 𝑎 ≈ 𝑖 𝑏 ∧ 𝑖 ∼ 𝑉 𝑗 ∧ read(a, i) ≁ 𝑉 read(b, j) then return 𝑖 = 𝑗 ∧ 𝐶𝑜𝑛𝑑(𝑎 ≈ 𝑖 𝑏) ∧ read(a, i) ≠ read(b, j); end return NULL;</formula><p>The algorithm 3 presents a decision procedure based on weakly equivalent arrays reasoning for the extensional theory of arrays. The procedure is sound and complete <ref type="bibr" target="#b15">[16]</ref> for the theory. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">MCSat Overview</head><p>MCSat applies CDCL-like mechanisms to perform theory reasoning. (Figure <ref type="figure">1</ref> illustrates the high level flow of the MCSat framework.) The MCSat architecture consists of a core solver, an assingment trail, and reasoning plugins. The core solver explicitly and incrementally constructs models with firstorder variable assignments-maintained in the assignment trail-while maintaining the invariant that none of the constraints evaluate to false. It is also responsible for dispatching notifications (e.g. new term notification) and handling requests from the reasoning plugins. The core solver decides upon assignments (values provided by reasoning plugins) when there is choice, it can propagate them when there is not, and it backtracks upon conflict. One of its key roles is to perform conflict analysis when a reasoning plugin detects a conflicting state. The lemmas learned via conflict analysis are based on theory-specific explanations, provided by reasoning plugins, of conflicts and propagations.</p><p>When formulas are asserted in MCSat, the core solver notifies all plugins of the asserted formulas. The reasoning plugins analyze the formulas and report all relevant terms back to the core. Relevant terms include theory variables and Boolean terms (excluding negations). When computing the value of a compound Boolean term or its negation, relevant terms are the term itself and its closest sub-terms needed for value computation.</p><p>The trail is a key data structure in MCSat, holding relevant term assignments for easy retrieval of the satisfying assignment upon termination of the MCSat search. The trail functions as a partial model constructed by MCSat during the search process, allowing for term evaluation based on the model values of their relevant subterms. A term 𝑡 can be evaluated (or is evaluable) in the trail 𝑀 if 𝑡 has an assignment in 𝑀, or if all closest relevant sub-terms of 𝑡 have been assigned in 𝑀. Evaluation-consistency is maintained in the trail, ensuring that no term evaluates to different values within it.</p><p>The role of reasoning plugins is to provide assignments for decisions, perform propagations, detect conflicts, and produce explanations. So, to implement a new theory in the MCSat framework, we need a reasoning plugin for that theory that must support in decision-making, propagation (including conflict detection), and explanation generation for propagated terms. Moreover, to ensure termination, there is the finite-basis requirement on plugins, i.e. any literals introduced by plugins come from a finite set of literals.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1.">MCSat Equality and Uninterpreted Functions Plugin</head><p>The Equality and Uninterpreted Function (EUF) MCSat-Plugin provides equality reasoning over the uninterpreted sorts and uninterpreted function. The equality reasoning is done by tracking terms of uninterpreted sorts and uninterpreted functions and their trail values in an E-graph <ref type="bibr" target="#b24">[25,</ref><ref type="bibr" target="#b25">26,</ref><ref type="bibr" target="#b26">27]</ref> EUF plugin updates the E-graph when new assignments are made in the trail to the tracked terms. This extended E-graph ensures: 1) If an equivalence class contains an evaluable term 𝑐, then the representative of that class is evaluable; 2) Two evaluable terms 𝑐 1 and 𝑐 2 in the same equivalence class must evaluate to the same value, otherwise this is a source of conflict. The conflict is reported to the core MCSat solver as a set of equalities and disequalities that contributed to the conflict. Propagation and Explanation. The EUF plugin propagates model values of uninterpreted sort terms when two class nodes get merged and one of them is not evaluable. In our implementation we also track equalities between Boolean terms in the E-graph. This allows the EUF plugin to propagate Boolean terms based on equivalence classes. The explanations of these propagations are tracked (or lazily produced), and are provided to the core solver when the propagated terms appear in a conflict when doing conflict analysis and lemma learning. We satisfy the finite-basis requirement because the EUF plugin only "introduces" equalities (disequalities) between terms that already exist in the trail.</p><p>Decision Assignment. The EUF plugin is also responsible for providing assignment values for variables and function applications of uninterpreted sorts. A value to uninterpreted sort term is essentially an integer identifier that the MCSat partial model keeps track of. The EUF plugin maintains a set of infeasible values for each term to be decided (terms that EUF is responsible to provide assignment for).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Extending MCSat-EUF Plugin with Arrays Reasoning</head><p>To be able to do model-based arrays reasoning in MCSat, we extend the EUF plugin with: i) tracking of relevant array terms, ii) array propagation and explanation, iii) array conflict detection, and iv) array decision assignment.</p><p>Relevant Array Terms. The extended EUF plugin tracks array terms, in addition to uninterpreted function terms, as relevant terms when the core solver notifies it about new terms. Array terms include array variables, array write terms, and array read terms. 3 The set of relevant terms returned to the core solver may also include terms not present in the term notified by the core solver. These additional terms are array read terms and indices, as defined by the set 𝑉 (1) in Section 2.</p><p>Example 1. Let read(a, i), write(b, j, e) be the new terms notified by the core solver to the extended EUF 3 Array reads in Yices2 are uninterpreted function applications, so there was no need to extend the EUF plugin for those terms.</p><p>plugin. The relevant array terms set, in this case, is {write(b, j, e), 𝑎, 𝑏} ∪ {read(write(b, j, e), j), read(b, j), 𝑗, 𝑒} ∪ {read(a, i), 𝑖}.</p><p>The main purpose of adding these additional terms is to prompt the MCSat core solver to make decisions on these terms, resulting in assignments to these terms in the trail. This allows us to detect array theory conflicts, for such a trail with assignments, using weakly equivalent arrays reasoning. It is important to note that we are able to satisfy the finite-basis requirement of the extended plugin as weakly equivalent arrays reasoning only uses the tracked terms in the generated arrays lemmas.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Propagation and Explanation.</head><p>For propagation, we rely on the existing EUF propagation mechanism that propagates model values of terms that are unassigned in the MCSat trail. This covers the read terms and array terms that are evaluable in the E-graph but are not assigned in the MCSat trail. Therefore, the explanation procedure of the existing EUF plugin can be used to explain array term propagations.</p><p>Example 2. Let 𝑀 ∶= {read(a, i) ↦ 𝛼 1 , 𝑎 ↦ 𝛼 2 } be an assignment in the solver trail. Suppose the extended EUF plugin deduces, using the E-graph, that the array term 𝑏 is equal to 𝑎 and read(b, j) is equal to read(a, i) -note that 𝑏 and read(b, j) do not have assignments in the trail. The plugin returns the assignment values {𝑏 ↦ 𝛼 2 , read(b, j) ↦ 𝛼 1 } as propagations to the core solver, which adds these assignments to the solver trail.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Array Conflict detection via Weak-Equivalence Graph.</head><p>To check that the equivalence relation (assignment in the trail and E-graph) satisfies the array theory axioms, we can build the weak equivalence graph for every term in 𝑉 that has an assignment in the trail. First, we check the (idx) lemma. If violated, we report its negation as a conflict. Otherwise, we check for generalized read-over-write axiom violation using Algorithm 1. We report the conflict detected by the algorithm. Otherwise, we check for generalized extensionality axiom violation using Algorithm 2. Similarly, we report the conflict detected by the algorithm. If no conflicts are detected, then the current MCSat trail satisfies the arrays axioms.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Array Decision Assignment.</head><p>We use a simple mechanism to make decisions for array variables and array writes. We choose different values for different array terms when making decisions. If two array terms get merged they get equal values via propagation.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.1.">Implementation Details</head><p>We have implemented our approach in the MCSat solver of Yices2 <ref type="bibr" target="#b27">[28]</ref>. The MCSat implementation in Yices2 already supports real/integer arithmetic <ref type="bibr" target="#b28">[29]</ref>, bitvectors <ref type="bibr" target="#b29">[30,</ref><ref type="bibr" target="#b26">27]</ref>, and uninterpreted functions <ref type="bibr" target="#b26">[27]</ref>.</p><p>Here we provide some important details of our implementation.</p><p>Eager Lemma Instantiation. When the core solver notifies the EUF plugin about new write terms, we eagerly instantiate the (idx) axiom for each write and assert the resulting lemma to the solver by adding it to the clause database.</p><p>Relevant Array Terms Set. As described in <ref type="bibr" target="#b15">[16]</ref>, we also optimize our implementation by using a smaller relevant array terms set 𝑉. If the element theory is stably infinite, we do not need to add read(a, i) for every write <ref type="bibr">(a, i, e)</ref>. This optimization has the potential to reduce the number of read terms in 𝑉, resulting in less work for both Algorithm 1 and Algorithm 2. Weak Equivalence Graph Data Structure and Conflict Detection. We utilize the data structure proposed in <ref type="bibr" target="#b15">[16]</ref> to store the weak equivalence graph. Every vertex in the graph corresponds to an array term, and an edge represents a write operation between the two vertices -the direction can inverted during the construction of the graph. This data structure offers an efficient way to detect if two arrays are weakly equivalent (as well as modulo i equivalent). For further details, we recommend referring to Section 7 in <ref type="bibr" target="#b15">[16]</ref>. The reasoning for weakly equivalent arrays, as presented earlier, assumes that we have a model that satisfies the EUF axioms. It is important to note that the MCSat model is built incrementally as the search progresses, unlike in CDCL(𝒯) where the model is built after the reasoning is complete. Therefore, we do not wait till we have a full model that is consistent with the EUF axioms. Instead, we construct the weak equivalence graph as soon as we have a model value for each term in the set 𝑉 (see <ref type="bibr" target="#b0">(1)</ref>). This allows to detect array conflicts earlier than the approach where we wait until the EUF model is complete.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Experimental Evaluation</head><p>Solvers and Benchmarks. We refer to the implementation of our proposed approach in Yices2 as Yices2-MCSat-we have used the git commit #17369e6. To evaluate its performance, we have done experiments on various quantifier-free logic benchmarks containing arrays from the SMT-LIB <ref type="bibr" target="#b30">[31]</ref> release 2023 <ref type="bibr" target="#b31">[32]</ref>, including QF_AX, QF_ABV, QF_AUFBV, QF_ALIA, QF_AUFLIA, QF_ANIA, and QF_AUFNIA. We have evaluated the different optimizations of our implementation on the QF_AX benchmarks. Moreover, we have compared the optimized version against cvc5 <ref type="bibr" target="#b12">[13]</ref> (version 2024-03-25-a40d28f), MathSAT5 <ref type="bibr" target="#b32">[33]</ref> (version 5.6.10), and Z3 <ref type="bibr" target="#b13">[14]</ref> (version 4.13.0). Yices2 (git commit #17369e6) and Bitwuzla <ref type="bibr" target="#b33">[34]</ref> (version 0.4.0) have been also included in the experiments for the supported logics.</p><p>Experimental Setup. The experiments were conducted on a 96-core AMD-CPU server running Ubuntu 20.04.6 LTS. We used a time limit of 3 minutes and a memory limit of 8 GB for each benchmark solved by the solvers.</p><p>The results are presented in tables 1 to 5. Each table provides information on the logic category, total number of benchmarks in the top row. The solved column shows the number of solved instances, the sat/unsat column shows the number of solved satisfiable/unsatisfiable instances, the time column shows the total solving time for each solver. The aggregated results are also presented in Figure <ref type="figure" target="#fig_0">2</ref>, showing cactus plots of different logics. <ref type="table" target="#tab_3">1</ref> displays the results of evaluating various options of our implementation on the arrays (QF_AX) benchmarks.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Evaluation of Optimizations. Table</head><p>The default option, Yices2-MCSat, incorporates all optimizations outlined in Section 4.1. These optimizations include: a) utilizing a smaller relevant array term set, b) eagerly adding the (idx) lemma when the core solver detects a write to the EUF plugin, and c) checking for array conflicts when all relevant array terms have been assigned a value in the trail. Yices-MCSat-no-opt-a and Yices-MCSat-noopt-b refer to versions without optimization a and optimization b, respectively. Yices-MCSat-no-c-1 and Yices-MCSat-no-c-2 are versions without optimization c, with the former checking for array conflicts (early check) whenever the E-graph does not identify a conflict, and the latter checking for array conflicts (late check) when each term in the E-graph has an assignment in the trail. The results clearly indicate the significance of all optimizations, with optimization a standing out as the most critical. Additionally, we were able to replicate the impact of optimization a, as proposed in <ref type="bibr" target="#b15">[16]</ref>.</p><p>Comparison Againts Other SMT solvers. In Table <ref type="table" target="#tab_1">2</ref>, results for the arrays (QF_AX) benchmarks are shown. Yices2-MCSat solves all the benchmarks and performs competitively with other solvers, even solving more benchmarks than cvc5. Table <ref type="table">3</ref> displays results for the arrays with nonlinear arithmetic (QF_ANIA and QF_AUFNIA) benchmarks. In this category, Yices2-MCSat demonstrates its strength by solving the highest number of benchmarks compared to other solvers, with a couple of benchmarks lead over MathSAT5. <ref type="foot" target="#foot_1">4</ref> We can notice the complementarity of the various approaches in Figure <ref type="figure" target="#fig_0">2b</ref>.</p><p>For the arrays with linear arithmetic (QF_ALIA and QF_AUFLIA) benchmarks in Table <ref type="table">4</ref>, Yices2-MCSat competes closely with cvc5 and Z3, although it falls behind MathSAT5 and Yices2 in terms of the number of benchmarks solved. The longer solving time for Yices2-MCSat in this category may be due to its use of CAD-based <ref type="bibr" target="#b34">[35]</ref> nonlinear reasoning engine even for linear problems.</p><p>Table <ref type="table">5</ref> presents the results for the arrays with bitvectors (QF_ABV and QF_AUFBV) benchmarks. Yices2-MCAST's performance is better than cvc5 but not on par with other solvers. Yices2-MCSat uses word-level model-based reasoning for bitvector constraints, which is less efficient than the bit-blasting approach used by the other solvers on SMT-LIB bitvector benchmarks containing bitwise operations. This difference in approach may explain Yices2-MCSat's performance on these benchmarks.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.">Conclusion and Future Work</head><p>We have presented a new MCSat-based solver for the extensional theory of arrays. The array decision procedure at its core incorporates EUF and weakly equivalent arrays reasoning. By using the weakly equivalent arrays reasoning, we meet the finite-basis requirement of the MCSat framework. Our approach has been implemented in the Yices2 SMT solver, enabling it to tackle array problems involving nonlinear arithmetic. The performance of this new solver is competitive with the current state of the art and excels in handling array problems with nonlinear arithmetic constraints. Our future plans include expanding the implementation to include constant arrays and the diff function <ref type="bibr" target="#b18">[19,</ref><ref type="bibr" target="#b35">36]</ref>, which will allow us to experiment with generating quantifier-free array interpolants using the model-based interpolation procedure <ref type="bibr" target="#b10">[11]</ref> in Yices2-MCSat. Ultimately, we aim to use this to model-check array-based transition systems <ref type="bibr" target="#b36">[37,</ref><ref type="bibr" target="#b37">38]</ref> in the Sally <ref type="bibr" target="#b38">[39,</ref><ref type="bibr" target="#b39">40]</ref> model-checker.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: Cactus Plots of solvers performance on differnt benchmarks: a) Arrays-only, b) Arrays + Nonlinear Arithmetic, c) Arrays + Linear Arithmetic, d) Arrays + Bitvector.</figDesc><graphic coords="9,72.00,235.25,225.64,140.62" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head></head><label></label><figDesc>A weak equivalence graph 𝐺 𝑊 is an undirected graph where the vertices are the array terms 𝒜 and the edges are either unlabelled or labelled with the indices used in the write function application, defined as follows: 1) there is an unlabelled edge 𝑎 ↔ 𝑏 if 𝑎 ∼ 𝑉 𝑏, and 2) there is a labelled edge 𝑎 𝑖 ↔ 𝑏 if either 𝑎 is of the form write(b, i, ⋅) or 𝑏 is of the form write(a, i, ⋅). Given a path 𝑃 in 𝐺 𝑊 , let 𝐼 𝑛𝑑𝑖𝑐𝑒𝑠(𝑃) be the set of indices appearing on the labelled edges in 𝑃. Two array terms 𝑎 and 𝑏 are called weakly equivalent if there exists a path 𝑃 between nodes 𝑎 and 𝑏 in 𝐺 𝑊 . Two arrays 𝑎 and 𝑏 are called weakly equivalent modulo 𝑖, denoted by 𝑎 ≈ 𝑖 𝑏, if and only if they are connected by a path that does not contain an edge Read-over-weakeq: Given an equivalence relation ∼ 𝑉 , read(a, i) and read(b, j) from 𝑉, if 𝑖 ∼ 𝑉 𝑗 and 𝑎 ≈ 𝑖 𝑏 then read(a, i) ∼ 𝑉 read(b, j) holds. Given an equivalence relation ∼ 𝑉 , array terms 𝑎 and 𝑏 are weakly congruent modulo 𝑖, denoted by 𝑎 ≅ 𝑖 𝑏, if and only if they have the same value at index 𝑖.</figDesc><table><row><cell>Definition 2. Definition 3. Definition 4. Definition 5.</cell><cell></cell></row><row><cell>Definition 1. The set of tracked terms 𝑉 is defined as:</cell><cell></cell></row><row><cell>𝑉 = 𝒜 ∪ {read(a, i), read(write(a, i, e), i), 𝑖, 𝑒 | write(a, i, e) ∈ 𝒜 } ∪ {read(a, i), 𝑖 | read(a, i) ∈ 𝜙}</cell><cell>(1)</cell></row><row><cell>Let ∼ 𝑉 ⊆ 𝑉 × 𝑉 be an equivalence relation on the set 𝑉.</cell><cell></cell></row></table><note>𝑗↔ where 𝑗 ∼ 𝑉 𝑖. Lemma 1.</note></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head>Algorithm 2 :</head><label>2</label><figDesc>check-ext-conflict(𝐺 𝑊 , 𝑉, ∼ 𝑉 ) for 𝑎, 𝑏 ∈ 𝑉 such that 𝑎 ≁ 𝑉 𝑏 do if there is a path 𝑃 between 𝑎 and 𝑏 such that ∀𝑖 ∈ 𝐼 𝑛𝑑𝑖𝑐𝑒𝑠(𝑃).𝑎 ≅ 𝑖 𝑏 then return 𝐶𝑜𝑛𝑑(𝑃) ∧ ⋀ 𝑖∈𝐼 𝑛𝑑𝑖𝑐𝑒𝑠(𝑃) 𝐶𝑜𝑛𝑑(𝑎 ≅ 𝑖 𝑏) ∧ 𝑎 ≠ 𝑏; Algorithm 3: arrays-check(𝐺 𝑊 , 𝑉, ∼ 𝑉 ) 𝑐𝑜𝑛𝑓 𝑙𝑖𝑐𝑡 := check-idx-conflict(𝐺 𝑊 , 𝑉, ∼ 𝑉 ); ; /* check for idx-lemma conflicts */ if conflict = NULL then 𝑐𝑜𝑛𝑓 𝑙𝑖𝑐𝑡 := check-read-over-write-conflict(𝐺 𝑊 , 𝑉, ∼ 𝑉 ); if conflict = NULL then 𝑐𝑜𝑛𝑓 𝑙𝑖𝑐𝑡 := check-ext-conflict(𝐺 𝑊 , 𝑉, ∼ 𝑉 ); if conflict = NULL then return (SAT, NULL); return (UNSAT, 𝑐𝑜𝑛𝑓 𝑙𝑖𝑐𝑡);</figDesc><table><row><cell>end</cell></row><row><cell>return NULL;</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_2"><head></head><label></label><figDesc>. The The MCSat framework consists of the following steps: 1) Propagate the trail. 2) If a conflict is found during propagation, check if there is any decision to backtrack over. If not, return UNSAT. Otherwise, explain the conflict using a lemma, backtrack the trail, and repeat step 1. 3) If no conflict is found during propagation, decide on a variable that is not on the trail. If there is nothing left to decide, return SAT. Otherwise, add the decided variable to the trail and repeat step 1.</figDesc><table><row><cell>Explain &amp;</cell><cell>UNSAT</cell></row><row><cell>Backtrack</cell><cell></cell></row><row><cell>Conflict</cell><cell></cell></row><row><cell>Lemma</cell><cell></cell></row><row><cell>Propagate</cell><cell></cell></row><row><cell cols="2">Theory Variable</cell></row><row><cell>Assignment</cell><cell></cell></row><row><cell>No</cell><cell></cell></row><row><cell>Conflict</cell><cell></cell></row><row><cell>Decide</cell><cell>SAT</cell></row></table><note>ψ Figure 1:</note></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_3"><head>Table 1 Different</head><label>1</label><figDesc></figDesc><table><row><cell>Yices2-MCSat Options Results</cell><cell></cell><cell></cell><cell></cell></row><row><cell></cell><cell></cell><cell>QF_AX (551)</cell><cell></cell></row><row><cell>Solver</cell><cell cols="2">solved sat/unsat</cell><cell>time</cell></row><row><cell>Yices2-MCSat</cell><cell>551</cell><cell>272/279</cell><cell>177.96</cell></row><row><cell>Yices2-MCSat-no-opt-a</cell><cell>551</cell><cell cols="2">272/279 1244.93</cell></row><row><cell>Yices2-MCSat-no-opt-b</cell><cell>550</cell><cell>272/278</cell><cell>276.51</cell></row><row><cell>Yices2-MCSat-no-opt-c-1</cell><cell>550</cell><cell>272/278</cell><cell>703.94</cell></row><row><cell>Yices2-MCSat-no-opt-c-2</cell><cell>551</cell><cell>272/279</cell><cell>228.47</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_4"><head>Table 2</head><label>2</label><figDesc></figDesc><table><row><cell>Arrays Benchmarks Results</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell></cell><cell></cell><cell></cell><cell></cell><cell cols="2">QF_AX (551)</cell><cell></cell></row><row><cell></cell><cell>Solver</cell><cell cols="4">solved sat/unsat</cell><cell>time</cell></row><row><cell></cell><cell>cvc5</cell><cell></cell><cell>545</cell><cell cols="3">272/273 296.29</cell></row><row><cell></cell><cell cols="2">MathSAT5</cell><cell>551</cell><cell cols="2">272/279</cell><cell>20.49</cell></row><row><cell></cell><cell>Yices2</cell><cell></cell><cell>551</cell><cell cols="2">272/279</cell><cell>4.01</cell></row><row><cell></cell><cell cols="2">Yices2-MCSat</cell><cell>551</cell><cell cols="3">272/279 177.96</cell></row><row><cell></cell><cell>Z3</cell><cell></cell><cell>551</cell><cell cols="2">272/279</cell><cell>28.12</cell></row><row><cell>Table 3</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell cols="3">Arrays + Nonlinear Arithmetic Benchmarks Results</cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell></cell><cell></cell><cell cols="2">QF_ANIA (155)</cell><cell></cell><cell cols="3">QF_AUFNIA (17)</cell></row><row><cell>Solver</cell><cell cols="3">solved sat/unsat</cell><cell cols="4">time solved sat/unsat time</cell></row><row><cell>cvc5</cell><cell>98</cell><cell cols="2">89/9</cell><cell>455.56</cell><cell cols="2">6</cell><cell>3/3 22.95</cell></row><row><cell>MathSAT5</cell><cell>123</cell><cell cols="2">116/7</cell><cell>340.79</cell><cell cols="2">17</cell><cell>5/12</cell><cell>4.75</cell></row><row><cell>Yices2-MCSat</cell><cell>125</cell><cell cols="3">111/14 3406.64</cell><cell cols="2">17</cell><cell>5/12</cell><cell>7.52</cell></row><row><cell>Z3</cell><cell>85</cell><cell cols="2">69/16</cell><cell>981.06</cell><cell cols="2">17</cell><cell>5/12 29.05</cell></row><row><cell>Table 4</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell cols="3">Arrays + Linear Arithmetic Benchmarks Results</cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell></cell><cell></cell><cell cols="2">QF_ALIA (176)</cell><cell></cell><cell cols="3">QF_AUFLIA (1303)</cell></row><row><cell>Solver</cell><cell cols="3">solved sat/unsat</cell><cell cols="4">time solved sat/unsat</cell><cell>time</cell></row><row><cell>cvc5</cell><cell>91</cell><cell cols="2">22/69</cell><cell>635.24</cell><cell>1286</cell><cell cols="2">542/744 609.52</cell></row><row><cell>MathSAT5</cell><cell>160</cell><cell cols="2">88/72</cell><cell>89.08</cell><cell>1300</cell><cell cols="2">543/757 177.57</cell></row><row><cell>Yices2</cell><cell>160</cell><cell cols="2">88/72</cell><cell>123.38</cell><cell>1303</cell><cell cols="2">543/760</cell><cell>29.69</cell></row><row><cell>Yices2-MCSat</cell><cell>137</cell><cell cols="3">67/70 2046.33</cell><cell>1261</cell><cell cols="2">547/714 781.05</cell></row><row><cell>Z3</cell><cell>144</cell><cell cols="3">73/71 1555.19</cell><cell>1303</cell><cell cols="2">543/760</cell><cell>20.62</cell></row><row><cell>Table 5</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell cols="2">Arrays + Bit-vector Benchmarks Results</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell></cell><cell cols="4">QF_ABV (15147)</cell><cell></cell><cell cols="2">QF_AUFBV (67)</cell></row><row><cell>Solver</cell><cell>solved</cell><cell cols="2">sat/unsat</cell><cell cols="4">time solved sat/unsat</cell><cell>time</cell></row><row><cell>Bitwuzla</cell><cell cols="3">14695 10339/4356</cell><cell>4751.64</cell><cell cols="2">52</cell><cell>14/38 304.20</cell></row><row><cell>cvc5</cell><cell>13731</cell><cell cols="3">9274/4456 10926.10</cell><cell cols="2">41</cell><cell>11/30 355.15</cell></row><row><cell>MathSAT5</cell><cell cols="4">14902 10321/4580 14205.00</cell><cell cols="2">41</cell><cell>11/30</cell><cell>31.11</cell></row><row><cell>Yices2</cell><cell cols="4">15018 10414/4604 10206.00</cell><cell cols="2">51</cell><cell>14/37 345.36</cell></row><row><cell cols="5">Yices2-MCSat 14285 10242/4042 12932.50</cell><cell cols="2">40</cell><cell>14/26 839.69</cell></row><row><cell>Z3</cell><cell cols="3">14827 10259/4568</cell><cell>9092.97</cell><cell cols="2">45</cell><cell>11/34 733.71</cell></row></table></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_0">Yices2 implements a similar approach to<ref type="bibr" target="#b15">[16]</ref>.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_1">We are not reporting Yices2 (CDCL(𝒯)) results here because it does not support nonlinear arithmetic.</note>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Acknowledgments. We would like to thank Jochen Hoenicke for fruitful discussions about the weakly equivalent arrays that helped us in implementing the reasoning procedure in Yices2. This material is based upon work supported by NSF with award CCF-1816936. Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the US Government or NSF.</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Abstraction refinement of linear programs with arrays</title>
		<author>
			<persName><forename type="first">A</forename><surname>Armando</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Benerecetti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Mantovani</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Tools and Algorithms for the Construction and Analysis of Systems: 13th International Conference</title>
				<meeting><address><addrLine>Portugal</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2007-04-01">March 24-April 1, 2007. 2007</date>
			<biblScope unit="page" from="373" to="388" />
		</imprint>
	</monogr>
	<note>Proceedings 13</note>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Dafny: An automatic program verifier for functional correctness</title>
		<author>
			<persName><forename type="first">K</forename><forename type="middle">R M</forename><surname>Leino</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International conference on logic for programming artificial intelligence and reasoning</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="348" to="370" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><surname>Cimatti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Griggio</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Tonetta</surname></persName>
		</author>
		<idno type="arXiv">arXiv:2109.12821</idno>
		<title level="m">The VMT-LIB language and tools</title>
				<imprint>
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
	<note type="report_type">arXiv preprint</note>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">The SeaHorn verification framework</title>
		<author>
			<persName><forename type="first">A</forename><surname>Gurfinkel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Kahsai</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Komuravelli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">A</forename><surname>Navas</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Computer Aided Verification</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2015">2015</date>
			<biblScope unit="page" from="343" to="361" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Kratos2: An SMT-based model checker for imperative programs</title>
		<author>
			<persName><forename type="first">A</forename><surname>Griggio</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Jonás</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">CAV</title>
		<imprint>
			<biblScope unit="volume">13966</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="423" to="436" />
			<date type="published" when="2023">2023</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Verilog2SMV: A tool for word-level verification</title>
		<author>
			<persName><forename type="first">A</forename><surname>Irfan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Cimatti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Griggio</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Roveri</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Sebastiani</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">DATE, IEEE</title>
				<imprint>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="1156" to="1159" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<author>
			<persName><forename type="first">A</forename><surname>Niemetz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Preiner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Wolf</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Biere</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Btor2 , BtorMC and Boolector</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2018">2018</date>
			<biblScope unit="volume">3</biblScope>
			<biblScope unit="page" from="587" to="595" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">MoXI: An intermediate language for symbolic model checking</title>
		<author>
			<persName><forename type="first">K</forename><forename type="middle">Y</forename><surname>Rozier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Dureja</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Irfan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Johannsen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Nukala</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Shankar</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Tinelli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">Y</forename><surname>Vardi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 30th International Symposium on Model Checking Software (SPIN)</title>
				<meeting>the 30th International Symposium on Model Checking Software (SPIN)</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2024-04">April 2024</date>
			<biblScope unit="page">????</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Solving SAT and SAT modulo theories: From an abstract Davis-Putnam-Logemann-Loveland procedure to DPLL(T )</title>
		<author>
			<persName><forename type="first">R</forename><surname>Nieuwenhuis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Oliveras</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Tinelli</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">J. ACM</title>
		<imprint>
			<biblScope unit="volume">53</biblScope>
			<biblScope unit="page" from="937" to="977" />
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">A model-constructing satisfiability calculus</title>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">M</forename><surname>De Moura</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Jovanovic</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">VMCAI</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2013">2013</date>
			<biblScope unit="volume">7737</biblScope>
			<biblScope unit="page" from="1" to="12" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Interpolation and model checking for nonlinear arithmetic</title>
		<author>
			<persName><forename type="first">D</forename><surname>Jovanovic</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Dutertre</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">CAV</title>
		<imprint>
			<biblScope unit="volume">12760</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="266" to="288" />
			<date type="published" when="2021">2021</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">QSMA: A new algorithm for quantified satisfiability modulo theory and assignment</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">P</forename><surname>Bonacina</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Graham-Lengrand</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Vauthier</surname></persName>
		</author>
		<idno type="DOI">10.1007/978-3-031-38499-8_5</idno>
		<idno>doi:</idno>
		<ptr target="10.1007/978-3-031-38499-8\_5" />
	</analytic>
	<monogr>
		<title level="m">Automated Deduction -CADE 29 -29th International Conference on Automated Deduction</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<editor>
			<persName><forename type="first">B</forename><surname>Pientka</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">C</forename><surname>Tinelli</surname></persName>
		</editor>
		<meeting><address><addrLine>Rome, Italy</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2023">July 1-4, 2023. 2023</date>
			<biblScope unit="volume">14132</biblScope>
			<biblScope unit="page" from="78" to="95" />
		</imprint>
	</monogr>
	<note>Proceedings</note>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">cvc5: A versatile and industrial-strength SMT solver</title>
		<author>
			<persName><forename type="first">H</forename><surname>Barbosa</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">W</forename><surname>Barrett</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Brain</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Kremer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Lachnitt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Mann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Mohamed</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Mohamed</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Niemetz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Nötzli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Ozdemir</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Preiner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Reynolds</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Sheng</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Tinelli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Zohar</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">TACAS</title>
		<imprint>
			<biblScope unit="volume">13243</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="415" to="442" />
			<date type="published" when="2022">2022</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Z3: an efficient SMT solver</title>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">M</forename><surname>De Moura</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><forename type="middle">S</forename><surname>Bjørner</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">TACAS</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="volume">4963</biblScope>
			<biblScope unit="page" from="337" to="340" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Simplification by cooperating decision procedures</title>
		<author>
			<persName><forename type="first">G</forename><surname>Nelson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">C</forename><surname>Oppen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Trans. Prog. Lang. Syst</title>
		<imprint>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="page" from="245" to="257" />
			<date type="published" when="1979">1979</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Weakly equivalent arrays</title>
		<author>
			<persName><forename type="first">J</forename><surname>Christ</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Hoenicke</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="s">Lecture Notes in Computer Science</title>
		<editor>FroCos</editor>
		<imprint>
			<biblScope unit="page" from="119" to="134" />
			<date type="published" when="2015">9322. 2015</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Towards a mathematical science of computation</title>
		<author>
			<persName><forename type="first">J</forename><surname>Mccarthy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IFIP Congress</title>
				<meeting><address><addrLine>North-Holland</addrLine></address></meeting>
		<imprint>
			<date type="published" when="1962">1962</date>
			<biblScope unit="page" from="21" to="28" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">New results on rewrite-based satisfiability procedures</title>
		<author>
			<persName><forename type="first">A</forename><surname>Armando</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">P</forename><surname>Bonacina</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ranise</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Schulz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Trans. Comput. Log</title>
		<imprint>
			<biblScope unit="volume">10</biblScope>
			<biblScope unit="page">51</biblScope>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Quantifier-free interpolation of a theory of arrays</title>
		<author>
			<persName><forename type="first">R</forename><surname>Bruttomesso</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ghilardi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ranise</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Log. Methods Comput. Sci</title>
		<imprint>
			<biblScope unit="volume">8</biblScope>
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">A decision procedure for an extensional theory of arrays</title>
		<author>
			<persName><forename type="first">A</forename><surname>Stump</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">W</forename><surname>Barrett</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">L</forename><surname>Dill</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">R</forename><surname>Levitt</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">LICS, IEEE Computer Society</title>
				<imprint>
			<date type="published" when="2001">2001</date>
			<biblScope unit="page" from="29" to="37" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Deciding array formulas with frugal axiom instantiation</title>
		<author>
			<persName><forename type="first">A</forename><surname>Goel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Krstić</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Fuchs</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the Joint Workshops of the 6th International Workshop on Satisfiability Modulo Theories and 1st International Workshop on Bit-Precise Reasoning</title>
				<meeting>the Joint Workshops of the 6th International Workshop on Satisfiability Modulo Theories and 1st International Workshop on Bit-Precise Reasoning</meeting>
		<imprint>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="12" to="17" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">Lemmas on demand for the extensional theory of arrays</title>
		<author>
			<persName><forename type="first">R</forename><surname>Brummayer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Biere</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">J. Satisf. Boolean Model. Comput</title>
		<imprint>
			<biblScope unit="volume">6</biblScope>
			<biblScope unit="page" from="165" to="201" />
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">Generalized, efficient array decision procedures</title>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">M</forename><surname>De Moura</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><forename type="middle">S</forename><surname>Bjørner</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">FMCAD, IEEE</title>
				<imprint>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="45" to="52" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">Smtinterpol: An interpolating SMT solver</title>
		<author>
			<persName><forename type="first">J</forename><surname>Christ</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Hoenicke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Nutz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="s">Lecture Notes in Computer Science</title>
		<editor>SPIN</editor>
		<imprint>
			<biblScope unit="volume">7385</biblScope>
			<biblScope unit="page" from="248" to="254" />
			<date type="published" when="2012">2012</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<analytic>
		<title level="a" type="main">Simplify: a theorem prover for program checking</title>
		<author>
			<persName><forename type="first">D</forename><surname>Detlefs</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Nelson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">B</forename><surname>Saxe</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">J. ACM</title>
		<imprint>
			<biblScope unit="volume">52</biblScope>
			<biblScope unit="page" from="365" to="473" />
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b25">
	<analytic>
		<title level="a" type="main">Proof-producing congruence closure</title>
		<author>
			<persName><forename type="first">R</forename><surname>Nieuwenhuis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Oliveras</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="s">Lecture Notes in Computer Science</title>
		<editor>RTA</editor>
		<imprint>
			<biblScope unit="volume">3467</biblScope>
			<biblScope unit="page" from="453" to="468" />
			<date type="published" when="2005">2005</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<analytic>
		<title level="a" type="main">Solving bitvectors with MCSAT: explanations from bits and pieces</title>
		<author>
			<persName><forename type="first">S</forename><surname>Graham-Lengrand</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Jovanovic</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Dutertre</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IJCAR (1</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2020">2020</date>
			<biblScope unit="volume">12166</biblScope>
			<biblScope unit="page" from="103" to="121" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b27">
	<analytic>
		<title/>
		<author>
			<persName><forename type="first">B</forename><surname>Dutertre</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Yices</title>
		<imprint>
			<biblScope unit="volume">2</biblScope>
			<biblScope unit="page" from="737" to="744" />
			<date type="published" when="2014">2014</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b28">
	<analytic>
		<title level="a" type="main">Solving nonlinear integer arithmetic with MCSAT</title>
		<author>
			<persName><forename type="first">D</forename><surname>Jovanovic</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">VMCAI</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2017">2017</date>
			<biblScope unit="volume">10145</biblScope>
			<biblScope unit="page" from="330" to="346" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b29">
	<analytic>
		<title level="a" type="main">An MCSAT treatment of bit-vectors</title>
		<author>
			<persName><forename type="first">S</forename><surname>Graham-Lengrand</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Jovanovic</surname></persName>
		</author>
		<idno>WS.org</idno>
	</analytic>
	<monogr>
		<title level="m">SMT</title>
		<title level="s">CEUR Workshop Proceedings</title>
		<imprint>
			<date type="published" when="2017">2017</date>
			<biblScope unit="volume">1889</biblScope>
			<biblScope unit="page" from="89" to="100" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b30">
	<monogr>
		<author>
			<persName><forename type="first">C</forename><surname>Barrett</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Fontaine</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Tinelli</surname></persName>
		</author>
		<ptr target=".org" />
		<title level="m">The Satisfiability Modulo Theories Library (SMT-LIB)</title>
				<imprint>
			<publisher>SMT-LIB</publisher>
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b31">
	<monogr>
		<author>
			<persName><forename type="first">M</forename><surname>Preiner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H.-J</forename><surname>Schurr</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Barrett</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Fontaine</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Niemetz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Tinelli</surname></persName>
		</author>
		<idno type="DOI">10.5281/zenodo.10607722</idno>
		<ptr target="https://doi.org/10.5281/zenodo.10607722.doi:10.5281/zenodo.10607722" />
		<title level="m">SMT-LIB release 2023 (non-incremental benchmarks</title>
				<imprint>
			<date type="published" when="2024">2024</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b32">
	<analytic>
		<title level="a" type="main">The MathSAT5 SMT solver</title>
		<author>
			<persName><forename type="first">A</forename><surname>Cimatti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Griggio</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">J</forename><surname>Schaafsma</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Sebastiani</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">TACAS</title>
		<imprint>
			<biblScope unit="volume">7795</biblScope>
			<biblScope unit="page" from="93" to="107" />
			<date type="published" when="2013">2013</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b33">
	<analytic>
		<title level="a" type="main">Bitwuzla</title>
		<author>
			<persName><forename type="first">A</forename><surname>Niemetz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Preiner</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">CAV (2)</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2023">2023</date>
			<biblScope unit="volume">13965</biblScope>
			<biblScope unit="page" from="3" to="17" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b34">
	<analytic>
		<title level="a" type="main">Quantifier elimination for real closed fields by cylindrical algebraic decomposition: a synopsis</title>
		<author>
			<persName><forename type="first">G</forename><forename type="middle">E</forename><surname>Collins</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SIGSAM Bull</title>
		<imprint>
			<biblScope unit="volume">10</biblScope>
			<biblScope unit="page" from="10" to="12" />
			<date type="published" when="1976">1976</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b35">
	<monogr>
		<author>
			<persName><forename type="first">T</forename><surname>Schindler</surname></persName>
		</author>
		<title level="m">SMT solving, interpolation, and quantifiers</title>
				<imprint>
			<date type="published" when="2022">2022. 2022</date>
		</imprint>
		<respStmt>
			<orgName>Universität Freiburg</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Dissertation</note>
</biblStruct>

<biblStruct xml:id="b36">
	<analytic>
		<title level="a" type="main">MCMT: A Model Checker Modulo Theories</title>
		<author>
			<persName><forename type="first">S</forename><surname>Ghilardi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ranise</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IJCAR</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="volume">6173</biblScope>
			<biblScope unit="page" from="22" to="29" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b37">
	<analytic>
		<title level="a" type="main">Counterexample-guided prophecy for model checking modulo the theory of arrays</title>
		<author>
			<persName><forename type="first">M</forename><surname>Mann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Irfan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Griggio</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Padon</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">W</forename><surname>Barrett</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Log. Methods Comput. Sci</title>
		<imprint>
			<biblScope unit="volume">18</biblScope>
			<date type="published" when="2022">2022</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b38">
	<analytic>
		<title level="a" type="main">Verification of fault-tolerant protocols with Sally</title>
		<author>
			<persName><forename type="first">B</forename><surname>Dutertre</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Jovanovic</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">A</forename><surname>Navas</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="s">Lecture Notes in Computer Science</title>
		<editor>NFM</editor>
		<imprint>
			<biblScope unit="volume">10811</biblScope>
			<biblScope unit="page" from="113" to="120" />
			<date type="published" when="2018">2018</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b39">
	<analytic>
		<title level="a" type="main">Property-directed k-induction</title>
		<author>
			<persName><forename type="first">D</forename><surname>Jovanovic</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Dutertre</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">FMCAD, IEEE</title>
				<imprint>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="85" to="92" />
		</imprint>
	</monogr>
</biblStruct>

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