/** * Copyright (c) 2012-2016 Marsha Chechik, Alessio Di Sandro, Michalis Famelis, * Rick Salay. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Alessio Di Sandro - Implementation. */ package edu.toronto.cs.se.modelepedia.z3; import org.eclipse.jdt.annotation.NonNull; public class Z3Utils { public static final @NonNull String SMTLIB_FILE_EXTENSION = "smt2"; public static final @NonNull String SMTLIB_PREDICATE_START = "("; public static final @NonNull String SMTLIB_PREDICATE_END = ")"; public static final @NonNull String SMTLIB_TRUE = " true "; public static final @NonNull String SMTLIB_FALSE = " false "; public static final @NonNull String SMTLIB_ASSERT = SMTLIB_PREDICATE_START + "assert "; public static final @NonNull String SMTLIB_EXISTS = SMTLIB_PREDICATE_START + "exists "; public static final @NonNull String SMTLIB_FORALL = SMTLIB_PREDICATE_START + "forall "; public static final @NonNull String SMTLIB_AND = SMTLIB_PREDICATE_START + "and "; public static final @NonNull String SMTLIB_OR = SMTLIB_PREDICATE_START + "or "; public static final @NonNull String SMTLIB_NOT = SMTLIB_PREDICATE_START + "not "; public static final @NonNull String SMTLIB_EQUALITY = SMTLIB_PREDICATE_START + "= "; public static final @NonNull String SMTLIB_IMPLICATION = SMTLIB_PREDICATE_START + "=> "; public static final @NonNull String SMTLIB_CONST = SMTLIB_PREDICATE_START + "declare-const "; public static final @NonNull String SMTLIB_TYPE_BOOL = "Bool"; public static final @NonNull String SMTLIB_TYPE_INT = "Int"; public static final @NonNull String SMTLIB_NODE = "node"; public static final @NonNull String SMTLIB_EDGE = "edge"; public static final @NonNull String SMTLIB_NODE_FUNCTION = SMTLIB_PREDICATE_START + SMTLIB_NODE + " "; public static final @NonNull String SMTLIB_EDGE_FUNCTION = SMTLIB_PREDICATE_START + SMTLIB_EDGE + " "; public static final @NonNull String SMTLIB_CONCRETIZATION = "c"; public static final @NonNull String SMTLIB_CONCRETIZATION_QUANTIFIER = SMTLIB_PREDICATE_START + SMTLIB_CONCRETIZATION + " "; public static final @NonNull String Z3_MODEL_SEPARATOR = "!"; public static @NonNull String predicate(@NonNull String predicateStart, @NonNull String smtTerms) { return predicateStart + smtTerms + SMTLIB_PREDICATE_END; } public static @NonNull String emptyPredicate(@NonNull String smtTerms) { return predicate(SMTLIB_PREDICATE_START, smtTerms); } public static @NonNull String assertion(@NonNull String smtTerms) { return predicate(SMTLIB_ASSERT, smtTerms); } public static @NonNull String not(@NonNull String smtTerms) { return predicate(SMTLIB_NOT, smtTerms); } public static @NonNull String and(@NonNull String smtTerms) { return predicate(SMTLIB_AND, smtTerms); } public static @NonNull String or(@NonNull String smtTerms) { return predicate(SMTLIB_OR, smtTerms); } public static @NonNull String constant(@NonNull String smtConstantName, @NonNull String smtConstantType) { return predicate(SMTLIB_CONST, smtConstantName + " " + smtConstantType); } public static @NonNull String equality(@NonNull String smtTerms) { return predicate(SMTLIB_EQUALITY, smtTerms); } public static @NonNull String implication(@NonNull String smtIfTerms, @NonNull String smtThenTerms) { return predicate(SMTLIB_IMPLICATION, smtIfTerms + smtThenTerms); } public static @NonNull String exists(@NonNull String smtQuantification, @NonNull String smtTerms) { return predicate( SMTLIB_EXISTS, SMTLIB_PREDICATE_START + smtQuantification + SMTLIB_PREDICATE_END + smtTerms ); } public static @NonNull String forall(@NonNull String smtQuantification, @NonNull String smtTerms) { return predicate( SMTLIB_FORALL, SMTLIB_PREDICATE_START + smtQuantification + SMTLIB_PREDICATE_END + smtTerms ); } }