Coq Au Win

12
IntelliSense Integration for Coq Theorem Prover Adam Abonyi, Charles University in Prague Advisor: Tomáš Petříček, University of Cambridge

Transcript of Coq Au Win

Page 1: Coq Au Win

IntelliSense Integration for Coq Theorem Prover

Adam Abonyi, Charles University in Prague

Advisor: Tomáš Petříček, University of Cambridge

Page 2: Coq Au Win

Motivace

Proč dokazovat korektnost?

některé chyby se můžou prodražit

FDIV bug v procesorech Intel

V roce 1994 odhalena chyba v FPU

Neúplná lookup tabulka používaná při dělení

Výměna všech procesorů - škoda 475 milionů USD

Ariane 5 - Nosná raketa

1996 – výbuch po 37 vteřinách zkušebního letu

Nedostatečná ochrana proti přetečení integeru

Škoda odhadována 370 milionů USD

Page 3: Coq Au Win

Vývoj počítačově asistovaného dokazování

4-Color Theorem – Problém čtyř barev (1890) „Stačí čtyři barvy na obarvení libovolné politické mapy tak, aby žádné

dva sousedící státy nebyly obarveny stejnou barvou?“

V roce 1976 vyřešen za pomoci počítače

Problém rozdělen na 1936 menších map

Spousta pochybů, zda počítač neobsahuje chyby

V roce dokázan pomocí Coqu

CompCert (2005) 2005 - Založení projektu

Snaha o vytvoření verifikovanýho kompilátor

Vytvořili ověřenou podmnožinu Cčkového kompilátoru

Kompilátor specifikován, naprogramován a dokázán v Coqu

Page 4: Coq Au Win

Vývoj počítačově asistovaného dokazování

Vývoj nástrojů pro dokazování (proof assistants)

Oproti důkazu 4CT ušel kus cesty

Lze zpětně ověřit, že postup byl korektní

Příklady: Coq, Isabelle

Nástroje pro vývoj

Omezenější oproti klasickým vývojovým nástrojům

CoqIde, ProofGeneral (využívá oblíbený editor emacs)

Důkazy se musí zpracovávat dávkově.

Existuje část programu, která nelze editovat a znám výstup poze k tomuto místu, se kterým můžu posouvat

Page 5: Coq Au Win

Cíl práce

Rozšířit možnosti současných nástrojů pro dokazování

Hlavní cíl:

Implementace ItelliSense pro Coq

Další cíle:

Eliminovat posouvání hranice

Důkaz půjde upravovat kdekoliv, né jen před hranicí

Výstupní okna rozšířit, aby podávaly co nejvíce informací

Vytvořit vnitřní reprezentaci kódu

Pomocí této reprezentace umožnit automatické doplňování (IntelliSense)

Rozšířit MonoDevelop o podporu Coq - nástroje pro dokazování vět

Kontrola důkazu na pozadí

Obsahovat všechny vymoženosti moderních vývojových nástrojů

Page 6: Coq Au Win

Rozdělení

1. Budování reprezentace kódu Zpracování výrazů jazyka Gallina (dokazovací jazyk Coqu)

Vybudování ASTčka

2. Práce na pozadí (Asynchronní) kontrola důkazů automaticky na pozadí

Příprava dat pro panely

Práce s reprezentací kódu

3. Implementace podpory do MonoDevelopu Vytvořit nový projekt pro Coq

Přidat chování známé z CoqIDE Proof, Output panel

Obarvování kódu

Umožnit pouštět důkaz

Page 7: Coq Au Win

Reprezentace kódu

Podpora jazyka podle specifikace

Podpora všech základních pravidel jazyka Gallina

Jsou udané v pseudokódu, takže byla potřeba jistá úprava

Podpora pro uživatelské Commandy není kompletní

Spíš command line pomocníci

Implementační detail

Podpora pro dokazování není kompletní

Časově náročné – spousta příkazů a způsobů zápisu

Page 8: Coq Au Win

Práce na pozadí

Při změně důkazu:

Vytvoří se nové AST

Může být později použito při zjišťování hodnot na doplnění

Kontrola důkazu na pozadí

Kód se pošle Coq compileru a zapamatují se výstupy

Naplní se tabulky pro zobrazení výstupů (obsah output a proof oken)

Při práci s prostředím lze vyvolat tyto události:

Zjistit identifikátory, které lze použít na aktuálním místě v kódu

Z AST zjistí, které identifikátory jsou platné

Zjistí výstup pro tooltip, output či proof panel

Pomocí pomocných struktur zjistí co se má vypsat

Page 9: Coq Au Win

Integrace do MonoDevelop

Podporované featury MonoDevelopu: Přidání podporovaných projektů a souborů

Asociace s .v souborama a .coqproject

Obarvování textu

Parsování kódu a jeho zpracování Vybudování AST

Zavolání Coq kompilátoru a předpříprava dat

Podtrhávání chyb, Panely, Tooltipy Vytáhne informace z předpřipravených dat

Automatické doplňování Z AST pozná, jaké identifikátory má napovědět

Klávesové zkratky pro posílání do panelu Pomocí Ctrl+Entr pošle označený text do Coq Interactive panelu

Page 10: Coq Au Win

Implementace

Funkcionální jazyk F#

Parser

FSLex a FSYacc

Manipulace s AST

Pomocí funkcionálních jazyků se pěkně pracuje s AST

Práce na pozadí

BackgroundAgent - řeší asynchronní volání a synchronizaci

Imperativní jazyk C#

Použit pro integraci do MonoDevelop

Snadná komunikace s F#

Page 11: Coq Au Win

Ukázka důkazu

Lemma distr_impl : (A -> B -> C) -> (A -> B) -> A -> C.

Page 12: Coq Au Win

Závěr

Klíčové přínosy práce

Pokročilá editace zdrojového kódu Přidání podpory do IDE MonoDevelop Obarvování kódu a našeptávání Interaktivní a výstupní panely Tooltipy Bez potřeby posouvat hladinu po příkazech

Kontrola korektnosti na pozadí Automatická kontrola na pozadí Chyby zvýrazněné ihned (vyznačením, výpisem, tooltipem)

Rozšiřitelnost Vybudování AST, které lze poskytnout