| Crates.io | oak-vampire |
| lib.rs | oak-vampire |
| version | 0.0.1 |
| created_at | 2025-10-21 08:18:04.83956+00 |
| updated_at | 2026-01-23 05:21:22.219317+00 |
| description | Vampire theorem prover language parser with support for automated theorem proving and first-order logic. |
| homepage | https://github.com/ygg-lang/oaks |
| repository | https://github.com/ygg-lang/oaks |
| max_upload_size | |
| id | 1893427 |
| size | 75,512 |
High-performance incremental Vampire parser for the oak ecosystem with flexible configuration, optimized for automated theorem proving and formal verification.
Oak of vampire is a robust parser for Vampire, designed to handle complete Vampire syntax including modern features. Built on the solid foundation of oak-core, it provides both high-level convenience and detailed AST generation for automated theorem proving and formal verification.
Basic example:
use oak_vampire::{VampireLexer, VampireLanguage};
use oak_core::{Lexer, source::SourceText, ParseSession};
let language = VampireLanguage::default();
let lexer = VampireLexer::new(&language);
let vampire_code = r#"
fof(ax1, axiom, (
! [A] : ( human(A) => mortal(A) )).
fof(ax2, axiom, (
human(socrates) )).
fof(conj, conjecture, (
mortal(socrates) )).
"#;
let source = SourceText::new(vampire_code);
let mut session = ParseSession::<VampireLanguage>::default();
let output = lexer.lex(&source, &[], &mut session);
println!("Parsed Vampire problem successfully.");
use oak_vampire::{VampireLexer, VampireLanguage};
use oak_core::{Lexer, source::SourceText, ParseSession};
let language = VampireLanguage::default();
let lexer = VampireLexer::new(&language);
let vampire_code = r#"
fof(commutativity, axiom, (
! [X, Y] : ( X + Y = Y + X ) )).
fof(associativity, axiom, (
! [X, Y, Z] : ( (X + Y) + Z = X + (Y + Z) ) )).
fof(goal, conjecture, (
! [A, B, C] : ( A + (B + C) = (C + A) + B ) )).
"#;
let source = SourceText::new(vampire_code);
let mut session = ParseSession::<VampireLanguage>::default();
let output = lexer.lex(&source, &[], &mut session);
println!("Tokens: {}", output.result.map_or(0, |tokens| tokens.len()));
use oak_vampire::{VampireLexer, VampireLanguage};
use oak_core::{Lexer, source::SourceText, ParseSession};
let language = VampireLanguage::default();
let lexer = VampireLexer::new(&language);
let formula_code = r#"
! [X, Y] : ( parent(X, Y) => ( ancestor(X, Y) & ~ sibling(X, Y) ) )
"#;
let source = SourceText::new(formula_code);
let mut session = ParseSession::<VampireLanguage>::default();
let output = lexer.lex(&source, &[], &mut session);
println!("Formula tokens: {}", output.result.map_or(0, |tokens| tokens.len()));
use oak_vampire::{VampireLexer, VampireLanguage};
use oak_core::{Lexer, source::SourceText, ParseSession};
let language = VampireLanguage::default();
let lexer = VampireLexer::new(&language);
let source = SourceText::new("fof(ax1, axiom, ( human(socrates) )).");
let mut session = ParseSession::<VampireLanguage>::default();
let output = lexer.lex(&source, &[], &mut session);
println!("Tokens: {}", output.result.map_or(0, |tokens| tokens.len()));
use oak_vampire::{VampireLexer, VampireLanguage};
use oak_core::{Lexer, SourceText, ParseSession};
let language = VampireLanguage::default();
let lexer = VampireLexer::new(&language);
let invalid_code = "fof(invalid syntax here";
let source = SourceText::new(invalid_code);
let mut session = ParseSession::<VampireLanguage>::default();
let output = lexer.lex(&source, &[], &mut session);
if !output.diagnostics.is_empty() {
for error in output.diagnostics {
println!("Error: {:?}", error);
}
}
The parser generates a comprehensive AST with the following main structures:
Oak of vampire integrates seamlessly with:
Check out the examples directory for comprehensive examples:
Contributions are welcome!
Please feel free to submit pull requests at the project repository or open issues.