26 lines
959 B
Rust
26 lines
959 B
Rust
pub(crate) fn formula_contains_predicate(formula: &crate::Formula,
|
|
predicate_declaration: &crate::PredicateDeclaration)
|
|
-> bool
|
|
{
|
|
use crate::Formula;
|
|
|
|
match formula
|
|
{
|
|
Formula::And(arguments)
|
|
| Formula::IfAndOnlyIf(arguments)
|
|
| Formula::Or(arguments) =>
|
|
arguments.iter().any(
|
|
|argument| formula_contains_predicate(argument, predicate_declaration)),
|
|
Formula::Boolean(_)
|
|
| Formula::Compare(_) => false,
|
|
Formula::Exists(quantified_expression)
|
|
| Formula::ForAll(quantified_expression) =>
|
|
formula_contains_predicate(&quantified_expression.argument, predicate_declaration),
|
|
Formula::Implies(implies) =>
|
|
formula_contains_predicate(&implies.antecedent, predicate_declaration)
|
|
|| formula_contains_predicate(&implies.implication, predicate_declaration),
|
|
Formula::Not(argument) => formula_contains_predicate(argument, predicate_declaration),
|
|
Formula::Predicate(predicate) => &*predicate.declaration == predicate_declaration,
|
|
}
|
|
}
|