From 584168d714d3dee458670cbfc1aa62a16571abe7 Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Fri, 13 Nov 2015 15:01:25 +0100 Subject: [PATCH] use experimental sets --- build.sbt | 2 +- .../solvers/smtlib/SMTLIBCVC4Target.scala | 31 ++++++------------- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/build.sbt b/build.sbt index ac8fae6e2..6517cf1e6 100644 --- a/build.sbt +++ b/build.sbt @@ -143,7 +143,7 @@ def ghProject(repo: String, version: String) = RootProject(uri(s"${repo}#${versi lazy val bonsai = ghProject("git://github.com/colder/bonsai.git", "0fec9f97f4220fa94b1f3f305f2e8b76a3cd1539") -lazy val scalaSmtLib = ghProject("git://github.com/regb/scala-smtlib.git", "3b6ef4992b6af15d08a7320fd12202f35e97b905") +lazy val scalaSmtLib = ghProject("git://github.com/regb/scala-smtlib.git", "372bb14d0c84953acc17f9a7e1592087adb0a3e1") lazy val root = (project in file(".")). configs(RegressionTest, IsabelleTest, IntegrTest). diff --git a/src/main/scala/leon/solvers/smtlib/SMTLIBCVC4Target.scala b/src/main/scala/leon/solvers/smtlib/SMTLIBCVC4Target.scala index 3173dd652..6e131fda7 100644 --- a/src/main/scala/leon/solvers/smtlib/SMTLIBCVC4Target.scala +++ b/src/main/scala/leon/solvers/smtlib/SMTLIBCVC4Target.scala @@ -12,6 +12,7 @@ import purescala.Types._ import _root_.smtlib.parser.Terms.{Identifier => SMTIdentifier, Forall => SMTForall, _} import _root_.smtlib.parser.Commands._ import _root_.smtlib.interpreters.CVC4Interpreter +import _root_.smtlib.theories.experimental.Sets trait SMTLIBCVC4Target extends SMTLIBTarget { @@ -27,7 +28,7 @@ trait SMTLIBCVC4Target extends SMTLIBTarget { sorts.cachedB(tpe) { tpe match { case SetType(base) => - Sort(SMTIdentifier(SSymbol("Set")), Seq(declareSort(base))) + Sets.SetSort(declareSort(base)) case _ => super.declareSort(t) @@ -119,36 +120,24 @@ trait SMTLIBCVC4Target extends SMTLIBTarget { */ case fs @ FiniteSet(elems, _) => if (elems.isEmpty) { - QualifiedIdentifier(SMTIdentifier(SSymbol("emptyset")), Some(declareSort(fs.getType))) + Sets.EmptySet(declareSort(fs.getType)) } else { val selems = elems.toSeq.map(toSMT) - val sgt = FunctionApplication(SSymbol("singleton"), Seq(selems.head)) + val sgt = Sets.Singleton(selems.head) if (selems.size > 1) { - FunctionApplication(SSymbol("insert"), selems.tail :+ sgt) + Sets.Insert(selems.tail :+ sgt) } else { sgt } } - case SubsetOf(ss, s) => - FunctionApplication(SSymbol("subset"), Seq(toSMT(ss), toSMT(s))) - - case ElementOfSet(e, s) => - FunctionApplication(SSymbol("member"), Seq(toSMT(e), toSMT(s))) - - case SetCardinality(s) => - FunctionApplication(SSymbol("card"), Seq(toSMT(s))) - - case SetDifference(a, b) => - FunctionApplication(SSymbol("setminus"), Seq(toSMT(a), toSMT(b))) - - case SetUnion(a, b) => - FunctionApplication(SSymbol("union"), Seq(toSMT(a), toSMT(b))) - - case SetIntersection(a, b) => - FunctionApplication(SSymbol("intersection"), Seq(toSMT(a), toSMT(b))) + case SubsetOf(ss, s) => Sets.Subset(toSMT(ss), toSMT(s)) + case ElementOfSet(e, s) => Sets.Member(toSMT(e), toSMT(s)) + case SetDifference(a, b) => Sets.Setminus(toSMT(a), toSMT(b)) + case SetUnion(a, b) => Sets.Union(toSMT(a), toSMT(b)) + case SetIntersection(a, b) => Sets.Intersection(toSMT(a), toSMT(b)) case _ => super.toSMT(e) -- GitLab