← Neueste Arbeiten
💻 computer science

Predicate Subtypes in VerCors

Dieses Paper beschreibt die Integration von Prädikatsubtypen in den VerCors-Programmverifizierer, die automatisch Spezifikationen generieren, die Kombination mehrerer Subtypen ermöglichen und durch einen speziellen strengen Modus auch zur Überlaufprüfung eingesetzt werden können.

Ursprüngliche Autoren: Tycho Dubbeling (University of Twente), Marieke Huisman (University of Twente), Ömer Şakar (University of Twente)

Veröffentlicht 2026-04-09
📖 4 Min. Lesezeit☕ Kaffeepausen-Lektüre

Ursprüngliche Autoren: Tycho Dubbeling (University of Twente), Marieke Huisman (University of Twente), Ömer Şakar (University of Twente)

Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen

🛡️ Der Sicherheitsgurt für Programmvariablen: Eine Reise durch VerCors

Stell dir vor, du bist ein Architekt, der ein riesiges Gebäude (ein Computerprogramm) entwirft. Normalerweise sagst du zu deinen Arbeitern (dem Computer): „Bau eine Wand aus Ziegeln." Der Computer weiß aber nicht, ob du eine Wand aus festen Ziegeln oder aus zerbrechlichen Glassteinen meinst. In der Programmierung ist das ähnlich: Ein Programm sagt oft nur „Hier kommt eine Zahl rein", aber nicht, ob diese Zahl positiv, negativ, groß oder klein sein darf.

Das führt zu Problemen. Wenn du versuchst, durch Null zu teilen, oder wenn eine Zahl so groß wird, dass sie in den Speicherplatz nicht mehr passt (ein sogenannter Überlauf), stürzt das ganze Gebäude ab.

Die Autoren dieses Papers (Tycho, Marieke und Ömer) haben eine Lösung für das Programmierwerkzeug VerCors entwickelt. Sie nennen es Prädikat-Subtypen. Klingt kompliziert? Ist es eigentlich nicht. Stell es dir wie einen Sicherheitsgurt oder einen Filter vor.

1. Was sind Prädikat-Subtypen? (Der Filter)

Normalerweise sagst du: „Diese Variable ist eine ganze Zahl."
Mit dem neuen System sagst du: „Diese Variable ist eine ganze Zahl, die nicht Null ist."

Das ist wie ein Filter an der Wasserhahn.

  • Ohne Filter: Alles Wasser fließt durch (auch Schmutzwasser).
  • Mit Filter (Subtyp): Nur sauberes Wasser kommt durch.

Im Programmcode sieht das so aus:
Statt nur zu schreiben int divisor; (Teiler), schreiben sie /*@ NonZero @*/ int divisor;.
Das bedeutet: „Ich garantiere dir, dass dieser Teiler niemals Null sein wird."

2. Wie funktioniert das im Hintergrund? (Der Sicherheitsbeamte)

Der Computer kann nicht einfach „glauben", dass du recht hast. Er muss es beweisen. Das ist die Magie dieses Papers:

Wenn du einen solchen Filter (Subtyp) definierst, baut VerCors automatisch Sicherheitschecks ein.

  • Beispiel: Wenn du eine Funktion schreibst, die durch eine Zahl teilt, prüft VerCors automatisch: „Ist diese Zahl wirklich nicht Null?"
  • Beispiel: Wenn du eine Variable mit dem Typ Byte (nur Zahlen zwischen -128 und 127) deklarierst, fügt das System automatisch eine Warnung hinzu, falls jemand versucht, die Zahl 200 dort hineinzustecken.

Das System übersetzt deine einfachen Regeln in eine lange Liste von mathematischen Beweisen, die der Computer im Hintergrund durchrechnet.

3. Der „Strenger Modus" (Der Überlauf-Alarm)

Das ist der coolste Teil des Papers. Normalerweise prüft ein Computer nur das Endergebnis.
Stell dir vor, du hast einen Korb, der nur 10 Äpfel fasst.

  • Du legst 5 Äpfel rein.
  • Du nimmst 2 weg (im Korb sind jetzt 3).
  • Du legst 8 Äpfel rein.
  • Ergebnis: 11 Äpfel. Der Korb ist zu voll!

Ein normaler Computer sagt vielleicht: „Moment, am Ende sind es 11, das passt nicht." Aber was, wenn der Korb zwischendurch schon überquellt ist, bevor er wieder geleert wurde?

Hier kommt der Strenger Modus (strict) ins Spiel.
Wenn du diesen Modus aktivierst, sagt VerCors: „Nicht nur das Endergebnis muss passen, sondern jeder einzelne Schritt auf dem Weg dorthin!"

  • Beispiel: x = (x - 2) + 2;
    • Wenn x klein ist (z.B. 0), dann ist x - 2 gleich -2.
    • Wenn dein Subtyp nur positive Zahlen erlaubt, ist dieser Zwischenschritt (-2) schon verboten, auch wenn das Endergebnis wieder 0 ist.
    • Der Computer schreit sofort: „Stopp! Hier ist ein Überlauf passiert!"

Das ist wie bei einem Sicherheitsgurt im Auto: Er muss nicht nur am Ende des Unfalls halten, sondern muss während des Aufpralls (bei jedem Schritt) funktionieren.

4. Warum ist das so toll? (Die Vorteile)

  • Automatisch: Du musst nicht hunderte Zeilen Code schreiben, um zu prüfen, ob Zahlen im richtigen Bereich sind. Du schreibst nur einmal den Filter, und das System macht den Rest.
  • Flexibel: Du kannst Filter kombinieren. „Die Zahl muss größer als 0 UND kleiner als 100 sein" oder „Die Zahl muss entweder Null ODER positiv sein".
  • Sicherer Code: Es fängt Fehler ab, bevor das Programm überhaupt läuft. Das ist wie ein Sicherheitsnetz, das verhindert, dass das Programm abstürzt, weil jemand versehentlich durch Null geteilt hat.

Zusammenfassung in einem Satz

Die Autoren haben eine Methode entwickelt, mit der Programmierer ihren Variablen Sicherheitsregeln geben können (z.B. „nur positive Zahlen"), und das Werkzeug VerCors übersetzt diese Regeln automatisch in mathematische Beweise, die garantieren, dass das Programm niemals in den falschen Zahlenbereich gerät – nicht nur am Ende, sondern bei jedem einzelnen Rechenschritt.

Es ist im Grunde wie ein unsichtbarer Sicherheitsgurt für jede Zahl in deinem Programm, der verhindert, dass das Gebäude einstürzt, weil jemand versehentlich einen Stein zu groß gewählt hat. 🏗️🔒

Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?

Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.

Digest testen →