Zum Inhalt springen
hanse-computing.de
  • Moin
  • Über uns
  • Leistungen
  • Projekte
  • Neuigkeiten
  • Wissen
    • Netzwerktechniken
    • Systemadministration
    • Hardware-Spezifikationen
    • KI & Automatisierung
    • Glossar
      • Fachbegriffe
      • Programmiersprachen-Befehle
    • Datenbanken
    • IT-Grundlagen
    • Python: Grundlagen
    • Python: Datenstrukturen
    • Python: Dateien & IO
    • Python: Web & Frameworks
    • Python: Fehler & Debugging
    • Webentwicklung
    • Linux & Betriebssysteme
    • IT-Sicherheit
    • Cloud & Container
    • Tools & Software
    • Netzwerk: TCP/IP
    • Netzwerk: DNS & Dienste
    • Netzwerk: Sicherheit
    • Netzwerk: Tools
    • KI: Grundlagen
    • KI: Praxis
    • KI: LLM & Agenten
    • Hardware: Server
    • Hardware: Netzwerkgeräte
    • Hardware: Peripherie
    • Wiki-Startseite
    • Letzte Änderungen
    • Kategorie-Browser
    • Zufallsartikel
  • Infrastruktur
  • AI Easy Start
  • Test-Drive
  • Kontakt
  • Impressum
  • Datenschutz

Sprache auswählen

  • Deutsch (Deutschland)
  • English (United Kingdom)
  1. Aktuelle Seite:  
  2. Startseite
  3. Wissen
  4. Glossar
  5. Programmiersprachen-Befehle

CouchDB-Befehle: Schnellreferenz für die Dokumentdatenbank

CouchDB ist eine dokumentenorientierte NoSQL-Datenbank des Apache-Projekts. Sie speichert JSON-Dokumente und wird komplett über eine HTTP-REST-API bedient — das Kommandozeilen-Werkzeug ist daher schlicht curl gegen den Port 5984.

Grundlagen

Die API liefert JSON-Antworten. Ohne Authentifizierung läuft CouchDB im Admin-Party-Modus; mit Admin-Konto lautet die URL http://user:pass@localhost:5984.

curl http://localhost:5984/                    # Server-Info
curl http://localhost:5984/_all_dbs            # Datenbanken auflisten
curl -X PUT http://localhost:5984/mydb         # Datenbank anlegen
curl -X DELETE http://localhost:5984/mydb      # Datenbank löschen

Dokumente verwalten

curl -X PUT http://localhost:5984/mydb/doc1 -H "Content-Type: application/json"      -d '{"title": "Erster Eintrag", "tags": ["wiki"]}'
curl http://localhost:5984/mydb/doc1           # Dokument lesen
curl -X DELETE "http://localhost:5984/mydb/doc1?rev=1-abc"   # Löschen braucht _rev

Jedes Dokument trägt eine _id und eine _rev (Revisionsnummer). Updates senden die aktuelle _rev mit — CouchDB erzwingt so optimistische Nebenläufigkeit (MVCC).

Abfragen und Replikation

curl "http://localhost:5984/mydb/_all_docs?include_docs=true"   # alle Dokumente
curl -X POST http://localhost:5984/mydb/_find -H "Content-Type: application/json"      -d '{"selector": {"tags": "wiki"}}'                          # Mango-Query
curl -X POST http://localhost:5984/_replicate -H "Content-Type: application/json"      -d '{"source": "mydb", "target": "backup"}'                  # Replikation

Mango (seit CouchDB 2.0) erlaubt deklarative JSON-Suchabfragen mit selector. Für komplexe Auswertungen definiert man MapReduce-Views in Design-Dokumenten (_design/app). Die Replikation ist inkrementell und idempotent — sie eignet sich damit auch für Backups.

Praxis-Tipps

  • Fauxton (Web-UI) ist unter /_utils erreichbar.
  • _bulk_docs legt viele Dokumente in einem Request an.
  • Periodische _compact-Aufrufe verkleinern die Datenbankdateien.

Verwandte Grundlagen: MongoDB-Befehle, NoSQL-Datenbank, JSON und die neue Schwester DynamoDB-Befehle.

Why3-Befehle: Verifikationsplattform für Software mit WhyML

Why3 ist eine Software-Verifikationsplattform, die am französischen Forschungsinstitut INRIA und der Université Paris-Sud entstanden ist (Jean-Christophe Filliâtre, Andrei Paskevich, Claude Marché, Guillaume Melquiond, François Bobot). Die Idee hinter Why3 fasst der Slogan „Shepherd your herd of provers" zusammen: Man schreibt ein Programm mit Spezifikation in der ML-artigen Sprache WhyML, und Why3 erzeugt daraus automatisch Proof Obligations (Beweisverpflichtungen), die an eine „Herde" verschiedener Beweiser verteilt werden.

