toplogo
Sign In

Eine verifizierte und ausführbare Coq-Mechanisierung der JavaScript-Regulärausdrucks-Semantik


Core Concepts
Wir präsentieren eine ausführbare, bewiesenermaßen sichere, treue und zukunftssichere Coq-Mechanisierung der JavaScript-Regulärausdrucks-Semantik, wie sie in der letzten veröffentlichten Ausgabe von ECMA-262 Abschnitt 22.2 spezifiziert ist. Dies ist unseres Wissens nach das erste Mal, dass eine industriestärke Regulärausdrucks-Sprache in einem interaktiven Theorembeweiser treu mechanisiert wurde.
Abstract
Die Arbeit umfasst Folgendes: Eine flach eingebettete Coq-Mechanisierung, die die ECMAScript-Pseudocode-Spezifikation so genau wie möglich nachbildet. Dabei werden Techniken wie ein Fehlermonade und ein Zipper-Kontext verwendet, um die Spezifikation treu in Coq zu übersetzen. Sicherheits- und Terminierungsbeweise, die zeigen, dass die Spezifikation immer terminiert und keine Assertionsfehler auslösen kann. Dafür wird eine zentrale Invariante der von der Spezifikation generierten Matcher-Funktionen mechanisiert und bewiesen. Die Demonstration der Verwendbarkeit und Vielseitigkeit der Mechanisierung durch eine Reihe von Analysen, Fallstudien und Experimenten. Dazu gehört der Nachweis, dass JavaScript-Regulärausdrücke immer terminieren und sicher sind, die Identifizierung subtiler Randfälle, die zu Fehlern in früheren Veröffentlichungen führten, sowie der Nachweis, dass einige klassische Eigenschaften, die in Automatentheorie-Lehrbüchern beschrieben werden, in JavaScript-Regulärausdrücken nicht gelten. Eine ausführbare Referenzimplementierung, die mit Unicode-Bibliotheken verknüpft werden kann und den relevanten Teil der offiziellen Test262-Konformitätstestsuite besteht.
Stats
JavaScript-Regulärausdrücke sind in mehr als 30% der JavaScript-npm-Pakete enthalten. Die ECMAScript-Spezifikation für Regulärausdrücke umfasst über 33 Seiten Pseudocode. Unsere Coq-Mechanisierung übersetzt diesen Pseudocode in über 33 Seiten Coq-Definitionen.
Quotes
"Solche Assertionen werden verwendet, um explizite algorithmische Invarianten zu machen, die andernfalls implizit wären. Solche Assertionen fügen keine zusätzlichen semantischen Anforderungen hinzu und müssen daher von einer Implementierung nicht überprüft werden." [ECMA 2023, Abschnitt 5.2] "Dies ist, soweit uns bekannt, das erste Mal, dass eine industriestärke Regulärausdrucks-Sprache treu in einem interaktiven Theorembeweiser mechanisiert wurde."

Deeper Inquiries

Wie könnte man die Mechanisierung nutzen, um die Korrektheit von Optimierungen in Regulärausdrucks-Engines wie Irregexp zu beweisen?

Die Mechanisierung der JavaScript-Regulärausdrucks-Semantik in Coq ermöglicht es, formale Verifikationen durchzuführen, um die Korrektheit von Optimierungen in Regulärausdrucks-Engines wie Irregexp zu beweisen. Durch die Implementierung der ECMAScript-Regeln in Coq können spezifische Optimierungen, die in Regulärausdrucks-Engines implementiert sind, formal überprüft werden. Dies könnte beispielsweise bedeuten, dass die Optimierungen auf ihre Einhaltung der Regeln und Spezifikationen geprüft werden, um sicherzustellen, dass sie das erwartete Verhalten gemäß der offiziellen ECMAScript-Spezifikation aufweisen. Durch die Verwendung der formalen Mechanisierung können potenzielle Fehler oder Inkonsistenzen in den Optimierungen identifiziert und behoben werden, um die Gesamtkorrektheit der Regulärausdrucks-Engine zu gewährleisten.

Welche zusätzlichen Eigenschaften der JavaScript-Regulärausdrucks-Semantik könnten noch formal verifiziert werden, um das Vertrauen in die Spezifikation weiter zu erhöhen?

Zusätzlich zur Überprüfung der Korrektheit von Optimierungen könnten weitere Eigenschaften der JavaScript-Regulärausdrucks-Semantik formal verifiziert werden, um das Vertrauen in die Spezifikation weiter zu erhöhen. Einige potenzielle Eigenschaften, die verifiziert werden könnten, sind: Korrektheit von Capture-Gruppen: Die korrekte Handhabung von Capture-Gruppen in JavaScript-Regulärausdrücken könnte formal überprüft werden, um sicherzustellen, dass die erfassten Substrings korrekt extrahiert und zugeordnet werden. Behandlung von Lookarounds: Die Semantik von Lookarounds in JavaScript-Regulärausdrücken könnte genauer untersucht und formal verifiziert werden, um sicherzustellen, dass sie gemäß den Spezifikationen funktionieren und keine unerwarteten Ergebnisse liefern. Verhalten bei speziellen Zeichenklassen: Die Handhabung von speziellen Zeichenklassen wie Wortzeichen oder Leerzeichen in JavaScript-Regulärausdrücken könnte auf Korrektheit überprüft werden, um sicherzustellen, dass sie gemäß den Spezifikationen interpretiert werden. Durch die formale Verifikation dieser und anderer Eigenschaften der JavaScript-Regulärausdrucks-Semantik kann das Vertrauen in die Spezifikation gestärkt werden und potenzielle Fehler oder Inkonsistenzen aufgedeckt werden.

Wie könnte man die Erkenntnisse aus dieser Arbeit nutzen, um eine lesbarer und praktischer einsetzbare formale Spezifikation der JavaScript-Regulärausdrucks-Semantik zu entwickeln?

Um die Erkenntnisse aus dieser Arbeit zu nutzen und eine lesbarere und praktisch einsetzbare formale Spezifikation der JavaScript-Regulärausdrucks-Semantik zu entwickeln, könnten folgende Schritte unternommen werden: Abstraktion der Mechanisierung: Die spezifischen Implementierungsdetails der Coq-Mechanisierung könnten abstrahiert werden, um eine allgemeinere und leicht verständliche formale Spezifikation zu erstellen. Dies würde es Entwicklern und Forschern ermöglichen, die Spezifikation ohne tiefe Kenntnisse von Coq zu verstehen. Dokumentation und Erläuterung: Die formalen Verifikationen und Eigenschaften der JavaScript-Regulärausdrucks-Semantik sollten ausführlich dokumentiert und erklärt werden, um ihre Anwendbarkeit und Bedeutung für Entwickler und Forscher zu verdeutlichen. Entwicklung von Werkzeugen: Es könnten Werkzeuge und Bibliotheken erstellt werden, die auf der formalen Spezifikation basieren und Entwicklern helfen, JavaScript-Regulärausdrücke korrekt zu verstehen und zu implementieren. Diese Werkzeuge könnten die Verifikation von Regulärausdrücken erleichtern und die Entwicklung von Regex-Engines unterstützen. Durch die Umsetzung dieser Maßnahmen könnte eine benutzerfreundliche und praxisnahe formale Spezifikation der JavaScript-Regulärausdrucks-Semantik geschaffen werden, die Entwicklern und Forschern dabei hilft, Regulärausdrücke korrekt zu verwenden und zu verstehen.
0
visual_icon
generate_icon
translate_icon
scholar_search_icon
star