<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Why Proof-Theory Matters in Specification-Based Testing?</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Dipartimento di Informatica, Universita degli Studi di Milano</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>SBT as Proof-Search</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>We survey some recent developments in giving a logical reconstruction of specification-based testing via the lenses of structural proof-theory. Formal verification of software properties is still a labor intensive endeavor, notwithstanding recent advances: automation plays only a partial role and the engineer is heavily involved not only in the specification stage, but in the proving one as well, even with the help of a proof assistant. This effort is arguably misplaced in the design phase of a software artifact, when mistakes are inevitable and even in the best scenario the specification and its implementation may change. A failed proof attempt is hardly the best way to debug either. These remarks are, of course, not novel, as they lie at the basis of model checking and other counter-examples generation techniques, where the emphasis is on automatically refuting, rather than proving, that some code respects its specification. Contrary to Dijkstra's diktat, testing, and more in general validation, has found an increasing niche in formal verification, prior or even in alternative to theorem proving [6, 20]. The message of this brief report is that, somewhat surprisingly, structural prooftheory [19] offers a unifying approach to the field. While the ideas that I am going to sum up here may have a wider applicability [13], I am going to narrow it to: { Specification-based testing (SBT), also known as property-based testing [14], a lightweight validation technique whereby the user specifies executable properties that the code should satisfy and the system tries to refute them via automatic (typically random) data generation. { One specific domain of interest: the mechanization of the semantics of programming languages and related artifacts [1, 12], where proofs tend to be shallow, but may have hundreds of cases and are therefore a good candidate to SBT.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>We use as a running examples a call-by-value -calculus (where values are lambdas
and numerals) whose static and big-step dynamic semantics follows | readers should
substitute it with a more substantial specification of a programming language whose
meta-theory they wish to investigate:
`n:nat</p>
      <p>T-N
x:A2
`x:A T-VR
x26dom( ) ;x:A`M :B</p>
      <p>` x:M :A!B
`M1 :A!B `M2 :B T-AP
`M1 M2 :B</p>
      <p>T-AB
value V
V +V</p>
      <p>E-V</p>
      <p>M1 + x:M</p>
      <p>M2 +V2
M1 M2 +V</p>
      <p>MfV2=xg+V</p>
      <p>
        E-AP
Consider now the type preservation property for closed terms:
8MM 0A: M + M 0
! M : A
! M 0 : A
In fact, the result does not hold for this calculus, since we have managed to slip a
typo in one of the rules. One counter-example is M = ( x:x n) n; M 0 = n n; A = nat.
How to go from it to the origin of the bug is another research topic in itself [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ];
suffices to say that it points to a mistake in rule T-AP, namely the type in the minor
premise should be A. A tool that automatically provides such a counter-example
would save us from wasting time on a potentially very long failed proof attempt.
      </p>
      <p>
        While this issue can and has been successfully tackled in a functional
programming setting [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], at least two factors make a proof-theoretic reconstruction fruitful:
1) it fits nicely with the (co)inductive reading of a rule-based presentation of our
system-under-test 2) it easily generalizes to logics that intrinsically handle issues that
are pervasive in the domain of programming languages semantics, such as naming and
scoping. In fact, as argued in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], the SBT literature is rediscovering (constraint) logic
programming ideas such as narrowing, mode checking, random back-chaining etc.
      </p>
      <p>If we view a specification (property) as a logical formula 8x[( (x)^P (x)) Q(x)]
where is a typing predicate and P and Q are two other predicates defined using
Horn clause specifications (to begin with), providing a counter-example consists of
negating the property, and searching for a proof of 9x[( (x)^P (x))^:Q(x)].</p>
      <p>
        Stated in this way the problem points to a logic programming solution, and
since the seminal work of Miller et al. [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], structural proof-theory formulates it as
a proof-search problem in the sequent calculus, where the specification is a fixed set
of assumptions (typically sets of clauses) and the negated property is the goal.
      </p>
      <p>
        A first solution that I was involved with is Check [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], which supplements a
nominal logic programming interpreter [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] to account for counter-example search. The
tool uses 1) nominal logic as a logical foundation, which is particularly apt at encoding
binding structures, 2) automatically derived type-driven exhaustive generators for
data enumeration, 3) two approaches to implementing negation: negation as failure
and negation elimination [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], 4) a fixed search strategy, namely iterative-deepening
based on the height of partial proof trees.
3
      </p>
      <p>SBT via FPC
While Check is quite effective (see the case studies at https://github.com/
aprolog-lang/checker-examples), the approach was unnecessarily rigid, in
particular wiring-in a fixed data generation and search strategy, and did not reflect the
1 `G1
2 `G2
`G1^G2
^e( ; 1; 2)
tte( )
`tt
0 `G[t=x]</p>
      <p>9e( ; 0;t)
