diff --git a/testcases/Sat.scala b/testcases/Sat.scala index 1118871494899fc0e513a80fa72c37f862658246..1c7caaf2205803d665a54e5d62245854596972fe 100644 --- a/testcases/Sat.scala +++ b/testcases/Sat.scala @@ -201,9 +201,10 @@ object Sat { } def simplify(vars: VarList): VarList = vars match { - case VarNil() => VarNil() + case VarNil() => VarLit(false) case VarLit(b) => VarLit(b) - case VarCons(VarLit(b), vs) => if(b) VarList(true) else simplify(vs) + case VarCons(1, vs) => VarLit(true) + case VarCons(-1, vs) => simplify(vs) case VarCons(v, vs) => VarCons(v, simplify(vs)) } @@ -219,8 +220,8 @@ object Sat { case VarLit(b) => VarLit(b) case VarCons(v, vs) => if (v == variable && value) VarLit(true) - else if(v == variable && !value) VarCons(VarLit(false), substitute(vs, variable, value)) - else if(v == -variable && value) VarCons(VarLit(false), substitute(vs, variable, value)) + else if(v == variable && !value) VarCons(-1, substitute(vs, variable, value)) + else if(v == -variable && value) VarCons(-1, substitute(vs, variable, value)) else if(v == -variable && !value) VarLit(true) else VarCons(v, substitute(vs, variable, value)) } @@ -275,46 +276,46 @@ object Sat { } -// def main(args: Array[String]) { -// val f1 = And(Var(1), Or(Var(1), Not(Var(2)), Var(3)), Var(2), Not(Var(3))) -// val dnff1 = clauses2list(dnfNaive(f1)) -// val vars1 = vars(f1) -// vars.foreach(v => { -// -// -// }) -// println(f1 + " translated in dnf as:\n\t" + dnff1.mkString("\n\t")) -// } - - //some non-leon functions to test the program with scala -// object False { -// def apply(): Formula = And(Var(1), Not(Var(1))) -// } -// object True { -// def apply(): Formula = Or(Var(1), Not(Var(1))) -// } -// object Or { -// def apply(fs: Formula*): Formula = fs match { -// case Seq() => False() -// case Seq(f) => f -// case fs => fs.reduceLeft((f1, f2) => Or(f1, f2)) -// } -// } -// object And { -// def apply(fs: Formula*): Formula = fs match { -// case Seq() => True() -// case Seq(f) => f -// case fs => fs.reduceLeft((f1, f2) => And(f1, f2)) -// } -// } -// def clause2list(cl: VarList): List[Int] = cl match { -// case VarCons(v, vs) => v :: clause2list(vs) -// case VarNil() => Nil -// case VarLit(b) => if(b) List(1) else List(-1) -// } -// def clauses2list(cll: ClauseList): List[List[Int]] = cll match { -// case ClauseCons(cl, cls) => clause2list(cl) :: clauses2list(cls) -// case ClauseNil() => Nil -// case ClauseLit(b) => if(b) List(List(1)) else List(List(-1)) -// } + def main(args: Array[String]) { + val f1 = And(Var(1), Or(Var(1), Not(Var(2)), Var(3)), Var(2), Not(Var(3))) + val dnff1 = clauses2list(dnfNaive(f1)) + val vars1 = vars(f1) + //vars.foreach(v => { + + + //}) + println(f1 + " translated in dnf as:\n\t" + dnff1.mkString("\n\t")) + } + +//some non-leon functions to test the program with scala + object False { + def apply(): Formula = And(Var(1), Not(Var(1))) + } + object True { + def apply(): Formula = Or(Var(1), Not(Var(1))) + } + object Or { + def apply(fs: Formula*): Formula = fs match { + case Seq() => False() + case Seq(f) => f + case fs => fs.reduceLeft((f1, f2) => Or(f1, f2)) + } + } + object And { + def apply(fs: Formula*): Formula = fs match { + case Seq() => True() + case Seq(f) => f + case fs => fs.reduceLeft((f1, f2) => And(f1, f2)) + } + } + def clause2list(cl: VarList): List[Int] = cl match { + case VarCons(v, vs) => v :: clause2list(vs) + case VarNil() => Nil + case VarLit(b) => if(b) List(1) else List(-1) + } + def clauses2list(cll: ClauseList): List[List[Int]] = cll match { + case ClauseCons(cl, cls) => clause2list(cl) :: clauses2list(cls) + case ClauseNil() => Nil + case ClauseLit(b) => if(b) List(List(1)) else List(List(-1)) + } }