Skip to content

Commit c7b2c15

Browse files
committed
partial work
1 parent 88a0c6e commit c7b2c15

2 files changed

Lines changed: 17 additions & 1 deletion

File tree

src/main/scala/edu/colorado/plv/cuanto/abstracting/tc/domains/Interval.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package edu.colorado.plv.cuanto
22
package abstracting.tc
33
package domains
44

5+
import smtlib.Interpreter
56
import smtlib.interpreters.Z3Interpreter
67
import smtlib.parser.Commands._
78
import smtlib.parser.CommandsResponses._
@@ -90,6 +91,13 @@ package object interval {
9091
case _ => None
9192
}
9293
}
94+
override def getModel(name: String, i: Interpreter): Option[Int] = {
95+
(for {
96+
intResults <- getModelMap(i)
97+
} yield for {
98+
i <- intResults get SSymbol(name)
99+
} yield i).flatten
100+
}
93101
}
94102

95103
implicit val intervalSym: SymAbstract[Interval,IntSMT] =

src/main/scala/edu/colorado/plv/cuanto/abstracting/tc/symbolic/package.scala

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package edu.colorado.plv.cuanto
22
package abstracting.tc
33

4-
import smtlib.parser.Commands.{Command,DefineFun,FunDef}
4+
import smtlib.Interpreter
5+
import smtlib.parser.Commands.{Command,DefineFun,FunDef,GetModel}
6+
import smtlib.parser.CommandsResponses.GetModelResponseSuccess
57
import smtlib.parser.Terms.{SExpr,SSymbol,Term}
68
import smtlib.theories.Core.Not
79

@@ -30,6 +32,7 @@ package object symbolic {
3032
trait Model[C] {
3133
type Schema
3234
def model(name: String, s: Constraint[Schema]): Option[C]
35+
def getModel(name: String, interpreter: Interpreter): Option[C]
3336
}
3437
object Model {
3538
def apply[A : Model]: Model[A] = implicitly[Model[A]]
@@ -77,4 +80,9 @@ package object symbolic {
7780
m.foldLeft[Map[SSymbol,V]](Map.empty)(p)
7881
}
7982

83+
def getModelMap[V : SMTVal](i: Interpreter): Option[Map[SSymbol,V]] =
84+
i.eval(GetModel()) match {
85+
case GetModelResponseSuccess(m) => Some(comprehend(m))
86+
case _ => None
87+
}
8088
}

0 commit comments

Comments
 (0)