From fa07882851e7a3a59eb428ae724a3b5be542ff54 Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <colder@php.net> Date: Tue, 21 May 2013 23:43:06 +0200 Subject: [PATCH] Implement solver support for FiniteArray --- src/main/scala/leon/solvers/z3/AbstractZ3Solver.scala | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/scala/leon/solvers/z3/AbstractZ3Solver.scala b/src/main/scala/leon/solvers/z3/AbstractZ3Solver.scala index 0b29dd89c..1a94e295f 100644 --- a/src/main/scala/leon/solvers/z3/AbstractZ3Solver.scala +++ b/src/main/scala/leon/solvers/z3/AbstractZ3Solver.scala @@ -522,6 +522,14 @@ trait AbstractZ3Solver extends solvers.IncrementalSolverBuilder { val res = getLength(ar) res } + + case arr @ FiniteArray(exprs) => { + val ArrayType(innerType) = arr.getType + val arrayType = arr.getType + val a: Expr = ArrayFill(IntLiteral(exprs.length), simplestValue(innerType)).setType(arrayType) + val u = exprs.zipWithIndex.foldLeft(a)((array, expI) => ArrayUpdated(array, IntLiteral(expI._2), expI._1).setType(arrayType)) + rec(u) + } case Distinct(exs) => z3.mkDistinct(exs.map(rec(_)): _*) case _ => { -- GitLab