use crate::{WitnessOutcome, WitnessProvider, WitnessRequest};
pub struct Z3Backend {
pub timeout_ms: u32,
}
impl Z3Backend {
#[must_use]
pub fn new() -> Self {
Self { timeout_ms: 5_000 }
}
#[must_use]
pub fn with_timeout(timeout_ms: u32) -> Self {
Self { timeout_ms }
}
}
impl Default for Z3Backend {
fn default() -> Self {
Self::new()
}
}
impl WitnessProvider for Z3Backend {
fn witness(&self, request: &WitnessRequest) -> WitnessOutcome {
if let Some(concrete) = crate::try_trivial_witness(request) {
return WitnessOutcome::Witnessed(concrete);
}
let adapter = request
.statements
.first()
.map(|s| s.adapter.as_str())
.unwrap_or("<empty path>");
WitnessOutcome::Unsupported(format!(
"writ::z3_backend has no encoder registered for adapter `{adapter}`. \
Per-language encoders land in subsequent sessions; the path remains \
Class 2 with full proof bundle."
))
}
fn backend_id(&self) -> &'static str {
"writ-z3"
}
}