`9x:G
0 `G (A :- G)2grnd (P) unfolde( ; 0)</p>
      <p>`A
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
n`G1 n`G2
n`G1^G2
n`tt
n`G[t=x]
n`9x:G
n`G (A :- G)2grnd (P) n 0</p>
      <p>
        n+1`A
richness of features that SBT offers. However, being the proof-theory of Check based
on the notion of uniform proofs [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], it is easy to generalize it via the subsuming theory
of focused proof systems [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. We can roughly characterize focusing as a complete
strategy to organize the rules of the sequent calculus into two phases: 1) a negative phase
corresponding to goal-reduction, where we apply rules involving
don't-care-nondeterminism; as a result, there is no need to consider backtracking, and 2) a positive phase
corresponding to back-chaining (don't-know-nondeterminism): here, inference rules
need to be supplied with external information (e.g., which clause to back-chain on)
in order to ensure that a completed proof can be found. Thus, when building a proof
tree from the conclusion to its leaves, the negative phase corresponds to a simple
deterministic computation, while the positive phase may need to be guided by an oracle.
      </p>
      <p>The connection with SBT is that in a query the positive phase (which corresponds
to the generation of possible counter-examples) is represented by 9x and ( (x)^P (x)).
That is followed by the negative phase (which corresponds to counter-example testing)
and is represented by :Q(x). This formalizes the intuition that generation may be
hard, while testing is just computation.</p>
      <p>
        The final ingredient is how to supply the external information to the positive
phase: this is where the theory of foundational proof certificates [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] (FPC) comes
in. In their fully generality, FPCs can be seen as a generalization of proof-terms in
the Curry-Howard tradition, and are able to define a range of proof structures used
in various theorem provers (e.g., resolution refutations, Herbrand disjuncts, tableaux,
etc). They can be programmed as clerks and experts predicates that decorate the
sequent rules used in an FPC proof checking kernel. An FPC system is a specification
of the certificate format together with the clerks and experts processing it. In our
setting, we can view FPCs as simple logic programs that guide the search for potential
counter-examples using different generation strategies.
      </p>
      <p>Figure 1 contains a simple proof system for a fragment of Horn clause provability in
which each inference rule is augmented with an additional premise involving an expert
predicate, a certificate , and possibly continuations of certificates ( 0, 1, 2), if one
reads the rules from conclusion to premises. The logic programmers among us will
recognize it as an instrumented version of the vanilla meta-interpreter over a fixed Horn
program P. For example, the 9-expert may be in charge of extracting from the term
t with which to instantiate G, so that we can build the rest of the proof according to
the resulting certificate 0. In the bottom part of the figure, we instantiate the
framework with the simplest form of proof certificate, namely a positive integer, where the
only active expert is a simple non-zero check while back-chaining: this characterizes
exhaustive generation bounded by height, which happens to be the generation strategy of</p>
      <p>
        Check. As detailed in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], different FPCs capture random generation, via randomized
backtracking, as well as diverse features such as -debugging, bug-provenance, etc.
4
      </p>
    </sec>
    <sec id="sec-2">
      <title>To Infinity and Beyond</title>
      <p>
        Reasoning about infinite computations via coinduction and corecursion has an
ever-increasing relevance in formal methods and, in particular, in the semantics of
programming languages, (see [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] for a compelling example) and, of course,
coinduction underlies (the meta-theory of) process calculi. To our knowledge, there are
no SBT approaches for coinductive specifications, save for the quite limited features
provided by Isabelle/HOL's Nitpick [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
      </p>
      <p>
        When addressing potentially infinite computations, where in our setup we strive
to model infinite behavior (think divergence of a finite program) rather than infinite
objects (e.g., streams), we need to go significantly beyond the simple proof-theory of [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]
and adopt a much stronger logic with explicit rules for induction and coinduction.
      </p>
      <p>
        A natural choice is the fixed point linear logic MALL [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], which is associated to the
Bedwyr model-checker [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. In fact, this logic has already shown its colors in the
prooftheoretic reconstruction of model checking problems such as (non)-reachability [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>MALL consists of a sequent calculus presentation of multiplicative additive linear
logic with least and greatest fixed points operators in lieu of exponentials, over a
simply-typed term language.</p>
      <p>
        Continuing with our running example, let us now consider a coinductive
definition of CBV evaluation following [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. In other terms, we take the same rules as
in Section 2, but we read them as the greatest fixed point of the defined relation.
This is represented by the following formula (reminiscent of a linearization of Clark's
completion), where is the greatest fixed point operator, is the abstractor in the
meta-logic and val stands for the -formula characterizing values:
coeval
( CE: m: m0:(9V: m=V m0 =V val V )
(9M1M2MV2V: m=M1 M2 m0 =V (CE M1 ( x:M))
(CE M2 V2) (CE (MfV2=xg) V )))
and are multiplicative conjunction and additive disjunction and for the sake
of space we do not make explicit the encoding of the object-level syntax and of
substitution inside the meta-logic.
      </p>
      <p>
        Whether or not this notion of co-evaluation makes sense (see [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] for a fair
criticism), we would like to investigate if standard properties such as type soundness or
determinism of evaluation hold: they do not | to refute the latter, just note that
a divergent term such as co-evaluates to anything. Type preservation, for a correct
version of the rules in Sec. 2, is falsified by a variant of the Y -combinator.
      </p>
      <p>We have a prototype implementation of SBT for coinductive specifications on
top of Bedwyr, which we use both for the generation of test cases (controlled using
specific FPCs) and for the testing phase. Such an implementation has the advantage
of allowing us to piggyback on Bedwyr's facilities for efficient proof-search via tabling
for (co)inductive predicates, thus avoiding costly meta-interpretation.</p>
      <p>To make it more concrete, let me report the query refuting determinism of
co-evaluation. We use Bedwyr's concrete syntax, where check, implementing the
kernel rules in the top of Fig. 1, is in charge of controlling the generation of lambda
terms (predicate is exp, parameterized over a context of bound variables), here in
the exhaustive fashion detailed ibidem (generator height 4); coeval encodes the
coinductive CBV operational semantics using higher-order abstract syntax and the
last conjunct corresponds to ground disequality.
?= check (height 4) ((is_exp [] M) &amp;&amp; (is_exp [] M1) &amp;&amp; (is_exp [] M2))
/\ coeval M M1 /\ coeval M M2 /\ (M1 = M2 -&gt; false).</p>
      <p>Found a solution (+ 4173ms):
M2 = con one, M1 = con zero, M = app (fun (x\ app x x)) (fun (x\ app x x))
The system finds in reasonable time the expected counter-example, where M is the
encoding of . Note that we only generate finite terms, but the testing phase now
appeals (twice) to the coinductive hypothesis.</p>
      <p>
        Other applications of SBT w.r.t. infinite behavior are in separating various notion
of equivalences in lambda and process calculi: for example, applicative and ground
similarity in PCFL [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ], or analogous standard results in the -calculus. These
examples put forward another challenge: the specification of a coinductive notion such
as applicative similarity goes beyond the Horn fragment, to wit:
asim
( AS : m: n:8M 0: eval m ( x:M 0) ( 9N 0: eval m ( x:N 0)
      </p>
      <p>8R: (AS (M 0fR=xg) (N 0fR=xg)))
This makes the treatment of negation in the testing phase of a SBT query problematic,
since the interpretation of finite failure as provability of falsehood breaks down, at
least in an intuitionistic setting. Here, the adoption of linear logic as a meta-logic
comes to the rescue, as in linear logic occurrences of negations can be eliminated by
using De Morgan duality and inequality.
5</p>
    </sec>
    <sec id="sec-3">
      <title>Conclusion</title>
      <p>
        I have tried to delineate a path where structural proof-theory reconstructs, unifies
and extends current trends in SBT, with a particular emphasis to ongoing work
on extending the paradigm to infinite computations. A natural next step is
concurrency: logical framework such as CLF (and its implementation Celf [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]) based on
sub-structural logics have been designed to encode concurrent calculi, e.g., session
types [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. However, the meta-theory of such frameworks is still in the workings and
this precludes so far any reasoning about them. On the other hand, a FPC approach
to the validation of those properties seems a low hanging fruit.
      </p>
      <p>Acknowledgment A shout-out to my co-authors in this line of work: Rob Blanco,
James Cheney, Francesco Komauli, Dale Miller and Matteo Pessina.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>A.</given-names>
            <surname>Abel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Allais</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hameer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Pientka</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Momigliano</surname>
          </string-name>
          ,
          <string-name>
            <surname>S.</surname>
          </string-name>
          <article-title>Schafer, and</article-title>
          K. Stark.
          <article-title>Poplmark reloaded: Mechanizing proofs by logical relations</article-title>
          .
          <source>J. Funct. Program.</source>
          ,
          <volume>29</volume>
          :
          <fpage>e19</fpage>
          ,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>D.</given-names>
            <surname>Ancona</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Dagnino</surname>
          </string-name>
          , and
          <string-name>
            <surname>E. Zucca.</surname>
          </string-name>
          <article-title>Reasoning on divergent computations with coaxioms</article-title>
          .
          <source>Proc. ACM Program. Lang.</source>
          ,
          <volume>1</volume>
          (OOPSLA):
          <volume>81</volume>
          :1{
          <fpage>81</fpage>
          :
          <fpage>26</fpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>J.-M. Andreoli</surname>
          </string-name>
          .
          <article-title>Logic programming with focusing proofs in linear logic</article-title>
          .
          <source>J. of Logic and Computation</source>
          ,
          <volume>2</volume>
          (
          <issue>3</issue>
          ):
          <volume>297</volume>
          {
          <fpage>347</fpage>
          ,
          <year>1992</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>D.</given-names>
            <surname>Baelde</surname>
          </string-name>
          .
          <article-title>Least and greatest fixed points in linear logic</article-title>
          .
          <source>ACM Trans. Comput. Log.</source>
          ,
          <volume>13</volume>
          (
          <issue>1</issue>
          ):2:
          <issue>1</issue>
          {2:
          <fpage>44</fpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>D.</given-names>
            <surname>Baelde</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Gacek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Miller</surname>
          </string-name>
          ,
          <string-name>
            <surname>G.</surname>
          </string-name>
          <article-title>Nadathur, and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Tiu</surname>
          </string-name>
          .
          <article-title>The Bedwyr system for model checking over syntactic expressions</article-title>
          . In F. Pfenning, editor,
          <source>21th Conf. on Automated Deduction, number 4603 in LNAI</source>
          , pages
          <volume>391</volume>
          {
          <fpage>397</fpage>
          . Springer,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>J. C.</given-names>
            <surname>Blanchette</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Bulwahn</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Nipkow</surname>
          </string-name>
          .
          <article-title>Automatic proof and disproof in Isabelle/HOL</article-title>
          . In C. Tinelli and V. Sofronie-Stokkermans, editors,
          <source>FroCoS</source>
          , volume
          <volume>6989</volume>
          of Lecture Notes in Computer Science, pages
          <volume>12</volume>
          {
          <fpage>27</fpage>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>R.</given-names>
            <surname>Blanco</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Miller</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Momigliano</surname>
          </string-name>
          .
          <article-title>Property-based testing via proof reconstruction</article-title>
          .
          <source>In PPDP</source>
          , pages
          <volume>5</volume>
          :
          <issue>1</issue>
          {5:
          <fpage>13</fpage>
          . ACM,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>J.</given-names>
            <surname>Cheney</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Momigliano</surname>
          </string-name>
          .
          <article-title>Check: A mechanized metatheory model checker</article-title>
          .
          <source>Theory and Practice of Logic Programming</source>
          ,
          <volume>17</volume>
          (
          <issue>3</issue>
          ):
          <volume>311</volume>
          {
          <fpage>352</fpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>J.</given-names>
            <surname>Cheney</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Momigliano</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Pessina</surname>
          </string-name>
          .
          <article-title>Advances in property-based testing for Prolog</article-title>
          . In B. K. Aichernig and
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>A</article-title>
          . Furia, editors,
          <source>TAP</source>
          <year>2016</year>
          , volume
          <volume>9762</volume>
          of Lecture Notes in Computer Science, pages
          <volume>37</volume>
          {
          <fpage>56</fpage>
          . Springer,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>J.</given-names>
            <surname>Cheney</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.</given-names>
            <surname>Urban</surname>
          </string-name>
          .
          <article-title>Nominal logic programming</article-title>
          .
          <source>ACM Transactions on Programming Languages and Systems</source>
          ,
          <volume>30</volume>
          (
          <issue>5</issue>
          ):
          <fpage>26</fpage>
          ,
          <year>August 2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>Z.</given-names>
            <surname>Chihani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Miller</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Renaud</surname>
          </string-name>
          .
          <article-title>A semantic framework for proof evidence</article-title>
          .
          <source>J. of Automated Reasoning</source>
          ,
          <volume>59</volume>
          (
          <issue>3</issue>
          ):
          <volume>287</volume>
          {
          <fpage>330</fpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>A. P.</given-names>
            <surname>Felty</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Momigliano</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Pientka</surname>
          </string-name>
          .
          <article-title>Benchmarks for reasoning with syntax trees containing binders and contexts of assumptions</article-title>
          .
          <source>Math. Struct. Comput. Sci.</source>
          ,
          <volume>28</volume>
          (
          <issue>9</issue>
          ):
          <volume>1507</volume>
          {
          <fpage>1540</fpage>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <given-names>Q.</given-names>
            <surname>Heath</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Miller</surname>
          </string-name>
          .
          <article-title>A proof theory for model checking</article-title>
          .
          <source>J. of Automated Reasoning</source>
          ,
          <volume>63</volume>
          (
          <issue>4</issue>
          ):
          <volume>857</volume>
          {
          <fpage>885</fpage>
          ,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>J.</given-names>
            <surname>Hughes</surname>
          </string-name>
          .
          <article-title>Quickcheck testing for fun and profit</article-title>
          . In M. Hanus, editor,
          <source>PADL 2007</source>
          , volume
          <volume>4354</volume>
          <source>of LNCS</source>
          , pages
          <volume>1</volume>
          {
          <fpage>32</fpage>
          . Springer,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>Klein and coauthors. Run your research: on the effectiveness of lightweight mechanization</article-title>
          .
          <source>POPL '12</source>
          , pages
          <fpage>285</fpage>
          {
          <fpage>296</fpage>
          . ACM,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>X.</given-names>
            <surname>Leroy</surname>
          </string-name>
          and
          <string-name>
            <given-names>H.</given-names>
            <surname>Grall</surname>
          </string-name>
          .
          <article-title>Coinductive big-step operational semantics</article-title>
          .
          <source>Information and Computation</source>
          ,
          <volume>207</volume>
          (
          <issue>2</issue>
          ):
          <volume>284</volume>
          {
          <fpage>304</fpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <given-names>D.</given-names>
            <surname>Miller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Nadathur</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Pfenning</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Scedrov</surname>
          </string-name>
          .
          <article-title>Uniform proofs as a foundation for logic programming</article-title>
          .
          <source>Annals of Pure and Applied Logic</source>
          ,
          <volume>51</volume>
          :
          <fpage>125</fpage>
          {
          <fpage>157</fpage>
          ,
          <year>1991</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <given-names>A.</given-names>
            <surname>Momigliano</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Ornaghi</surname>
          </string-name>
          .
          <article-title>The blame game for property-based testing</article-title>
          .
          <source>In CILC</source>
          , volume
          <volume>2396</volume>
          <source>of CEUR Workshop Proceedings</source>
          , pages
          <fpage>4</fpage>
          <lpage>{</lpage>
          13. CEUR-WS.org,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>S.</given-names>
            <surname>Negri</surname>
          </string-name>
          ,
          <string-name>
            <surname>J.</surname>
          </string-name>
          <article-title>von Plato, and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Ranta</surname>
          </string-name>
          .
          <source>Structural Proof Theory</source>
          . Cambridge University Press,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <given-names>Z.</given-names>
            <surname>Paraskevopoulou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Hritcu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Denes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Lampropoulos</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B. C.</given-names>
            <surname>Pierce</surname>
          </string-name>
          .
          <article-title>Foundational property-based testing</article-title>
          . In C. Urban and
          <string-name>
            <surname>X</surname>
          </string-name>
          . Zhang, editors,
          <source>ITP</source>
          <year>2015</year>
          , volume
          <volume>9236</volume>
          of Lecture Notes in Computer Science, pages
          <volume>325</volume>
          {
          <fpage>343</fpage>
          . Springer,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <given-names>F.</given-names>
            <surname>Pfenning</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Griffith</surname>
          </string-name>
          .
          <article-title>Polarized substructural session types</article-title>
          .
          <source>In FoSSaCS</source>
          , volume
          <volume>9034</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>3</fpage>
          <lpage>{</lpage>
          22. Springer,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>A. M.</surname>
          </string-name>
          <article-title>Pitts. Operationally Based Theories of Program Equivalence</article-title>
          . In P. Dybjer and A. M. Pitts, editors,
          <source>Semantics and Logics of Computation</source>
          ,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23. A.
          <string-name>
            <surname>Schack-Nielsen</surname>
            and
            <given-names>C.</given-names>
          </string-name>
          <article-title>Schurmann. Celf - A logical framework for deductive and concurrent systems (system description)</article-title>
          .
          <source>In IJCAR</source>
          , volume
          <volume>5195</volume>
          of Lecture Notes in Computer Science, pages
          <volume>320</volume>
          {
          <fpage>326</fpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>