use {
clap::{Parser, Subcommand, ValueEnum},
std::path::PathBuf,
};
#[derive(Debug, Parser)]
#[command(author, version, about, long_about = None)]
pub struct Arguments {
#[command(subcommand)]
pub command: Command,
}
#[derive(Debug, Subcommand)]
pub enum Command {
Analyze {
#[arg(long, value_enum)]
property: Property,
input: Option<PathBuf>,
},
Parse {
#[arg(long, value_enum)]
r#as: ParseAs,
#[arg(long, value_enum, default_value_t)]
output: Output,
input: Option<PathBuf>,
},
Simplify {
#[arg(long, value_enum)]
portfolio: SimplificationPortfolio,
#[arg(long, value_enum)]
strategy: SimplificationStrategy,
input: Option<PathBuf>,
},
Translate {
#[arg(long, value_enum)]
with: Translation,
input: Option<PathBuf>,
},
Verify {
#[arg(long, value_enum)]
equivalence: Equivalence,
#[arg(long, value_enum, default_value_t)]
decomposition: Decomposition,
#[arg(long, value_enum, default_value_t)]
direction: Direction,
#[arg(long, value_enum, default_value_t)]
formula_representation: FormulaRepresentation,
#[arg(long, action)]
bypass_tightness: bool,
#[arg(long, action)]
no_simplify: bool,
#[arg(long, action)]
no_eq_break: bool,
#[arg(long, action)]
no_proof_search: bool,
#[arg(long, action)]
no_timing: bool,
#[arg(long, short, default_value_t = 60)]
time_limit: usize,
#[arg(long, short = 'n', default_value_t = 1)]
prover_instances: usize,
#[arg(long, short = 'm', default_value_t = 1)]
prover_cores: usize,
#[arg(long)]
save_problems: Option<PathBuf>,
#[arg(verbatim_doc_comment)]
files: Vec<PathBuf>,
},
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum Property {
Regularity,
Tightness,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum ParseAs {
Program,
Theory,
Specification,
UserGuide,
}
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum Output {
#[default]
Debug,
Default,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum SimplificationPortfolio {
Classic,
Ht,
Intuitionistic,
}
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum SimplificationStrategy {
Shallow,
Recursive,
#[default]
Fixpoint,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum Translation {
Completion,
Gamma,
Mu,
Natural,
TauStar,
}
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum FormulaRepresentation {
Mu,
#[default]
TauStar,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum Equivalence {
Strong,
External,
}
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum Decomposition {
Independent,
#[default]
Sequential,
}
pub use crate::syntax_tree::fol::sigma_0::Direction;
#[cfg(test)]
mod tests {
use super::Arguments;
#[test]
fn verify() {
use clap::CommandFactory as _;
Arguments::command().debug_assert()
}
}