<!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>
      <journal-title-group>
        <journal-title>Barcelona, Spain, April</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Hanfor: Requirements Formalisation and Beyond</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Nico Hauf</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Elisabeth Henkel</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Tobias Kolzer</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Vincent Langenfeld</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Andreas Podelski</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Computer Science, University of Freiburg</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2025</year>
      </pub-date>
      <volume>7</volume>
      <issue>2025</issue>
      <fpage>0000</fpage>
      <lpage>0002</lpage>
      <abstract>
        <p>Context and motivation. The semantic review, a process that combines the manual inspection and formalisation of requirements with an automatic formal analysis, can help to improve requirements quality and find severe defects. Problem. The human needs tool support for inspection, formalisation and review of findings to be able to execute their part of the process efectively and ecfiiently. Solution. The new version of the Hanfor tool combines the existing formalisation editor with new features: reporting, lightweight checks, and the integration of formal analysis. Conclusion and results. We report on the addition of the new features to Hanfor and explain how they can help the human to execute their part in the semantic review process.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Formal Requirements Analysis</kwd>
        <kwd>Requirements Formalisation</kwd>
        <kwd>Tool Supported Review</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>analysis tool (Subsection 3.4), and telemetry which allows us to measure how the human efort distributes
over the single steps in the formalisation and inspection process (Subsection 3.5).</p>
    </sec>
    <sec id="sec-2">
      <title>2. Hanfor in the Semantic Review Process</title>
      <p>We call a requirements review a semantic review
ibfyitreipnrtoedguractteiosnthoef tihnespreeqcutiiorenmoefnrtesqausiraefmoremntasl rreaqw. Hanfor report
artefact and the (automatic) formal analysis of
said formal artefacts in conjunction. More
precpiascetlfyu, lindeafescetms(aen.gti.carmevbiiegwui,tyinospreilclteigoinbifloitryi)mis- Custoℬ mer Supervisor Worker Supervisor Custoℬ mer
supported by deciding on a formalisation while Figure 1: Hanfor in the semantic review process.
detection of defects in the complex behaviour of the requirements (e.g. inconsistencies) is solved by an
automatic (exhaustive) analysis.</p>
      <p>
        Here, we will include a short summary of the semantic review process that we apply (for a
comprehensive overview, see [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]): A service provider ofers the semantic review to a customer. The semantic
review runs outside of the usual development process, performing the semantic review parallel to, e.g.,
elicitation and review activities performed during system development. After receiving the requirements
document from the customer, a supervisor (a role knowledgeable in formal analysis and requirements)
performs an initial check for road blocks for the formalisation. The requirements are then imported
into Hanfor1 to be formalised by workers. People performing the worker role are required to have
experience in requirements quality and foundations in formal logics in order to detect defects and
irregularities in the requirements, and to formalise the requirements in a formal language. In the case
of Hanfor the requirements pattern language HanforPL [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]) is used to express formal requirements
in an accessible way. The formalised requirements are then input into a formal analysis tool (such
as Ultimate ReqCheck [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]). The accumulated results are reviewed by a supervisor (optionally in
cooperation with the worker) and then reported to the customer to act upon the findings.
      </p>
      <p>
        The work in Hanfor is mainly performed by the worker role, thus we will from here on mainly focus
