
cvc5-cvc5-1.2.0.contrib.get-ethos-checker Maven / Gradle / Ivy
The newest version!
#!/usr/bin/env bash
# utility function to download a file
function download {
if [ -x "$(command -v wget)" ]; then
wget -c -O "$2" "$1"
elif [ -x "$(command -v curl)" ]; then
curl -L "$1" >"$2"
else
echo "Can't figure out how to download from web. Please install wget or curl." >&2
exit 1
fi
}
CVC_DIR=$(dirname $(dirname "$0"))
mkdir -p $CVC_DIR/deps
pushd $CVC_DIR/deps
BASE_DIR=`pwd`
mkdir -p $BASE_DIR/tmp/
##### EO
EO_DIR="$BASE_DIR/ethos-checker"
mkdir -p $EO_DIR
# download and unpack ethos
ETHOS_VERSION="90d2ae1c5298ca5d1a00e87c8ebc88cab100be90"
download "https://github.com/cvc5/ethos/archive/$ETHOS_VERSION.tar.gz" $BASE_DIR/tmp/ethos.tgz
tar --strip 1 -xzf $BASE_DIR/tmp/ethos.tgz -C $EO_DIR
# build and install Ethos
pushd $EO_DIR
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX="$BASE_DIR" ..
make -j$(nproc)
mkdir -p $BASE_DIR/bin
cp ./src/ethos $BASE_DIR/bin/ethos
popd
##### signatures
# The Eunoia signatures for CPC live in the main cvc5 repository. We reference
# this directory in the include command generated by the script below.
SIG_DIR="$CVC_DIR/proofs/eo/cpc"
# install scripts
cat << EOF > $BASE_DIR/bin/cpc_gen_and_check.sh
#!/usr/bin/env bash
echo "=== Generate proof: \$@"
$BASE_DIR/bin/cpc_gen.sh \$@ > ethos.proof.cpc
echo "=== Check proof with ethos"
$BASE_DIR/bin/ethos_check.sh ethos.proof.cpc
EOF
chmod +x $BASE_DIR/bin/cpc_gen_and_check.sh
cat << EOF > $BASE_DIR/bin/cpc_gen.sh
#!/usr/bin/env bash
# call cvc5 and remove the first line of the output (should be "unsat")
echo "(include \"$SIG_DIR/Cpc.eo\")"
\$@ --dump-proofs --proof-format=cpc --proof-granularity=dsl-rewrite | tail -n +2
EOF
chmod +x $BASE_DIR/bin/cpc_gen.sh
cat << EOF > $BASE_DIR/bin/ethos_check.sh
#!/usr/bin/env bash
cat \$@ | grep WARNING
CHECK=\$(cat \$@ | grep "step\|assume")
[ -z "\$CHECK" ] && echo "; WARNING: Empty proof"
$BASE_DIR/bin/ethos \$@
EOF
chmod +x $BASE_DIR/bin/ethos_check.sh
popd
echo ""
echo "========== How to use Ethos =========="
echo "Generate a CPC proof with cvc5:"
echo " $CVC_DIR/deps/bin/cpc_gen.sh cvc5 "
echo "Check a generated proof:"
echo " $CVC_DIR/deps/bin/ethos_check.sh "
echo "Run cvc5 and check the generated proof:"
echo " $CVC_DIR/deps/bin/cpc_gen_and_check.sh cvc5 "
© 2015 - 2025 Weber Informatics LLC | Privacy Policy