cvc5-cvc5-1.2.0.examples.api.c.utils.c Maven / Gradle / Ivy
The newest version!
/******************************************************************************
* Top contributors (to current version):
* Aina Niemetz
*
* This file is part of the cvc5 project.
*
* Copyright (c) 2009-2024 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.
* ****************************************************************************
*
* Implementations of utility methods.
*/
#include "utils.h"
#include
#include
/**
* Get the string version of define-fun command.
* @param f The function to print.
* @param nparams The number of function parameters.
* @param params The function parameters.
* @param body The function body.
* @return A string version of define-fun.
*/
void print_define_fun(const Cvc5Term f,
size_t nparams,
const Cvc5Term params[],
const Cvc5Term body)
{
Cvc5Sort sort = cvc5_term_get_sort(f);
if (cvc5_sort_is_fun(sort))
{
sort = cvc5_sort_fun_get_codomain(sort);
}
printf("(define-fun %s (", cvc5_term_to_string(f));
for (size_t i = 0; i < nparams; i++)
{
printf("%s", i > 0 ? " " : "");
printf("(%s %s)",
cvc5_term_to_string(params[i]),
cvc5_sort_to_string(cvc5_term_get_sort(params[i])));
}
printf(") %s %s)", cvc5_sort_to_string(sort), cvc5_term_to_string(body));
}
void print_synth_solutions(size_t nterms,
const Cvc5Term terms[],
const Cvc5Term sols[])
{
printf("(\n");
for (size_t i = 0; i < nterms; i++)
{
size_t nparams = 0;
Cvc5Term* params = NULL;
Cvc5Term body = sols[i];
if (cvc5_term_get_kind(sols[i]) == CVC5_KIND_LAMBDA)
{
Cvc5Term psols = cvc5_term_get_child(sols[i], 0);
nparams = cvc5_term_get_num_children(psols);
params = (Cvc5Term*)malloc(nparams * sizeof(Cvc5Term));
for (size_t k = 0; k < nparams; k++)
{
params[k] = cvc5_term_get_child(psols, k);
}
body = cvc5_term_get_child(sols[i], 1);
}
printf(" ");
print_define_fun(terms[i], nterms, params, body);
if (params)
{
free(params);
}
printf("\n");
}
printf(")\n");
}