use std::path::Path;
use provable_contracts::binding::parse_binding_str;
use provable_contracts::diff::diff_contracts;
use provable_contracts::query::{self, ContractIndex, QueryParams};
use provable_contracts::schema::parse_contract_str;
use provable_contracts::scoring;
fn main() {
let yaml = include_str!("../../../contracts/softmax-kernel-v1.yaml");
let contract = parse_contract_str(yaml).expect("valid contract YAML");
println!("Contract: {}", contract.metadata.description);
println!("Version: {}", contract.metadata.version);
println!();
println!("Equations ({}):", contract.equations.len());
for (name, eq) in &contract.equations {
println!(" {name}: {}", eq.formula);
if let Some(ref domain) = eq.domain {
println!(" domain: {domain}");
}
for inv in &eq.invariants {
println!(" invariant: {inv}");
}
}
println!();
println!("Proof obligations ({}):", contract.proof_obligations.len());
for ob in &contract.proof_obligations {
let tol = ob
.tolerance
.map_or_else(String::new, |t| format!(" (tol={t})"));
println!(" [{}] {}{tol}", ob.obligation_type, ob.property);
}
println!();
let v2_yaml = yaml.replace("version: \"1.0.0\"", "version: \"1.1.0\"");
let v2 = parse_contract_str(&v2_yaml).expect("v2 contract");
let diff = diff_contracts(&contract, &v2);
println!(
"Diff {} -> {}: suggested bump = {}",
diff.old_version, diff.new_version, diff.suggested_bump
);
println!();
let binding_yaml = r#"
version: "1.0.0"
target_crate: aprender
bindings:
- contract: softmax-kernel-v1.yaml
equation: softmax
module_path: "aprender::nn::softmax"
function: softmax_f32
status: implemented
"#;
let registry = parse_binding_str(binding_yaml).expect("valid binding YAML");
println!(
"Binding registry: {} ({} bindings)",
registry.target_crate,
registry.bindings.len()
);
for b in ®istry.bindings {
println!(" {} :: {} -> {}", b.contract, b.equation, b.status);
}
println!();
let score = scoring::score_contract(&contract, Some(®istry), "softmax-kernel-v1");
print!("{score}");
println!();
let contracts_dir = Path::new("contracts");
if contracts_dir.exists() {
let index =
ContractIndex::from_directory(contracts_dir).expect("contracts/ directory must exist");
let params = QueryParams {
query: "softmax numerical stability".to_string(),
show_score: true,
show_pagerank: true,
limit: 3,
..Default::default()
};
let output = query::execute(&index, ¶ms);
println!("--- Query: \"softmax numerical stability\" (top 3) ---\n");
print!("{output}");
println!("--- Tier 1 (Foundation Kernels) ---\n");
let params = QueryParams {
query: "kernel".to_string(),
tier_filter: Some(1),
limit: 5,
..Default::default()
};
let output = query::execute(&index, ¶ms);
print!("{output}");
println!("--- Class A (Llama/Mistral) ---\n");
let params = QueryParams {
query: "attention".to_string(),
class_filter: Some('A'),
show_score: true,
limit: 5,
..Default::default()
};
let output = query::execute(&index, ¶ms);
print!("{output}");
}
}