<?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="http://www.loc.gov/MARC21/slim">
<record>
  <controlfield tag="001">835546</controlfield>
  <controlfield tag="005">20251010123817.0</controlfield>
  <datafield tag="024" ind1="7" ind2=" ">
    <subfield code="2">HBZ</subfield>
    <subfield code="a">HT021160946</subfield>
  </datafield>
  <datafield tag="024" ind1="7" ind2=" ">
    <subfield code="2">Laufende Nummer</subfield>
    <subfield code="a">40884</subfield>
  </datafield>
  <datafield tag="024" ind1="7" ind2=" ">
    <subfield code="2">datacite_doi</subfield>
    <subfield code="a">10.18154/RWTH-2021-10633</subfield>
  </datafield>
  <datafield tag="037" ind1=" " ind2=" ">
    <subfield code="a">RWTH-2021-10633</subfield>
  </datafield>
  <datafield tag="041" ind1=" " ind2=" ">
    <subfield code="a">English</subfield>
  </datafield>
  <datafield tag="082" ind1=" " ind2=" ">
    <subfield code="a">004</subfield>
  </datafield>
  <datafield tag="100" ind1="1" ind2=" ">
    <subfield code="0">P:(DE-82)IDM02600</subfield>
    <subfield code="a">Bohlender, Dimitri</subfield>
    <subfield code="b">0</subfield>
    <subfield code="u">rwth</subfield>
  </datafield>
  <datafield tag="245" ind1=" " ind2=" ">
    <subfield code="a">Symbolic methods for formal verification of industrial control software</subfield>
    <subfield code="c">vorgelegt von Dimitri Bohlender, M.Sc. RWTH</subfield>
    <subfield code="h">online</subfield>
  </datafield>
  <datafield tag="246" ind1=" " ind2="3">
    <subfield code="a">Symbolische Methoden zur formalen Verifikation von industrieller Steuerungssoftware</subfield>
    <subfield code="y">German</subfield>
  </datafield>
  <datafield tag="260" ind1=" " ind2=" ">
    <subfield code="a">Aachen</subfield>
    <subfield code="b">RWTH Aachen University</subfield>
    <subfield code="c">2021</subfield>
  </datafield>
  <datafield tag="260" ind1=" " ind2=" ">
    <subfield code="c">2022</subfield>
  </datafield>
  <datafield tag="300" ind1=" " ind2=" ">
    <subfield code="a">1 Online-Ressource : Illustrationen, Diagramme</subfield>
  </datafield>
  <datafield tag="336" ind1="7" ind2=" ">
    <subfield code="0">2</subfield>
    <subfield code="2">EndNote</subfield>
    <subfield code="a">Thesis</subfield>
  </datafield>
  <datafield tag="336" ind1="7" ind2=" ">
    <subfield code="0">PUB:(DE-HGF)11</subfield>
    <subfield code="2">PUB:(DE-HGF)</subfield>
    <subfield code="a">Dissertation / PhD Thesis</subfield>
    <subfield code="b">phd</subfield>
    <subfield code="m">phd</subfield>
  </datafield>
  <datafield tag="336" ind1="7" ind2=" ">
    <subfield code="0">PUB:(DE-HGF)3</subfield>
    <subfield code="2">PUB:(DE-HGF)</subfield>
    <subfield code="a">Book</subfield>
    <subfield code="m">book</subfield>
  </datafield>
  <datafield tag="336" ind1="7" ind2=" ">
    <subfield code="2">BibTeX</subfield>
    <subfield code="a">PHDTHESIS</subfield>
  </datafield>
  <datafield tag="336" ind1="7" ind2=" ">
    <subfield code="2">DRIVER</subfield>
    <subfield code="a">doctoralThesis</subfield>
  </datafield>
  <datafield tag="336" ind1="7" ind2=" ">
    <subfield code="2">DataCite</subfield>
    <subfield code="a">Output Types/Dissertation</subfield>
  </datafield>
  <datafield tag="336" ind1="7" ind2=" ">
    <subfield code="2">ORCID</subfield>
    <subfield code="a">DISSERTATION</subfield>
  </datafield>
  <datafield tag="490" ind1="0" ind2=" ">
    <subfield code="a">Aachener Informatik-Berichte</subfield>
    <subfield code="v">2021-11</subfield>
  </datafield>
  <datafield tag="500" ind1=" " ind2=" ">
    <subfield code="a">Veröffentlicht auf dem Publikationsserver der RWTH Aachen University 2022</subfield>
  </datafield>
  <datafield tag="502" ind1=" " ind2=" ">
    <subfield code="a">Dissertation, RWTH Aachen University, 2021</subfield>
    <subfield code="b">Dissertation</subfield>
    <subfield code="c">RWTH Aachen University</subfield>
    <subfield code="d">2021</subfield>
    <subfield code="g">Fak01</subfield>
    <subfield code="o">2021-09-23</subfield>
  </datafield>
  <datafield tag="520" ind1="3" ind2=" ">
    <subfield code="a">Viele der Systeme, auf die wir uns verlassen und mit denen wir täglich interagieren, sind softwaregesteuert. Jedoch ist die fehlerfreie Implementierung solcher Systeme schwer, da hierfür die enorme Menge an erreichbaren Systemzuständen von den Entwicklern berücksichtigt werden muss. Während Testen der gängige Ansatz zur Qualitätssicherung ist, können damit nur Fehler gefunden, aber nicht deren Abwesenheit gezeigt werden. Im Gegensatz dazu haben formale Methoden eine mathematische Basis und ermöglichen die rigorose Überprüfung von formal beschriebenem Systemverhalten. Insbesondere bringen sie Verfahren zur formalen Verifikation hervor, mit denen sich untersuchen lässt, ob ein System bestimmte Spezifikationen einhält. Obwohl solche Verfahren vereinfacht als automatische Erkundung des Zustandsraums eines Systems verstanden werden können, ist die explizite Aufzählung jedes erreichbaren Zustands oft vermeidbar. Hierzu operieren symbolische Methoden auf vielen Zuständen gleichzeitig, indem sie Zustandsmengen und Übergangsrelationen als logische Formeln repräsentieren. Diese Arbeit befasst sich mit symbolischen Methoden zur formalen Verifikation der softwaregesteuerten reaktiven Systeme, die in industriellen Steuerungsanwendungen verwendet werden. Während diese Systeme oft in einem sicherheitskritischen Umfeld betrieben werden, erschweren die Spezifikationen und Eigenheiten der Domäne die Verwendung existierender Verifikationswerkzeuge und schaffen Bedarf an computergestützten Verfahren zur Analyse des Systemverhaltens. Unsere Beiträge behandeln diese Problematik auf eine plattformunabhängige Art und Weise, werden aber am Beispiel von speicherprogrammierbaren Steuerungen präsentiert, welche auf die Anforderungen der industriellen Automatisierung zugeschnitten und entsprechend weit verbreitet sind: (i) Wir stellen eine Prozedur zur beschränkten Verifikation von Steuerungssoftware vor, deren Schranke anstatt der Einschränkung der Länge von Anweisungsfolgen die Anzahl der Programmausführungszyklen bezeichnet. Indem wir die am Ende eines Zyklus erreichbaren Zustände in Relation setzen, ermöglichen wir die Überprüfung von Spezifikationen, die sich nur auf die beobachtbaren Zustände beziehen. (ii) Wir leiten eine logische Charakterisierung von Steuerungssoftware-Sicherheit in Form von Horn-Klauseln aus Grundlagen der Sicherheit reaktiver Systeme ab und zeigen, dass dieser Ansatz konkurrenzfähig ist. Um die Modularität von Steuerungssoftware auszunutzen, erweitern und kombinieren wir die Charakterisierung mit einer domänenspezifischen Analyse zur Approximation des Zustandsraums. (iii) Wir geben ein Verfahren zur Verifikation der Einhaltung der automatenbasierten Spezifikationen des PLCopen an. Im Gegensatz zu verwandten Arbeiten behandelt es Aufrufe originalgetreu, ist inkrementell und nutzt das Lösen von Horn-Klauseln. (iv) Wir präsentieren Techniken zum Entwurf und zur Verifikation von Steuerungssoftware, die robust gegenüber Neustarts sein soll. Im Unterschied zu früheren Arbeiten wird die Programmsemantik nicht überapproximiert, um falsch-positive Resultate zu vermeiden. Zudem zeigen wir, wie die Wahl persistenter Variablen auf Parametersynthese reduziert und mit den vorhergehenden Techniken gelöst werden kann.</subfield>
    <subfield code="l">ger</subfield>
  </datafield>
  <datafield tag="520" ind1=" " ind2=" ">
    <subfield code="a">Many of the systems that we rely on, and interact with on a daily basis, are driven by software. Unfortunately, design and implementation of such systems is naturally prone to error, as it is done by humans and involves reasoning about the vast number of states a system may reach. While testing is the common approach to alleviating the risk of writing faulty software, it can only help with finding errors, but not prove their absence. By way of contrast, formal methods have mathematical foundations, and enable rigorous reasoning about the behaviour of formally modelled systems. In particular, they give rise to formal verification procedures for proving a system's compliance with certain formal specifications. Although many such procedures can simplistically be thought of as an automatic exploration of a system's state space, the explicit enumeration of each reachable state can often be avoided. To this end, symbolic methods reason about many states at a time, by representing sets of states and transition relations as logical formulas. This thesis is concerned with advances in symbolic methods for formal verification of the software-driven reactive systems that are used in the setting of industrial automation. While these systems often operate in safety-critical environments, the specifications and peculiarities of the domain impede the use of existing verification machinery for general-purpose programming languages, leaving engineers in need of computer-aided reasoning about the control software semantics. Our contributions address this issue in platform-agnostic ways, but are presented using the example of programmable logic controllers which are tailored to the industrial automation domain and therefore widely used: (i) We propose a procedure for bounded verification of control software, where the bound denotes the number of program execution cycles instead of the traditional restriction of the number of instructions. By relating the states that are reachable at the end of each cycle through a dynamic and incremental encoding, we enable checking specifications that only refer to these observable states, while performing on par with state of the art. (ii) We derive a logical characterisation of control software safety in terms of constrained Horn clauses from reactive systems safety foundations. Leveraging solvers for this formalism is shown to be competitive with state-of-the-art approaches. To exploit the modularity of control software, the characterisation is also extended and combined with mode abstraction -- a domain-specific analysis for approximating the state space. (iii) We state a procedure for proving a module's compliance with the automaton-based specifications used by PLCopen. Unlike previous work, our approach handles calls faithfully, is incremental, compositional, and leverages Horn clause solving. (iv) We present approaches for the design and verification of control software that is resilient to potential restarts of the controller. In contrast to previous work, we do not over-approximate the program semantics and get false positives, but reason about the precise program semantics by reducing the problem to satisfiability of Horn clauses. We show how the choice of persistent variables can be reduced to parameter synthesis, and solved by extending the previous verification procedures.</subfield>
    <subfield code="l">eng</subfield>
  </datafield>
  <datafield tag="588" ind1=" " ind2=" ">
    <subfield code="a">Dataset connected to Lobid/HBZ</subfield>
  </datafield>
  <datafield tag="591" ind1=" " ind2=" ">
    <subfield code="a">Germany</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2="7">
    <subfield code="a">constrained Horn clauses</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2="7">
    <subfield code="a">formal methods</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2="7">
    <subfield code="a">formal verification</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2="7">
    <subfield code="a">model checking</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2="7">
    <subfield code="a">programmable logic controller</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2="7">
    <subfield code="a">symbolic methods</subfield>
  </datafield>
  <datafield tag="700" ind1="1" ind2=" ">
    <subfield code="0">P:(DE-82)IDM06137</subfield>
    <subfield code="a">Kowalewski, Stefan</subfield>
    <subfield code="b">1</subfield>
    <subfield code="e">Thesis advisor</subfield>
    <subfield code="u">rwth</subfield>
  </datafield>
  <datafield tag="700" ind1="1" ind2=" ">
    <subfield code="0">P:(DE-82)004361</subfield>
    <subfield code="a">Hermanns, Holger</subfield>
    <subfield code="b">2</subfield>
    <subfield code="e">Thesis advisor</subfield>
  </datafield>
  <datafield tag="856" ind1="4" ind2=" ">
    <subfield code="u">http://publications.rwth-aachen.de/record/835546/files/835546.pdf</subfield>
    <subfield code="y">OpenAccess</subfield>
  </datafield>
  <datafield tag="856" ind1="4" ind2=" ">
    <subfield code="u">http://publications.rwth-aachen.de/record/835546/files/835546_source.zip</subfield>
    <subfield code="y">Restricted</subfield>
  </datafield>
  <datafield tag="909" ind1="C" ind2="O">
    <subfield code="o">oai:publications.rwth-aachen.de:835546</subfield>
    <subfield code="p">openaire</subfield>
    <subfield code="p">open_access</subfield>
    <subfield code="p">VDB</subfield>
    <subfield code="p">driver</subfield>
    <subfield code="p">dnbdelivery</subfield>
  </datafield>
  <datafield tag="910" ind1="1" ind2=" ">
    <subfield code="0">I:(DE-588b)36225-6</subfield>
    <subfield code="6">P:(DE-82)IDM02600</subfield>
    <subfield code="a">RWTH Aachen</subfield>
    <subfield code="b">0</subfield>
    <subfield code="k">RWTH</subfield>
  </datafield>
  <datafield tag="914" ind1="1" ind2=" ">
    <subfield code="y">2021</subfield>
  </datafield>
  <datafield tag="915" ind1=" " ind2=" ">
    <subfield code="0">StatID:(DE-HGF)0510</subfield>
    <subfield code="2">StatID</subfield>
    <subfield code="a">OpenAccess</subfield>
  </datafield>
  <datafield tag="920" ind1="1" ind2=" ">
    <subfield code="0">I:(DE-82)122810_20140620</subfield>
    <subfield code="k">122810</subfield>
    <subfield code="l">Lehrstuhl für Informatik 11 (Embedded Software)</subfield>
    <subfield code="x">0</subfield>
  </datafield>
  <datafield tag="920" ind1="1" ind2=" ">
    <subfield code="0">I:(DE-82)120000_20140620</subfield>
    <subfield code="k">120000</subfield>
    <subfield code="l">Fachgruppe Informatik</subfield>
    <subfield code="x">1</subfield>
  </datafield>
  <datafield tag="980" ind1="1" ind2=" ">
    <subfield code="a">FullTexts</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">I:(DE-82)120000_20140620</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">I:(DE-82)122810_20140620</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">UNRESTRICTED</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">VDB</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">book</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">phd</subfield>
  </datafield>
</record>
</collection>