try to find a solution for the broken admissibility

This commit is contained in:
Malte Tammena 2023-11-19 22:55:24 +01:00
parent 5d9beb7ef6
commit 23834a92c5
3 changed files with 31 additions and 15 deletions

View file

@ -31,8 +31,8 @@ impl<A: Atom> MultishotProblem<A> for Admissibility<A> {
.collect();
clauses.push(no_empty_set);
// Attack the inference of the aba, if an attack exists
for elem in aba.universe() {
for assumption in aba.inverses.keys() {
for assumption in aba.inverses.keys() {
for elem in aba.universe() {
clauses.push(Clause::from(vec![
SetInference::new(assumption.clone()).neg(),
Inverse::new(assumption.clone(), elem.clone()).neg(),
@ -42,8 +42,22 @@ impl<A: Atom> MultishotProblem<A> for Admissibility<A> {
SetInference::new(assumption.clone()).neg(),
Inverse::new(assumption.clone(), elem.clone()).neg(),
Inference::new(elem.clone()).neg(),
]))
]));
clauses.push(Clause::from(vec![
Inference::new(assumption.clone()).neg(),
Inverse::new(assumption.clone(), elem.clone()).neg(),
SetInference::new(elem.clone()).neg(),
]));
}
// If an assumption is in the set, it must not be in the attack
clauses.push(Clause::from(vec![
Inference::new(assumption.clone()).neg(),
SetInference::new(assumption.clone()).neg(),
]));
// clauses.push(Clause::from(vec![
// Inference::new(assumption.clone()).pos(),
// SetInference::new(assumption.clone()).pos(),
// ]))
}
clauses

View file

@ -9,6 +9,20 @@ use clap::Parser;
use crate::error::{Error, Result};
#[cfg(test)]
macro_rules! set {
($($elem:expr),*) => {{
vec![$($elem),*].into_iter().collect()
}}
}
#[cfg(test)]
macro_rules! map {
($($from:expr => $to:expr),*) => {{
vec![$(($from, $to)),*].into_iter().collect()
}}
}
pub mod aba;
pub mod args;
pub mod clauses;

View file

@ -143,18 +143,6 @@ mod tests {
use crate::aba::Aba;
macro_rules! set {
($($elem:expr),*) => {{
vec![$($elem),*].into_iter().collect()
}}
}
macro_rules! map {
($($from:expr => $to:expr),*) => {{
vec![$(($from, $to)),*].into_iter().collect()
}}
}
fn assert_parse<F, T>(parser: F, input: &str, expected: T)
where
F: FnMut(&str) -> nom::IResult<&str, T>,