smtprofiling
Debug F* queries sent to Z3, diagnosing proof instability and performance issues
Installation
Pick a client and clone the repository into its skills directory.
Installation
About this skill
Debug F* queries sent to Z3, diagnosing proof instability and performance issues
How to use
Otwórz plik F* (.fst lub .fsti) zawierający dowód, który chcesz debugować. Otocz problematyczną definicję dyrektywami opcji: #push-options "--log_queries --z3refresh --query_stats --split_queries always" przed kodem i #pop-options po nim. Te flagi instruują F*, aby zbierał szczegółowe informacje o zapytaniach wysyłanych do Z3.
Uruchom F* na pliku za pomocą polecenia fstar.exe Module.fst (dostosuj ścieżki include jeśli jest to konieczne). F* wypisze komunikaty zawierające nazwy plików .smt2 wygenerowanych dla każdego wariantu dowodu.
Zlokalizuj Z3 w swoim systemie — może być nazwany z3, z3-4.13.3, z3-4.15.1 lub inną wersją. Uruchom Z3 bezpośrednio na wygenerowanym pliku .smt2 poleceniem z3 queries-myquery.smt2, aby zweryfikować zapytanie niezależnie od F*.
Dodaj opcję profilowania Z3: z3 queries-myquery.smt2 smt.qi.profile=true. Z3 wyświetli statystyki dotyczące tego, które kwantyfikatory były instancjonowane i jak często.
Przeanalizuj wynik profilu. Kwantyfikatory z nazw takich jak Box_bool_proj_0 lub z modułów Prims i FStar.Pervasives naturalnie aktywują się często. Szukaj kwantyfikatorów z Twoich własnych modułów, które aktywują się nadmiernie — to sygnał, że powinieneś napisać dla nich wzorzec lub jawnie kontrolować ich instancjonowanie.
Aby pogłębić wiedzę, zapoznaj się z dokumentacją w repozytorium PoP-in-FStar (https://github.com/FStarLang/PoP-in-FStar), szczególnie sekcją under_the_hood/uth_smt.rst, która wyjaśnia kodowanie SMT w F* i techniki profilowania.