Chapter 14: Provable Contracts
Contract:
apr-book-ch14
Run: cargo run -p aprender-core --example ch14_contracts
#![allow(clippy::disallowed_methods)]
//! Chapter 14: Provable Contracts
//!
//! Demonstrates contract-driven development and falsification.
//! Citation: Papadakis et al., "Mutation Testing Advances," arXiv:1907.09356
//! Contract: contracts/apr-book-ch14-v1.yaml
fn main() {
// Contract anatomy
println!("Provable contracts (aprender-contracts):");
println!(" 405 contracts across 70 crates");
println!(" YAML schema with falsification conditions");
println!();
// Popper's falsifiability criterion (1959)
// A contract that cannot be falsified is not a contract
println!("Popper's criterion:");
println!(" A claim is scientific IFF it is falsifiable.");
println!(" Applied to software: a contract MUST specify its failure conditions.");
// Contract structure validation
let severities = ["P0", "P1", "P2"];
let actions = ["reject", "flag", "warn"];
println!("\nSeverity levels: {:?}", severities);
println!("Actions: {:?}", actions);
assert_eq!(severities.len(), 3, "Exactly 3 severity levels");
assert_eq!(actions.len(), 3, "Exactly 3 action types");
// Namespace purity contract
let unified_crates = [
"aprender-compute",
"aprender-serve",
"aprender-train",
"aprender-orchestrate",
"aprender-present",
"aprender-profile",
];
for crate_name in &unified_crates {
assert!(
crate_name.starts_with("aprender-"),
"All crates must use aprender-* namespace"
);
}
println!("\nNamespace purity: {} crates verified", unified_crates.len());
// Book contract counts
let chapters = 20_usize;
let conditions_per_chapter = 5_usize;
let total_conditions = chapters * conditions_per_chapter;
println!("\nBook contracts:");
println!(" Chapters: {chapters}");
println!(" Conditions per chapter: {conditions_per_chapter}");
println!(" Total falsification conditions: {total_conditions}");
assert_eq!(total_conditions, 100, "100 total falsification conditions");
println!("\nChapter 14 contracts: PASSED");
}