Erste Schritte

why3 config                  # installierte Beweiser erkennen (Alt-Ergo, Z3, CVC4/CVC5, E)
why3 prove datei.mlw         # alle Proof Obligations auf der Kommandozeile beweisen
why3 ide datei.mlw           # grafische Oberfläche: Ziele, Beweisversuche, Strategien
why3 replay datei.mlw        # gespeicherte Beweise erneut ausführen (nach Änderungen)
why3 session html datei.mlw  # HTML-Bericht über den Beweisstand

Warum „Herde von Beweisern"?

  • Automatische Beweiser wie Alt-Ergo, Z3 oder CVC5 lösen viele Ziele allein; der Aufruf erfolgt pro Ziel über why3 prove -P <beweiser> datei.mlw.
  • Schwierige Ziele gehen an interaktive Assistenten wie Coq, Isabelle oder PVS — Why3 verwaltet die Beweisstrategien für alle.
  • WhyML-Spezifikationen stehen in geschweiften Klammern, z. B. let f (x: int) : int ensures { result > 0 } = ....

Einordnung

Why3 ist das Verifikations-Backend hinter Frama-C: Das WP-Plugin übersetzt ACSL-Annotationen in WhyML und delegiert die Beweisverpflichtungen an dieselben Beweiser. Interaktive Assistenten wie HOL können in dieser Kette als Beweis-Backend für besonders anspruchsvolle Ziele dienen. Formale Methoden wie VDM verfolgen dieselbe Idee — Spezifikation vor Implementierung — mit anderer Werkzeugkette.

Verwandte Grundlagen: Frama-C-Befehle, ACSL, Coq-Befehle.

HOL-Befehle: Interaktive Beweisassistenten für Higher-Order Logic

HOL steht für Higher-Order Logic (Logik höherer Stufe) und bezeichnet zugleich eine Familie interaktiver Beweisassistenten, die auf das LCF-System (Logic for Computable Functions, Robin Milner, Edinburgh 1970er) zurückgehen. Kernidee: Ein minimaler, vertrauenswürdiger Kernel akzeptiert nur Schlussfolgerungen, die durch elementare Regeln abgesichert sind — jedes Theorem ist damit maschinell geprüft.

Die HOL-Familie

  • HOL4 ist der aktiv weiterentwickelte Hauptnachkomme, läuft auf Poly/ML, Lizenz BSD, mit dem Build-Werkzeug Holmake.
  • HOL Light (John Harrison, Cambridge/Microsoft) ist ein minimalistischer OCaml-Fork mit sehr kleinem Kernel (~400 Zeilen) — extrem hohe Vertrauenswürdigkeit.
  • Isabelle/HOL ist der bekannteste Abkömmling der HOL-Ideen: Isabelle nutzt eine generische Logik-Infrastruktur und darauf aufgesetzt die HOL-Logik.

Arbeiten im Goalstack

poly               # Poly/ML-REPL starten
Holmake            # HOL4-Theorien bauen (make-Ersatz)
g `1 + 1 = 2`;     # Goal setzen (Backticks um das Ziel)
e (REWRITE_TAC []);# Taktik anwenden
e (DECIDE_TAC);    # arithmetische Entscheidungsprozedur
top_thm();         # bewiesenes Theorem anzeigen

Typische Taktiken: REWRITE_TAC (mit Theoremen umschreiben), STRIP_TAC (Annahmen/Hüllen auflösen), GEN_TAC (Allquantor einführen), MESON_TAC/METIS_TAC (Prädikatenlogik-Suche), DECIDE_TAC/TAUT_TAC (Arithmetik/Aussagenlogik), Induct_on (strukturelle Induktion).

Einordnung

HOL beweist Korrektheitseigenschaften interaktiv — im Gegensatz zu Plattformen, die Beweise weitgehend automatisieren: Why3 verteilt Proof Obligations an Beweiser, und Coq, Lean und PVS verfolgen ähnliche Ansätze. In Verifikationsketten wie Frama-C mit ACSL-Spezifikationen übernimmt ein interaktiver Assistent die Ziele, die automatische Beweiser nicht schließen.

Verwandte Grundlagen: Isabelle-Befehle, Coq-Befehle, Lean-Befehle.

ACSL-Befehle: C-Programme formal spezifizieren mit Frama-C

ACSL (ANSI/ISO C Specification Language) ist eine formale Spezifikationssprache für C-Programme, entwickelt im Frama-C-Projekt. Ihr Design ist von JML (Java Modeling Language) inspiriert und erbt viel von Caduceus, einem früheren Analysewerkzeug. Mit ACSL beschreibt man das Verhalten von C-Funktionen präzise — als Verträge mit Vorbedingung, Nachbedingung und Frame-Regel — und lässt diese Eigenschaften anschließend maschinell beweisen.

