All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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