on their interaction with Hanfor. In a Hanfor session, the worker is shown a table of requirements
(Fig. 2). By clicking on a requirement, the formalisation dialogue is opened; a formalisation can be
entered by selecting a scope (e.g. Globally) and a pattern (e.g. it is always the case that if ‘R’ holds then
‘S’ holds after at most ‘T’ time units) and filling the placeholders with according expressions (Fig. 3).
During formalisation, the worker sets tags (Sec. 3.1) for violations of requirements quality attributes and
other impediments to formalisation. For each tag, a detailed explanation can be added in the comment
ifeld (Fig. 4). The formalisation is accompanied by supporting tools, such as, variable autocompletion,
type-checking and -inference [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. The Hanfor simulator (see Sec. 3.2) helps the worker grasp complex
patterns and their interactions more easily not only during the formalisation but also during the review
of requirements.
      </p>
      <p>After a larger set of requirements has been formalised, the worker can decide to run fast internal
checks (Sec. 3.3) and the exhaustive formal analysis in Ultimate ReqCheck1 (Sec. 3.4). The worker
evaluates the results produced by the analysis and decides if the formalisation has to be adapted, if the
ifnding is an artefact of the formalisation and has to be ignored, or if the finding is a true positive.</p>
      <p>At this point, the worker has done their part and the supervisor reviews the findings. The final
report is then presented to the customer. Both the formalisation process and the entire semantic review
process may be iterated based on resolved findings on the supervisor and customer side, respectively.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Architecture and Inner Workings</title>
      <p>The implementation of Hanfor is based on Python 3.12 and the web application framework flask on
the server side, as well as JavaScript on the customer side. It relies on a number of third party tools,
being either directly integrated (e.g. the SMT-solver Z3 via pysmt), connecting via remote API (e.g., the
Ultimate-framework) or only suggested for combined usage (e.g. the version control system git).</p>
      <p>The architecture (Fig. 5) of Hanfor is based on modules sharing a commonly accessible data storage
and that supply their own web/API endpoint handling complex interactions (in a loose MVC fashion).</p>
      <p>The session storage relates to the data of a single formalisation project, with revisions (snapshots
of the project) that relate to each update of the requirements document by the customer. To be able
to delegate any further version handling to git, the storage is based on JSON-files with versioning
friendly (i.e. deterministic) updating. To enable rapid development, any module can register classes at
the session storage, which are automatically saved and restored.</p>
      <p>Functionality that is directly interacting with tags, variables, requirements and formalisations resides
in the core-library to enable complex operations on this data. Parts of modules that are to be commonly
1Hanfor and Ultimate ReqCheck are available under https://github.com/ultimate-pa.
used are also moved to the core library (e.g., Req to Pea started as part of the simulator but is now being
used in some quick checks and thus was recently moved).</p>
      <p>On the web-facing side, we make heavy use of flask-blueprints to separate the user-facing functionality
(server side as well as customer side) from the core functions.</p>
      <p>
        Regarding our previous publication on Hanfor [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], the following subsections will provide an overview
of the modules that were added or that changed substantially.
3.1. Tags
During a semantic review, information about defects has to be communicated to the customer as well
as shared between worker and supervisor. Documenting these findings should not impede the thinking
process during formalisation. Furthermore, this documentation should be structured in such a way
that it facilitates the review by allowing to sort for defect classes and filter out process information. To
achieve this, we implemented tags [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] that can be attached to requirements in the formalisation editor.
Figure 4 shows several tags added during formalisation of Req_3 (Fig. 3), e.g., the tag unclear to signify
questions to the supervisor or customer and, e.g., the tag ambiguous to mark that the requirement has
the according defect. Tags added to a requirement are also shown in the main view (Fig. 2).
      </p>
      <p>A tag can have a general description to document the intention of this particular tag, and can be
marked as process only in order to be excluded in any reports generated (as process tags are usually
of no value for the customer). As soon as a tag has been defined by adding it to a requirement, it is
listed on the Tags page, where it can also be edited. Hanfor also comes with a number of generally
applicable standard tags for defects and communication.</p>
      <p>During our case studies, tags turned out to be useful, but additional documentation and
communication was required to convey the reasoning behind a large fraction of individual instances of tags. To
allow this documentation to happen directly in Hanfor and also for it to be included in the report to
the customer (except for comments on process tags), Hanfor shows a text field for each tag added
(Fig. 4). This text field can be used to elaborate on the tag.</p>
      <p>Recently, we started to use the tag-comment system to also show and store findings of tools such as
the type checker and even the formal analysis (see Sec. 3.4). Experience in several industry projects</p>
      <sec id="sec-3-1">
        <title>Create Session/Revision</title>
      </sec>
      <sec id="sec-3-2">
        <title>Raw Requirements csv Hanfor CLI</title>
      </sec>
      <sec id="sec-3-3">
        <title>Hanfor Server</title>
      </sec>
      <sec id="sec-3-4">
        <title>Store</title>
      </sec>
      <sec id="sec-3-5">
        <title>Type Check and Inference Tag and</title>
      </sec>
      <sec id="sec-3-6">
        <title>Formalise</title>
      </sec>
      <sec id="sec-3-7">
        <title>Parse</title>
      </sec>
      <sec id="sec-3-8">
        <title>Export Req./Report flask socketIO</title>
      </sec>
      <sec id="sec-3-9">
        <title>Webinterface</title>
      </sec>
      <sec id="sec-3-10">
        <title>Edit Formalisation</title>
      </sec>
      <sec id="sec-3-11">
        <title>Importer</title>
      </sec>
      <sec id="sec-3-12">
        <title>Quick Checks</title>
      </sec>
      <sec id="sec-3-13">
        <title>Simulation</title>
      </sec>
      <sec id="sec-3-14">
        <title>Exporter</title>
      </sec>
      <sec id="sec-3-15">
        <title>Statistics</title>
      </sec>
      <sec id="sec-3-16">
        <title>Ultimate</title>
      </sec>
      <sec id="sec-3-17">
        <title>Completeness</title>
      </sec>
      <sec id="sec-3-18">
        <title>Triviality</title>
      </sec>
      <sec id="sec-3-19">
        <title>Simulation Engine</title>
      </sec>
      <sec id="sec-3-20">
        <title>Formal Req.</title>
      </sec>
      <sec id="sec-3-21">
        <title>Report</title>
      </sec>
      <sec id="sec-3-22">
        <title>Telemetry</title>
        <p>Ultimate Connector
req
xls
t
m
s
y
p
t
m
s
y
p
e
t
a
m
i
t
l
U</p>
      </sec>
      <sec id="sec-3-23">
        <title>Configuration</title>
      </sec>
      <sec id="sec-3-24">
        <title>Patterns</title>
      </sec>
      <sec id="sec-3-25">
        <title>Expressions Grammar</title>
      </sec>
      <sec id="sec-3-26">
        <title>Standard Tags</title>
      </sec>
      <sec id="sec-3-27">
        <title>Session Storage</title>
        <p>e
h
c
a
C
itg j-tce
b
O
n
o
s
J</p>
      </sec>
      <sec id="sec-3-28">
        <title>Tags</title>
        <sec id="sec-3-28-1">
          <title>VVaarriiaabblleess</title>
        </sec>
        <sec id="sec-3-28-2">
          <title>RRaaww. RReeqquuiirreemmeenntts,</title>
        </sec>
        <sec id="sec-3-28-3">
          <title>FFoorrmmaalliissaattiioonnss,</title>
        </sec>
        <sec id="sec-3-28-4">
          <title>CCoommmmeennttss,</title>
        </sec>
      </sec>
      <sec id="sec-3-29">
        <title>Core</title>
        <p>t
m
s
y
p</p>
      </sec>
      <sec id="sec-3-30">
        <title>Expression Parsing</title>
      </sec>
      <sec id="sec-3-31">
        <title>Type Check/Inference</title>
      </sec>
      <sec id="sec-3-32">
        <title>Automata (PEA) Req to PEA</title>
        <p>shows that the tags are useful for a quick overview and structuring of findings, while the comments have
replaced any additional documentation outside of Hanfor as used in older semantic review projects.
3.2. Simulator
Analysing the interaction of a small set of formal requirements or even of an edge case of a single
formal requirement by hand is complex and time-consuming. The simulator ofers a graphical interface
(Fig. 6) to simulate the behaviour of a selected set of requirements directly in Hanfor.</p>
        <p>During simulation, the values of all relevant variables are shown in a timing diagram. To control the
simulation, the user can enter concrete values that should be set in the next step and the duration of
the next step. After clicking the Check-button, the simulator ofers a number of possible assignments
for all free variables. The Next-button advances the simulation accordingly, while Back reverts the last
selected interval (repeatedly).</p>
        <p>
          In the bottom of the simulator, the formalised requirements are additionally shown as their logical
formulas (for details regarding the underlying logic, see [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]). Intuitively, each formula describes a
sequence of behaviours called a phase (and optionally a time bound), with each phase being separated
by a semicolon. In a system conforming to the requirements, none of the sequences may never be
observed fully (i.e. from the left-most to the right-most phase) as they describe what not should happen.
The simulator marks phases that are currently the right-most reachable phase in green. In general,
behaviour can be split and assigned to phases in diferent ways, several phases are marked green.
Phases with time bound are coloured yellow if their time bound is not yet reached. In case of an
1pysmt [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] (pypi.org/project/PySMT/), Ultimate [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] (github.com/ultimate-pa/ultimate) and flask ( pypi.org/
project/Flask/) with SocketIO (pypi.org/project/Flask-SocketIO/)
imminent violation of a phase’s time bound, the phase is marked red. This representation is not as
intuitive as showing the underlying automata that the simulation is using internally. However, it is the
most compact representation and provides valuable information to guide the simulation to interesting
behaviour.
        </p>
        <p>
          Experience shows that the simulator is used sparingly, as inspecting the behaviour is relatively
time-consuming. In the occasion the simulator is used, it is an efective tool to inspect if combined
requirements behave the way intended in the formalisation, or if, e.g., an unwanted deadlock is
encountered when the formalisations are triggered. It is equally efective in refreshing one’s memory of
the exact semantics of a requirements pattern.
3.3. Quick Checks
Hanfor supports the worker by providing feedback on the quality of formalisations as early as possible.
While we perform exhaustive formal analyses in an external tool (see Sec. 3.4), all checks that can
possibly be performed in line with the formalisation are directly executed in Hanfor. This started
with simple checks like syntactical correctness and type checking/inference [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ], and is now extended to
additional lightweight checks:
        </p>
        <p>Requirements sets may define admissible values or value ranges for variables mentioned in the
requirements. Intuitively, to be complete, each value admissible should also be at least element of one
observable in the requirements. Or, in other words, the requirement should at least mention each of
the admissible values at least once (possibly also as part of a range). We call a failure to do so domain
incompleteness, which can hint at an incompleteness in the raw-requirements or at a formalisation
error. To check for domain incompleteness, we compute the union of all values  in all observables
(for each variable ), and check if  ⊇  with  being the set of all admissible values. If this is not
the case, a value missing in  as well as both the sets  and  are displayed, to guide investigation of
the finding.</p>
        <p>For example, in a set of requirements, the permissible values of speed were set to 0 ≤ speed ≤ 100.
The two requirements containing the speed variable contain the observables speed &lt; 30 and speed &gt;
30. The check for domain incompleteness reported the value 30 not being referred to anywhere, which
seems to be an omission in one of the observables.</p>
        <p>Equally, in any requirement, no observable for a variable , should have only elements outside the
admissible range. We call this failure domain incompatibility, which has to be either a defect in
the raw-requirements or in the formalisation. To check for domain incompatibility, we check for each
observable  of variable  if the observable value is wholly outside the environment  ∩  ̸= ∅. If
this is the case, the observable  as well as the permissible values  are reported.</p>
        <p>
          With the same variable as from the example above, a requirement contained the observable speed &gt;
FULLSPEED with the constant FULLSPEED = 100 being defined elsewhere. A domain incompatibility
was reported by Hanfor because the aforementioned requirement ties to exclusively set speed outside
the permissible range. We were able to track this defect back to the worker using the wrong comparative
symbol2.
3.4. Ultimate Access
While the quick checks allow for immediate feedback, a semantic review in Hanfor takes long to detect
complex defects (e.g. redundancy, rt-inconsistency and vacuity [
          <xref ref-type="bibr" rid="ref1 ref2 ref4">1, 2, 4</xref>
          ]). These analyses are implemented
as part of the program analysis framework Ultimate ReqCheck due to their computational demands.
The Ultimate connector (Fig. 5) connects Hanfor seamlessly to Ultimate, handling all data transfer
and result integration in the background, so that running formal analysis regularly can be performed
by the workers themselves, e.g., as an overnight test cycle.
        </p>
        <p>Technically, the Ultimate connector connects to the web-API of an instance of Ultimate ReqCheck
running on a dedicated (usually more powerful) machine. As visible in the main view of Hanfor (Fig. 2),
there is an Analysis tab in which the analysis process can be started by selecting a configuration (setting
the respective parameters within Ultimate ReqCheck) and the set of requirements to be analysed. The
analyses usually take between some minutes to several hours. Running analyses tasks can be seen by
switching to the Analysis page.</p>
        <p>After analysis is finished, findings ( i.e. a defect was found) are directly integrated into Hanfor as
tags. Each tag refers to the kind of analysis, with additional information being supplied in the form of a
comment containing the tool output.
3.5. Telemetry
Unfortunately, scientific investigations into the formalisation process itself are rare, as the
formalisation step is usually only seen as a necessary step to perform formal analyses and not as a valuable
review activity. With the telemetry feature of Hanfor, we intend to get a more nuanced view of the
requirements formalisation process as executed by our workers, i.e., which requirements are finished in
no-time versus which requirements take long or are finally disregarded for formalisation. The telemetry
will also give insight into Hanfor itself, as it tracks what features are used during the formalisation.</p>
        <p>On the technical side, Hanfor was enabled to run a socketIO connection in combination with its
REST -API (see Fig. 5), that is used to transmit events generated by the user interface. Events are emitted
by e.g. opening or closing a page and opening a formalisation dialogue. Data generated this way is
written into a server side time series database.</p>
        <p>
          We are currently in the process of collecting data of five diferent workers tasked with each formalising
a slightly altered version of the pseudo real-world requirements published by Houdek and Raschke [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
2Both examples are simplified versions of defects happening during the formalisation of pseudo-realistic automotive
requirements published by Houdek and Raschke [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
        </p>
        <p>Data will be analysed for the formalisation times and interaction timelines with Hanfor.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Conclusion</title>
      <p>Originally, the requirements formalisation tool Hanfor was developed out of the necessity to formalise
requirements as precondition to formal analysis. Emergence of our semantic review process during
industrial case studies, however, showed that the formalisation step itself is of far greater importance as
an individual component i.e. leading to a thorough inspection even with little to no domain knowledge.</p>
      <p>In this paper, we gave an overview of new features we added to Hanfor to support the inspection
by enabling fast documentation as well as the quality of resulting formalisations. Furthermore, we
presented the move of Hanfor to support research on requirements formalisation.</p>
      <p>The development of Hanfor continues as part of an industrial validation project.</p>
    </sec>
    <sec id="sec-5">
      <title>Acknowledgments</title>
      <p>Authors N. Hauf, E. Henkel, V. Langenfeld, and A. Podelski were supported by the Bundesministerium
für Bildung und Forschung (BMBF, Federal Ministry of Education and Research, Germany) under
reference no. 03VP11880 SystemValid.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>E.</given-names>
            <surname>Henkel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Hauf</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Funk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Langenfeld</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Podelski</surname>
          </string-name>
          ,
          <article-title>Scalable redundancy detection for real-time requirements</article-title>
          , in: RE, IEEE,
          <year>2024</year>
          , pp.
          <fpage>193</fpage>
          -
          <lpage>204</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>V.</given-names>
            <surname>Langenfeld</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Dietsch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Westphal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hoenicke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Post</surname>
          </string-name>
          ,
          <article-title>Scalable analysis of real-time requirements</article-title>
          , in: RE, IEEE,
          <year>2019</year>
          , pp.
          <fpage>234</fpage>
          -
          <lpage>244</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>J.</given-names>
            <surname>Frattini</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Montgomery</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Fischbach</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Méndez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Fucci</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Unterkalmsteiner</surname>
          </string-name>
          ,
          <article-title>Requirements quality research: a harmonized theory, evaluation, and roadmap</article-title>
          ,
          <source>Requir. Eng</source>
          .
          <volume>28</volume>
          (
          <year>2023</year>
          )
          <fpage>507</fpage>
          -
          <lpage>520</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>A.</given-names>
            <surname>Post</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hoenicke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Podelski</surname>
          </string-name>
          ,
          <article-title>Vacuous real-time requirements</article-title>
          , in: RE, IEEE Computer Society,
          <year>2011</year>
          , pp.
          <fpage>153</fpage>
          -
          <lpage>162</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Katis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mavridou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Giannakopoulou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Pressburger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Schumann</surname>
          </string-name>
          , Capture, analyze, diagnose
          <article-title>: Realizability checking of requirements in FRET, in: CAV (2</article-title>
          ), volume
          <volume>13372</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2022</year>
          , pp.
          <fpage>490</fpage>
          -
          <lpage>504</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>S.</given-names>
            <surname>Becker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Dietsch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Hauf</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Henkel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Langenfeld</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Podelski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Westphal</surname>
          </string-name>
          , Hanfor:
          <article-title>Semantic requirements review at scale</article-title>
          ,
          <source>in: REFSQ Workshops</source>
          , volume
          <volume>2857</volume>
          <source>of CEUR Workshop Proceedings, CEUR-WS.org</source>
          ,
          <year>2021</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>D.</given-names>
            <surname>Dietsch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Langenfeld</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Westphal</surname>
          </string-name>
          ,
          <article-title>Formal requirements in an informal world</article-title>
          ,
          <source>in: 2020 IEEE workshop on formal requirements (FORMREQ)</source>
          , IEEE,
          <year>2020</year>
          , pp.
          <fpage>14</fpage>
          -
          <lpage>20</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>E.</given-names>
            <surname>Henkel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Hauf</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Langenfeld</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Eber</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Podelski</surname>
          </string-name>
          ,
          <article-title>Systematic adaptation and investigation of the understandability of a formal pattern language</article-title>
          ,
          <source>Requir. Eng</source>
          .
          <volume>29</volume>
          (
          <year>2024</year>
          )
          <fpage>3</fpage>
          -
          <lpage>23</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>M.</given-names>
            <surname>Gario</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Micheli</surname>
          </string-name>
          ,
          <article-title>Pysmt: a solver-agnostic library for fast prototyping of smt-based algorithms</article-title>
          ,
          <source>in: SMT Workshop</source>
          <year>2015</year>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>J.</given-names>
            <surname>Hoenicke</surname>
          </string-name>
          ,
          <article-title>Combination of processes, data, and time</article-title>
          ,
          <source>Ph.D. thesis</source>
          , Carl von Ossietzky University of Oldenburg,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>F.</given-names>
            <surname>Houdek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Raschke</surname>
          </string-name>
          ,
          <article-title>Adaptive exterior light and speed control system</article-title>
          ,
          <source>in: ABZ</source>
          , volume
          <volume>12071</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2020</year>
          , pp.
          <fpage>281</fpage>
          -
          <lpage>301</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>