1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#!/usr/bin/env python
###############################################################################
# Top contributors (to current version):
# Yoni Zohar
#
# This file is part of the cvc5 project.
#
# Copyright (c) 2009-2025 by the authors listed in the file AUTHORS
# in the top-level source directory and their institutional affiliations.
# All rights reserved. See the file COPYING in the top-level source
# directory for licensing information.
# #############################################################################
#
# A simple demonstration of the solving capabilities of the cvc5 uf solver.
##
import cvc5
from cvc5 import Kind
if __name__ == "__main__":
tm = cvc5.TermManager()
slv = cvc5.Solver(tm)
slv.setLogic("QF_UF")
# Sorts
u = tm.mkUninterpretedSort("U")
integer = tm.getIntegerSort()
boolean = tm.getBooleanSort()
uTou = tm.mkFunctionSort(u, u)
uPred = tm.mkFunctionSort(u, boolean)
# Variables
x = tm.mkConst(u, "x")
y = tm.mkConst(u, "y")
# Functions
f = tm.mkConst(uTou, "f")
p = tm.mkConst(uPred, "p")
# Terms
f_x = tm.mkTerm(Kind.APPLY_UF, f, x)
f_y = tm.mkTerm(Kind.APPLY_UF, f, y)
p_f_x = tm.mkTerm(Kind.APPLY_UF, p, f_x)
p_f_y = tm.mkTerm(Kind.APPLY_UF, p, f_y)
# Construct the assertions
assertions = tm.mkTerm(Kind.AND,
tm.mkTerm(Kind.EQUAL, x, f_x),
tm.mkTerm(Kind.EQUAL, y, f_y),
p_f_x.notTerm(),
p_f_y)
slv.assertFormula(assertions)
assert(slv.checkSat().isSat())
|