use super::config::VerifierConfig;
use scirs2_core::Complex64;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::{Duration, SystemTime};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum VerificationStatus {
Verified,
Failed,
Incomplete,
Unknown,
InProgress,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum VerificationOutcome {
Satisfied,
Violated,
Unknown,
Timeout,
Error { message: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EvidenceType {
MatrixNorm,
Eigenvalue,
Fidelity,
Entanglement,
Purity,
TraceDistance,
Custom { name: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NumericalEvidence {
pub evidence_type: EvidenceType,
pub measured_value: f64,
pub expected_value: f64,
pub deviation: f64,
pub p_value: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ErrorBounds {
pub lower_bound: f64,
pub upper_bound: f64,
pub confidence_interval: f64,
pub standard_deviation: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ViolationSeverity {
Minor,
Moderate,
Major,
High,
Critical,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ProofStatus {
Proved,
Disproved,
Incomplete,
Timeout,
Error { message: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProofStep {
pub description: String,
pub rule: String,
pub justification: String,
pub confidence: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FormalProof {
pub proof_tree: ProofTree,
pub steps: Vec<ProofStep>,
pub axioms_used: Vec<String>,
pub confidence: f64,
pub checksum: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProofTree {
pub root: ProofNode,
pub branches: Vec<Self>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProofNode {
pub goal: String,
pub rule: Option<String>,
pub subgoals: Vec<String>,
pub status: ProofStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Counterexample {
pub inputs: HashMap<String, f64>,
pub expected_output: String,
pub actual_output: String,
pub is_minimal: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProofComplexityMetrics {
pub step_count: usize,
pub proof_depth: usize,
pub axiom_count: usize,
pub memory_usage: usize,
pub verification_time: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionTrace {
pub states: Vec<QuantumState>,
pub transitions: Vec<StateTransition>,
pub length: usize,
pub properties: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QuantumState {
pub state_vector: Vec<Complex64>,
pub properties: HashMap<String, f64>,
pub timestamp: u64,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StateTransition {
pub source: usize,
pub target: usize,
pub operation: String,
pub probability: f64,
pub time: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StateSpaceStatistics {
pub total_states: usize,
pub total_transitions: usize,
pub max_path_length: usize,
pub avg_path_length: f64,
pub diameter: usize,
pub memory_usage: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum TestOutcome {
Pass,
Fail,
Skip,
Error { message: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerificationStatistics {
pub total_time: Duration,
pub properties_verified: usize,
pub invariants_checked: usize,
pub theorems_proved: usize,
pub success_rate: f64,
pub memory_usage: usize,
pub confidence_stats: ConfidenceStatistics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConfidenceStatistics {
pub average_confidence: f64,
pub min_confidence: f64,
pub max_confidence: f64,
pub confidence_std_dev: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerificationIssue {
pub issue_type: IssueType,
pub severity: IssueSeverity,
pub description: String,
pub location: Option<CircuitLocation>,
pub suggested_fix: Option<String>,
pub evidence: Vec<NumericalEvidence>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum IssueType {
PropertyViolation,
InvariantViolation,
TheoremFailure,
ModelCheckFailure,
SymbolicExecutionError,
NumericalInstability,
PerformanceIssue,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum IssueSeverity {
Low,
Medium,
High,
Critical,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CircuitLocation {
pub gate_index: usize,
pub qubit_indices: Vec<usize>,
pub depth: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerificationMetadata {
pub timestamp: SystemTime,
pub verifier_version: String,
pub scirs2_version: String,
pub config: VerifierConfig,
pub hardware_info: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ProofStrategy {
Direct,
Contradiction,
Induction,
CaseAnalysis,
SymbolicComputation,
NumericalVerification,
StatisticalTesting,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ErrorModel {
Depolarizing { probability: f64 },
BitFlip { probability: f64 },
PhaseFlip { probability: f64 },
AmplitudeDamping { gamma: f64 },
Custom {
description: String,
parameters: HashMap<String, f64>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ExpectedOutput {
ClassicalBits { bits: Vec<bool> },
QuantumState { state: Vec<Complex64> },
ProbabilityDistribution { probabilities: Vec<f64> },
MeasurementStats { mean: f64, variance: f64 },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProofObligation {
pub name: String,
pub preconditions: Vec<String>,
pub postconditions: Vec<String>,
pub proof_steps: Vec<ProofStep>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TestCase {
pub input: Vec<Complex64>,
pub expected_output: Vec<Complex64>,
pub description: String,
pub weight: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ComplexityClass {
Constant,
Logarithmic,
Linear,
Polynomial { degree: f64 },
Exponential,
}