Syntax: Annotationen als Kommentare

/*@ requires n >= 0;
  @ ensures 
esult == n * (n + 1) / 2;
  @ assigns 
othing;
  @*/
int summe(int n) {
  int s = 0;
  /*@ loop invariant 0 <= i <= n && s == i * (i - 1) / 2;
    @ loop assigns s, i;
    @ loop variant n - i;
    @*/
  for (int i = 1; i <= n; i++) s += i;
  return s;
}

Wichtige Konstrukte

  • requires — Vorbedingung (Precondition), die der Aufrufer garantieren muss.
  • ensures — Nachbedingung (Postcondition), die die Funktion garantiert.
  • assigns — Frame-Regel: welche Speicherbereiche die Funktion verändern darf.
  • loop invariant / loop variant — Schleifeninvariante und Terminierungsargument.

Logische Terme

ACSL stellt spezielle Terme bereit: esult (Rückgabewert), old(ausdruck) (Wert vor dem Funktionsaufruf), valid(zeiger) (gültiger Speicherbereich), valid_range, length, othing (leere Frame-Regel), ull, rue/false.

Einordnung

ACSL wird von den Frama-C-Plugins verarbeitet: WP (Weakest Precondition) erzeugt Beweisverpflichtungen, die Why3 an Beweiser wie Alt-Ergo oder Z3 delegiert; EVA analysiert mit abstrakter Interpretation; E-ACSL übersetzt Annotationen in Laufzeitprüfungen. Damit steht ACSL in einer Reihe mit anderen formalen Spezifikationssprachen: VDM und Z-Notation spezifizieren auf höherer Ebene, HOL-Assistenten können die erzeugten Verpflichtungen interaktiv beweisen.

Verwandte Grundlagen: Frama-C-Befehle, Why3-Befehle, C/C++-Befehle.

Frama-C-Befehle: Schnellreferenz für die Analyse von C-Code

Frama-C ist eine Open-Source-Plattform zur Analyse von C-Quellcode; sie bündelt mehrere Analysetechniken in einem gemeinsamen Rahmenwerk. Die formale Spezifikationssprache heißt ACSL (ANSI/ISO C Specification Language), ausgewählte Plug-ins führen statische Analyse und Verifikation durch.

Aufruf von der Kommandozeile

frama-c -eva datei.c              # abstrakte Interpretation (Werte)
frama-c -wp datei.c               # Schwaechste-Vorbedingung, Beweis
frama-c -wp -wp-prover alt-ergo datei.c
frama-c -metrics datei.c          # Metriken
frama-c -gui datei.c              # graphische Oberflaeche (frama-c-gui)

Das EVA-Plug-in (ab 18.0; vorher VALUE) überapproximiert die möglichen Werte von Variablen an jedem Programmpunkt und findet so Laufzeitfehler wie Überläufe oder Zugriffe außerhalb von Feldgrenzen. Das WP-Plug-in implementiert einen Weakest-Precondition-Kalkül und erzeugt Verifikationsbedingungen (VCs), die an externe Beweiser wie Alt-Ergo, Z3 oder CVC4 gehen.

ACSL-Annotationen

/*@ requires 0 <= n && n < 100;
  @ ensures  
esult == n * n;
  @*/
int quadrat(int n) { return n * n; }
  • requires: Vorbedingung, ensures: Nachbedingung, assigns: erlaubte Seiteneffekte.
  • //@ assert p;: lokale Behauptung, //@ loop invariant: Schleifeninvariante.
  • esult, old(expr), valid(p), separated(...): Terme für Rückgabe, Alt-Werte, Zeiger-Gültigkeit.

Frama-C ergänzt die Beweisassistenten-Familie um eine C-spezifische, praktische Verifikation: verwandt sind VDM, PVS und SPIN/Promela; als C-Anker dient C/C++-Befehle.

  1. VDM-Befehle: Schnellreferenz für die Vienna Development Method
  2. PVS-Befehle: Schnellreferenz für das Prototype Verification System
  3. Gosu-Befehle: Schnellreferenz für gosuc und die Gosu-Sprache
  4. Xtend-Befehle: Schnellreferenz für die Java-Transpilierung

Seite 21 von 45

  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
hanse-computing.de

hanse-computing.de – KI-gestützte Dienstleistungen aus Lübeck.

hanse-computing.de
IT-Dienstleistungen aus der Hansestadt
Über uns · Projekte · Neuigkeiten · Affiliate
Impressum · Datenschutz
© 2026 hanse-computing.de
© 2026 hanse-computing Impressum Datenschutz