Questa guida mostra come scoprire che cosa è diventata una dichiarazione Lean: il suo nome e la sua firma in Rust, l’output del compilatore Lean da cui proviene, ciò da cui dipende e ciò che ne è affermato e dimostrato.
Prepara la riga di comando
Installa il comando lungo. Legge la configurazione da
lungo.toml nella directory corrente. Scrivine uno che corrisponda al tuo build.rs: il
progetto Lake e, in [lean], [rust] e [assurance], le impostazioni che build.rs modifica (vedi
configurazione). Per
configure().export_module("Formal").compile_lean("lean"):
project = "lean"
[lean]
export-modules = ["Formal"]
Senza il file, passa il progetto Lake e le impostazioni come opzioni:
--project lean --export-module Formal. Un build.rs che chiama soltanto
compile_lean("lean") richiede solo --project lean.
Trova il nome Rust di un nome Lean
lungo mappings
stampa ogni mappatura (elementi, costruttori e campi), per esempio:
{
"lean_name": "Formal.Sess.isOpen",
"kind": "field",
"rust_path": "Sess.is_open",
"renamed": true
},
Lo stesso file viene generato come names.json nell’output della build.
Esamina una dichiarazione
lungo inspect Formal.step
mostra il suo tipo Lean, il modulo e il file sorgente; ciò che ne è dimostrato, in sezioni:
Formal.step : Formal.Sess → Formal.Op → Bool × Formal.Sess
module: Formal.Session
source: lean/Formal/Session.lean
exported: yes
== Claims ==
[proved] lungo.preserves Formal.step_implements (of Formal.Spec)
== Trust ==
(none)
== Assumptions ==
(none)
== Facilities ==
(none)
== Trust, in full ==
…
(Claims: i claim di cui è soggetto, con il loro stato; Trust: ciò da cui dipende
il suo codice e di cui nessuna dimostrazione si fa garante; Assumptions: ciò che quei
claim assumono dell’host; Facilities: le facility dell’host che chiama), poi la sua
firma compilata e le funzioni ausiliarie che il compilatore di Lean ne ha derivato. Dato un
teorema che è la prova di un claim, una specifica, un’assunzione o una facility,
inspect descrive invece quel record.
Per vedere il codice:
lungo ir Formal.apply # la forma compilata di Lean (Bridge IR)
lungo rust Formal.apply # il Rust generato
Scopri come sono implementati gli extern
lungo externs
elenca ogni extern raggiunto dal programma, indicando se lo implementa il runtime di lungo,
una definizione Lean @[export] oppure una delle tue funzioni rust_extern (ogni operazione
di una facility è implementata dall’host: in Rust, dalla sua funzione rust_extern).
Vedi che cosa si afferma degli export
lungo assurance # ogni export
lungo assurance Formal.step # uno solo
riporta, per ogni export, i suoi claim, i suoi problemi di fiducia, le assunzioni che
fanno i suoi claim e le facility di cui ha bisogno, dopo una riga che nomina il
programma e la sua provenienza (la versione di Lean, la versione di lungo, lo schema del
documento). --format json stampa lo stesso in JSON, e --claim-kind, --facility,
--assumption e --trust-issue selezionano gli export. Vedi
il comando lungo per ogni opzione, e
il documento di garanzia per ciò che porta ogni pacchetto.
Leggi i metadati in esecuzione
Il modulo generato porta le stesse informazioni per le dichiarazioni esportate:
let info = formal::__meta::declaration("Formal.apply").unwrap();
println!("{} is {} at {:?}", info.lean_name, info.rust_path, info.source_file);
let claims = formal::__meta::assurance().claims_about("Formal.step");
Vedi codice generato per ogni campo e file.